0% encontró este documento útil (0 votos)
292 vistas13 páginas

Nexys 4 DDR Artix-7 FPGA en VHDL

Este documento presenta los detalles de la Práctica 1 de un curso de Microelectrónica. El objetivo es aprender a programar en VHDL para FPGA usando el flujo de diseño de Vivado. Se describe brevemente la tarjeta Nexys-4 DDR Artix-7 que se usará y se plantea un problema combinacional que involucra 4 interruptores y un LED. Luego se muestra la resolución del problema usando lógica digital y la implementación del diseño en VHDL siguiendo los pasos de creación de proyecto, código,

Cargado por

Alvaro LC
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
292 vistas13 páginas

Nexys 4 DDR Artix-7 FPGA en VHDL

Este documento presenta los detalles de la Práctica 1 de un curso de Microelectrónica. El objetivo es aprender a programar en VHDL para FPGA usando el flujo de diseño de Vivado. Se describe brevemente la tarjeta Nexys-4 DDR Artix-7 que se usará y se plantea un problema combinacional que involucra 4 interruptores y un LED. Luego se muestra la resolución del problema usando lógica digital y la implementación del diseño en VHDL siguiendo los pasos de creación de proyecto, código,

Cargado por

Alvaro LC
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

universidad nacional de san agustı́n de arequipa

facultad de ingenierı́a de producción y servicios

escuela profesional de ingernierı́a electrónica

microelectrónica

Práctica 1
Circuito Combinacional

Integrantes:

- Condo Yallerco, Lenin Abrahan


- Dolmos Becerra, Uriel Frankdali Docente:
- Huacasi Luque, Yonathan Lenin PhD. Alexander Hilario

- Llamocca Cordova, Alvaro Joel


- Quiza Ccalloquispe, Kevin Joel

Arequipa, Septiembre 23, 2020


Índice
1. Objetivos 1

2. Programación en VHDL 1
2.1. Introducción a programación en VHDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

3. Nexys-4 DDR Artix-7 FPGA, descripción. 1

4. Desarrollo del laboratorio. 3


4.1. Planteación del problema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
4.2. Resolución con lógica digital . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

5. Flujo de Diseño 4
5.1. Creación del proyecto y selección del dispositivo FPGA Artyx-7 . . . . . . . . . . . . . . . . 4
5.2. Código en VHDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
5.3. Test Bench del código en VHDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
5.4. Realización de la Functional Simulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
5.5. Creación del archivo XDC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
5.6. Realización del Timing Simulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

Índice de figuras
1. Nexys4 DDR board. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2. Circuito de la funcion f simplificada en Multisim. . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
3. Creación del nuevo proyecto (ubicación, nombre de la carpeta). . . . . . . . . . . . . . . . . . . . 4
4. Selección de la Tarjeta Nexys4 DDR FPGA Artyx-7. . . . . . . . . . . . . . . . . . . . . . . . . . 4
5. Selección del tipo de escritura y nombre del proyecto. . . . . . . . . . . . . . . . . . . . . . . . . 5
6. Circuito de la función f simplificada en VIVADO). . . . . . . . . . . . . . . . . . . . . . . . . . . 6
7. Resultado obtenidos en el Test-Bench . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
8. Selección de pines I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
9. Circuito General Nexys4 DDR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
10. Simulacion (Run Post Implementation Timming Simulation). . . . . . . . . . . . . . . . . . . . . 11
PRÁCTICA 1 MICROELECTRÓNICA

1. Objetivos

Introducción de programación VHDL para FPGAs.

Aprender a escribir test − benches en VHDL.

Aprender el flujo de diseño con el Vivado: Sı́ntesis, simulación y generación de Bitstream.

Aprender como asignar pins de entrada y salida I/O del FPGA y cargar el Bitstream en el Nexys-4 DDR
Artix-7 FPGA Board.

2. Programación en VHDL

2.1. Introducción a programación en VHDL


VHDL es un lenguaje de descripción de circuitos electrónicos digitales que utiliza distintos niveles de abstrac-
ción. El significado de las siglas VHDL es VHSIC (Very High Speed Integrated Circuits) Hardware Description
Language. Esto significa que VHDL permite acelerar el proceso de diseño. VHDL no es un lenguaje de progra-
mación, por ello conocer su sintaxis no implica necesariamente saber diseñar con é[Link] es un lenguaje de
descripción de hardware, que permite describir circuitos sı́ncronos y ası́ncronos. Para realizar esto debemos:

