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

 找回密码
 注册

手机号码,快捷登录

手机号码,快捷登录

搜帖子
查看: 4810|回复: 10

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

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

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

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

×
代码大致长这样:
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, 2025-8-25 14:39 , Processed in 0.026970 second(s), 5 queries , Gzip On, Redis On.

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