在auto clock gating的feature 验证的过程中,尝试使用assertion进行检查,期望波形如下:
aclk_cg为gating之后的时钟,llb_dat_clk为模块输入时钟,busy_out是模块的忙信号,期望在busy_out为低时,关闭aclk_cg。
编写assertion如下:
property prop1(busy_out,aclk_cg);
@(posedge sys_clk) disable iff (acg_en===0) $fell(busy_out) |-> $stable(aclk_cg)[*1:$] ##1 busy_out;
endproperty
波形图片中unnamed$$_5是assertion的判定结果,波形中是一个成功的判定,从图中可以看出:判定的start_time是在busy_out下降沿的下一个时钟,即图中虚线的地方(即$fell函数是判定了一个从1到0的过程),当前$fell(busy_out)和$stable(aclk_cg)[*1:$]同时发生了。
//不确定下面有没有冗余的选项
编译时添加选项
-assert enable_diag
-assert vpiSeqBeginTime
-assert vpiSeqFail
-assert enable_hier
运行时添加选项
+fsdb+sva_success
-assert success
dump选项:
fsdbDumpSVA
使用verdi进行debug过程:
进入assertion debug mode
查看统计界面
双击某个成功或者失败的item后,在instance中会出现该property(自己探索出来的野流程,不知道标准流程是啥样子的)
在instance界面选中prop1可以添加到波形中。