Pensar en puertas y biestables, no en variables ni funciones.

Evitar bucles combinacionales y relojes condicionados.

Saber qué parte del circuito es combinacional y cuál secuencial.

¿Por qué usar lenguaje de descripción de hardware?

Poder descubrir problemas en el diseño antes de su implemetación fı́sica.

La complejidad de los sistemas electrónicos crece exponencialmente, es necesaria una herramienta que
trabaje con el ordenador.

Permite que más de una persona trabaje en el mismo proyecto.

En particular VHDL permite tanto una descripción de la estructura del circuito (descripción a partir de sub-
circuitos más sencillos), como la especificación de la funcionalidad de un circuito utilizando formas familiares a
los lenguajes de programación.

3. Nexys-4 DDR Artix-7 FPGA, descripción.

La NEXYS 4 es una tarjeta de desarrollo en la cual se pueden realizar una gran variedad de diseño y con la
facilidad de poder probarlos con sus muchos dispositivos ya instalados.
Una de las principales caracterı́sticas de la tarjeta de desarrollo NEXYS 4 es que cuenta con un dispositivo
FPGA de la nueva familia de XILINX. Entre las principales caracterı́sticas tenemos:

15850 sectores lógicos con 4 LUT de 6 entradas y 8 FLIP-FLOP.

4860 Kb del bloque de memoria RAM.

6 administradores de reloj con retroalimentación de desplazamiento de fase 240 sectores DSP.

Reloj interno con frecuencia superiores a 450MHz

Cuenta con un convertidor analógico a digital internamente.

La tarjeta de desarrollo NEXYS 4DDR incluye las siguientes caracterı́sticas:

16 interruptores

UART - USB

Salida VGA de 12bits

1
PRÁCTICA 1 MICROELECTRÓNICA

Acelerómetro de 3 ejes

Cellular RAM de 16Mb

PMOD de señales analógicas

16 LED

2 LED RGB

Salida de audio por PWM

Sensor de temperatura

Serial FLASH

Puerto de programación USB-JTAG

2 Pantallas de 7 segmentos de 4 dı́gitos, en total 8 dı́gitos multiplexados.

Conector de micro SD

Micrófono PDM

10/100 Ethernet PHY

4 conectores PMOD

USB HID HOST para: mouse, teclado y memorias USB

La NEXYS 4 es compatible con el programa de desarrollo VIVADO DESIGN SUITE y tambien es compatible
con el conjunto de herramienta de desarrollo ISE. En la siguiente Fig.1 se muestra las ubicaciones de los
principales componentes y caracterı́sticas de la tarjeta de desarrollo NEXYS 4.

Figura 1: Nexys4 DDR board.

2
PRÁCTICA 1 MICROELECTRÓNICA

4. Desarrollo del laboratorio.

4.1. Planteación del problema


Problema: Se enciende un LED (f = 1) cuando la combinación de cuatro interruptores representa un
número entero sin signo que es impar y primo donde ”1” representa la posición ON de un interruptor y
”0” la posición OFF. Por ejemplo, si abcd = 1010 → f = 0. Si abcd = 0111 → f = 1.

4.2. Resolución con lógica digital


La funcion ”f ” de salida expresada en Minterminos es:

a b c d f
0 0 0 0 0
f = abcd + abcd + abcd + abcd + abcd
0 0 0 1 0
f = bcd(a + a) + bcd(a + a) + abcd
0 0 1 0 0
f = bcd(1) + bcd(1) + abcd
0 0 1 1 1
0 1 0 0 0 f = bcd + cd(b + ab)
0 1 0 1 1 f = bcd + cd((b + b)(a + b))
0 1 1 0 0 f = bcd + cd((1)(a + b))
0 1 1 1 1 f = bcd + cda + cdb
1 0 0 0 0 f = acd + bcd + bcd
1 0 0 1 0 f = d(ac + bc + bc)
1 0 1 0 0 f = d[ac + (b ⊕ c)]
1 0 1 1 1
1 1 0 0 0
1 1 0 1 1
1 1 1 0 0
1 1 1 1 0
0 1 2 3 4 5
El circuito para la expresión Booleana final obtenida a través de la herramienta ”M ultisim” es:

A B C D
A

