UVM 覆盖率

代码覆盖率:

Statement/Line coverage

用于衡量在仿真测试期间测试了多少条语句(行)

always @ (posedge clk) begin
    if( A > B) begin //Line 1 
        Result = A - B; //Line 2
    end else begin //Line 3 
        Result = A + B; //Line 4
    end
end

Block coverage

在begin-end或if else或case语句之间或while循环或for循环之间的一组语句称为块。 块覆盖率衡量的是在仿真过程中是否覆盖了这些类型的块码。 块覆盖范围看起来类似于语句覆盖范围,不同之处在于块覆盖率包含了一组语句

在下面的的示例代码中,有三个代码块

always @ (posedge clk) begin //always block
    if( A > B) begin // if block
        Result = A - B;
    end else begin // else block
        Result = A + B;
    end
end

Branch/Decision coverage

conditional Coverage and Expression coverage

件覆盖率会检查HDL中的所有布尔表达式,并计算该表达式为真或假的次数。表达式覆盖率检查语句的右侧,统计所有可能组成的真值表的覆盖程度

以下是包含3个布尔变量的表达式,它们决定了Result变量为true或false
Result = (A && B) || ©

在这里插入图片描述

Toggle coverage

翻转覆盖率可衡量仿真运行期间设计中信号和端口的翻转率。 这有助于识别哪些信号一直没有翻转

FSM coverage

状态机覆盖衡量仿真期间是否所有状态机的状态都被覆盖到


covergroups coverpoint bins

  • 覆盖点(coverpoint)是用于指定需要收集覆盖率的目标
  • Covergroup可以具有多个覆盖点以覆盖不同的表达式或变量
  • 每个覆盖点还包括一组bin,这些bin是该覆盖点不同采样值
bit [2:0] a; 
bit [3:0] b; 

covergroup cg @(posedge clk); 
    cp_a coverpoint a {       //  覆盖点1
        bins values_a = { [0,1,3,5,7 };   // 覆盖点bin1,变量目标值
    } 
    cp_b coverpoint b;  //  覆盖点2,自动生成bin,会检测b是否覆盖到所有的可能性
endgroup

下面的例子中coverpiont cp_a创建了多少个bin?

// 一共创建了5个仓

bit[3:0] var_a; 

covergroup test_cg @(posedge clk); 
    cp_a : coverpoint var_a { 
        bins low_bins[] = {[0:3]};  // lowbins[]创建了四个bin,对应检查是否覆盖到0,1,2,3
        bins med_bins = {[4:12]}; // med_bins创建里一个仓,检查是否覆盖到4-12之间的值
    }
endgroup

ignore bins 和 illegal bins

ignore_bins用于指定与覆盖点关联的一组值或者翻转行为,这些值或者翻转行为可以明确从覆盖范围中排除

// 以下将忽略变量a的所有采样值7和8

coverpoint a { 
    ignore_bins ignore_vals = {7,8};
}

illegal_bins用于指定与覆盖点关联的一组值或者翻转行为,这些值或者翻转行为被标记为非法

// 以下会将所有1、2、3采样值标记为非法

covergroup cg3; 
    coverpoint b { 
        illegal_bins bad_vals = {1,2,3};
    } 
endgroup

当采样到illegal_bins时,仿真会报错,并且illegal_bins的优先级高于其他bin,即使其他bin和illegal_bins的范围有重叠,也会导致报错


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值