在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 4786|回复: 12

[求助] 怎样向一个寄存器赋值后,就会发送这个寄存器中值

[复制链接]
发表于 2010-1-20 23:56:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
各位大虾,小弟刚刚接触verilog半个月,现在正在照着书上的例题练习。
看到实现一个uart接口时,那个例子里面用的是input  load_tx_data;作为一个向发送缓冲区写入数据的标志位,只要load_tx_data==1,就向发送缓冲区写数据。我在想怎样能够实现不用标志位,因为用这种标志位发送还是半自动的,而是只要向缓冲区里写入数据就自动发送,不向里面写就不发送。就像单片机的uart一样,等到txrdy为1时就可以向发送缓冲区写入数据,然后自动发送,不写入数据就不发送。  
   我的想法是发送缓冲区初始值为8‘bzzzzzzzz,写入数据后状态就是确定的一个数值,并设置一个状态位load_tx_data =1,发送完成恢复为全高阻,load_tx_data = 0;

不知道这样写不行,也就是说缓冲区从高阻状态到确定的一个值的状态,用下面这种能不能实现??
always @(tx_buf)
begin
  load_tx_data = 0;
  if(tx_buf>=0||tx_buf<=255)
  load_tx_data = 1;
end

就是这种组合逻辑能不能实现高阻到确定值,我对于z ,x这两个值很不清楚,不会判断,不知大侠怎样看。
发表于 2010-1-21 00:58:20 | 显示全部楼层
个人觉得对于串行通信的东西用状态机来写比较好,你下面的代码if-else判断条件一定要写全,不能只写if,否则对于组合逻辑会产生latch
发表于 2010-1-21 01:00:11 | 显示全部楼层
还有就是如果你想往缓冲区写入数据就自动发送的话我觉得要是你在写入前就知道这次会写多少数据的话,那还是不难控制的,如果不知道数据长度,那么你可能需要一个特别的信号来表示你的数据已经发完了
发表于 2010-1-21 09:41:20 | 显示全部楼层
z是髙阻态
x是不定态
发表于 2010-1-21 09:51:18 | 显示全部楼层
为什么不这样写?

always @(tx_buf)
begin
  if(tx_buf>=0||tx_buf<=255)   load_tx_data = 1;
  else    load_tx_data = 0;
end

另外,猜测楼主是要判断地址范围0~255时成立,应为if(tx_buf>=0 & tx_buf<=255)
 楼主| 发表于 2010-1-21 10:54:40 | 显示全部楼层


还有就是如果你想往缓冲区写入数据就自动发送的话我觉得要是你在写入前就知道这次会写多少数据的话,那还是不难控制的,如果不知道数据长度,那么你可能需要一个特别的信号来表示你的数据已经发完了
shenxu1204 发表于 2010-1-21 01:00


是确定长度的数据,比如说就8位,我不知道的是怎样一写入就发送,比如第一次写入一个0,发送一个0,过一段时间再写入一个0,又发送一个0。前后都是0,如果简单用[email=always@(tx_buf]always@(tx_buf[/email])好像不行吧,所以我想发送完后tx_buf置为高阻,然后再写入后用
[email=always@(tx_buf]always@(tx_buf[/email])从高阻到0的会不会触发这个always.
发表于 2010-1-21 14:36:01 | 显示全部楼层
好垃圾的人啊,郁闷死了,不要用程序去理解硬体,VERILOG如C一样,但有本质的曲别的.
你的想法体现了,你没做过硬体.
发表于 2010-1-21 15:30:58 | 显示全部楼层
本帖最后由 shenxu1204 于 2010-1-21 15:32 编辑

假设你往缓冲区只写入1个Byte的数据,用时序翻译如下
             1       2        3        4       5        6      7        8         9       10
               __     __     __      __     __      __     __      __      __      __
    clk   __|   |__|   |__|   |__|   |__|   |__|   |__|   |__|   |__|    |__|   |__
               __
wr_en  __|    |______________________________________________
                        ________________________________________
tx_en  _______|                                                                        |_____
发表于 2010-1-21 15:33:40 | 显示全部楼层
假设你在第一个周期将1Byte数据写入缓冲区,然后在接下来的8个周期分别将8bit数据通过串口发送出去
发表于 2010-1-21 16:31:34 | 显示全部楼层
硬件设计和软件设计不一样的,硬件上面一般不会出现出现 不定态 或者 高阻.

如果你想实现一个buffer转数据的话,可以调用现成的buffer模块,去了解它的信号的说明,或者你自己设计一个buffer,自己做一个计数器,初始为0,写+1,读(发)-1,这样,你可以直接根据这个信号作一些判断了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-17 14:19 , Processed in 0.038673 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表