Autor Tema: Contador vhdl  (Leído 325 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado johnbr

  • PIC10
  • *
  • Mensajes: 14
Contador vhdl
« en: 19 de Marzo de 2020, 13:33:07 »
Hola amigos estoy escribiendo un temporizador usando Quartus II.

Usaré la leds de siete segmentos para mostrar los números, pero también debo poder establecer una hora específica aumentando / disminuyendo y luego, una vez que esté configurada, con otro botón el reloj comenzará a bajar hasta llegar a 0.

la señal "lock" es para evitar que el el conteo aumente a la velocidad del reloj

"manual" es un botón,

Supongo que el conteo está bien, pero el problema es cuando quiero que baje. En la simulación, cuando pongo el "sentido" ALTO, no obtengo nada y no funciona.
Aqui dejo el codigo, gracias de antemano


library ieee;
use ieee.std_logic_1164.all;
use IEEE.STD_LOGIC_UNSIGNED.ALL;


entity counter is
   port(   clck, reset : in std_logic;
         limit   : in integer range 0 to 10;
         manual: inout std_logic;
         sentido: in std_logic;
         bitcount : out std_logic_vector(3 downto 0);
         clckout : out std_logic);
end counter;

architecture behavior of counter is
signal Cs : std_logic_vector(3 downto 0):="0000";
signal lock: std_logic;
begin   
   Count : process(clck,reset,manual,lock,sentido)
      begin
            
            if(rising_edge(clck))then
                 if (manual='0' and lock ='0') then
                     Cs<=Cs+1;
                     lock<='1';
             elsif(manual='1' and lock='1' ) then      
                     lock<='1';
             else
                     lock<='0';
                     
                  end if;   
                  end if;
                  
        if sentido = '1' then
                Cs<=Cs-1;
                  end if;
                  
            if (reset = '1') then
                   Cs <="0000";
               end if;
               if (Cs = "1010") then
                     Cs <= "0000";
               end if;
end process Count;
   bitcount <=Cs;

end behavior;

Desconectado lalodsi

  • PIC10
  • *
  • Mensajes: 2
Re:Contador vhdl
« Respuesta #1 en: 16 de Abril de 2020, 13:11:09 »
Por lo que veo, limit es para cargar los datos del conteo, manual para detenerlo o hacerlo correr y sentido para cambiar de conteo ascendente o descendente

Debes de saber describir bien un temporizador, yo te recomiendo una descripción de la siguiente forma

ir reset = '1' then --Reset asíncrono
cs = "0000";
elsif rising_edge(clck) then
  if manual = 0 then
    if sentido = '1' then
      if cs <= "1010" then cs <="0000";-- si es 10 comienza en cero
      else       cs <= cs + 1;
      end if;
    else
       if cs <= "1111" then cs <="1001"; --Si es menor que cero, comienza en 9
       else       cs <= cs - 1;
       end if;
    end if;
  end if;
end if;

Además tendrás que definir las entradas y salidas correspondientes, en tu código utilizas reset pero no lo declaras