verilog无法索引到非数组错误?

时间:2018-02-11 15:26:58

标签: 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

请帮我解决一下 非常感谢你

1 个答案:

答案 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