Contador de pulsos de tacómetro VHDL / FPGA

1

Estoy intentando implementar una interfaz de tacómetro que acepte pulsos digitales como entrada. Simplemente cuento clk arcos ascendentes (50Mhz) entre cada borde ascendente de los pulsos de tacómetro (1Mhz). He encontrado ejemplos en la web que logran lo que tengo que hacer, pero en un intento por no cometer los mismos errores en el futuro, me gustaría entender por qué esta solución no funciona.

Cuando digo que no funciona, me refiero a que la simulación funcional posterior a la síntesis no produce los resultados que yo esperaría. La simulación de comportamiento genera los valores que esperaba.

En resumen, la síntesis parece ignorar mi intento de restablecer una variable a 0 (vea el comentario 'esto no parece ejecutarse' a continuación). La salida tacho_count aumenta sin reiniciar. Vea los gráficos de simulación a continuación.

entity tacho_interface is
    Generic ( 
        FREQ_DIVISOR : integer := 6;
        MIN_RPM : integer := 200
    );
    Port ( 
        enable : in STD_LOGIC;
        clk : in STD_LOGIC;
        pump_tacho : in STD_LOGIC;
        tacho_count : out STD_LOGIC_VECTOR(31 downto 0);
        error: out STD_LOGIC := '0'
    );
end tacho_interface;

architecture Behavioral of tacho_interface is
begin

process
variable last_tacho : std_logic := '1';
variable tracking_cntr : integer := 0;
begin
    if (clk'event and clk = '1') then
        if (pump_tacho = '1' and pump_tacho /= last_tacho) then
            tacho_count <= std_logic_vector(to_unsigned(tracking_cntr * FREQ_DIVISOR, tacho_count'length));
            wait for 0ns;                
            tracking_cntr := 0; --this does not execute
        end if;
        last_tacho := pump_tacho;
        tracking_cntr := tracking_cntr + 1;
    end if;
    wait on clk;
end process;

end Behavioral;

Simulación posterior a la síntesis que ilustra un problema (acumulación sin restablecer a 0)

Simulacióndecomportamientoqueilustraloqueesperaba

    
pregunta atomSmasher

1 respuesta

3

Las sentencias de retardo no son sintetizables. Echa un vistazo a esto:

enlace

    
respondido por el supreme_leader

Lea otras preguntas en las etiquetas