Verilog 使用assign语句创建bcs时始终输出X

Verilog 使用assign语句创建bcs时始终输出X,verilog,Verilog,我使用assign语句创建了一个BCS,并成功编译了它。然后我为它写了一个测试台,我的问题是波形中的输出总是X 这是我的BCS: `timescale 1ns/1ns module BCS_assigned(input e0,g0,a0,b0,output e1,g1); assign #29 e1=(a0~^b0)&e0; assign #33 g1=(~a0&b0&e0)|g0; endmodule 这是我的BCS测试台: `timescale 1ns/

我使用assign语句创建了一个BCS,并成功编译了它。然后我为它写了一个测试台,我的问题是波形中的输出总是X

这是我的BCS:

`timescale 1ns/1ns
module BCS_assigned(input e0,g0,a0,b0,output e1,g1);
   assign #29 e1=(a0~^b0)&e0;
   assign #33 g1=(~a0&b0&e0)|g0;
endmodule
这是我的BCS测试台:

`timescale 1ns/1ns
module assigned_BCS_testbench();
    wire e1, g1;
    reg a0;
    reg b0;
    reg e0;
    reg g0;
    BCS_assigned bcs(e0,g0,a0,b0,e1,g1);
    initial begin
        #0 a0=0;
        #0 a0=0;
        #0 e0=0;
        #0 g0=0;
        #5
        #0 a0=1;
        #0 b0=1;
        #0 e0=1;
        #0 g0=1;
        #5
        #0 a0=0;
        #0 b0=0;
        #0 e0=1;
        #0 g0=0;
        #5
        #5 $stop;
    end
endmodule

为什么我的输出是X?

您需要运行更长时间的模拟。例如,更改:

    #5 $stop;

问题是,您的测试台在时间20ns时停止模拟,但这不允许有足够的时间来传播
分配
延迟(29和33)。通过此更改,我看到
e1
在时间39ns时从X变为1

    #100 $stop;