我正在尝试移植到SystemC的SystemVerilog任务。任务的主体只是等待一个布尔表达式,然后推送到一个队列。 SystemC等待机制不能以完全相同的方式工作,它只会等待时间或事件。
所以我想知道在重新测试布尔表达式之前SystemVerilog wait()等待的最小周期/时间是多少。换句话说,在SV wait()中重复测试布尔表达式的频率或原因是什么?
如果答案只是每个周期一次,我希望并期望但无法确认,那么解决方案很容易。
这是代码,有些东西被重命名和简化,以便在上下文中更有意义:
virtual task put(input cls_item item);
wait (queuecount < queuemax);
push_back(item);
endtask
答案 0 :(得分:3)
来自LRM:
9.4.3级别敏感事件控制
程序语句的执行也可以延迟,直到条件成立为止。这是完成的 使用wait语句,这是一种特殊形式的事件控制。等待语句的性质是 等级敏感,而不是基本事件控制(由@字符指定),它是边缘敏感的。
等待陈述应评估条件;如果是假的话,等待后的程序性陈述 声明应继续被阻止,直到该条件成为真,然后继续。
基本上,您可以将wait(<boolean expression>)
视为连续检查表达式。一旦表达式为真,等待将解除阻塞,顺序代码的执行将继续。
如果在第一次遇到wait()
时表达式为真,则它将不会等待。