微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 微电子和IC设计 > IC验证交流 > SystemVerilog事件触发时延问题

SystemVerilog事件触发时延问题

时间:10-02 整理:3721RD 点击:
这两段程序:
第一段程序是电平敏感,第二段程序是边沿敏感
forever beginwait (handshake.triggered());
$dispaly("....");
process_in_zero_time();
end
#---------------------------------------#
forever begin
@handshake;
$display("...");
process_in_zero_time();
end
想问一下,为什么说第一段程序中的等待事件导致了零延时循环,也就是说在下次循环到了时没有时间的推进?

谢谢!

不知道说些啥。

task process_in_zero_time() 的內容是什麼?

跟task process_in_zero_time()的行为无关,主要是wait (handshake.triggered())和@handshake在循环结构中对于时间推进的影响。
以第一段程序为例,由于wait (handshake.triggered())的存在,出现了零延时循环,也就是说
进行了若干次循环,时间都在同一时刻,并没有推进,这种情况肯定是错误的。

这里主要是说明电平敏感和边沿敏感的区别吧,跟事件触发没多大关系。wait如果是电平触发,则触发是连续的,@是边沿触发,只在翻转是触发一次,其余不触发

我也是这么理解的。但是电平为高,比如是从T5~T10保持电平为高,含带wait的循环结构的例子程序,说该程序没有时间推进,也就是在某一时刻完成了所有的循环,边沿跳变也是某一时刻进行的,为什么前一个结构会没有时间推进而完成了所有的循环,是因为当前时刻电平为高的不存在阻塞而边沿跳变后会存在阻塞才导致的两个程序的差异吗?

确实是这样的,但是对于事件触发就不是了,触发一次就执行一次,wait与@没区别。但wait里面放置变量就不一样了,如果变量一直为高,且循环中没有其他时间延迟的话,那肯定是连续触发,死循环。我这样理解的

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top