我用 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 与始终 @*
相比
这是模块:
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 与始终 @*