Creando contadores / temporizadores grandes

3

A menudo necesito crear un contador grande en mis proyectos, principalmente para hacer algo de tiempo, que podría ser parpadear un LED cada segundo ect.

He hecho esto creando un contador grande, como se muestra en el código a continuación.

sec_proc : process(resety, clk)
    variable cntr : integer range 0 to 54000000;
begin
    if resety = '0' then
        cntr := 0;
        sec_out <= '1';
    elsif rising_edge(clk) then
        if cntr = 54000000 or timein_en = '0' then
            sec_out <= '1';
            cntr := 0;
        else
            sec_out <= '0';
            cntr := cntr + 1;
        end if;
    end if;
end process;

El código anterior a menudo me da problemas de tiempo, no se mantiene el tiempo, tengo una holgura negativa. ¿Cómo implementas dichos contadores efectivos para la síntesis en vhdl?

    
pregunta JakobJ

1 respuesta

6

En lugar de un solo contador de 26 bits, debe configurar varios contadores más cortos. Por ejemplo, podría usar un contador de 13 bits para dividir por 5400, que le daría pulsos a 10 kHz, y un segundo contador de 14 bits para dividir por 10000, lo que le daría sus pulsos de 1 Hz.

    
respondido por el Dave Tweed

Lea otras preguntas en las etiquetas