SVA中定义了两种断言,即并发断言和即时断言。
并发断言:
- 基于时钟周期。并发断言根据时钟的上升沿/下降沿进行的。
- 采样和计算不是在同一个时钟周期,采样在预备阶段,计算在观察阶段。意味着,前一个上升沿/下降沿采样,下一个上升沿/下降沿才会进行计算并断言,延迟一个时钟周期。
- 可以放到过程块,模块,接口或者程序(program)中;
- 可以在静态验证(形式的)和动态验证(模拟)工具中使用
assert property ((@ posedge clk)not a && b)
即时断言:
- 和时序无关,即不会用到时钟;
- 立即被求值;
- 必须放到过程块中,和其他过程块类似,只是多了assert关键词;
- 只能用于动态模拟;
always
begin
fish_ia: assert (a && b);
end
当信号a或者b发生变化时,always块被触发,断言执行。
区分原则:
并发断言用property,且和时钟有关, 即时断言用always,和时钟无关。