wjfblack 发表于 2012-5-30 15:44:56

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里面仿真的结果是:在同一个沿,先执行了第一句,后执行了第二句。

请教一个各位啊。

newbier 发表于 2012-5-30 15:47:20

用软件的思想来搞硬件都是坑爹的

newbier 发表于 2012-5-30 15:47:42

用软件的思想来搞硬件都是坑爹的

tiancaigao7 发表于 2012-5-30 19:59:33

这两个应该是同时执行的吧。硬件里面除非用begin end括起来的部分是顺序执行的其他都应该是并行的。

newbier 发表于 2012-5-30 20:04:51

楼上你肯定begin+end是顺序执行的?

yiwei0397 发表于 2012-5-30 21:06:07

竞争,冒险

McuPlayer 发表于 2012-5-30 21:10:31

楼主显然以软件的思想来做FPGA,所以才有讨论先后执行的问题。
其实,你只要想一下综合器,会把这段代码综合成什么电路,对FGPA设计更有意义

fly_pig 发表于 2012-5-30 22:38:38

同时执行的。
begin end里的也不全是顺序执行的。

skycomm 发表于 2012-5-31 09:20:50

本帖最后由 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:39:46

本帖最后由 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语句是有优先级的。

ak0311 发表于 2012-6-1 20:04:57

这个在不同的综合器里面综合出来结果是不一样的,建议楼主好好考虑一下两个条件的相关关系后优化一下代码。{:smile:}

xzf962 发表于 2012-6-1 21:57:38

按照楼主的写法,第二个if貌似不归always触发了吧?因为always没有begin---end

为什么要这样写呢?你写成两个always 不行吗?

liwei_jlu 发表于 2012-6-1 22:01:23

楼主应该分清阻塞赋值与非阻塞赋值的区别

mayiqing888 发表于 2012-6-3 00:50:03

xzf962 发表于 2012-6-1 21:57 static/image/common/back.gif
按照楼主的写法,第二个if貌似不归always触发了吧?因为always没有begin---end

为什么要这样写呢?你写成 ...

支持你的想法。
第二个IF都不在ALWAYS下了,编译不通过吧

Arrowzhang 发表于 2012-6-3 01:33:50

mayiqing888 发表于 2012-6-3 00:50 static/image/common/back.gif
支持你的想法。
第二个IF都不在ALWAYS下了,编译不通过吧

我也觉得编译会不过

simple_wyj 发表于 2012-6-3 22:40:23

if语句,有优先级

dbx12358 发表于 2012-8-4 10:09:45

xzf962 发表于 2012-6-1 21:57 static/image/common/back.gif
按照楼主的写法,第二个if貌似不归always触发了吧?因为always没有begin---end

为什么要这样写呢?你写成 ...

说的很对啊。建议还是不要这么写代码。

shandandan 发表于 2012-8-4 10:27:33

每次看到“执行”两个字总觉得很操蛋

mcu1815 发表于 2012-8-4 16:48:36

看一下 RTL便知
学习一下verilog语法也可以知道 是 都执行的

korgo 发表于 2012-8-4 17:35:11

一个是对A赋值,一个对B赋值没有任何影响你只能说是阻塞赋值还是非阻塞赋值

hkchenhao 发表于 2014-11-18 22:59:46

最近也在纠结这个。。。

steven0419 发表于 2014-12-3 14:35:22

我也觉得编译会不过
页: [1]
查看完整版本: verilog中always下的有两个if语句同时成立,结果会怎么样?