Figura 2: Circuito de la funcion f simplificada en Multisim.

D
14
18
2
3 U13
1
PRÁCTICA 1 MICROELECTRÓNICA

5. Flujo de Diseño

5.1. Creación del proyecto y selección del dispositivo FPGA Artyx-7


Se crea un nuevo proyecto en Vivado.

Figura 3: Creación del nuevo proyecto (ubicación, nombre de la carpeta).

Se selecciona el tipo de escritura, en nuestro caso sera VHDL

Figura 4: Selección de la Tarjeta Nexys4 DDR FPGA Artyx-7.

4
PRÁCTICA 1 MICROELECTRÓNICA

Seleccionamos la board Nexys4 DDR Artyx-7.

Figura 5: Selección del tipo de escritura y nombre del proyecto.

5.2. Código en VHDL


Luego de crear el proyecto como se observa en la Fig. 6, se escribe el codigo en VHDL que implementa la
expresión Booleana simplificada obtenida en el Punto 4 o el circuito de la Fig. 2 o la Fig. 6, a continuación
se muestra el código creado que implementa la función anterior mencionada.

-------------------------------------------------------------------
-- Universidad Nacional de San agustin
-- Ingenieria Electronica
-- Curso:Microelectronica
-- Create Date: 16.09.2020 [Link]
-- Laboratorio N°1: Circuito Combinacional
-- funcion_logica - Behavioral
--------------------------------------------------------------------

library IEEE; -- LIBRERIAS


use IEEE.STD_LOGIC_1164.ALL;

entity funcion_logica is
Port -- DECLARACION DE LOS PUERTOS DE ENTRADA Y SALIDA
(
A,B,C,D : in STD_LOGIC; -- PUERTOS DE ENTRADA
F : out STD_LOGIC -- PUERTOS DE SALIDA
);
end funcion_logica;

5
PRÁCTICA 1 MICROELECTRÓNICA

architecture Behavioral of funcion_logica is -- DECLARACION


-- DEL FUNCIONAMIENTO
begin

F <=D and (((not A) and C) or (B xor C));

end Behavioral;

El circuito Lógico que se obtiene es el que podemos encontrar en la Fig. 6.

F_i
I0
D
o F
I1

RTL_AND
F1_i
IO F0_i
A o I0
I1 o
C
I1
RTL_AND
RTL_OR
F1_i_0
I0
B o
I1

RTL_XOR

Figura 6: Circuito de la función f simplificada en VIVADO).

5.3. Test Bench del código en VHDL


A continuación se presenta el código que se utilizó asi como el diagrama de resultados.

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity funcion_logica_test is
-- Port ( );
end funcion_logica_test;

architecture Behavioral of funcion_logica_test is


component funcion_logica is
Port -- DECLARACION DE LOS PUERTOS DE ENTRADA Y SALIDA
(
A,B,C,D : in STD_LOGIC; -- PUERTOS DE ENTRADA
F : out STD_LOGIC -- PUERTOS DE SALIDA
);
end component;

--GENERAR SENALES AUXILIARES PARA LAS ENTRADAS Y SALIDAS


--input

signal A_1: std_logic;


signal B_1 : std_logic;
signal C_1 : std_logic;
signal D_1 : std_logic;
--output
signal F_1: std_logic;

6
PRÁCTICA 1 MICROELECTRÓNICA

begin
-- DESIGN UNDER TEST
dut : funcion_logica port map -- CONECTA CADA ENTRADA CON LA SEN~AL QUE SE LE ASIGNA
(
A => A_1,
B => B_1,
C => C_1,
D=> D_1,
F => F_1
);

stimuli : process
begin
A_1 <= '0';
B_1 <= '0';
C_1 <= '0';
D_1 <= '0';
wait for 100 ns;
A_1 <= '0';
B_1 <= '0';
C_1 <= '0';
D_1 <= '1';
wait for 100 ns;
A_1 <= '0';
B_1 <= '0';
C_1 <= '1';
D_1 <= '0';
wait for 100 ns;
A_1 <= '0';
B_1 <= '0';
C_1 <= '1';
D_1 <= '1';
wait for 100 ns;
A_1 <= '0';
B_1 <= '1';
C_1 <= '0';
D_1 <= '0';
wait for 100 ns;
A_1 <= '0';
B_1 <= '1';
C_1 <= '0';
D_1 <= '1';
wait for 100 ns;
A_1 <= '0';
B_1 <= '1';
C_1 <= '1';
D_1 <= '0';
wait for 100 ns;
A_1 <= '0';
B_1 <= '1';
C_1 <= '1';
D_1 <= '1';
wait for 100 ns;
A_1 <= '1';
B_1 <= '0';
C_1 <= '0';

