有没有办法在每个时钟周期断言已经声明的属性是否为假?
例如,
仅当status[idx]
和req[idx]
都很高时, enable[idx]
应该很高。
我想要的是上面的负面情景检查。即status
或req
为低时,enable
永远不会变高。
我在下面试过,但是vcs给了我以下编译错误
sequence seq_a (int idx);
!(req[idx] & enable[idx])
endsequence
sequence seq_b (int idx)
status[idx] == 1
endsequence
property ppty_ab (int idx)
disable iff (f_req[idx] & f_enable[idx])
seq_a(idx) |=> seq_b(idx)
endproperty
generate
for (idx=0; idx<5; idx++) begin
a_ab : assert property (@(posedge clk) (not ppty_ab(idx)))
else $display("ppty_ab [%0d] failed at %t",idx,$time)
end
endgenerate
错误 - [PIWDOAACS]错误地使用&#39;禁用iff&#39;
使用&#39;禁用iff&#39;的属性实例只允许在#34;断言&#34; &#34;承担&#34;并且&#34;覆盖&#34;声明。属性p_RiseIntDischeck可能无法在此上下文中实例化。
seq_a
和seq_b
已经被声明并用于其他一些断言。 重用这些序列的最佳/推荐方法是什么,并针对上述情况创建否定方案检查器?
答案 0 :(得分:0)
尝试将时钟和not
放入属性本身。
那是:
property ppty_ab (int idx)
@(posedge clk)
disable iff (f_req[idx] && f_enable[idx])
not seq_a(idx) ##1 seq_b(idx)
endproperty
generate
for (idx=0; idx<5; idx++) begin
a_ab : assert property (ppty_ab(idx))
else $display("ppty_ab [%0d] failed at %t",idx,$time)
end
endgenerate
not seq_a(idx) ##1 seq_b(idx)
与!seq_a(idx) |=> seq_b(idx)
不同,但not
会在语句为false时将属性评估为true。
我假设disable iff
要求财产有时钟,但我不确定原因。
答案 1 :(得分:0)
您的负面财产可能如下所示:
property ppty_ab (int idx);
@ (posedge clk)
disable iff (f_req[idx] & f_enable[idx])
!req[idx] | !enable[idx] |=> !status[idx];
endproperty
genvar idx;
generate
for (idx=0; idx<5; idx++) begin
a_ab : assert property (ppty_ab(idx))
else $display("ppty_ab [%0d] failed at %t",idx,$time);
end
endgenerate