VeirlogHDL代码执行的疑问?

[复制链接]
3341|5
 楼主| liufan2007 发表于 2009-10-23 13:41 | 显示全部楼层 |阅读模式
本帖最后由 liufan2007 于 2009-10-23 13:42 编辑


大家看看代码中的做了红色记号和紫色记号的2句话“gnt <= 1'b0”和“gnt <= 1'b1”,还有"state <= 2'bx"和"state <= BBUSY"(当然还有CASE的其他语句,就拿这2个来举例子)从结构来看这2句话都是在clk信号的上升沿并行执行的,同时向同一个寄存器gnt和state赋值,这样不是会产生竞争冒险的现象么?或者是其他什么东西我还没有理解呢?大家都来说说!我是初学者,还望各位能指点指点!谢谢!

本帖子中包含更多资源

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

×
shuiyangyang 发表于 2009-10-23 23:15 | 显示全部楼层
不会出现竞争冒险。 else begin 开始的两条语句相当于你在case里加了default。

不建议这样写。好的风格是,时序逻辑与组合逻辑分开写,时序逻辑里只包含寄存器赋值。
sheshichu 发表于 2009-10-24 10:13 | 显示全部楼层
1# liufan2007

"从结构来看这2句话都是在clk信号的上升沿并行执行的"
always的begin..end块是顺序执行的。
你划线的前2句是用来赋个初值,这样可以省略default语句。
不会产生竞争冒险。
如:
......
always @(*)
begin
     ......
     ......
     a<=1'd1;
     ......
end
always @(*)
begin
     ......
     ......
     a<=1'd0;
     ......
end
这样就产生了。在多个always块内对同一变量赋值
jewson 发表于 2009-11-1 12:19 | 显示全部楼层
2楼的说的太对了,学习了
congcongfire 发表于 2009-11-3 16:53 | 显示全部楼层
我觉得最好使用两个always语句,第一个always语句使用clk与rst_n作为敏感列表,第二个always 语句可以用另外一个状态做敏感列表。比如你可以多申明两个变量:current_state与next_state。这样就不会产生冲突了。就像二楼那个兄弟说的时序与组合逻辑分开来写。这样比较规范
beinghu 发表于 2009-11-5 19:48 | 显示全部楼层
nb的资深的都这么写。  nb代码见多了就明白了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

3

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部