1.11、SVA 中的时钟定义
一个序列或属性,必须被断言才能发挥作用。
SVA 中时钟定 定义方法:
- 方法1:将检查和时钟关联起来 ( 时钟定义在序列中)
示例:
sequence s5;
@(posedge clk) a ##2 b;
endsequence
property p5;
s5;
endproperty
a5: assert property(p5);
// 注意: 序列 s5 中定义了时钟 —— 将检查和时钟关联在一起
- 方法2(推荐):通常,在属性(property)的定义中指定时钟,并保持序列(sequence)独立于时钟 —— 提高序列定义的可重用性
示例:
sequence s5a;
a ##2 b;
endsequence
property p5a;
@(posedge clk) s5a;
endproperty
a5a : assert property(p5a);
在断言的语句中可以直接调用被检查的表达式。
示例:
sequence s5b;
a ##2 b;
endsequence
a5b : assert property(@posedge clk) s5b);
若在断言的陈述中已经调用了定义时钟的序列,就不要再次在断言语句中定义时钟。
错误示例:
a5c: assert property ( @(posedge clk) p5a); // not allow
1.12、禁止属性
禁止属性:期望属性永远为假。当属性为真时,断言失败
示例
// 序列s6: 检查当信号 " a " 在给定的时钟上升沿为高电平,那么之后的两个时钟周期之后,信号” b " 不允许 为高电平
// 关键词 " not " 用来表示属性应该永远不为真
sequence s6;
@(posedge clk) a ##2 b;
endsequence
property p6;
not s6;
endproperty
a6 : assert property(p6);
关键词 “ not " 用来表示属性应该永远不为真