El código para agregar dos números de 4 bits en verilog no funciona

0

Tengo un código que agrega dos números de 4 bits; desafortunadamente no funciona para todos los casos, aunque las fórmulas son realmente simples y no encuentro el problema ...

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

Parece que funciona para la mayoría de los casos, pero mira lo que pasa con 1 y 10:

    
pregunta JOX

2 respuestas

4

Error tipográfico en tu código:

full_adder F1(SW[3], SW[1], carry[0], LEDG[1], carry[1]);

en su lugar debería ser

full_adder F1(SW[5], SW[1], carry[0], LEDG[1], carry[1]);
    
respondido por el MarkU
1

Simplemente sume sus dos números de 4 bits y deje que Verilog se ocupe de los detalles.

assign LEDG = {1'b0,SW[7:4]} + {1'b0,SW[3:0]};

He asignado las entradas de 4 bits en el cálculo a 5 bits para garantizar que el sintetizador se encargue del transporte.

    
respondido por el markt

Lea otras preguntas en las etiquetas