System Verilog覆盖率

覆盖率是衡量验证完备性的重要指标
通过建立能够自动统计功能覆盖率的模型,方便的得到当前功能的覆盖率,根据此调整验证策略,使仿真尽快收敛。
你认识到的(完备性)不一定充分,所以从目标上将覆盖率分为代码覆盖率和功能覆盖率

代码覆盖率功能覆盖率
作用:检查代码是否冗余,设计要点是否遍历检查功能是否遍历
被检测对象: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&

收集结果:
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值