Diferencia entre implementaciones de un contador de 4 bits en verilog

2

Me preguntaba si hay una diferencia entre (dos posibles implementaciones de un contador en verilog con una declaración de caso ...

module counter_4(
    input clock;
    output reg[3:0] count;
    );
    always @(posedge clock) begin
        case(count)
            0: count = 1;
            1: count = 2;
            2: count = 3;
            3: count = 4;
            4: count = 5;
            5: count = 6;
            6: count = 7;
            7: count = 8;
            8: count = 9;
            9: count = 10;
            10: count = 11;
            11: count = 12;
            12: count = 13;
            13: count = 14;
            14: count = 15;
            15: count = 0;
        endcase
    end
endmodule

o con un incremento ...

module counter_4(
        input clock;
        output reg[3:0] count;
        );

    always @(posedge clock) begin
        count = count+1;
    end
endmodule

Puede que ni siquiera sea un código de trabajo. No tengo acceso a un compilador en este momento, pero espero que sea suficiente para transmitir la idea. ¿Por qué (aparte de la brevedad del código de incremento) usaría un método u otro?

    
pregunta Daniel B.

1 respuesta

3

Los dos códigos producen resultados idénticos, por lo que depende de su herramienta de síntesis si producen la misma implementación.

Con la primera, es más probable que la herramienta de síntesis co-optimice la lógica para producir los 4 bits de salida.

Con la segunda, es más probable que la herramienta de síntesis utilice hardware de propósito especial (como cadenas de transporte rápido en FPGA).

Pero en principio, cualquiera de los códigos podría implementarse con cualquier lógica que produzca los resultados correctos.

Si realmente necesita saber cuál produce mejores resultados (dependiendo de lo que considere mejor), debe probar ambos en su herramienta de síntesis y comparar los resultados. Creo que es muy probable que para una implementación FPGA en FPGA actuales, obtengas el mismo resultado (una LUT y un flip-flop por bit de salida) con cualquiera de los códigos.

    
respondido por el The Photon

Lea otras preguntas en las etiquetas