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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 3359|回复: 10

[求助] Verilog 中可以将某个信号置0的同时检测该信号是否是1吗

[复制链接]
发表于 2019-5-6 11:16:47 | 显示全部楼层 |阅读模式

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

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

x
代码大致长这样:
always @(posedge clk) begin
    if(carry) begin
        flag<=1;
    end
    else if(flag) begin
        flag<=0;
    end
end

always @(posedge clk) begin
    if(flag) begin
        A<=B+C;
    end
end

实现功能就是当flag是1 的时候把flag 置0,同时进行一次运算。这个在纯逻辑仿真的时候可以实现功能,但是如果进入到后端最后流片之后,加上电路延迟会不会出现flag置0先发生,导致A<=B+C永远只能检测到flag是0呢?        
发表于 2019-5-6 16:43:54 | 显示全部楼层
了解下时序分析吧
发表于 2019-5-6 16:59:23 | 显示全部楼层
在非阻塞加上#DLY,就可以解决你的困惑了。。
发表于 2019-5-7 09:14:57 | 显示全部楼层
加上#DLY只是在仿真的时候生效,个人觉得,如果综合PR满足时序要求的话,这个是没有问题的,你说的后端考虑电路延时,其实也是STA的分析。
发表于 2019-5-15 20:04:43 | 显示全部楼层
先if在else不会同时
发表于 2019-5-16 11:42:16 | 显示全部楼层
如果发生了,说明你时序根本没过去啊
发表于 2019-6-12 15:17:59 | 显示全部楼层
if  else  是有先后顺序的,这句话不是随便定义的。
如果... 否则,怎么样....
无论仿真还是实际跑,都一样
所以不会出现。。
发表于 2019-6-13 21:40:09 | 显示全部楼层
if else是有优先级的。先判断if。
发表于 2019-6-15 11:00:06 来自手机 | 显示全部楼层


lhw123 发表于 2019-5-6 16:59
在非阻塞加上#DLY,就可以解决你的困惑了。。


非阻塞加#1不是个好东西,很多人对这个都没理解清楚。实际上synopsys是不建议加,设计中非阻塞大量加这玩意儿会大大降低仿真的benchmark,加这东西并没有改变非阻塞的仿真语义,只是让波形上看得方便而已。
synopsys公司的一篇优秀获奖论文对非阻塞加#1大加批判,写得非常好,建议谷歌搜索看看吧。
发表于 2019-6-20 22:24:09 | 显示全部楼层
本帖最后由 thjan65 于 2019-6-20 22:31 编辑

extra delay in non-blocking makes debugging much easier.
different simulators may outcome different result for the same non blocking code.
however, with extra delay, consistency is obtained.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

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

GMT+8, 2024-9-27 12:09 , Processed in 0.019890 second(s), 6 queries , Gzip On, Redis On.

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