功能覆盖率--数组型bin和单bin的区别

数组型bin与单bin区别

在 SystemVerilog 功能覆盖率的coverpoint中,bins all_vals[] = {[0:63]}; 和 bins all_vals = {[0:63]}; 的核心差异是bin 的组织形式与覆盖率统计粒度,直接决定 “是否能验证 0~63 所有数值都被触发”,以下是精准解析:

一、核心区别(表格总结)

语法写法bin 类型生成的 bin 数量覆盖率统计逻辑适配场景
bins all_vals[] = {[0:63]};数组型 bin(动态拆分)64 个独立 bin为 0、1、2…63每个数值各创建 1 个 bin,需所有 64 个 bin 都被触发,覆盖率才达 100%要求覆盖 0~63全部数值(你的需求)
bins all_vals = {[0:63]};单 bin(静态合并)1 个合并 bin将 0~63 整个区间视为1 个 bin,只要触发区间内任意 1 个值,该 bin 就覆盖(覆盖率 100%)仅验证 “数值落在 0~63 区间内”,无需全值覆盖

二、直观示例(对比覆盖率结果)

假设仿真中wdata仅触发了01两个值,两种写法的覆盖率表现完全不同:

1. 数组型 bin(all_vals[]

systemverilog

coverpoint wdata[5:0] {
  bins all_vals[] = {[0:63]}; // 拆分为0~63共64个bin
}
  • 覆盖率计算:覆盖的bin数 / 总bin数 = 2/64 = 3.125%
  • 工具会明确提示 “未覆盖的 bin:2、3、4…63”,精准定位缺失的数值。
2. 单 bin(all_vals

systemverilog

coverpoint wdata[5:0] {
  bins all_vals = {[0:63]}; // 合并为1个bin
}
  • 覆盖率计算:覆盖的bin数 / 总bin数 = 1/1 = 100%
  • 工具仅显示 “该 bin 已覆盖”,无法判断是否触发了 0~63 的全部数值(哪怕只触发 0,也会显示 100%)。

三、语法本质与关键细节

  1. []的核心作用[]是 “数组型 bin” 的标志,告诉工具:将大括号内的区间 / 列表拆分为多个独立的 bin(每个值对应 1 个);无[]时,工具会将整个区间 / 列表视为 “1 个 bin 的触发条件”(只要满足区间内任意值,该 bin 就覆盖)。

  2. 扩展验证(枚举列表场景):该规则同样适用于显式枚举值,而非仅区间:

    • bins vals[] = {0,1,2}; → 生成 3 个独立 bin(0、1、2 各 1 个);
    • bins vals = {0,1,2}; → 生成 1 个 bin(触发 0/1/2 中任意一个即覆盖)。
  3. 非法值 / 忽略值的交互:结合illegal_bins/ignore_bins时,数组型 bin 仍能精准区分:

    systemverilog

    coverpoint wdata[5:0] {
      bins all_vals[] = {[0:63]};       // 64个独立有效bin
      illegal_bins invalid = {[64:127]}; // 捕获64~127的非法值
    }
    

    而单 bin 仅能判断 “是否在 0~63 区间”,无法定位具体非法值。

四、结论(贴合你的需求)

你的目标是 “覆盖 0 到 63 的全部数值”,必须使用bins all_vals[] = {[0:63]};

  • []的写法能强制验证 “每个数值都被触发”,是实现全值覆盖的唯一方式;
  • []的写法仅能验证 “数值没超出 0~63 范围”,无法满足 “覆盖全部数值” 的要求。

简单记:[] = 拆分区间为独立 bin(精准覆盖每个值),无[] = 合并区间为单 bin(仅验证区间归属)。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值