0
点赞
收藏
分享

微信扫一扫

UVM验证-覆盖率

追风骚年 2022-02-08 阅读 110

1、代码覆盖率

行覆盖率(Line Coverage):衡量多少行代码被执行过;
有限状态机覆盖率(FSM Coverage):衡量状态机中哪些状态和状态转换被执行过;
翻转覆盖率(Toggle Coverage):衡量哪些单bit信号0/1翻转被执行过;
分支覆盖率(Branch Coverage),也称路径覆盖率(Path Coverage):衡量哪些if、case、for、forever、while等语句分支被执行过;
条件覆盖率(Condition Coverage):衡量哪些条件中逻辑操作数被执行过。

2、功能覆盖率

用户自定义覆盖率:定义覆盖组(Coverage groups)、覆盖点(Coverage points)、交叉覆盖(Cross Coverage)。
断言覆盖率,常用于查找错误,如两个信号是否互斥、寄存器读写冲突、memory读写冲突等。关键词assert property。

3、覆盖率-覆盖组触发

(1)调用sample触发覆盖组收集覆盖率

covergroup vss_constraint_common_cov;//定义覆盖组
        coverpoint ul_swap//定义覆盖点
         		{bins value[] = {[240:255]}; bins others = default;}
        coverpoint dl_swap
                {bins value[] = {[240:255]}; bins others = default;}
		…
		coverpoint …
endgroup
vss_constraint_common_cov = new();//创建覆盖组实例
vss_constraint_covergroup_common.vss_constraint_common_cov.sample();//收集覆盖率

(2)使用事件触发覆盖组收集覆盖率

covergroup vss_constraint_common_cov @(event_flag);//定义覆盖组
        coverpoint ul_swap//定义覆盖点
         		{bins value[] = {[240:255]}; bins others = default;}
		…
		coverpoint …
endgroup

(3)使用SV断言触发覆盖组收集覆盖率

cover property//断言事件
	(@(posedge clk) write_ena==1)
	->write_event;
covergroup vss_constraint_common_cov @(write_event);//定义覆盖组
        coverpoint ul_swap//定义覆盖点
         		{bins value[] = {[240:255]}; bins others = default;}
		…
		coverpoint …
endgroup

4、覆盖率-数据采样

主要通过创建“仓(bin)”来记录每个数值被捕捉到的次数。
(1)自动创建仓:3bit变量,会被创建23个仓。通过设置auto_bin_max指明建仓个数。
(2)用户自定义仓:

   coverpoint hf_num
               {bins value[] = {[1:15]}; bins others = default;}

(3)条件覆盖率建仓
关键字iff

cpri_rate_iff:
    coverpoint cpri_rate
              iff(dl_type==8)
              {bins value[] = {0}; bins others = default;}

(4)翻转覆盖率建仓

coverpoint cpri_rate
           {bins value[] =0=>1),(1=>2}

(5)忽略覆盖点
关键字ignore_bins

   coverpoint hf_num
               {ignore_bins value[] = {0}; }

(6)不合法的仓
关键字illegal_bins

coverpoint hf_num
           {illegal_bins value[] = {0}; }

(7)交叉覆盖率
关键字cross

covergroup vss_constraint_common_cov;//定义覆盖组
        ul_swap :coverpoint ul_swap;//定义覆盖点
        dl_swap :coverpoint dl_swap;
		cross ul_swap, dl_swap;//交叉覆盖率
endgroup
举报

相关推荐

0 条评论