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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 4120|回复: 9

[讨论] SystemVerilog事件触发时延问题

[复制链接]
发表于 2015-4-29 16:35:10 | 显示全部楼层 |阅读模式

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

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

x
这两段程序:
    第一段程序是电平敏感,第二段程序是边沿敏感
forever begin  wait (handshake.triggered());
  $dispaly("....");
  process_in_zero_time();
end
#---------------------------------------#
forever begin
  @handshake;
  $display("...");
  process_in_zero_time();
end

想问一下,为什么说第一段程序中的等待事件导致了零延时循环,也就是说在下次循环到了时没有时间的推进?


谢谢!
发表于 2015-4-29 17:09:42 | 显示全部楼层
不知道说些啥。。。。。。。
发表于 2015-4-29 17:28:40 | 显示全部楼层
task process_in_zero_time() 的內容是什麼?
 楼主| 发表于 2015-5-4 10:44:26 | 显示全部楼层
回复 3# kuolifeng
跟task process_in_zero_time()的行为无关,主要是wait (handshake.triggered())和@handshake在循环结构中对于时间推进的影响。
以第一段程序为例,由于wait (handshake.triggered())的存在,出现了零延时循环,也就是说
进行了若干次循环,时间都在同一时刻,并没有推进,这种情况肯定是错误的。
发表于 2015-5-4 16:22:46 | 显示全部楼层
这里主要是说明电平敏感和边沿敏感的区别吧,跟事件触发没多大关系。wait如果是电平触发,则触发是连续的,@是边沿触发,只在翻转是触发一次,其余不触发
 楼主| 发表于 2015-5-4 20:08:32 | 显示全部楼层
回复 5# qyxu1979
我也是这么理解的。但是电平为高,比如是从T5~T10保持电平为高,含带wait的循环结构的例子程序,    说该程序没有时间推进,也就是在某一时刻完成了所有的循环,边沿跳变也是某一时刻进行的,为什么前一个结构会没有时间推进而完成了所有的循环,是因为当前时刻电平为高的不存在阻塞而边沿跳变后会存在阻塞才导致的两个程序的差异吗?
发表于 2015-5-5 08:44:44 | 显示全部楼层
确实是这样的,但是对于事件触发就不是了,触发一次就执行一次,wait与@没区别。但wait里面放置变量就不一样了,如果变量一直为高,且循环中没有其他时间延迟的话,那肯定是连续触发,死循环。我这样理解的
发表于 2019-6-25 10:49:15 | 显示全部楼层
发表于 2019-6-28 10:02:00 | 显示全部楼层
记得handshake.triggered(),只会触发一次
发表于 2020-2-4 14:29:23 | 显示全部楼层
mark一下,感觉还是不太清楚
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

×

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

GMT+8, 2024-12-22 15:58 , Processed in 0.042155 second(s), 8 queries , Gzip On, Redis On.

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