Verilog 没有给出预期的结果
Verilog did not give the expected result
我写了这段 Verilog 代码。内部模块是一个 8 位多路复用器,顶层模块用于测试多路复用器。应该显示11110000
,但每次都显示xxxxxxxx
。我该如何解决这个问题?
module testbench;
reg CLK;
test mytest(CLK);
initial begin
CLK = 1'b0;
#10
CLK = 1'b1;
end
endmodule
module test(CLK);
input CLK;
reg [7:0] in0,in1;
reg sel;
wire [7:0] out;
mux myux(in0,in1,sel,out);
always @(posedge CLK) begin
sel = 1'b0;
in0 = 8'b11110000;
$display("%b",out);
end
endmodule
这是 mux
模块:
module mux(in0,in1,sel,out);
input sel;
input [7:0] in1,in0;
output [7:0] out;
reg out;
always @(in0,in1,sel) begin
if(sel == 1'b0) begin
out = in0;
end
else begin
out = in1;
end
end
endmodule
问题是你的模拟 运行 时间不够长。你只需要 运行 它一个时钟周期。这是将 testbench
模块更改为 运行 个时钟周期的一种方法:
module testbench;
reg CLK;
test mytest(CLK);
initial begin
CLK = 1'b0;
forever #10 CLK =~CLK;
end
initial #1000 $finish;
endmodule
我现在看到这样的输出:
xxxxxxxx
11110000
11110000
11110000
11110000
此外,您的代码出现编译错误。在您的 mux
模块中,您应该更改:
reg out;
至:
reg [7:0] out;
我写了这段 Verilog 代码。内部模块是一个 8 位多路复用器,顶层模块用于测试多路复用器。应该显示11110000
,但每次都显示xxxxxxxx
。我该如何解决这个问题?
module testbench;
reg CLK;
test mytest(CLK);
initial begin
CLK = 1'b0;
#10
CLK = 1'b1;
end
endmodule
module test(CLK);
input CLK;
reg [7:0] in0,in1;
reg sel;
wire [7:0] out;
mux myux(in0,in1,sel,out);
always @(posedge CLK) begin
sel = 1'b0;
in0 = 8'b11110000;
$display("%b",out);
end
endmodule
这是 mux
模块:
module mux(in0,in1,sel,out);
input sel;
input [7:0] in1,in0;
output [7:0] out;
reg out;
always @(in0,in1,sel) begin
if(sel == 1'b0) begin
out = in0;
end
else begin
out = in1;
end
end
endmodule
问题是你的模拟 运行 时间不够长。你只需要 运行 它一个时钟周期。这是将 testbench
模块更改为 运行 个时钟周期的一种方法:
module testbench;
reg CLK;
test mytest(CLK);
initial begin
CLK = 1'b0;
forever #10 CLK =~CLK;
end
initial #1000 $finish;
endmodule
我现在看到这样的输出:
xxxxxxxx
11110000
11110000
11110000
11110000
此外,您的代码出现编译错误。在您的 mux
模块中,您应该更改:
reg out;
至:
reg [7:0] out;