Programación en VHDL/Ejemplos/Contador
De Wikilibros, la colección de libros de texto de contenido libre.
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;