这三个关键字都用于**功能覆盖率Functional Coverage**中的covergroup用来精确控制哪些值需要统计、哪些需要排除。一、三者的基本含义关键字含义用途ignore_bins忽略的 bin把指定的值/组合从覆盖率统计中排除不计入分母binsof选取某 coverpoint 的 bin在 cross 中引用某个 coverpoint 的 bin 集合intersect取交集值范围筛选与 binsof 配合筛选出落在指定值范围内的 bin核心搭配binsof(x) intersect {范围}—— 选出 coverpoint x 中值落在某范围内的那些 bin。二、ignore_bins忽略指定 bin1. 作用把不关心或不可能出现的值从覆盖率计算中剔除使覆盖率统计更真实避免永远达不到 100%。2. 单 coverpoint 中的用法covergroup cg; cp_addr: coverpoint addr { bins low {[0:7]}; bins high {[8:15]}; ignore_bins ignore_vals {4, 5}; // 忽略 addr4 和 addr5 } endgroupaddr为 4 或 5 时不计入覆盖率即使从未出现 4、5也不影响 100% 覆盖三、binsof与intersect主要用于 Cross Coveragebinsof和intersect几乎总是一起出现且通常用在cross coverage的ignore_bins或illegal_bins中。1. 语法结构ignore_bins 名字 binsof(coverpoint) intersect {值范围};含义忽略掉 cross 中那些 coverpoint 取值落在指定范围内的所有组合。2. 完整示例假设有两个信号mode0~3和size0~7做交叉覆盖covergroup cg (posedge clk); cp_mode: coverpoint mode { bins m[] {[0:3]}; // 4 个 bin: m[0]~m[3] } cp_size: coverpoint size { bins s[] {[0:7]}; // 8 个 bin: s[0]~s[7] } // 交叉覆盖4 × 8 32 种组合 cross_ms: cross cp_mode, cp_size { // 忽略 mode3 时的所有组合 ignore_bins ig_mode3 binsof(cp_mode) intersect {3}; } endgroup效果原本 cross 有 4×8 32个组合 binbinsof(cp_mode) intersect {3}选出所有mode3的组合共 8 个这 8 个被忽略 → 实际只统计24个组合3.binsof ... intersect工作原理图解cross_ms4×8 网格 size0 1 2 3 4 5 6 7 mode0 [ ][ ][ ][ ][ ][ ][ ][ ] mode1 [ ][ ][ ][ ][ ][ ][ ][ ] mode2 [ ][ ][ ][ ][ ][ ][ ][ ] mode3 [X][X][X][X][X][X][X][X] ← binsof(cp_mode) intersect {3} 整行被 ignore四、组合用法多条件1. 同时限定两个 coverpointcross_ms: cross cp_mode, cp_size { // 忽略 mode3 且 size 在 5~7 之间的组合 ignore_bins ig binsof(cp_mode) intersect {3} binsof(cp_size) intersect {[5:7]}; }效果只忽略 (mode3, size5/6/7) 这3 个组合。size0 1 2 3 4 5 6 7 mode3 [ ][ ][ ][ ][ ][X][X][X] ← 只忽略这 3 格2. 用||表示或cross_ms: cross cp_mode, cp_size { // 忽略 mode0 的所有组合 或 size7 的所有组合 ignore_bins ig binsof(cp_mode) intersect {0} || binsof(cp_size) intersect {7}; }五、intersect的灵活用法intersect后可接单值、范围、值列表binsof(cp_mode) intersect {3} // 单值 binsof(cp_size) intersect {[2:5]} // 范围 binsof(cp_size) intersect {1, 3, 5} // 多值 binsof(cp_size) intersect {[0:2], 7} // 混合六、ignore_binsvsillegal_binsbinsof ... intersect同样可用于illegal_bins关键字行为用途ignore_bins静默排除不报错不关心的合法组合illegal_bins一旦命中立即报错绝不应出现的非法组合cross_ms: cross cp_mode, cp_size { // mode3 且 size0 是非法的 → 出现就报错 illegal_bins bad binsof(cp_mode) intersect {3} binsof(cp_size) intersect {0}; }七、综合实例module tb; logic [1:0] mode; logic [2:0] size; logic clk; covergroup cg (posedge clk); cp_mode: coverpoint mode { bins m[] {[0:3]}; } cp_size: coverpoint size { bins small {[0:3]}; bins large {[4:7]}; } cross_ms: cross cp_mode, cp_size { // 1. 忽略 mode3 的所有交叉 ignore_bins ig_m3 binsof(cp_mode) intersect {3}; // 2. mode0 且 size 为 large 是非法的 illegal_bins il binsof(cp_mode) intersect {0} binsof(cp_size.large); // 也可直接引用 bin 名 } endgroup cg cg_inst new(); endmodule注意第 2 条用了binsof(cp_size.large)——binsof也可直接引用具名 bin而不只是 intersect 值范围。八、binsof的两种引用方式写法含义binsof(cp_size) intersect {值}按值范围筛选 binbinsof(cp_size.large)直接引用具名 bin large九、常见问题与注意点问题说明intersect 能单独用吗不能必须跟在 binsof(...) 后面binsof 能用于单 coverpoint 吗主要用于 cross单 coverpoint 直接用 ignore_bins {值} 即可 和 \\优先级illegal_bins 优先于 ignore_bins若一个组合同时匹配按非法处理十、总结关键字一句话总结ignore_bins这些组合我不统计——从覆盖率分母中剔除binsof选出某 coverpoint 的 bin——cross 中定位来源intersect只要值落在这个范围的——配合 binsof 做值筛选黄金搭配ignore_bins name binsof(cp_x) intersect {range};读作忽略掉 cross 中 cp_x 取值在 range 范围内的所有组合。用途让交叉覆盖率排除无意义/不可能/非法的组合使 100% 覆盖率目标真实可达。