【verilog每日一练】testbench编写基本结构 - FPGA开发者技术社区 - 电子技术论坛 - 广受欢迎的专业电子论坛
分享 收藏 返回

Mill 关注 私信
[问答]

【verilog每日一练】testbench编写基本结构

根据如下模块,编写对应的testbench文件
image.png

回帖(4)

jf_84491108

2023-9-8 19:11:45
module testbench();  
    reg clk;  
    reg [7:0] a;  
    reg [7:0] b;  
    reg [7:0] c;  
    wire [7:0] amax_o;  
  
    // 实例化被测试的模块  
    max u1(  
        .clk(clk),  
        .a(a),  
        .b(b),  
        .c(c),  
        .amax_o(amax_o)  
    );  
  
    initial begin  
        // 初始化输入值  
        a = 8'hA; // 十六进制表示,等于十进制的10  
        b = 8'hB; // 十六进制表示,等于十进制的11  
        c = 8'hC; // 十六进制表示,等于十进制的12  
        clk = 0;  
  
        // 模拟时钟信号  
        forever #5 clk = ~clk;  
    end  
  
    initial begin  
        // 监视并打印输出值  
        $monitor("Clock: %b, A: %h, B: %h, C: %h, Amax: %h", clk, a, b, c, amax_o);  
    end  
endmodule

jf_99074111

2023-9-8 21:17:39
`timescale 1ns / 1ps

module max_tb();

//输入
        reg clk;
        reg [7:0] a,b,c;
//输出
        wire [7:0] max_o;

//信号初始化
initial begin
        clk = 1'b0
        a = 8'b0;
        b = 8'b0;
        c = 8'b0;
end

//生成时钟
always #10 clk = ~clk; //周期为20ns

//生成随机激励
always #20 a = $random % 256;
always #20 b = $random % 256;
always #20 c = $random % 256;

//模块例化
max max_dut(
        .clk(clk),
        .a(a),
        .b(b),
        .c(c),
        .max_o(max_o)
);
endmodule

Mill

2023-9-11 15:42:00

解析:testbench基本结构:
1.仿真时间单位/时间精度
       `timescale 1 ns / 1ps
2.仿真模块建立
       建立测试module,无输入输出信号;
3.例化测试模块
      例化带测试module时,定义reg变量连接其输入,wire变量连接其输出;
4.生成时钟信号
5.生成测试激励信号

陈伟

2023-9-22 10:05:09
假设有以下 Verilog 模块:

```verilog
module adder(
  input [7:0] a,
  input [7:0] b,
  output [8:0] sum
);

  assign sum = a + b;

endmodule
```

则对应的 testbench 文件可以写成以下形式:

```verilog
module testbench;

  // 定义模块中使用到的端口信号
  reg [7:0] a;
  reg [7:0] b;
  wire [8:0] sum;

  // 实例化需要测试的模块
  adder uut(
    .a(a),
    .b(b),
    .sum(sum)
  );

  // 定义时钟信号
  reg clk;
  initial clk = 0;
  always #5 clk = ~clk;

  // 定义测试用例的输入值
  initial begin
    a = 8'd10;
    b = 8'd20;
    #10;
    a = 8'd100;
    b = 8'd50;
    #5;
    $stop;
  end

  // 监控输出信号的值,输出到仿真结果中
  always @(sum) begin
    $display("sum = %d", sum);
  end

endmodule
```

在 testbench 中,首先指定需要测试的模块,并且实例化该模块,同时定义需要与该模块连接的信号。然后定义时钟信号,初始化测试用例的输入值,并且设置仿真运行时间。最后,使用 always 块监测输出信号,将输出信号的值输出到仿真结果中。

更多回帖

×
发帖