Код для добавления двух 4-битных целых чисел с помощью verilog не работает. Что не так?

У меня есть код, который складывает два 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:

введите описание изображения здесь


person OHHH    schedule 25.01.2015    source источник
comment
Проблема заключалась в переносе по проводам [2: 0] вместо переносов по проводам [2: 0].   -  person OHHH    schedule 25.01.2015
comment
wire carry [2:0] vs wire [2:0] carry не имеет значения в этой ситуации. wire [2:0] carry означает, что carry - это упакованный массив (также известный как вектор), вы можете обращаться ко всем битам вместе, по отдельности или к фрагменту. wire carry [2:0] - это распакованный массив отдельных битов, что означает, что вы можете получить доступ к любому индексу, но не ко всему массиву или фрагменту.   -  person Greg    schedule 25.01.2015


Ответы (1)


Предполагая, что A сопоставлен с SW[7:4], а B - с SW[3:0]. Тогда проблема в экземпляре F1; SW[3] должно быть SW[4].

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