module lab2_4bit_adder(
input [3:0] A,
inout [3:0] B, //B=Z
input C0,
input [3:0] B1,
input Switch,
inout [3:0] B2,
output [3:0] S,
output C4
);
wire C1;
wire C2;
wire C3;
wire B;
wire B2;
assign B2 = ~B1 + 1'b1;
assign B = (Switch == 0)? B1:B2;
assign B = (Switch == 1)? B2:B1;
assign B = Switch? B2:B1;
lab2_1bit_adder fa0(A[0], B[0], C0, S[0], C1);
lab2_1bit_adder fa1(A[1], B[1], C1, S[1], C2);
lab2_1bit_adder fa2(A[2], B[2], C2, S[2], C3);
lab2_1bit_adder fa3(A[3], B[3], C3, S[3], C4);
endmodule
错误显示:
无法索引到非数组B
请帮我解决一下 非常感谢你
答案 0 :(得分:0)
您所做的是将变量B
重新声明为不是数组的连线。它是一个简单的线变量。
因此,当您尝试在此段代码中访问B[0]
时,它会生成错误并说B
不是数组,因此您无法将其编入索引。只需删除重新声明代码即可正常工作。
lab2_1bit_adder fa0(A[0], B[0], C0, S[0], C1);
lab2_1bit_adder fa1(A[1], B[1], C1, S[1], C2);
lab2_1bit_adder fa2(A[2], B[2], C2, S[2], C3);
lab2_1bit_adder fa3(A[3], B[3], C3, S[3], C4);
根据this question.,也可能以某种方式在旧版本的Verilog中允许重新声明但是在答案中没有人澄清它,但你可以查看讨论板。
最终代码应如下所示:
module lab2_4bit_adder(
input [3:0] A,
inout [3:0] B, //B=Z
input C0,
input [3:0] B1,
input Switch,
inout [3:0] B2,
output [3:0] S,
output C4
);
wire C1;
wire C2;
wire C3; //removed all redeclarations
assign B2 = ~B1 + 1'b1;
assign B = (Switch == 0)? B1:B2;
assign B = (Switch == 1)? B2:B1;
assign B = Switch? B2:B1;
lab2_1bit_adder fa0(A[0], B[0], C0, S[0], C1);
lab2_1bit_adder fa1(A[1], B[1], C1, S[1], C2);
lab2_1bit_adder fa2(A[2], B[2], C2, S[2], C3);
lab2_1bit_adder fa3(A[3], B[3], C3, S[3], C4);
endmodule