Menu
CoddyTech

什么是测试平台

本课属于 Coddy Verilog 学习旅程的“基础知识”单元。第 73 课,共 90 课。

testbench 是一种特殊的 Verilog 模块,用于测试另一个模块。它会向你的设计提供输入,并检查输出是否正确。

为什么需要测试平台?

构建模块时,你需要确保它能正常工作。测试平台可以让你:

  • 向模块输入不同的值
  • 观察输出
  • 检查输出是否符合你的预期
  • 自动完成此操作,无需手动测试

测试平台与设计模块

 设计模块测试平台
用途实现硬件测试设计模块
有端口吗?有(输入和输出)没有(独立运行)
可综合吗?可以不可以(仅用于仿真)

简单测试平台示例

module testbench;              // 没有端口!

  // 输入和输出来自正在测试的模块(DUT)。
  reg a, b;                    // 用 reg 表示输入
  wire c;                      // 用 wire 表示输出
  

  // 这里实例化了模块:创建一个 and_gate 模块的实例,并将其命名为 dut
  and_gate dut (               // 实例化 DUT
    .a(a),
    .b(b),
    .c(c)
  );

  // 这是一个 initial 块,用于向被测模块的输入提供测试值。
  initial begin                // 提供测试值
    a = 0; b = 0; #10;
    a = 0; b = 1; #10;
    a = 1; b = 0; #10;
    a = 1; b = 1; #10;
    $finish;
  end
endmodule

要点

  • 测试平台没有端口
  • reg 用于会变化的信号(输入到 DUT 的信号)
  • wire 用于来自 DUT 的信号(输出)
  • 正在测试的模块称为 DUT(被测设计)
  • $finish 会结束仿真

我们将在接下来的课程中介绍创建激励、显示结果和其他测试平台功能。

challenge icon

挑战

已为你提供一个与门模块。你的任务是在其测试平台中补全缺失部分。

操作说明:

在测试平台中添加以下部分:

  1. 为输入 a 和 b 声明 reg
  2. 为输出 c 声明 wire
  3. 实例化 and_gate,名称为 dut,并连接各端口

亲手试试

module and_gate (
  input a,
  input b,
  output c
);
  assign c = a & b;
endmodule

module testbench;
  
  // 任务 1:为输入 a 和 b 声明 reg。
  
  
  // 任务 2:为输出 c 声明 wire。
  

  // 任务 3:实例化 and_gate,命名为 dut。
  // 连接 .a(a)、.b(b) 和 .c(c)。


  initial begin
    a = 0; b = 0; #10 $display("%d & %d = %d", a, b, c);
    a = 0; b = 1; #10 $display("%d & %d = %d", a, b, c);
    a = 1; b = 0; #10 $display("%d & %d = %d", a, b, c);
    a = 1; b = 1; #10 $display("%d & %d = %d", a, b, c);
    $finish;
  end
endmodule
quiz icon自我测试

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

基础知识中的所有课

自己练习: Verilog 在线编译器