举个简单的例子,如果要检查到信号a高电平的一个时钟周期后,信号b应该也为高电平,应该怎么检查最方便?断言。
property CHECK_A_B;
@(posedge clk)
signal_a |=> signal_b;
endproperty
FISH_CHECK_A_B: assert property(CHECK_A_B);
在仿真过程中,这个断言会一直检查,如果断言失败,即在a为高电平,一个周期后b不为高电平,断言失败。
SVA, 即system Verilog assertion,是基于systemVerilog的一种断言的写法,可以更方便、快捷的对design的代码进行检查,相比于用Verilog进行检查,SVA有以下优点:
优点:
- 描述性语言,可以完美的描述时序相关的状况,大大方便了时序检查;
- 提供了很多内嵌函数;
- 可以自动收集功能覆盖率数据。
断言的评估和执行包括以下三个阶段:
- 预备(Preponed)在这个阶段,采样断言变量,且信号或者变量的状态不能改变,确保采到最稳定的值;
- 观察(Observed) 对所有属性表达式求值
- 响应(Reactive) 调度 评估属性成功或失败的代码