使用verilog添加两个4位整数的代码不';不行。怎么了?

使用verilog添加两个4位整数的代码不';不行。怎么了?,verilog,xilinx,hdl,intel-fpga,quartus,Verilog,Xilinx,Hdl,Intel Fpga,Quartus,我有一个添加两个4位数字的代码;不幸的是,它并不是适用于所有情况,即使公式非常简单,我也没有发现问题 module part2(SW, LEDG, LEDR); input [17:0] SW; output [17:0] LEDR; output [4:0] LEDG; //Red lights for each one assign LEDR[17:0] = SW[17:0]; //Wires between adders. wi

我有一个添加两个4位数字的代码;不幸的是,它并不是适用于所有情况,即使公式非常简单,我也没有发现问题

module part2(SW, LEDG, LEDR);

    input [17:0] SW;
    output [17:0] LEDR;
    output [4:0] LEDG;

    //Red lights for each one
    assign LEDR[17:0] = SW[17:0];

    //Wires between adders.
    wire carry[2:0];

    //Add the first digits of A and B
    full_adder F0(SW[4], SW[0], SW[8], LEDG[0], carry[0]);
    //Add the second digits of A and B
    full_adder F1(SW[3], SW[1], carry[0], LEDG[1], carry[1]);
    //Add the third digits of A and B
    full_adder F2(SW[6], SW[2], carry[1], LEDG[2], carry[2]);
    //Add the last digits of A and B
    full_adder F3(SW[7], SW[3], carry[2], LEDG[3], LEDG[4]);

    endmodule

module full_adder(A, B, CI, S, CO);

    input A, B, CI;
    output S, CO;

    //Sum
    assign S = A ^ B ^ CI;

    //Carry out
    assign CO = (A & B) | (CI & A) | (CI & B);

endmodule
它似乎适用于大多数情况,但看看1和10或10和10会发生什么:


假设
A
映射到
SW[7:4]
B
映射到
SW[3:0]
。然后问题出现在
F1
实例中<代码>软件[3]应该是
软件[4]

full_adder F1(SW[ 4 /*not 3*/ ], SW[1], carry[0], LEDG[1], carry[1]);

全加器F1(SW[4/*非3*/],SW[1],进位[0],LEDG[1],进位[1])问题在于有线传输[2:0]而不是有线传输[2:0]
有线传输[2:0]
vs
有线传输[2:0]在这种情况下不会产生任何影响
wire[2:0]进位
意味着
进位
是一个压缩数组(也称为向量),您可以一起访问所有位,单独或一个片
wire carry[2:0]
是一个未打包的单位数组,这意味着您可以访问任何索引,但不能访问整个数组或片。