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;
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

请帮助我解决它非常感谢

您所做的工作将变量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);

根据这个问题,可能在较旧版本的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

最新更新