Problema VHDL proceso manteniendo una señal modificada

-1

Estoy escribiendo un código VHDL de un contador simple que recibe como entrada un número y es un tiempo en ms y un reloj de 50 MHz, por ejemplo, si se reciben 200, debe contar 200 ms, por lo que 200 * 50e3 ciclos, entonces tiene que dar una salida llamada Terminal_count_end que debe permanecer alta hasta que se dé una nueva señal de reinicio (que por cierto está activa cuando '0')

Creé un banco de pruebas para probarlo y descubrí que Terminal_count_end se convierte en 1 pero solo por un período del reloj, luego vuelve a 0 para siempre.

Soy un principiante en VHDL y realmente no sé qué estoy haciendo mal, ¡así que agradezco de antemano a cualquiera que pueda ayudarme con este código!

El código es:

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity counter_start is 
    generic (N : integer := 16);
    port    (enable,clearn, Clk : in std_logic;
            end_time_ms : in unsigned (7 downto 0);
            Terminal_count_end : out std_logic);    
end counter_start;

architecture behavior of counter_start is

signal count : unsigned (N-1 downto 0); 
signal cifra : unsigned (3 downto 0);
signal T_c : std_logic;
signal T_c_end : std_logic;

begin
    process(clk,clearn)
    begin
        if clearn = '0' then
            T_c <= '0';   
            count <= (others => '0');
        elsif (Clk'event and clk = '1') then
            if  T_c = '1' then
                T_c <= '0';
                count <= (others => '0');
            elsif (enable = '1') then
                count <= count + 1;
                if count = to_unsigned(49999, N) then
                    T_c <= '1';
                end if;
            end if;
        end if;
    end process;
    cifra_process: process(clk,clearn)
    begin
        if clearn = '0' then
            cifra <= "0000";
            t_c_end <= '0';
        elsif clk'event and clk = '1' then
            if (T_c = '1') then
                cifra <= cifra + 1;
                if cifra = end_time_ms-1 then
                        cifra <= "0000";
                        T_c_end <= '1'; 
                end if;
            end if;
        end if;
    end process;
    terminal_count_end <= T_c_end;
end behavior;
    
pregunta Diro

1 respuesta

0

cifra sigue avanzando, y estás verificando = .

Para tu información, usar Async Clear no es una buena práctica en los FPGA modernos si ese es tu objetivo futuro.

    
respondido por el Aaron D. Marasco

Lea otras preguntas en las etiquetas