【问题标题】:Test-Bench For Full Adder in System Verilog系统 Verilog 中的全加器测试台
【发布时间】:2021-09-29 20:17:41
【问题描述】:
`timescale 1ns/10ps

module testbench_lab3 ();

    logic [2:0] a, b, s;
    logic c_out;
    logic [3:0] c;

    rc_adder4 UUT (
    
    );

    initial begin
        a = 0;
        forever begin
            #10 a++;
        end
    end

// COMPLETE BY WRITING AN INITIAL BLOCK FOR b. 
// Set initial value for b equal to 0 and increment b every 20 time units
    
    

    initial begin
        $display("TIME | A B | S CO");   
        $display("-----------------");    
        $monitor("  %2d | %d %d | %d %b", 
            $time, a, b, s, co);         

        #160;
        $finish();
    end

endmodule

/////////////////////////////////////// // 这是我的加法器模块:

module rc_adder_slice (
input logic a, b, c_in,
output logic s,c_out
);

    logic p, g;

    assign p = a ^ b;
    assign g = a & b;

    assign s = p ^c_in;
    assign c_out = (p & c_in)| g;

endmodule

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
这是我的多位加法器模块:

module rc_adder4 (
input logic[2:0]a, b,
output logic[2:0] s, 
output logic c_out
);

    logic [3:0] c;

    rc_adder_slice UUT[2:0] (
    .a(a),
    .b(b),
    .c_in(c[2:0]),
    .s(s),
    .c_out(c[3:1])

);



// COMPLETE USING ARRAY INSTANCING




    assign c[0] = 1'b0;// COMPLETE
    assign c_out = c[3];// COMPLETE
    
endmodule

我不知道如何编写测试台。我只有 rc_adder4 UUT ( );和 // 通过为 b 写一个初始块来完成。 // 将 b 的初始值设置为 0,并在这两个部分剩下的每 20 个时间单位增加 b。谁能帮帮我?

【问题讨论】:

  • 测试平台的重点是提供一系列随时间推移应用于设备输入信号的值,然后检查输出是否正常运行,例如加法器的输入 1 和 3 应产生 4 作为输出,依此类推。您也可以使用随机值。试试看。
  • 请修剪您的代码,以便更容易找到您的问题。请按照以下指南创建minimal reproducible example

标签: verilog system-verilog


【解决方案1】:

您没有将任何端口连接到您的 UUT。将rc_adder4 UUT ( ); 更改为rc_adder4 UUT ( .a(a), .b(b), .s(s), .c_out(c_out) );

还有:

  • b 需要在您的测试平台中分配
  • 有一个co 应该是c_out
  • c 在你的测试台上没有被使用

【讨论】:

    【解决方案2】:

    对您的代码进行了一些更改。

    `timescale 1ns/10ps
    
    module testbench_lab3 ();
    
    logic [2:0] a, b, s;
    logic c_out;
    logic [3:0] c;
    
    rc_adder_slice UUT[2:0] (
    .a(a),
    .b(b),
    .c_in(c[2:0]),
    .s(s),
    .c_out(c[3:1])
    
      );
    
    initial begin
        a = 0;
        b = 0;
        c = 0;
        forever begin
           // #10 a=$urandom; b=$urandom; c=$urandom; //Uncomment if want to use random values
           #10 ++a; ++b; ++c;
        end
    end
    
    // COMPLETE BY WRITING AN INITIAL BLOCK FOR b. 
    // Set initial value for b equal to 0 and increment b every 20 time units
    
    initial begin
        $display("TIME | A B | S CO");   
        $display("-----------------");    
        $monitor("  %2d | %d %d | %d %b", 
            $time, a, b, s, c_out);         
    
        #160;
        $finish();
    end
    
    endmodule
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多