一、断言放置位置
1、直接在RTL源码中添加
2、断言放在单独的文件中,使用`include包含到RTL文件中
3、断言放置在一个单独的module/interface中,然后把module实例化到RTL中
4、将断言放入单独的模块(单独的文件),并将模块bind到RTL模块的设计中
二、创建间接断言的3个小技巧
一般property 的写法
property a_b_p;
@(posedge clk) disable iff(!rstn) a |->b;
endproperty
1、定义默认的时钟块
在断言module定义一个默认时钟块,这样可以简化每个property采样信号显示申明
具体用法:
default clocking cb@(posedge clk);
endclocking
定义后,后续的property可以省略采用的信号的具体如下
property a_b_p; property a_b_p;
a |->b; ===> @(posedge clk) a |->b;
endproperty endproperty
2、在复位期间禁用断言的always块
复位期间禁用断言,因此每个property都需要加上disable iff语句,增加编码的代码输出,可以使用always块加系统函数,来简化
always@(rstn)
if(!rstn) $assertkill;
else $asserton;
3、使用简单的宏定义
`define assert_clk(msg) \
assert property (@(posedge clk) disable iff(!rstn) msg)
具体的宏用法
`assert_clk(a|->b);