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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 4598|回复: 15

[求助] 问个语法verilog问题哦

[复制链接]
发表于 2019-11-7 21:49:18 | 显示全部楼层 |阅读模式

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

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

x
问个语法verilog问题哦:
always@(posedge clk,negedge rst)
begin
if(rst)
xxxx
else

begin
    if(1)
    xxxxx
    if(2)
    xxxx
end

end



请问下这个if(1)和if(2)是同时执行的么?还是先1然后2


发表于 2019-11-7 22:28:27 | 显示全部楼层
是有优先级的。
发表于 2019-11-7 22:34:52 | 显示全部楼层
if(1)先于f(2)执行,为啥,因为放在begin...end里面了。if的语句如果是nonblocking的,那也是这种顺序,但最后执行更新事件时,if(1) 和f(2) 的更新事件都处于同一个time slot,该time slot的所有更新事件全部处理结束之后,才进入下一个time slot或者宏观仿真时间推进,体现的宏观效果就是同时执行,但在仿真器最底层的time slot中肯定还是有执行先后顺序。
发表于 2019-11-7 22:54:37 | 显示全部楼层
FPGA的always块是并行的,但是在always块内部,是按照顺序执行的。
发表于 2019-11-8 06:49:27 | 显示全部楼层
begin
    if(1)
    xxxxx
    if(2)
    xxxx
end

这个begin...end是一个sequential block, 里面的statements是按顺序执行的。但是要注意,你这个if(1) ... if(2) ... 和if(1) ... else if(2) ...  是完全不一样的,要非常小心。不推荐if(1) ... if(2) ... 这种写法。
发表于 2019-11-8 19:09:28 | 显示全部楼层
我怎么感觉应该是同时执行的。换成if else确实是先if后else。具体看综合出来的电路吧
 楼主| 发表于 2019-11-8 22:14:14 | 显示全部楼层


csgood 发表于 2019-11-8 06:49
begin
    if(1)
    xxxxx


为啥都是按顺序执行还是不一样的呢?
发表于 2019-11-11 18:00:44 | 显示全部楼层
楼上那么多抠语法的,也不问清楚情况,这里分种情况:
1、2个if里操作同一个寄存器,第一,不推荐这种写法,第二,会先执行最上面的if,再执行下面的if。
2、2个if里操作不同的寄存器,那就是并行执行,等于2个always模块。
发表于 2019-11-25 15:19:56 | 显示全部楼层
如果操作的是同一个DFF,编译的时候先1后2,如果1和2有同时成立的情况时,2的优先级高。
另外非常不赞同这种写法。
发表于 2019-11-25 15:28:51 | 显示全部楼层
The statement if (rst) is not correct. It shouled be if (!rst)  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

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

GMT+8, 2024-11-17 20:18 , Processed in 0.022682 second(s), 7 queries , Gzip On, Redis On.

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