7
PRÁCTICA 1 MICROELECTRÓNICA

D_1 <= '0';


wait for 100 ns;
A_1 <= '1';
B_1 <= '0';
C_1 <= '0';
D_1 <= '1';
wait for 100 ns;
A_1 <= '1';
B_1 <= '0';
C_1 <= '1';
D_1 <= '0';
wait for 100 ns;
A_1 <= '1';
B_1 <= '0';
C_1 <= '1';
D_1 <= '1';
wait for 100 ns;
A_1 <= '1';
B_1 <= '1';
C_1 <= '0';
D_1 <= '0';
wait for 100 ns;
A_1 <= '1';
B_1 <= '1';
C_1 <= '0';
D_1 <= '1';
wait for 100 ns;
A_1 <= '1';
B_1 <= '1';
C_1 <= '1';
D_1 <= '0';
wait for 100 ns;
A_1 <= '1';
B_1 <= '1';
C_1 <= '1';
D_1 <= '1';
wait for 100 ns;

wait;
end process;

end Behavioral;

8
PRÁCTICA 1 MICROELECTRÓNICA

5.4. Realización de la Functional Simulation


Se muestra los resultados obtenidos a través de la simulación en la Fig. 7 (Functional Simulation).

a
b
c
d
f
Figura 7: Resultado obtenidos en el Test-Bench

5.5. Creación del archivo XDC


Este archivo se creara automaticamente luego de la asignación de los pines de entrada y salida como se
muestra acontinuación, nos apoyamos de la pagina del fabricante para la identificacion de los pines ver
Fig. 9.

Se usa SW 0 − SW 3 para las entradas y LED0 para la salida ver Fig. 8.

Figura 8: Selección de pines I/O

9
PRÁCTICA 1 MICROELECTRÓNICA

Figura 9: Circuito General Nexys4 DDR

Con esto se genera el archivo XDC como se muestra a continuacion.

set_property PACKAGE_PIN R15 [get_ports A]


set_property PACKAGE_PIN M13 [get_ports B]
set_property PACKAGE_PIN L16 [get_ports C]
set_property PACKAGE_PIN J15 [get_ports D]
set_property PACKAGE_PIN H17 [get_ports F]
set_property IOSTANDARD LVCMOS33 [get_ports A]
set_property IOSTANDARD LVCMOS33 [get_ports B]
set_property IOSTANDARD LVCMOS33 [get_ports C]
set_property IOSTANDARD LVCMOS33 [get_ports D]
set_property IOSTANDARD LVCMOS33 [get_ports F]

A su vez, el codigo tambien se puede obtener desde la pagina del fabricante habilitando los pines I/O que
deseamos usar como se ve a continuacion:

#Interruptores
set_property -dict {PACKAGE_PIN J15 IOSTANDARD LVCMOS33} [get_ports {D}];
IO_L24N_T3_RS0_15 Sch = sw [0]
set_property -dict {PACKAGE_PIN L16 IOSTANDARD LVCMOS33} [get_ports {C}];
IO_L3N_T0_DQS_EMCCLK_14 Sch = sw [1]
set_property -dict {PACKAGE_PIN M13 IOSTANDARD LVCMOS33} [get_ports {B}];
IO_L6N_T0_D08_VREF_14 Sch = sw [2]
set_property -dict {PACKAGE_PIN R15 IOSTANDARD LVCMOS33} [get_ports {A}];
IO_L13N_T2_MRCC_14 Sch = sw [3]

#LED
set_property -dict {PACKAGE_PIN H17 IOSTANDARD LVCMOS33} [get_ports {F}];
IO_L18P_T2_A24_15 Sch = led [0]

10
PRÁCTICA 1 MICROELECTRÓNICA

5.6. Realización del Timing Simulation


A continuación tenemos la simulación de nuestro circuito después de la implementación, como vemos la
salida tiene un retraso en respuesta a las señales de entrada.

a
b
c
d
f
Figura 10: Simulacion (Run Post Implementation Timming Simulation).

11

También podría gustarte