Documentos de Académico
Documentos de Profesional
Documentos de Cultura
FACULTAD DE INGENIERIA
Práctica No.: Tema: Duración (horas) No. Grupos No. Estudiantes (por
Codiseño HARDWARE - SOFTWARE Grupo)
4 2 4
Álvarez Daniela
Camas Cristian
Quinche Isaí
Peña Anthony
Garcés Cristian
Objetivos de la Práctica:
Implementar un microprocesador en un FPGA
Equipos, Materiales e Insumos:
- Laboratorio de electrónica
- Osciloscopio, Generador de funciones,
- Multímetro,
- FPGA
- Pc
Procedimiento:
La síntesis digital directa (DDS) es un método empleado por los sintetizadores de frecuencia utilizados para crear
formas de onda arbitrarias a partir de un único reloj de referencia de frecuencia fija. DDS se utiliza en aplicaciones
como la generación de señales, osciladores locales en sistemas de comunicación, generadores de funciones,
mezcladores, moduladores, sintetizadores de sonido y como parte de un bucle digital de fase bloqueada.
Un sintetizador digital directo básico consiste en una referencia de frecuencia (a menudo un oscilador de cristal,
en nuestro caso el reloj de la tarjeta FPGA) y un convertidor digital a analógico (DAC).
El oscilador de referencia proporciona una base de tiempo estable para el sistema y determina la precisión de
frecuencia del DDS. Proporciona la tarjeta ZYBO en su salida una versión cuantificada de tiempo discreto de la
forma de onda de salida deseada cuyo período es controlado por la programación desarrollada en el software
Vivado 2018.3 contenida en el Registro de Control de Frecuencia. La forma de onda digital muestreada se
convierte en una forma de onda analógica por el DAC.
Resultados:
Se logró crear un generador de onda usando la técnica DDS, obteniendo las señales sinusoidales, triangular y
cuadrada.
Anexos:
Código Divisores
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.std_logic_unsigned.all;
entity DIVISOR is
Port (CLK,RESET: in std_logic;
CLKout: out std_logic );
end DIVISOR;
begin
process (CLK,RESET)
begin
if (CLK'event and CLK = '1') then
if (RESET = '1') then pulso<='0';
contador<=0;
elsif (contador = 6249) then
pulso <= NOT(pulso);
contador <= 0;
else
contador <= contador+1;
end if;
end if;
end process;
CLKout <= pulso;
end Behavioral;
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity MUX_F is
Port (F1,F2,F3,F4: in std_logic;
SE: in std_logic_vector(1 downto 0);
Sa: out std_logic );
end MUX_F;
Código Contador
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity CONTADOR is
Port (CLK,CLR: in std_logic;
Q: out std_logic_vector(7 downto 0));
end CONTADOR;
Q <= tmp;
end Behavioral;
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity SENO is
Port (CLK,EN: in std_logic;
ADDR: in std_logic_vector(7 downto 0);
DATA: out std_logic_vector(7 downto 0) );
end SENO;
entity TRIANGULAR is
Port (CLK,EN: in std_logic;
ADDR: in std_logic_vector(7 downto 0);
DATA: out std_logic_vector(7 downto 0) );
end TRIANGULAR;
entity CUADRADA is
Port (CLK,EN: in std_logic;
ADDR: in std_logic_vector(7 downto 0);
DATA: out std_logic_vector(7 downto 0) );
end CUADRADA;
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity MUX is
Port (A,B,C: in std_logic_vector(7 downto 0);
SEL: in std_logic_vector(1 downto 0);
Sal: out std_logic_vector(7 downto 0));
end MUX;
process(SEL,A,B,C) is
begin
case SEL is
WHEN "00" => Sal <= (others => '0');
WHEN "01" => Sal <= A;
WHEN "10" => Sal <= B;
WHEN "11" => Sal <= C;
WHEN OTHERS => Sal <= (others => '0');
end case;
end process;
end Behavioral;
Referencias bibliográficas:
_____________________ __________________