Práctica 05: Introducción al lenguaje VHDL
Enviado por ushisad • 10 de Abril de 2019 • Tarea • 2.217 Palabras (9 Páginas) • 111 Visitas
Práctica 05: Introducción al lenguaje VHDL
Alex Hermann, 1067728
Objetivos:
Aprender cómo funciona un FPGA, su utilización y el lenguaje VHDL el cual es utilizado en los FPGA.
Procedimiento:
Primero se inició conectando el FPGA provisto a nuestra PC. Ahí, con el programa de Vivado cargamos un código dado por el profesor que representaba un contador con LEDs que mostraba a diferentes frecuencias. Para realizar el contador, utilizamos el mismo para reducir la frecuencia del FPGA debido a que éste trabaja a unos 100 MHz, la cual es una frecuencia tan rápida que el cambio no podría ser observado por la vista humana. Es por esto que se utilizó un divisor de frecuencia para llevar la frecuencia del FPGA a un medio de la original; es decir, 50 MHz.
Resultados:
[pic 1][pic 2]
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity contador is
Port ( clock : in STD_LOGIC; --asumiendo reloj = 100MHz
reset : in STD_LOGIC;
cuenta : out STD_LOGIC);
end contador;
architecture Behavioral of contador is
signal reset_neg : std_logic;
constant bits_de_conteo_adicional : integer := 20;
signal registro_interno : std_logic_vector( (bits_de_conteo_adicional + 7) downto 0);
begin
reset_neg <= not reset;
proceso_contador : process (clock)
begin
if rising_edge (clock) then
if reset_neg = '0' then --reset sincrono del contador.
registro_interno <= "0000000000000000000000";
else
registro_interno <= registro_interno + '1';
end if;
end if;
end process;
cuenta <= registro_interno( (bits_de_conteo_adicional + 7) downto bits_de_conteo_adicional);
end Behavioral;[pic 3]
[pic 4]
Análisis:
Gracias al código suministrado se puede observar que VHDL es un lenguaje de programación que trabaja de forma paralela. Esto se debe a que se estan programando circuitos, los cuales siempre trabajan en paralelo. En caso de que se desee realizar una operación dependiente del suceso de otra, se utilizan las declaraciones de proceso.
Práctica 06: Programación en FPGAs
Por:
Alex Hermann, 1067728.
.
Asignación 6.1:
Objetivos:
Diseñar un circuito sencillo que maneja 4 displays de 7 segmentos de manera multiplexada,
mostrando los datos introducidos en los interruptores de entrada.
Procedimiento:
Se inició haciendo un multiplexor de tres selectores. Esto significa que, para poder presentar 4 dígitos
distintos en cada display, debe multiplexarse constantemente la salida (lo suficientemente rápido
para que se vean como que todos están encendidos al mismo tiempo, pero no tan rápido que
comiencen a distorsionarse los valores mostrados). Este se encargaría de encender el display seleccionado por los interruptores. Luego, se creó un decodificador que recibiera cuatro entradas, las cuales eran ofrecidas por otros cuatro interruptores. Este decodificador se encargaba de producir en el display el número seleccionado en BCD.
Para reducir la frecuencia a la deseada, se utilizaba esta formula
[pic 5]
Donde la frecuencia de la FPGA Digilent Nexys4 DDR Board era de 100MHz.
[pic 6]
library IEEE;
use IEEE.STD_LOGIC_1164.all;
ENTITY mux IS
PORT(a : IN std_logic_vector(3 DOWNTO 0);
b : IN std_logic_vector(3 DOWNTO 0);
c : IN std_logic_vector(3 DOWNTO 0);
sel : IN std_logic_vector(1 DOWNTO 0);
salida : OUT std_logic_vector(3 DOWNTO 0));
END mux;
ARCHITECTURE synth OF mux IS
BEGIN
PROCESS (sel, a, b, c) IS
BEGIN
CASE sel IS
WHEN "00" => salida <= (others => '0');
WHEN "01" => salida <= a;
...