Несколько методов тестирования полного сумматора в Verilog с примерами кода

Метод 1: Тестовый стенд с утверждениями

module full_adder_tb;
  reg a, b, cin;
  wire sum, cout;

  // Instantiate the full adder module
  full_adder FA(a, b, cin, sum, cout);
  initial begin
    // Test case 1
    a = 0; b = 0; cin = 0;
    #10 $display("Test case 1: a=%b, b=%b, cin=%b", a, b, cin);
    #10 $display("sum=%b, cout=%b", sum, cout);
    assert(sum === 0 && cout === 0);
    // Test case 2
    a = 0; b = 1; cin = 0;
    #10 $display("Test case 2: a=%b, b=%b, cin=%b", a, b, cin);
    #10 $display("sum=%b, cout=%b", sum, cout);
    assert(sum === 1 && cout === 0);
    // Test case 3
    a = 1; b = 0; cin = 0;
    #10 $display("Test case 3: a=%b, b=%b, cin=%b", a, b, cin);
    #10 $display("sum=%b, cout=%b", sum, cout);
    assert(sum === 1 && cout === 0);
    // Test case 4
    a = 1; b = 1; cin = 0;
    #10 $display("Test case 4: a=%b, b=%b, cin=%b", a, b, cin);
    #10 $display("sum=%b, cout=%b", sum, cout);
    assert(sum === 0 && cout === 1);
    // Add more test cases as needed
    $finish;
  end
endmodule

Метод 2: Тестовый стенд «стимул-реакция»

module full_adder_tb;
  reg a, b, cin;
  wire sum, cout;

  // Instantiate the full adder module
  full_adder FA(a, b, cin, sum, cout);
  initial begin
    // Test case 1
    a = 0; b = 0; cin = 0;
    #10 $display("Test case 1: a=%b, b=%b, cin=%b", a, b, cin);
    #10 $display("sum=%b, cout=%b", sum, cout);

    // Expected outputs for test case 1
    if (sum !== 0 || cout !== 0) begin
      $display("Test case 1 failed!");
    end
    // Test case 2
    a = 0; b = 1; cin = 0;
    #10 $display("Test case 2: a=%b, b=%b, cin=%b", a, b, cin);
    #10 $display("sum=%b, cout=%b", sum, cout);

    // Expected outputs for test case 2
    if (sum !== 1 || cout !== 0) begin
      $display("Test case 2 failed!");
    end
    // Test case 3
    a = 1; b = 0; cin = 0;
    #10 $display("Test case 3: a=%b, b=%b, cin=%b", a, b, cin);
    #10 $display("sum=%b, cout=%b", sum, cout);

    // Expected outputs for test case 3
    if (sum !== 1 || cout !== 0) begin
      $display("Test case 3 failed!");
    end
    // Test case 4
    a = 1; b = 1; cin = 0;
    #10 $display("Test case 4: a=%b, b=%b, cin=%b", a, b, cin);
    #10 $display("sum=%b, cout=%b", sum, cout);

    // Expected outputs for test case 4
    if (sum !== 0 || cout !== 1) begin
      $display("Test case 4 failed!");
    end
    // Add more test cases as needed
    $finish;
  end
endmodule