先独立作答,再展开参考答案。八股原题沿用原笔记编号;扩展练习为本站根据对应考点编写。
Q22 · 代码覆盖率和功能覆盖率有什么区别?
八股原题 · Q22 · 题型:问答
考点
- 覆盖对象和产生方式
- 两类覆盖率的互补关系
- 断言覆盖率
展开参考答案 · Q22
题目来源(原笔记记录)
- 小鹏汽车 · IP验证 · 校招(代码覆盖率与功能覆盖率的分类,是否做过断言验证)
- 芯原 · 数字IC验证 · 校招(功能覆盖率与代码覆盖率的区别)
- 地平线 · 数字IC验证 · 校招(功能覆盖率与代码覆盖率区别)
- 大疆 · 数字IC验证 · 校招(多种覆盖率区别)
- 某TPU公司 · 数字IC验证 · 校招(代码覆盖率与功能覆盖率的关联)
- 乐鑫科技 · 数字IC验证 · 校招 · 笔试(代码/分支/条件/功能覆盖率的定义与提升方法)
- 兆易创新 · 数字IC验证 · 校招(code coverage 的组成)
- 通用 · 数字IC验证 · 实习 · 面试题汇总(功能覆盖率与代码覆盖率的细分类型)
- 通用 · 数字IC验证 · 实习 · 基础面经(功能覆盖率、代码覆盖率、断言覆盖率)
- 面试书《Cracking Digital VLSI Verification Interview》· 第6章 Q100(对应题目:代码覆盖率与功能覆盖率的区别)
代码覆盖率回答”哪些代码被执行过”,功能覆盖率回答”计划里的功能场景是否出现过”——一个自动统计,一个主动定义。
第一,代码覆盖率。 由仿真器从 RTL 结构自动统计,常见类型有语句、分支、条件、翻转、FSM。
第二,功能覆盖率。 由验证人员根据 spec 和验证计划主动定义,回答计划中的功能、场景、组合是否出现过。
第三,断言覆盖率。 统计 property 是否被触发、成功或失败,关注时序行为是否真正尝试过。
代码覆盖率不能证明功能正确,功能覆盖率也不会自动发现遗漏代码——两者要结合测试结果、断言和 bug 状态一起判断。
一句话:代码覆盖率看 RTL 执行痕迹,功能覆盖率看验证计划目标,断言覆盖率看时序属性是否被尝试和满足。
E22 · 代码覆盖满了为何还会漏场景?
扩展练习 · E22 · 题型:场景分析 · 对应原题:Q22
考点
- 覆盖对象和产生方式
- 两类覆盖率的互补关系
- 断言覆盖率
普通读写已经执行全部 RTL 分支,但验证计划还要求“连续背压 8 拍后恢复”,一直未发生。该如何解释并补充验证?
展开参考答案 · E22
分支被执行不代表特定时序场景发生。增加产生连续背压后恢复的定向或受控随机激励,monitor 在确认完整场景后采样相应功能覆盖目标,并用检查器验证数据保持和恢复结果。覆盖命中本身不能代替正确性检查。
Q23 · covergroup、coverpoint、bin 和 cross 的关系是什么?
八股原题 · Q23 · 题型:问答
考点
- 功能覆盖率层级
- 采样事件
- 交叉覆盖
展开参考答案 · Q23
题目来源(原笔记记录)
- 字节跳动 · 数字IC验证 · 校招 · SOC方向(功能覆盖率 fcov 的写法:bins / coverpoint / covergroup;cross 交叉覆盖率的实现)
- 某公司 · 数字IC验证 · 实习 · 一面(covergroup 所使用的 item 来源、内部成员变量;现场手写 coverpoint)
- 达摩院 · 数字IC验证 · 校招(covergroup 相关代码编写)
- 昕原 · 数字IC验证 · 实习(指定两个数值时如何做覆盖率收集)
- 豪威科技 · 数字IC验证 · 校招 · 一面(交叉覆盖率相关知识点)
- 芯原 · 数字IC验证 · 校招(功能覆盖率的 bins 设计,是否实现 cross)
- 泰凌微 · 数字IC验证 · 校招 · 一面(功能覆盖率的配置项与设计思路)
- 泰凌微 · 数字IC验证 · 校招 · 一面二面(覆盖率收集 bins)
- 芯动科技 · 数字IC验证 · 校招 · 一面(功能覆盖率写法;覆盖率采样信号选择)
- 字节跳动 · AI芯片研发 · 校招 · 一面(覆盖 array[0] 的 200、300、500、800)
- 面试书《Cracking Digital VLSI Verification Interview》· 第6章 Q104、Q106(对应题目:功能覆盖率在 SV 中的两种构造;coverpoint 和 bins)
covergroup 是容器,coverpoint 是观测对象,bin 是目标分桶,cross 是分桶组合——四级结构从大到小。
第一,covergroup。 一组覆盖模型的容器,定义后必须 new() 实例化。
第二,coverpoint。 指定要采样的变量或表达式。
第三,bin。 把取值或转换划分成可统计的目标。
第四,cross。 对多个 coverpoint 的 bins 做组合覆盖。
covergroup bus_cg with function sample(bit write, bit [1:0] size);
cp_write : coverpoint write;
cp_size : coverpoint size;
wr_x_sz : cross cp_write, cp_size;
endgroup
bus_cg cg = new();
cg.sample(tr.write, tr.size);采样时机:在 transaction 完整、语义有效时采样,别机械地每拍采样未完成的总线信号;类内 covergroup 必须在类构造函数里实例化。
一句话:covergroup 是容器,coverpoint 是观测对象,bin 是目标分桶,cross 是多个分桶的组合。
E23 · 为方向与长度建交叉覆盖
扩展练习 · E23 · 题型:简短编码 · 对应原题:Q23
考点
- 功能覆盖率层级
- 采样事件
- 交叉覆盖
显式 sample 的参数是 bit write 和 bit [1:0] len;方向覆盖 0、1,长度覆盖 0~3 的每个值,并交叉二者。写出 covergroup,默认有多少个交叉组合?
展开参考答案 · E23
covergroup transfer_cg with function sample(bit write, bit [1:0] len);
cp_write: coverpoint write { bins value[] = {0,1}; }
cp_len: coverpoint len { bins value[] = {[0:3]}; }
dir_x_len: cross cp_write, cp_len;
endgroup实例化后在有效事务处调用 sample。两个方向乘四个长度,共 8 个交叉组合;这里 bins value[] 明确为每个值建 bin,避免与单个范围 bin 混淆。
Q24 · ignore_bins、illegal_bins、wildcard bins 和 transition bins 分别是什么?
八股原题 · Q24 · 题型:问答
考点
- 排除值、非法值、通配值和跨采样转换
展开参考答案 · Q24
题目来源(原笔记记录)
- 字节跳动 · 数字IC验证 · 校招 · SOC方向(无效 bins 的定义:ignore_bins / illegal_bins)
- 面试书《Cracking Digital VLSI Verification Interview》· 第6章 Q108、Q109、Q112(对应题目:ignore_bins 与 illegal_bins;transition bins;wildcard bins)
ignore 排除统计,illegal 命中报错,wildcard 合并不关心位,transition 覆盖跨采样序列——四种 bins 各管一类需求。
第一,ignore_bins。 合法但不关心的取值,不进入覆盖率分母。
第二,illegal_bins。 声明不允许出现的取值,命中时工具报告错误。
第三,wildcard bins。 bin 描述里的 x/z/? 当作 0/1 通配符,合并不关心的位。
第四,transition bins。 用 => 描述连续采样点上的值转换。
coverpoint state {
ignore_bins reserved = {3};
illegal_bins bad = {7};
bins path = (IDLE => BUSY => DONE);
}注意:重要协议的非法行为优先用 SVA 检查——断言有时序、复位屏蔽和错误控制,别只靠 illegal_bins。
一句话:ignore 排除统计,illegal 命中报错,wildcard 合并不关心位,transition 覆盖跨采样序列。
E24 · transition 的中间采样值能忽略吗?
扩展练习 · E24 · 题型:判断说明 · 对应原题:Q24
考点
- 排除值、非法值、通配值和跨采样转换
定义 bins path = (0 => 1 => 2);,连续 sample 值为 0、1、1、2,是否命中?若只关心指令高两位为 10,该如何写 wildcard bin?
展开参考答案 · E24
不会命中上述三步连续序列:中间多一次 1 破坏连续的 0、1、2。若需接受重复,应显式设计对应 transition,而不是假设自动跳过。4 位指令可写 wildcard bins group10 = {4'b10??};,问号位作为 0/1 通配。不要据此假设未知态检测也已完成。
Q25 · cross 覆盖率为什么容易组合爆炸?如何优化?
八股原题 · Q25 · 题型:问答
考点
- bins 的笛卡尔积
- 无效组合裁剪
- 覆盖模型与验证计划对应
展开参考答案 · Q25
题目来源(原笔记记录)
- 海光 · 数字IC验证 · 校招 · NoC方向(Checkpoint 中 cross 功能点出现指数级爆炸的优化方法)
- 面试书《Cracking Digital VLSI Verification Interview》· 第6章 Q113、Q114(对应题目:交叉覆盖率 cross;cross 创建了多少个 bins)
cross 是笛卡尔积——默认 bin 数量近似等于各 coverpoint bin 数量的乘积,维度一多就指数爆炸。
比如 16×16×8 会产生 2048 个组合,数据库、采样、收敛成本全都会涨。
优化五点:
- 只交叉 spec 真正关心的变量;
- 先合并过细的基础 bins,再做 cross;
- 用
ignore_bins、binsof、intersect排除无效组合; - 把一个大 cross 拆成多个有业务意义的小 cross;
- 不为了数字好看交叉彼此无关的字段。
一句话:cross 是笛卡尔积,优化核心是减少维度、合并分桶、排除无效组合,并让每个 cross 对应真实测试目标。
E25 · 合并基础 bins 会怎样改变 cross?
扩展练习 · E25 · 题型:场景分析 · 对应原题:Q25
考点
- bins 的笛卡尔积
- 无效组合裁剪
- 覆盖模型与验证计划对应
三个 coverpoint 分别有 16、16、8 个有效普通 bins,全部交叉有多少组合?若验证计划只关心第二字段的四类、无需第三字段参与交叉,如何调整?
展开参考答案 · E25
原模型有 16×16×8=2048 个组合。将第二字段按计划合并成 4 个有意义的 bins,仅对前两个字段交叉,得到 16×4=64 个组合。第三字段可单独覆盖。先确认目标确实允许这种粒度,不能仅为提高百分比删去真实需求。
Q26 · 高代码覆盖率是否代表高功能覆盖率?两者不一致说明什么?
八股原题 · Q26 · 题型:问答
考点
- 覆盖率不能互相推出
- 覆盖模型漏洞和死代码
- 收敛诊断
展开参考答案 · Q26
题目来源(原笔记记录)
- 某TPU公司 · 数字IC验证 · 校招(代码覆盖率高是否代表功能覆盖率一定高;代码覆盖率高但功能覆盖率低的场景分析方法)
- 达摩院 · 数字IC验证 · 校招 · 二面(不同覆盖率矛盾场景:高代码覆盖率低功能覆盖率、低代码覆盖率高功能覆盖率)
- 面试书《Cracking Digital VLSI Verification Interview》· 第6章 Q102、Q103(对应题目:高功能+低代码说明什么;高代码+低功能说明什么)
不能互相推出。 代码覆盖率和功能覆盖率是两把不同的尺子,一高一低说明激励、设计代码或覆盖模型之间存在错位。
第一,代码覆盖率高、功能覆盖率低。 可能是激励跑了大量 RTL,但关键场景或组合没发生;也可能是功能覆盖模型的采样时机不对。
第二,功能覆盖率高、代码覆盖率低。 可能是功能模型不完整或太宽松,也可能存在不可达代码、冗余分支、未启用配置。
第三,收敛判断。 任何一项接近 100% 都不等于验证完成,还要看 testcase 是否通过、断言是否失败、waiver 是否合理、测试计划是否完整、已知 bug 是否关闭。
一句话:代码覆盖和功能覆盖是两把不同尺子;一高一低首先说明激励、设计代码或覆盖模型之间存在错位。
E26 · 覆盖洞排查应先改激励吗?
扩展练习 · E26 · 题型:场景分析 · 对应原题:Q26
考点
- 覆盖率不能互相推出
- 覆盖模型漏洞和死代码
- 收敛诊断
功能覆盖为 100%,代码分支覆盖为 70%,测试均通过。能否直接认定剩余分支不可达并豁免?列出需要核查的证据。
展开参考答案 · E26
不能。先将未覆盖分支映射到需求与配置,检查是否漏了功能目标、错误处理场景或采样条件,再判断激励是否到达;对声称不可达的分支提供配置约束、设计分析或形式证明等证据。豁免需记录具体原因并经过项目约定的审核,测试通过与单项覆盖满都不能证明验证完成。
Q27 · 功能覆盖率应在什么时机采样?per-instance 有什么作用?
八股原题 · Q27 · 题型:问答
考点
- 事件采样与显式 sample
- transaction 级采样
- 类型汇总和实例独立报告
展开参考答案 · Q27
题目来源(原笔记记录)
- 某公司 · 数字IC验证 · 实习 · 一面(covergroup 所使用的 item 来源、内部成员变量)
- 寒武纪 · 数字IC验证 · 秋招 · 一面(功能覆盖率收集时机)
- 面试书《Cracking Digital VLSI Verification Interview》· 第6章 Q116、Q120(对应题目:covergroup 有哪几种采样方式;per-instance 与 per-type 的区别)
功能覆盖率在 transaction 完整、语义有效的时刻采样,比每拍机械采样更准确。
第一,两种采样方式。 covergroup 可以指定事件自动采样,也可以不带事件、由 monitor 在事务完整时显式调 sample()。协议验证通常优先后者——只有 monitor 知道地址、数据、响应这些字段什么时候组成一笔有效事务。
第二,per-instance 的作用。 同一 covergroup 类型可以创建多个实例,默认报告按类型合并;设置 option.per_instance = 1 后,可以分别看每个 agent、端口或通道实例的覆盖情况。
covergroup pkt_cg with function sample(packet p);
option.per_instance = 1;
cp_kind : coverpoint p.kind;
endgroup注意:per-instance 便于定位局部覆盖洞,但整体覆盖目标仍要根据验证计划判断,不能把拆分实例本身当成覆盖提升。
一句话:在语义完整的 transaction 时刻采样;per_instance 用于分开观察各实例,而不是凭空增加覆盖。
表述补充:option.per_instance 控制实例覆盖信息的独立保留与报告;类型覆盖率的具体聚合还受 type_option.merge_instances、权重和工具配置影响,不能仅从 per_instance 推断类型汇总百分比。
E27 · 类型汇总会掩盖端口覆盖洞吗?
扩展练习 · E27 · 题型:场景分析 · 对应原题:Q27
考点
- 事件采样与显式 sample
- transaction 级采样
- 类型汇总和实例独立报告
同类型 covergroup 的端口 A 实例只采到读,端口 B 只采到写。合并后的报告看起来读写齐全,能否说明两个端口都覆盖完整?应怎样采样和查看?
展开参考答案 · E27
不能。启用 option.per_instance = 1 并分别查看实例,A 缺写、B 缺读;类型级结果还取决于 merge_instances、权重和工具报告配置,不能固定推断为 100%。monitor 只在对应端口事务完成且有效时 sample;实例独立报告用于暴露覆盖洞,不会增加真实场景。