verilog中always下的有两个if语句同时成立,结果会怎么样?
最近在看前人的代码,碰到如下情况,代码大致如下always @( posedge clk )
if( in_a2 > in_a1 ) begin A<=1;end;
if( in_b2 > in_b1 ) begin B<=1;end;
如果 代码中两个if同时都满足,那结果是执行某一句呢?还是两句都会执行?
modelsim里面仿真的结果是:在同一个沿,先执行了第一句,后执行了第二句。
请教一个各位啊。 用软件的思想来搞硬件都是坑爹的 用软件的思想来搞硬件都是坑爹的 这两个应该是同时执行的吧。硬件里面除非用begin end括起来的部分是顺序执行的其他都应该是并行的。 楼上你肯定begin+end是顺序执行的? 竞争,冒险 楼主显然以软件的思想来做FPGA,所以才有讨论先后执行的问题。
其实,你只要想一下综合器,会把这段代码综合成什么电路,对FGPA设计更有意义 同时执行的。
begin end里的也不全是顺序执行的。
本帖最后由 skycomm 于 2012-5-31 09:22 编辑
并行啊楼主
always @( posedge clk )
begin
if( in_a2 > in_a1 ) begin A<=1;
end;
always @( posedge clk )
begin
if( in_b2 > in_b1 ) begin B<=1;
end;
这样写也是一样的
本帖最后由 wjfblack 于 2012-5-31 16:45 编辑
skycomm 发表于 2012-5-31 09:20 static/image/common/back.gif
并行啊楼主
always @( posedge clk )
begin
你放在两个always中进行是可以同时执行的,这个从RTL图中可以看出。
但是放在一个always里面应该是不一样的,从RTL图中也能看出来。
两个if有时间上的先后。
说明一个always里面的if语句是有优先级的。 这个在不同的综合器里面综合出来结果是不一样的,建议楼主好好考虑一下两个条件的相关关系后优化一下代码。{:smile:} 按照楼主的写法,第二个if貌似不归always触发了吧?因为always没有begin---end
为什么要这样写呢?你写成两个always 不行吗? 楼主应该分清阻塞赋值与非阻塞赋值的区别 xzf962 发表于 2012-6-1 21:57 static/image/common/back.gif
按照楼主的写法,第二个if貌似不归always触发了吧?因为always没有begin---end
为什么要这样写呢?你写成 ...
支持你的想法。
第二个IF都不在ALWAYS下了,编译不通过吧 mayiqing888 发表于 2012-6-3 00:50 static/image/common/back.gif
支持你的想法。
第二个IF都不在ALWAYS下了,编译不通过吧
我也觉得编译会不过 if语句,有优先级 xzf962 发表于 2012-6-1 21:57 static/image/common/back.gif
按照楼主的写法,第二个if貌似不归always触发了吧?因为always没有begin---end
为什么要这样写呢?你写成 ...
说的很对啊。建议还是不要这么写代码。 每次看到“执行”两个字总觉得很操蛋 看一下 RTL便知
学习一下verilog语法也可以知道 是 都执行的 一个是对A赋值,一个对B赋值没有任何影响你只能说是阻塞赋值还是非阻塞赋值 最近也在纠结这个。。。 我也觉得编译会不过
页:
[1]