- 即使断言
即使断言与时序无关,在信号变化的时候进入判断、求值。
※使用场合比较少,因为一般来说SVA就是用来检查时序关系。
即使断言例:
always_test
begin
test:assert ( A && B);
end
即使断言被命名为test,在A或B发生变化时,进入always块,判断A,B是否同时为1,如果不为1,断言报错。
- 并发断言(常用)
->基于时钟周期
->在时钟边缘按照信号的采样值计算测试表达式。
Comment:
在时钟边缘采样的是上一个时钟周期的稳定值。信号A在时钟周期1,从0->1,也就是一个上升沿。在时钟周期1采样的值是0,时钟周期2采样的值才是1。当前时钟边沿的变化在下一个时钟边沿才能采到。
(这和Verilog设计中的Latch延时类似。)
【常用语法】
①SVA基本结构
//sequence(序列):用来描述待检测事件
sequence name_of_sequence;
<expression....>;
endsequence
//property(属性):用来调用序列,也可以直接描述待检测事件
property name_of_property;
<experssion>; or
<complex sequence expression>;
endproperty
//assert:检查属性,插入断言
assert_name:assert property (property_name);
Comment:
assert插入的是property,单独写序列是不能插入的,序列必须在属性中调用,然后通过assert
才能检查属性。