打印

VeirlogHDL代码执行的疑问?

[复制链接]
2638|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 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楼的说的太对了,学习了

使用特权

评论回复
5
congcongfire| | 2009-11-3 16:53 | 只看该作者
我觉得最好使用两个always语句,第一个always语句使用clk与rst_n作为敏感列表,第二个always 语句可以用另外一个状态做敏感列表。比如你可以多申明两个变量:current_state与next_state。这样就不会产生冲突了。就像二楼那个兄弟说的时序与组合逻辑分开来写。这样比较规范

使用特权

评论回复
6
beinghu| | 2009-11-5 19:48 | 只看该作者
nb的资深的都这么写。  nb代码见多了就明白了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

3

帖子

1

粉丝