2 votos

Diferencia entre las implementaciones de un contador de 4 bits en verilog

Me preguntaba si hay alguna diferencia entre (dos posibles implementaciones de un contador en verilog con una sentencia case...

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 código funcional, 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?

3voto

RWH Puntos 21

Los dos códigos producen una salida idéntica, así que depende de tu herramienta de síntesis si producen la misma implementación.

Con la primera, es más probable que la herramienta de síntesis cooptimice 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 las cadenas de transporte rápido en las FPGA).

Pero en principio, cualquiera de los dos códigos podría implementarse con cualquier lógica que produzca las salidas correctas.

Si realmente necesitas saber cuál produce mejores resultados (dependiendo de lo que consideres mejor), tienes que probar ambos en tu herramienta de síntesis y comparar los resultados. Creo que es bastante probable que para una implementación en FPGAs actuales, se obtenga el mismo resultado (una LUT y un flip-flop por bit de salida) con cualquiera de los dos códigos.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X