覆盖率是衡量验证完备性的重要指标
通过建立能够自动统计功能覆盖率的模型,方便的得到当前功能的覆盖率,根据此调整验证策略,使仿真尽快收敛。
你认识到的(完备性)不一定充分,所以从目标上将覆盖率分为代码覆盖率和功能覆盖率
代码覆盖率 | 功能覆盖率 |
---|---|
作用:检查代码是否冗余,设计要点是否遍历 | 检查功能是否遍历 |
被检测对象:RTL代码 | 自定义容器 |
检测方法:工具自动生成 | 自定义收集条件 |
vcs支持的代码覆盖率:line(行),cond(条件),fsm(状态机),tgl(翻转),path(路径),branch(分支)
功能覆盖率:基于控制(断言),基于数据(定义的容器被击中)
功能覆盖率模型基于SV模型(用户编写的SV文件),输入之后,工具自动计算覆盖率。功能覆盖率模型由许多监视不同功能的覆盖率组 组成,覆盖率组由覆盖率点或者交叉覆盖率点组成。
覆盖率点 | 交叉覆盖率点 |
---|---|
自创建容器或者用户创建容器 | 已定义覆盖率点 |
tb文件
module tb();
bit [1:0] mode;
bit [2:0] cfg;
bit clk;
always #20 clk = ~clk;
covergroup cg @(posedge clk);
cp_mode : coverpoint mode;
cp_cfg_10 : coverpoint cfg[1:0];
cp_cfg_lsb : coverpoint cfg[0];
cp_sum : coverpoint (mode + cfg);
endgroup
cg cg_inst;
initial begin
cg_inst = new();
for(int i = 0; i <50; i++)begin
@(negedge clk)
mode = $random();
cfg = $random();
$display("[%0t] mode=0x%0h, cfg=0x%0h", $time, mode, cfg);
end
#500;
$finish();
end
endmodule
覆盖率文件的Makefile
TB_FILE_LIST = filelist.list
all: clean comp run
COMP = vcs -full64 -sverilog +v2k -debug_all -fsdb\
-lca -cm line+fsm+cond+path+branch+tgl
SIMV = ./simv
comp:
$(COMP) tb.sv
run:
$(SIMV) -l simv.log -sml +ntb_random_seed=$(SEED)\
-lca -cm line+fsm+cond+path+branch+tgl
clean:
rm -rf AN.DB DVEfiles csrc *.simv *.simv.daidir ucli.key 64
rm -rf *.log* *.vpd *.fsdb *.vdb novas* *verdi*
rm -rf simv*
打开vdb文件功能覆盖率
dve -full64 -covdir simv.vdb&
收集结果: