Menu
CoddyTech

边界与控制覆盖率

本课属于 Coddy Verilog 学习旅程的“RTL 设计与验证”单元。第 29 课,共 38 课。

通过几个测试和覆盖重要场景并不一样。记录是否测试了最小值、最大值和普通值,以及是否同时出现了相互竞争的控制操作。覆盖标记表示观察到了一个 case,但不能证明设计做出了正确响应。要将覆盖情况与结果检查结合起来。

相关代码片段;挑战中提供了周围的声明和连接。

if(value==0) seen[0]=1;
else if(value==15) seen[1]=1;
else seen[2]=1;

位掩码会记住出现过的类别,同时保留之前的匹配结果。

将边界覆盖和控制组合覆盖与独立的正确性检查结合起来。

challenge icon

挑战

中等

在 seen 中跟踪 3 个输入覆盖分箱,不要清除之前记录的命中:位 0 记录 value=0,位 1 记录 value=15,位 2 记录 1 到 14 的值。输入包含已知位。调用方会在每个场景开始前将 seen 初始化为 0。此模块包含一个仅用于仿真的 task,由锁定的测试平台调用。输出列:seen,以十进制表示。

完成 design.v,并保留模块名称和端口。锁定的 testbench.v 会提供输入变化,并在信号稳定后打印输出。它使用模拟器参数选择场景,例如 +CASE=1;不需要标准输入。将打印和场景控制保留在锁定的测试平台中;只实现 task 主体。预期输出是每次观测一行十进制值,各值之间用一个空格分隔,行尾带换行符。

亲手试试

module dut;
    task observe;
        input [3:0] value;
        inout [2:0] seen;
        begin
            // 完成检查任务。
            seen=seen;
        end
    endtask
endmodule
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

RTL 设计与验证中的所有课

自己练习: Verilog 在线编译器