Practica No8 – Sistemas Digitales
MODELOS DE PROGRAMACIÓN CON VHDL.
Darío Orosco, Daysi Aimacaña
Laboratorio C.P. Sistemas Digitales
Escuela Politécnica Nacional.
Quito - Ecuador
I. OBJETIVOS refresh_state <= refresh_state + 1;
• Conocer conceptos básicos para la programación con refresh_count <= 0;
end if;
VHDL.
end if;
• Familiarizar a los estudiantes con el uso en VHDL - end process;
Quartus Lite.
show_display: process(refresh_state)
II. DESARROLLO begin -- selección del display
case refresh_state is
6.1. Cree el código VHDL que permita realizar un barrido when "00" =>
de displays (tomar en cuenta display_sel <= "1110"; -- display 0
que se utilizará este código dentro de la tarjeta de when "01" =>
desarrollo Easy-RZ FPGA por lo display_sel <= "1101"; -- display 1
que se debe considera la manera de conexión de los displays when "10" =>
para realizar este display_sel <= "1011"; -- display 2
código. (Use la arquitectura funcional). Comentar el código when "11" =>
de tal manera que sea display_sel <= "0111"; -- display 3
fácilmente entendible y simularlo. when others =>
library IEEE; display_sel <= "1111";
use IEEE.STD_LOGIC_1164.ALL; end case;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
-- mostrar digitos
entity muxdisplay_top is case display_sel is
port ( when "1110" =>
clk50mhz: in STD_LOGIC; display <= "1000000"; -- 0
display: out STD_LOGIC_VECTOR(6 downto 0); when "1101" =>
cur_display: out STD_LOGIC_VECTOR(3 downto 0) display <= "1111001"; -- 1
); when "1011" =>
end muxdisplay_top; display <= "0100100"; -- 2
when "0111" =>
architecture beh of muxdisplay_top is display <= "0110000"; -- 3
-- 50Mzh/100000=500Hz when others =>
constant max_refresh_count: INTEGER := 100000; display <= "1111111";
signal refresh_count: INTEGER range 0 to end case;
max_refresh_count; end process;
signal refresh_state: STD_LOGIC_VECTOR(1 downto 0) end beh;
:= (others => '0');
signal display_sel: STD_LOGIC_VECTOR(3 downto 0) :=
(others => '0');
begin
cur_display <= display_sel;
gen_clock: process(clk50mhz)
begin
if clk50mhz'event and clk50mhz='1' then
-- contador 500Hz (para refresco del display)
if refresh_count < max_refresh_count then
refresh_count <= refresh_count + 1; Figura 1.1 Barrido de Displays
else
Practica No8 – Sistemas Digitales
6.2. Consulte sobre las diferentes normas de utilización del • Si estamos describiendo un proceso combinacional,
comando ‘wait’. todas las señales que leamos deben ser declaradas en la lista de
sensibilidad del proceso. Las variables no.
WAIT ON lista_sensible UNTIL condicion FOR timeout; • Una variable toma inmediatamente el valor que se le
asigna, como en un lenguaje de programación. Sin embargo,
La lista_sensible es un conjunto de señales separadas por en una señal los valores que se le dan no se «cargan» hasta que
comas. La condición es una sentencia que activará de nuevo la avanza en tiempo de simulación y en ese momento tomará el
ejecución. El timeout es el tiempo durante el cual la ejecucion último valor que se le haya dado.
esta detenida.[4]
Conclusiones.
wait until: Suspende un proceso hasta que un proceso ocurra
en una o más de las señales en la declaración y se evalúa que VHDL es un lenguaje de especificación definido por el IEEE
la condición es verdadera. utilizado para describir circuitos digitales y para la
automatización de diseño electrónico.
READ_NET: process Definir una arquitectura usando el juego de instrucciones
begin soportado por las herramientas de síntesis (escritura RTL).
wait until NET_DATA_VALID = '1'; Unir los diferentes módulos descritos separadamente (VHDL
NET_DATA_READ <= '1'; estructural)
wait until CLK='1';
wait until CLK='1'; Mediante el uso de una placa y un scrip de un programa se
NET_BUFFER <= NET_DATA_IN; puede implementariar varios dispositivos, que armarlos
wait until CLK='1'; significaría ocupar varios integrados y espacio para su correcto
NET_DATA_READ <= '0'; funcionamiento.
end process READ_NET;
Recomendaciones.
wait on: es equivalente a una lista de sensibilidad. Estos Realizar los circuitos digitales y tener probados para asi solo
procesos se comportarán de manera idéntica. ejecutarlos en Quartus sin tener problemas en dichos circuitos.
process (A,B) Tener claro cada comando que ofrece VHDL y la libreria que
begin este necesita, el mal uso de un comando o estructura, podria
-- sequential statements perjudicar el funcionamiento de la implementacion o incluso
end process; impedir el mismo
process No asignar cualquier pin cuando se va a modelar ya que tienen
begin un pin asignado en el data sheet del instrument.
-- identical statements
wait on A,B;
end process;
Wait for: son útiles en modelos de comportamiento y bancos III. REFRENCIAS
de pruebas. Wait por sí mismo suspende un proceso
indefinidamente. [1] Wiki libros, «Programación en VHDL/Elementos básicos
del lenguaje». [En línea]. Available:
STIMULUS: process [Link]
begin DL/Elementos_b%C3%A1sicos_del_lenguaje [Último
EN_1 <= '0'; acceso: 06 01 2019].
EN_2 <= '1';
wait for 10 ns; [2] Anónimo, «Objetos de VHDL». [En línea]. Available:
EN_1 <= '1'; [Link]
EN_2 <= '0'; V_2007.pdf [Último acceso: 06 01 2020].
wait for 10 ns;
EN_1 <= '0'; [3] Anónimo, «Lenguaje VHDL» 2011, [En línea]. Available:
wait for 10 ns; [Link]
wait; -- end of test Tema_4/4_3.pdf [Último acceso: 06 01 2020].
end process STIMULUS;
[4] Wiki libros, «Programación en VHDL/Arquitectura». [En
6.3. Indique 3 diferencias en el funcionamiento de las señales línea]. Available:
locales y variables en VHDL. [Link]
DL/Arquitectura [Último acceso: 06 001 20120].
• Ámbito de declaración. Una señal se declara a nivel
de la arquitectura y puede ser leída por varios procesos. Una
variable se declara dentro de un proceso y solo puede ser leída
y escrita desde él.
Practica No8 – Sistemas Digitales