我用 Verilog 编写了这段代码,没有错误消息,但它不起作用

I wrote this code in Verilog and there are no error messages, but it doesn't work

这是模块:

module test (output reg [7:0] Q_out, input [2:0] data_in); 
always 
    begin
        case (data_in)
        3'b000: Q_out = 8'b10000000;
        3'b001: Q_out = 8'b01000000;
        3'b010: Q_out = 8'b00100000;
        3'b011: Q_out = 8'b00010000;
        3'b100: Q_out = 8'b00001000;
        3'b101: Q_out = 8'b00000100;
        3'b110: Q_out = 8'b00000010;
        3'b111: Q_out = 8'b00000001;
        endcase
    end
endmodule

这是测试平台

module test2();

reg [2:0]data_in;
wire [7:0] Q_out;

test uut (.data_in(data_in), .Q_out(Q_out));

initial begin

data_in=000;
#5;

data_in=001;
#5;

data_in=010;
#5;

data_in=011;
#5;

data_in=100;
#5;

data_in=101;
#5;

data_in=110;
#5;

data_in=111;
#5;
end

endmodule

在我进入模拟部分之前,一切似乎都正常。

然后,在我尝试模拟它之后,波形中什么也没有真正显示出来。可能是什么问题?

您在 test 模块中有一个无限循环。 变化:

always

至:

always @*

由于你的always块没有延迟,它一直在时间0触发,模拟中时间不提前。通过添加敏感列表 (@*),该块仅在其任何输入 (data_in) 更改状态时触发。

您也可以使用 always_comb。请参阅 IEEE Std 1800-2017,第 9.2.2.2.2 节 always_comb 与始终 @*

相比