TestBench激励与待测


你的这段内容描述了在 Verilog 或 SystemVerilog 中编写 TestBench(测试平台)时,如何正确地对待测模块(DUT, Design Under Test)进行例化。下面我将对你的理解做一个系统的梳理和补充说明:


✅ 一、TestBench 的作用

TestBench 是用于验证设计功能是否正确的仿真环境,它不参与综合,仅用于仿真。

  • 包括:
    • 待测模块(DUT)的例化
    • 激励信号的生成(输入)
    • 输出信号的监测与比对
    • 有时包括自动检查机制

✅ 二、例化的目的

你提到的非常正确:

“例化的目的就是把待测试设计和 TestBench 进行对接。”

通过例化,TestBench 可以向 DUT 提供输入激励,并观察其输出响应。


✅ 三、TestBench 中的信号类型选择

🟢 输入端口(input) → 在 TestBench 中声明为 reg

因为这些信号是由 TestBench 驱动的,需要赋值或产生激励波形,所以必须是 reg 类型。

例如:

reg clk;
reg rst_n;
reg [7:0] data_in;

🟡 输出端口(output)→ 在 TestBench 中声明为 wire

因为这些信号是由 DUT 驱动的,TestBench 只能观测,不能赋值,因此使用 wire 类型。

例如:

wire [7:0] data_out;
wire valid;

✅ 四、例化方式示例

假设有一个名为 my_module 的模块定义如下:

module my_module (
    input      clk,
    input      rst_n,
    input [7:0] data_in,
    output reg [7:0] data_out,
    output wire valid
);
...
endmodule

那么 TestBench 中的例化应如下所示:

module tb_my_module;

    // 声明与 DUT 接口对应的信号
    reg        clk;
    reg        rst_n;
    reg  [7:0] data_in;
    wire [7:0] data_out;
    wire       valid;

    // 实例化 DUT
    my_module uut (
        .clk     (clk),
        .rst_n   (rst_n),
        .data_in (data_in),
        .data_out(data_out),
        .valid   (valid)
    );

    // 激励生成部分
    initial begin
        clk = 0;
        rst_n = 0;
        #10 rst_n = 1;
        data_in = 8'h55;
        #20 data_in = 8'haa;
        #100 $finish;
    end

    // 时钟生成
    always #5 clk = ~clk;

    // 监控输出
    initial begin
        $monitor("Time=%0t: data_out=%h, valid=%b", $time, data_out, valid);
    end

endmodule

✅ 五、总结

DUT 端口方向TestBench 中类型是否可赋值由谁驱动
inputreg✅ 是TestBench
outputwire❌ 否DUT
inoutwire❌ 否DUT 或 TestBench(双向)

✅ 六、附加建议

  • 使用 参数化模块 时,可以在例化时传递参数。
  • 使用 SystemVerilog 编写 TestBench 时,可以使用 logic 类型代替 regwire,更加灵活。
  • 推荐使用 $monitor$display$strobe 来调试输出结果。
  • 使用 initialalways 块生成各种激励信号。

如果你还有关于 TestBench 编写、覆盖率分析、自动化测试等方面的问题,也欢迎继续提问!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谢谢~谢先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值