Menu
CoddyTech

可复用的检查任务

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

Verilog task 用于组合过程性工作,并可通过 output 或 inout 参数返回结果。测试平台中的 task 可以减少重复的检查。与组合逻辑 function 不同,task 可以在适当时包含时序控制,但这些检查器 task 只执行零时间比较。如果并发调用需要独立的本地存储,请使用 automatic task;这里提供的调用是按顺序执行的。

相关代码片段;外围声明和连接已在挑战中提供。

task check_value;
    input [7:0] actual,expected;
    output ok;
    begin ok = (actual === expected); end
endtask

调用方通过显式输出参数接收检查结果。

定义 task 参数方向,并在收集失败项之前重置每次调用的结果变量。

challenge icon

挑战

中等

实现 check_value,使 ok 在 actual 和 expected 在四态相等比较下匹配时为 1,否则为 0。此模块包含一个由锁定的测试平台调用的仅用于仿真的 task。输出列:ok。

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

亲手试试

module dut;
    task check_value;
        input [7:0] actual,expected;
        output ok;
        begin
            // 完成检查用的 task。
            ok=0;
        end
    endtask
endmodule
quiz icon自我测试

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

RTL 设计与验证中的所有课

自己练习: Verilog 在线编译器