Programación en VHDL/Ejemplos/Contador

De Wikilibros, la colección de libros de texto de contenido libre.

← Ejemplos/Sumador Contador Ejemplos/Biestable-Latch →



El objetivo es crear un contador con dos salidas, las cuales corresponderán a un cotador rapido y a otro lento. Ademas, se dispondra de cuatro señale de entrada, donde habrá dos reseteadores (uno para cada contador) y dos enables, que permitirán la parada e inicio de los contadores. También se incluirá el reset y el reloj del sistema.

  • Entradas:
    • rst: Reset del sistema.
    • clk: Reloj del sistema.
    • reset1: Reset del contador rápido.
    • reset2: Reset del contador lento.
    • enable1: Activación-Desactivación del contador rápido.
    • enable2: Activación-Desactivación del contador lento.
  • Salidas:
    • count1: Salida del contador rápido.
    • count2: Salida del contador lento.

Los enables (enable1 y enable2) no actúan como enables puros, realmente cuando se produce un evento en dicha entrada pasará a activarse o desactivarse el contador correspondiente.


     LIBRARY IEEE;
     USE IEEE.STD_LOGIC_1164.all;
 
     ENTITY count IS
       PORT (clk : IN std_logic; 
             rst : IN std_logic; 
             enable1 : IN std_logic; 
             enable2 : IN std_logic; 
             reset1 : IN std_logic; 
             reset2 : IN std_logic; 
             count1 : OUT std_logic_vector(7 DOWNTO 0);
             count2 : OUT std_logic_vector(31 DOWNTO 0));
     END count;
 
     ARCHITECTURE synth OF sum IS
       SIGNAL cnt1 : std_logic_vector(7 DOWNTO 0) := (others => '0');
       SIGNAL cnt2 : std_logic_vector(31 DOWNTO 0) := (others => '0');
       SIGNAL en1 : boolean := false;
       SIGNAL en2 : boolean := false;
     BEGIN
 
       pSeq : PROCESS (clk, rst) IS
       BEGIN
         IF rst = '1' THEN
           cnt1 <= (others => '0');
           cnt2 <= (others => '0');
         ELSIF clk='1' AND clk'event THEN
           IF en1 THEN
             cnt1 <= cnt1 + 1;
           END IF;
 
           IF en2 THEN
             cnt2 <= cnt2 + 1;
           END IF;
         END IF;
       END PROCESS;
 
       pCom : PROCESS (enable1, enable2) IS
       BEGIN
         IF enable1 = '1' THEN
           en1 <= NOT en1;
         END IF;
 
         IF enable2 = '1' THEN
           en2 <= NOT en2;
         END IF;
       END PROCESS;
 
       count1 <= cnt1;
       count2 <= cnt2;
 
     END synth;

← Ejemplos/Sumador Contador Ejemplos/Biestable-Latch →
Herramientas personales