Vous êtes sur la page 1sur 7

CONTANDOR DIGITAL

José David Peña Vargas U00104511


Yeison Iván Yarce Herrera U00105835

UNAB
LABORATORIO ELECTRONICA DIGITAL
Objetivo general: entrada al sistema y se mira la salida
del mismo
Realizar un contador digital por medio
del software vhdl
Desarrollo:
El desarrollo de esta practicas de
laboratorio llevan a la consecución de un
Objetivos específicos: sistema contador de 4 dígitos a su salida

 Desarrollar un código que permita Este contador implica a su vez el


la ejecución de dicho sistema desarrollo previo de conversores,
 Crear una prueba de la simulación multiplexores y demás elementos vistos
durante el semestre académico en el
laboratorio de electrónica análoga, estos
códigos serán mostrados mas adelante,
pero no se profundizara mucho sobre
Procedimiento: ellos
1. Como primera medida se crea un El contador cuenta con su programación
nuevo proyecto en el software ise
en el software vhdl, todo esto siguiendo
desing
los parámetros dados por el docente
2. Seguidamente se define por defecto
para la ejecución del sistema digital antes
el programa a realizar
3. Se definen las variables a trabajar, en mención
determinando si estas son entradas
o salidas del sistema a realizar,
también se deben definir los Código ise desing:
tamaños o el numero de bits a usar
en cada variable Código para los conversores
4. Posteriormente se deben llamar al entity BCD_7SEG is
código las librerías que se requieran
en el desarrollo de la practica Port ( BCD : in STD_LOGIC_VECTOR (3
5. Luego se procede a la realización del downto 0);
código línea a línea teniendo en SEGMEN : out STD_LOGIC_VECTOR (6
cuenta las variables y la arquitectura downto 0));
a usar
6. Posteriormente uniremos los códigos end BCD_7SEG;
elaborados anteriormente en el
laboratorio, para ejecutar el
programa architecture Behavioral of BCD_7SEG is
7. Después de implementar el código se
verifica su sintaxis
8. Seguidamente se realiza una nueva begin
prueba determinando los valores de
process (BCD) when others => SEGMEN <=
"1111111";
begin

case BCD is
end case;

end process;
when "0000" => SEGMEN <=
"0000001";

when "0001" => SEGMEN <= end Behavioral;


"1001111";

when "0010" => SEGMEN <=


este código representa una de las
"0010010";
conversiones previamente realizadas
when "0011" => SEGMEN <=
"0000110";
código del 7 segmentos:
when "0100" => SEGMEN <=
"1001100"; library IEEE;
when "0101" => SEGMEN <= use IEEE.STD_LOGIC_1164.ALL;
"0100100";
entity conversor is
when "0110" => SEGMEN <=
"1100000"; Port ( hex : in STD_LOGIC_VECTOR (3
downto 0);
when "0111" => SEGMEN <=
"0001111"; uni : out STD_LOGIC_VECTOR (3
when "1000" => SEGMEN <= downto 0);
"0000000"; dec : out STD_LOGIC_VECTOR (3
when "1001" => SEGMEN <= downto 0));
"0001100";
end conversor;
when "1010" => SEGMEN <=
"0001000";

when "1011" => SEGMEN <= architecture Behavioral of conversor is


"0000000";

when "1100" => SEGMEN <=


begin
"0110001";
process (hex)
when "1101" => SEGMEN <=
"0000001"; begin
when "1110" => SEGMEN <= case hex is
"0110000";
when "0000" => dec <= "0000"; when others => dec <= "0000";
uni <= "0000"; uni <= "0000";
when "0001" => dec <= "0000"; end case;
uni <= "0001";
end process;
when "0010" => dec <= "0000";
uni <= "0010";
end Behavioral;
when "0011" => dec <= "0000";
uni <= "0011";
when "0100" => dec <= "0000"; este código es para el desarrollo de las
uni <= "0100"; unidades y decenas que posee en
contador digital
when "0101" => dec <= "0000";
uni <= "0101";
when "0110" => dec <= "0000"; código para el mux:
uni <= "0110";
when "0111" => dec <= "0000";
uni <= "0111"; library IEEE;

when "1000" => dec <= "0000"; use IEEE.STD_LOGIC_1164.ALL;


uni <= "1000";
when "1001" => dec <= "0000"; entity de_mux is
uni <= "1001";
Port ( UNID : in STD_LOGIC_VECTOR (3
when "1010" => dec <= "0001"; downto 0);
uni <= "0000";
DECE : in STD_LOGIC_VECTOR (3
when "1011" => dec <= "0001"; downto 0);
uni <= "0001";
sel : in
when "1100" => dec <= "0001"; STD_LOGIC;
uni <= "0010";
bcd : out STD_LOGIC_VECTOR (3
when "1101" => dec <= "0001"; downto 0));
uni <= "0011";
end de_mux;
when "1110" => dec <= "0001";
uni <= "0100";
when "1111" => dec <= "0001"; architecture Behavioral of de_mux is
uni <= "0101";
begin architecture Behavioral of contadorrr is
Signal Dsalida_se: STD_LOGIC_VECTOR (3
downto 0)="0000"
process (sel, UNID, DECE ) is begin
begin Process (clk,reset)
case sel is begin
when '0'=> bcd <= if( clk = '1' and clk'event ) then
UNID;
if
when others => (Dsalida_se = "1001") then
bcd <= DECE;
end case; Dsalida_se <= 0
end process; else
Dsalida_se <= Dsalida_se +1;
end if;
end Behavioral; end if;
end Process;
código desarrollado para el multiplexor, Dsalida <= Dsalida_se;
que será implementado al contador

end Behavioral;
contador :
library IEEE; desarrollo de las líneas de código para el
use IEEE.STD_LOGIC_1164.ALL; contador

entity contador is
Port ( Dsalida : in STD_LOGIC_VECTOR recomendaciones:
(3 downto 0);
 Es importante tener claro cuales
Clk : in STD_LOGIC);
son los nombres asignados a los
end contadorrr; elementos pues a la hora de
llamarlos no serán reconocidos
 se sugieres orden en las líneas de --Inputs
programación, esto porque los signal Dsalida : std_logic_vector(3
códigos sean más fáciles de downto 0) := (others => '0');
interpretar
 definir bien las variables de signal Cinicial : std_logic_vector(3
entrada y salida del sistema downto 0) := (others => '0');
signal Habilitacion : std_logic := '0';
signal Reset : std_logic := '0';
código de la simulación
signal Clk : std_logic := '0';
ENTITY Simulacion IS
END Simulacion;
-- Clock period definitions
constant Clk_period : time := 10 ns;
ARCHITECTURE behavior OF Simulacion
IS

BEGIN
-- Component Declaration for the Unit
Under Test (UUT)
-- Instantiate the Unit Under Test
(UUT)
COMPONENT contadorrr uut: contadorrr PORT MAP (
PORT( Dsalida => Dsalida,
Dsalida : IN std_logic_vector(3
downto 0);
Clk => Clk
Cinicial : IN std_logic_vector(3
);
downto 0);
Habilitacion : IN std_logic;
-- Clock process definitions
Reset : IN std_logic;
Clk_process :process
Clk : IN std_logic
begin
);
Clk <= '0';
END COMPONENT;
wait for Clk_period/2;
Clk <= '1';
wait for Clk_period/2;
end process;

-- Stimulus process
stim_proc: process
begin
-- hold reset state for 100 ns.
wait for 100 ns;

wait for Clk_period*10;

-- insert stimulus here

wait;
end process;

END;

Vous aimerez peut-être aussi