我正在学习 SVA 并试图解决这个问题:数据只能每 8 个周期更改一次。
我知道我可以通过添加一个计算时钟周期的计数器并以这种方式对其进行检查来进行检查:
bit[2:0] count;
always @(posedge clk)
begin
count++;
end
change_n8cycles: assert property (@(posedge clk) $changed(data) |-> count == 0);
但是,我对仅使用 SVA 的方法很感兴趣。到目前为止,我正在考虑类似的事情(无法编译)
property change_n8cycles(valid, ready, data);
@(posedge clk)
$changed(data) |=> $stable(data)[*7] ##1 ($stable(data)[*8])[0:$] ##0 $changed(data);
endproperty : change_n8cycles
我觉得有一种优雅的方式使用类似的方法;或使用递归属性。但是,我找不到它。