如何为我的 Verilog 代码创建测试平台?

问题描述 投票:0回答:1

我正在尝试使用 Verilog 在 Modelsim 中打印这个 boolean function 的图表

这是我在Modelsim中编写的代码:

module circuit (
input A,
input B,
input C,
input D,
output reg F
);
always @* begin
F = ~(~A & B | B & ~C) | (A & ~D | B & D);
end
endmodule

我必须手动更改 A、B、C 和 D 16 次才能模拟每种可能性并打印图表。如何创建测试台文件,以便无需手动更改值并按运行 16 次即可模拟图形?

我尝试编写这个 testbench.v 文件,但它不起作用

module testbench;
    reg A, B, C, D;
    wire F;
    
    testbench TEST (
            .a(A),
            .b(B),
            .c(C),
            .d(D),
            .f(F)
        );
    initial begin
      
    A = 0; B = 0; C = 0; D = 0; #10;   
    A = 0; B = 0; C = 0; D = 1; #10;        
    A = 0; B = 0; C = 1; D = 0; #10;
    A = 0; B = 0; C = 1; D = 1; #10;

    A = 0; B = 1; C = 0; D = 0; #10;
    A = 0; B = 1; C = 0; D = 1; #10;
    A = 0; B = 1; C = 1; D = 0; #10;
    A = 0; B = 1; C = 1; D = 1; #10;

    A = 1; B = 0; C = 0; D = 0; #10;
    A = 1; B = 0; C = 0; D = 1; #10;
    A = 1; B = 0; C = 1; D = 0; #10;
    A = 1; B = 0; C = 1; D = 1; #10;

    A = 1; B = 1; C = 0; D = 0; #10;
    A = 1; B = 1; C = 0; D = 1; #10;
    A = 1; B = 1; C = 1; D = 0; #10;
    A = 1; B = 1; C = 1; D = 1; #10;
        
        $finish;
    end

endmodule
verilog modelsim
1个回答
0
投票

您的

testbench
中的一个问题是您需要实例化您的
circuit
模块,但您错误地实例化了
testbench
本身,这将导致“非法递归设计实例化”。

其次,您已经使用小写字母实例化了模块,但实际的模块端口被定义为大写端口。要知道 Verilog 区分大小写,因此您需要相应地更改实例化。

circuit TEST(
      .A(A),
      .B(B),
      .C(C),
      .D(D),
      .F(F)
);
© www.soinside.com 2019 - 2024. All rights reserved.