功能覆盖率与覆盖率闭环

返回 ALU 任务总览。

任务:统计合法操作码

当前 alu_coverage.sv 只实现了一个 coverpoint:

covergroup op_cg with function sample(input logic [2:0] op);
  option.per_instance = 1;
  op_cp: coverpoint op {
    bins each_op[] = {[3'd0:3'd5]};
  }
endgroup

each_op[] 为 0~5 分别建 bin。top 在每笔检查后调用 cov.op_cg.sample(tr.op);。输出的 100% 只表示六个合法操作码至少各采到一次,不代表每个 a/b、复位时机、请求间隔或结果都正确。op=6/7 有定向用例,但不在这组六个合法 bin 内。

问题:“注释掉 20 条随机测试,为什么操作码覆盖率很可能还是 100%?”答案:17 条定向测试本来就涵盖了 0~5。覆盖率只看这个 coverpoint,自然不受随机测试是否存在的明显影响。

任务:从规格推出新的覆盖点

建议下一轮增加:

需求候选 bins为什么比只数 opcode 更有用
左移边界b=0、1..7、8(仅 op=5 时采样)区分保持、部分移出、全部移出
加法截断9 位扩展和的进位 0/1(仅 op=0 时采样)确认既测普通加法也测低 8 位回绕
请求与复位空闲/连续请求、活动中复位对应状态与时序需求

计算进位必须先扩成 9 位,例如 {1'b0,a}+{1'b0,b};若先用 8 位结果再判断是否超过 255,进位已丢失。这里列的是下一轮覆盖率设计,不是声称当前源码已经实现这些 coverpoint。

覆盖率是“看见哪些场景”的证据,scoreboard 与 SVA 是“行为是否符合规格”的检查。即使两者都为绿色,也要考虑参考模型与 RTL 写出相同错误、测试没有产生某种关键序列等风险。下一步读 断言、复位与回归。