【发布时间】:2015-03-11 08:15:35
【问题描述】:
我正在使用 verilog 执行反馈多路复用器计算。但是,系统不会响应(给 X)输入之一,即 B(由多路复用器控制的输入)。可以帮我指出错误在哪里以及如何解决它。
代码如下:
module test(input sel,input [3:0]a,b,output [3:0]o);
localparam in_0 = 4'd0;
wire [3:0]w1;
assign w1 = a + b;
assign o = w1 | 4'd0;
assign b = (sel)?w1:in_0;
endmodule
这里是测试平台:
module test_tb();
reg sel;
reg [3:0] a,b;
wire [3:0]o;
test U1(.sel(sel),.a(a),.b(b),.o(o));
initial begin
sel <= 1'b0;
a <= 4'd2;
#2;
sel <= 1'b1;
#2;
a <= 4'd1;
#2;
sel <= 1'b0;
a <= 4'd4;
#2;
end
endmodule
【问题讨论】:
-
w1 只有 1 位宽,应该是 4。
-
@Morgan,很抱歉,但是在 w1 更改为 4 位宽后仍然是相同的结果。
-
b 是一个输入,但您再次尝试编写 (assign b = (sel)?w1:in_0;)
-
@Emman,我希望当 sel 为 0 时 b 等于 0,当 sel 为 1 时 b 是前一个 o 的输出。
-
@Jack93 Emmans 的观点是你不能像那样过度驱动输入。