Documentos de Académico
Documentos de Profesional
Documentos de Cultura
10 SDI111 Guia Lab Xilinx
10 SDI111 Guia Lab Xilinx
Objetivo General
Utilizar el editor de archivos de Xilinx para sintetizar, corroborar la sintaxis y probar
los códigos VHDL para los ejemplos propuestos.
Interpretar los diagramas de tiempos generados a partir de códigos VHDL de los
Test Bench.
Objetivo Específicos
Utilizar la herramienta ISE de Xilinx para la escritura de archivos VHDL.
Sintetizar el código de los archivos con extensión .vhd para obtener la abstracción del
código escrito en forma de circuito digital, representación de tablas de verdad, funciones
lógicas y mapas de karnaugh.
Realizar la simulación de los ejemplos propuestos para verificar el funcionamiento de
cada archivo de código VHDL.
Material y equipo
1 Computadora con ISE instalado.
Tarea previa
1. Leer el blog: http://systemonfpga.blogspot.com/2015_01_01_archive.html.
2. Investigar cuáles compañías distribuyen FPGA’s y el nombre del software que utilizan
para programar cada una.
Introducción teórica
Pasos para la creación de aplicaciones.
1. Esquematizar mental o gráficamente el circuito que se pretende desarrollar.
2. Crear el proyecto conforme a las especificaciones de la tarjeta con su respectiva FPGA
(ver figura 6 y 7).
3. Escribir el código vhdl.
4. Sintetizar el código.
5. Verificar el diagrama esquemático.
6. Realizar el test bench para el archivo vhdl (simular el comportamiento del sistema).
7. Asignar las variables según las especificaciones de pines de la tarjeta que se posea.
8. Realizar el Place & Route.
9. Generar el Programming File.
10. Descargar el archivo con extensión .bit sobre la FPGA.
11. Realizar las pruebas de funcionamiento.
Procedimiento
Parte I: Creación de proyectos con ISE y Spartan-6 LX9 CSG324.
1) La primera aplicación es realizar el código VHDL para sintetizar el funcionamiento de 3
compuertas básicas, ver figura 1.
c) Creación de archivo VHDL (Very High Speed Integrated Circuit Hardware Description
Language).
8) Dé clic derecho sobre la segunda línea (xc6slx9-2csg324) del cuadro superior izquierdo de la
ventana de navegación del proyecto (figura 5).
9) Elija la opción New Source…
10) En la ventana New Source Wizard, seleccione la opción VHDL Module, colóquele un nombre
al archivo en el campo File Name:, este será el nombre que adopte la entidad dentro de nuestro
bloque o circuito a describir, verifique que el check box Add to Project esté activo y dé clic en
el botón Next tal como lo indica la figura 6.
Figura 7: Creación de archivos, paso 11), elección de entradas y salidas del componente.
12) La figura 8 muestra un breve resumen de los atributos seleccionados en la creación del modulo
VHDL. Dé clic izquierdo en el botón Finish.
13) Se mostrará en el editor de código VHDL de ISE, en dicha ventana modifique el código VHDL
para que se vea igual al mostrado a continuación (Código 1):
library IEEE; --Uso de Librería IEEE
use IEEE.STD_LOGIC_1164.ALL;--Estándares lógicos de la Librería IEEE
d) Sintetizar el código.
Este proceso permite:
Verificar la sintaxis del código VHDL escrito.
La conversión del código VHDL a un circuito digital equivalente ya sea a LUT’s o circuitos
MSI.
Abrir una vista del circuito digital equivalente al código VHDL escrito.
14) De clic izquierdo sobre el nombre del archivo VHDL debajo de la línea xc6slx9-2csg324, del
cuadro superior izquierdo de la ventana de navegación del proyecto (figura 9) para habilitar las
funciones de este archivo en el cuadro inferior.
15) En el cuadro inferior izquierdo, de clic derecho sobre la opción Synthetize – XST, elija la
opción Run del menú desplegable.
19) En la ventana desplegable dé clic en el botón Add -> y luego el botón Create Schematic
(figura 12).
25) Dé clic en el botón Add -> y luego el botón Create Schematic (figura 14).
26) Se desplegará una figura de bloque que al hacer doble clic izquierdo sobre la misma mostrará
el circuito equivalente al código VHDL.
1
LUT: Look-Up Tables (Tabla de consulta).
g) Realizar el test bench para el archivo vhdl (simular el comportamiento del sistema).
27) De clic derecho sobre la segunda línea (xc6slx9-2csg324) del cuadro superior izquierdo de la ventana
de navegación del proyecto (figura 5).
28) Elija la opción New Source…
29) En la ventana New Source Wizard, seleccione la opción VHDL Test Bench, colóquele un nombre al
archivo en el campo File Name:, la extensión del archivo será .vhd al igual que al archivo del código
fuente en VHDL por lo que si escribe el mismo nombre para el test bench estará intentando sobre escribir
el código VHDL, por lo que se recomienda agregar _tb al final del nombre del archivo del test bench
para diferenciarlo del código VHDL.
30) Verifique que el check box Add to Project este activo y de clic en el botón Next tal como lo indica la
figura 15.
33) Comente o elimine las partes referidas al clock porque el circuito de la figura 7 no utiliza el
reloj. De tal manera que el código VHDL del Test Bench se vea como el siguiente:
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
--Inputs
signal a : std_logic := '0'; signal b : std_logic := '0';
--Outputs
signal x : std_logic; signal y : std_logic; signal z : std_logic;
BEGIN
-- Instantiate the Unit Under Test (UUT) uut: SDI111_G1_EJ1 PORT MAP (
a => a, b => b, x => x, y => y, z => z
);
-- Stimulus process stim_proc: process begin
-- hold reset state for 10 ns. wait for 10 ns;
-- insert stimulus here a <= '0';
b <= '0';
wait for 10 ns;
a <= '0';
b <= '1';
wait for 10 ns;
a <= '1';
b <= '0';
wait for 10 ns;
a <= '1';
b <= '1';
wait for 10 ns; wait;
end process;
END;
Código 2: Código VHDL del Test Bench, archivo SDI111_G1_EJ1_tb.vhd, paso 33).
37) En el cuadro inferior izquierdo de clic derecho sobre la opción Simulate Behavioral Model y
elija la opción Process Properties… Esto abrirá una ventana en la que fijaremos el valor de
Simulation Run Time a 50 ns, tal como se indica en la figura 20.
38) En el cuadro inferior izquierdo de clic derecho sobre la opción Simulate Behavioral Model y
elija la opción Run. Esto abrirá el software Isim donde podrá corroborar las respuestas en el
diagrama de tiempos de la figura 21.
39) De clic en el icono Zoom to Full View y verifique que a medida que las entradas (a, b) toman
valores cada 10 ns las salidas obtienen el valor correspondiente a la tabla de verdad de las
compuertas programadas en las variables x, y, z.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity SDI111_G1_EJ2 is
Port (a, b, c, d: in std_logic;
F: out std_logic);
end SDI_G1_EJ2;
41) Verifique la expresión, tabla de verdad, mapa de Karnaugh y circuito esperado con la
herramienta de ISE, pasos 16 al 21.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
--Inputs
signal a : std_logic := '0';
signal b : std_logic := '0';
signal c : std_logic := '0';
signal d : std_logic := '0';
--Outputs
signal F : std_logic;
BEGIN
-- Instantiate the Unit Under Test (UUT)
uut: SDI111_G1_EJ2 PORT MAP (
a => a,
b => b,
c => c,
d => d,
F => F
);
-- Stimulus process
stim_proc: process
begin
-- hold reset state for 10 ns.
wait for 10 ns;
Figura 25: Diagrama de tiempo de funcionamiento del circuito, Función lógica, ejemplo 2.
i) Tabla de verdad.
Entradas Salidas
# A B C D M O
0 0 0 0 0 0 1
1 0 0 0 1 0 1
2 0 0 1 0 0 1
3 0 0 1 1 0 1
4 0 1 0 0 0 0
5 0 1 0 1 1 1
6 0 1 1 0 0 0
7 0 1 1 1 1 1
8 1 0 0 0 0 1
9 1 0 0 1 0 1
10 1 0 1 0 1 1
11 1 0 1 1 1 1
12 1 1 0 0 0 0
13 1 1 0 1 1 1
14 1 1 1 0 1 0
15 1 1 1 1 1 1
Tabla 1: Tabla de verdad del ejemplo SDI111_G1_EJ3.vhd.
42) Para este ejemplo se considerará que las variables se escribirán como vectores de la siguiente
manera:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
43) Escriba la expresiones del circuito esperado (haciendo uso de mapas de Karnaugh) para la
tabla de verdad de SDI111_G1_EJ3.
44) Dibuje el circuito de las expresiones obtenidas en el punto anterior.
CD
00 01 11 10
AB
00 0 1 3 2
01 4 5 7 6
11 12 13 15 14
10 8 9 11 10
CD
00 01 11 10
AB
00 0 1 3 2
01 4 5 7 6
11 12 13 15 14
10 8 9 11 10
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
-- Component Declaration for the Unit Under Test (UUT) COMPONENT SDI111_G1_EJ3
PORT(
Data_In : IN std_logic_vector(3 downto 0); Data_Out : OUT std_logic_vector(1 downto 0)
);
END COMPONENT;
--Inputs
signal Data_In : std_logic_vector(3 downto 0) := (others => '0');
--Outputs
signal Data_Out : std_logic_vector(1 downto 0);
BEGIN
-- Instantiate the Unit Under Test (UUT) uut: SDI111_G1_EJ3 PORT MAP (
Data_In => Data_In, Data_Out => Data_Out
);
-- Stimulus process
stim_proc: process begin
-- insert stimulus here
Data_In <= "0000"; wait for 50 ns; Data_In <= "0001"; wait for 50 ns; Data_In <= "0010"; wait for 50 ns; Data_In <= "0011"; wait for 50 ns; Data_
wait;
end process; END;
Figura 27: Asignación de tiempo a simular en el Test Bench, Tabla de verdad, ejemplo 3.
Figura 28: Diagrama de tiempo de funcionamiento del circuito, Tabla de verdad, ejemplo 3.
Investigación complementaria
Para los siguientes enunciados elabore:
a) El código VHDL.
b) El Test Bench y diagrama de tiempos de la simulación.
c) Mapas de Karnaugh.
d) Tablas de verdad cuando corresponda.
1. Construya un decodificador de binario a siete segmentos que cumpla con la siguiente tabla de
verdad.
A B C D a b c d e f g
0 0 0 0 1 1 1 1 1 1 0
0 0 0 1 0 1 1 0 0 0 0
0 0 1 0 1 1 0 1 1 0 1
0 0 1 1 1 1 1 1 0 0 1
0 1 0 0 0 1 1 0 0 1 1
0 1 0 1 1 0 1 1 0 1 1
0 1 1 0 1 0 1 1 1 1 1
0 1 1 1 1 1 1 0 0 0 0
1 0 0 0 1 1 1 1 1 1 1
1 0 0 1 1 1 1 1 0 1 1
1 0 1 0 1 1 1 1 1 0 1
1 0 1 1 0 0 1 1 1 1 1
1 1 0 0 0 0 0 1 1 0 1
1 1 0 1 0 1 1 1 1 0 1
1 1 1 0 1 1 0 1 1 1 1
1 1 1 1 1 0 0 0 1 1 1
2. La familia Fernández está formada por mamá (M), papá (P), la nena (N) y Junior (J), ellos
tienen problemas de decisión ya que casi nunca consiguen ponerse de acuerdo en nada le piden
a usted desarrollar un circuito digital que les ayude a decidir donde ir en su salida de paseo este
fin de semana (solución única). Pero para tomar la decisión le dan los siguientes criterios a los
cuales debería obedecer la lógica del circuito.
Si el circuito proporciona un uno van al Lago de Coatepeque y si es cero van al Pital en
Chalatenango.
Las decisiones se toman por mayoría, es decir la mitad más uno.
Ellos quieren que al emitir su decisión un led les indique a cuál de los dos lugares irán.
En caso de empate la decisión de la mamá más la del papá es la que se toma. En caso de
que ambos coincidan en la misma decisión se toma la decisión opuesta a la de ambos.
M P N J F1
0 0 0 0
0 0 0 1
0 0 1 0
0 0 1 1
0 1 0 0
0 1 0 1
0 1 1 0
0 1 1 1
1 0 0 0
1 0 0 1
1 0 1 0
1 0 1 1
1 1 0 0
1 1 0 1
1 1 1 0
1 1 1 1
3. H F,G, H , I , J
0,3,4,7,10,15,19,22,27,29,30
FGHIJ
FA, B,C, D, E
1,4,9,10,12,17,18,19,23,27 0,3,11
ABCDE
ABCDE
5,7,14
ABCD ABCD
Bibliografía
1. http://systemonfpga.blogspot.com/2015_01_01_archive.html
2. http://www.xilinx.com/products/boards-and-kits/1-3i2dfk.html
3. All Programmable Low-End Portfolio Product Selection Guide:
http://www.xilinx.com/publications/prod_mktg/low-end-portfolio-product-selection-
guide.pdf
4. Xilinx® Spartan®-6 FPGA LX9 MicroBoard User Guide:
http://opencores.org/websvn,filedetails?repname=openmsp430&path=%2Fopenmsp430
%2Ftrunk%2Ffpga%2Fxilinx_avnet_lx9microbard%2Fdoc%2FXilinx_Spartan-
6_LX9_MicroBoard_Rev_B2_Hardware_User_Guide.pdf
5. http://www.xilinx.com/products/silicon-devices/fpga/spartan-6.html
6. http://community.em.avnet.com/t5/Spartan-6-LX9-MicroBoard/LX9-Pinout-
Diagram/td-p/3749
7. TE CONNECTIVITY INTERCONNECT SOLUTIONS FOR THE XILINX®
SPARTAN®-6 FPGA LX9 MICROBOARD
http://www.em.avnet.com/en-us/design/drc/Documents/Xilinx/TE-AES-S6MB-LX9-G-
13.2-V2.pdf
8. Configuring the Xilinx Spartan - 6 LX9 MicroBoard:
http://www.em.avnet.com/Support%20And%20Downloads/Avnet_Spartan-
6_LX9_MicroBoard_Configuration_Guide_v1_1.pdf
9. Tutorial 1 Creating an AXI – based Embedded System:
http://www.eeworld.com.cn/uploadfile/Xilinx/uploadfile/201107/20110712024756897.
pdf
10. Spartan-6 Family Overview:
http://www.xilinx.com/support/documentation/data_sheets/ds160.pdf
11. Spartan-6 FPGA Data Sheet: DC and Switching Characteristics:
http://www.xilinx.com/support/documentation/data_sheets/ds162.pdf
12. Spartan6 Product Brief:
http://www.xilinx.com/publications/prod_mktg/Spartan6_Product_Brief.pdf
13. Spartan-6 FPGA Packaging and Pinouts: Product Specification:
http://www.xilinx.com/support/documentation/user_guides/ug385.pdf
14. Driver (C:\Xilinx\14.7\ISE_DS\common\bin\nt64\digilent):
http://forums.xilinx.com/t5/General-Technical-Discussion/xilinx-spartan-6-lx9-
microboard-ise-driver/m-p/317679#M13784
15. http://xgoogle.xilinx.com/search?output=xml_no_dtd&ie=UTF-8&oe=UTF-
8&client=support&proxystylesheet=support&site=Answers_Docs&filter=0&resultsVie
w=category&tab=sd&num=1000&sortBy=displayOrder&show_dynamic_navigation=1
&sort=date%3AD%3AR%3Ad1&documentClass=Document&requiredfields=-
Archived%3Atrue&getfields=*&q=+inmeta:Document%2520Type%3DPackage%2520
Specifications+inmeta:Devices%3DSpartan%252D6+inmeta:Document%2520Class%3
DDocument+inmeta:Product%2520Type%3DSilicon%2520Devices&dnavs=inmeta:Do
cument%2520Type%3DPackage%2520Specifications+inmeta:Devices%3DSpartan%2
52D6+inmeta:Document%2520Class%3DDocument+inmeta:Product%2520Type%3D
Silicon%2520Devices
16. http://xgoogle.xilinx.com/search?output=xml_no_dtd&ie=UTF-8&oe=UTF-
8&client=support&proxystylesheet=support&site=Answers_Docs&filter=0&resultsVie
w=category&tab=sd&num=1000&sortBy=date&show_dynamic_navigation=1&sort=d
ate%3AD%3AR%3Ad1&documentClass=Document&requiredfields=- Archived
%3Atrue&getfields=*&q=+inmeta:Document%2520Type%3DApplication%2
520Notes+inmeta:Devices%3DSpartan%252D6+inmeta:Document%2520Class%3DDo
cument+inmeta:Product%2520Type%3DSilicon%2520Devices&dnavs=inmeta:Docum
ent%2520Type%3DApplication%2520Notes+inmeta:Devices%3DSpartan%252D6+in
meta:Document%2520Class%3DDocument+inmeta:Product%2520Type%3DSilicon%
2520Devices
17. http://www.fpga4fun.com/JTAG.html
18. http://linuxzone.es/crear-lanzadores-dentro-de-los-menus-de-gnome/