SystemVerilog 为@事件控制加入了一个 iff 限定符。
一般的写法是这样的:
@(posedge clk iff(vld));
do_something;
只有在时钟上升沿并且vld的情况,才会往下走。
它产生的效果和下面的代码一样。
forever begin
@(posedge clk);
if(vld)
break;
end
do_something;
还有一种写法是
forever begin
@(posedge clk);
if(vld)begin
do_something;
end
end
iff
和 if
之间的区别是:
事件表达式仅仅在 iff
之后的表达式为真时才会触发,在上面的例子中就是 vld
等于 1 的情况。注意:这个表达式只有在 vld
发生变化时计算,而不是 clk
发生变化的时候。
这样会使得 iff
比 if
效率更高,因为它作为一个线程被唤醒的概率更小。所以更推荐使用 iff
。
在《System Verilog Assertions应用指南》中,disable iff介绍如下: