CENTRO DE ENSEÑANZA TÉCNICA Y SUPERIOR
Escuela de Ingeniería
Ingeniería Cibernética Electrónica
Electrónica Digital II
Practica #1
Presenta:
Fernanda Contreras Quiroz, m043321
Mexicali, B.C. a 20 de febrero del 2025.
Introduccion
VHDL (VHSIC Hardware Description Language) es un lenguaje de descripción de hardware
utilizado para modelar, diseñar y simular circuitos digitales. Fue desarrollado en los años 80 por
el Departamento de Defensa de [Link]. como parte del proyecto VHSIC (Very High-Speed
Integrated Circuit).
Un flip-flop es un elemento básico de almacenamiento en circuitos secuenciales, utilizado para
guardar un bit de información. A diferencia de los circuitos combinacionales, los flip-flops tienen
memoria, lo que les permite conservar su estado hasta que se actualicen con una nueva señal.
Procedimiento y Códigos
Código principal parte A:
library IEEE;
use IEEE.std_logic_1164.all; -- Para std_logic
use IEEE.numeric_std.all; -- Para unsigned
entity practica1 is
Port (
clk : in STD_LOGIC;
reset : in STD_LOGIC;
x : in STD_LOGIC;
q : out STD_LOGIC_VECTOR (2 downto 0)
);
end practica1;
architecture Behavioral of practica1 is
signal count : STD_LOGIC_VECTOR(2 downto 0) := "000";
begin
process (clk, reset)
begin
if reset = '1' then
count <= "000";
elsif rising_edge(clk) then
if x = '0' then
case count is
when "000" => count <= "011";
when "011" => count <= "110";
when "110" => count <= "111";
when "111" => count <= "010";
when "010" => count <= "100";
when "100" => count <= "001";
when "001" => count <= "101";
when "101" => count <= "000";
when others => count <= "000";
end case;
else
case count is
when "111" => count <= "001";
when "001" => count <= "000";
when "000" => count <= "110";
when "110" => count <= "101";
when "101" => count <= "100";
when "100" => count <= "010";
when "010" => count <= "011";
when "011" => count <= "111";
when others => count <= "000";
end case;
end if;
end if;
end process;
q <= count;
end Behavioral;
Testbench:
library IEEE;
use IEEE.std_logic_1164.all; -- Para std_logic
use IEEE.numeric_std.all; -- Para signed, unsigned
entity practica1_tb is
end practica1_tb;
architecture Testbench of practica1_tb is
signal clk_tb : STD_LOGIC := '0';
signal reset_tb : STD_LOGIC := '0';
signal x_tb : STD_LOGIC := '0';
signal q_tb : STD_LOGIC_VECTOR(2 downto 0);
component practica1_tb
Port (
clk : in STD_LOGIC;
reset : in STD_LOGIC;
x : in STD_LOGIC;
q : out STD_LOGIC_VECTOR (2 downto 0)
);
end component;
begin
UUT: practica1_tb port map (
clk => clk_tb,
reset => reset_tb,
x => x_tb,
q => q_tb
);
process
begin
clk_tb <= '0'; wait for 10 ns;
clk_tb <= '1'; wait for 10 ns;
end process;
end Testbench;
Codigo principal parte B:
library IEEE;
use IEEE.std_logic_1164.all; -- Para std_logic
use IEEE.numeric_std.all; -- Para unsigned
entity practica1.5 is
Port (
clk : in STD_LOGIC;
reset : in STD_LOGIC;
q : out STD_LOGIC_VECTOR (2 downto 0)
);
end practica1.5;
architecture behavioral of practica1.5 is
signal count : STD_LOGIC_VECTOR(2 downto 0) := "001";
begin
process (clk, reset)
begin
if reset = '1' then
count <= "001";
elsif rising_edge(clk) then
case count is
when "001" => count <= "011";
when "011" => count <= "110";
when "110" => count <= "010";
when "010" => count <= "011";
when "011" => count <= "111";
when "111" => count <= "001";
when others => count <= "001";
end case;
end if;
end process;
q <= count;
end behavioral;
Testbench:
library IEEE;
use IEEE.std_logic_1164.all; -- Para std_logic
use IEEE.numeric_std.all; -- Para signed, unsigned
entity practica1.5_tb is
end practica1.5_tb;
architecture Testbench of practica1.5_tb is
signal clk_tb : STD_LOGIC := '0';
signal reset_tb : STD_LOGIC := '0';
signal x_tb : STD_LOGIC := '0';
signal q_tb : STD_LOGIC_VECTOR(2 downto 0);
component practica1.5_tb
Port (
clk : in STD_LOGIC;
reset : in STD_LOGIC;
x : in STD_LOGIC;
q : out STD_LOGIC_VECTOR (2 downto 0)
);
end component;
begin
UUT: contador_bcd port map (
clk => clk_tb,
reset => reset_tb,
x => x_tb,
q => q_tb
);
process
begin
clk_tb <= '0'; wait for 10 ns;
clk_tb <= '1'; wait for 10 ns;
end process;
end arql;
Conclusion
En esta práctica, se diseñaron e implementaron contadores de secuencia arbitraria utilizando
VHDL. Se trabajó con circuitos secuenciales que almacenan y cambian estados en función de
señales de entrada y un reloj, aplicando el concepto de flip-flops para la retención de
información.
A través de la simulación y análisis del código, se verificó el correcto funcionamiento de los
contadores, asegurando que las secuencias definidas fueran respetadas en cada ciclo de reloj.
Además, se reforzaron conocimientos sobre la estructura y sintaxis de VHDL, la importancia del
diseño modular y la validación de circuitos digitales mediante testbenches.
Referencias
Maxinez, D. G., & Jara, J. A. (2002). VHDL. El arte de programar sistemas digitales. 1st ed.
CECSA, 368.
Ndjountche, T. (2020). Electrónica digital 2: Circuitos lógicos secuenciales y aritméticos (Vol.
2). ISTE Group.