Escolar Documentos
Profissional Documentos
Cultura Documentos
2
INTRODUCCIÓN AL ENTORNO ISE DE XILINX
1. OBJETIVOS
2. JUSTIFICACIÓN
3. MARCO TEÓRICO
En la actualidad existen muchos lenguajes de descripción hardware, pero uno de los más
extendidos es el VHDL (Very High Speed Hardware Description Language). Se desarrolló
con la idea de que sirviera como un lenguaje estándar de descripción de circuitos. Esto
significa que el código creado en VHDL puede ser utilizado con independencia del fabricante
o la tecnología que elijamos.
Fue en 1984 cuando el IEEE propuso su estándar. Se diseñaron varias versiones con la
colaboración de la industria y las universidades, pero fue finalmente en diciembre de 1987
cuando el IEEE publicó el estándar IEEE Std 1076 – 1987 que más adelante sería conocido
como VHDL’87.
Esta primera versión pronto mostró algunas carencias, debido fundamentalmente a la rápida
evolución de las herramientas que utilizaban VHDL. Por eso, en 1993 el IEEE, en base a las
Página 1 de 20
experiencias recogidas del uso del VHDL’87 planteó un segundo estándar, el IEEE Std 1076
– 1993, más comúnmente conocido como VHDL’93.
Conviene resaltar que VHDL y otros lenguajes HDL tienen capacidad de expresar más cosas
de las que las herramientas actuales son capaces de sintetizar. Incluso existen
construcciones que tienen sentido para la verificación de un diseño o su descripción a muy
alto nivel, pero que no tienen sentido en un chip, como el acceso a ficheros en disco o los
bucles “for”. Por tanto, el hecho de que un diseño pueda simularse no significa que pueda
sintetizarse. De hecho, según se avanza en el diseño y éste se va refinando, hay que
restringirse a un subconjunto del lenguaje y a unas ciertas reglas de codificación que la
herramienta de síntesis pueda comprender. Es lo que se denomina código sintetizable.
El entorno de desarrollo está compuesto por un conjunto de herramientas que nos van a
permitir:
La mayor parte de las herramientas son de Xilinx y se hallan integradas en el paquete Xilinx
ISE WebPack. Sin embargo, este paquete no incluye el simulador, que debe obtenerse como
una herramienta independiente, en caso de ser necesaria su utilización.
Página 2 de 20
3.2. Project navigator
La ventana principal por defecto del Project Navigator consta de tres sub – ventanas, dos a la
izquierda y una abajo, que rodean el área de trabajo. Es en el área de trabajo donde se
editan los ficheros de VHDL y aparece la interfaz de varias de las herramientas. Por defecto,
en el área de trabajo las ventanas se apilan en forma de cuaderno con separadores, de
forma que en cada momento sólo se ve una ventana. Pinchando el separador de la ventana
de nuestro interés, ésta pasa a primer plano. Otras herramientas, notablemente el simulador,
abren sus propias ventanas independientes.
• Module View: Muestra el nombre del proyecto, el tipo de dispositivo sobre el que se
va a trabajar, así como todos los elementos del proyecto (archivos VHDL,
esquemáticos, diagramas de estados, bancos de pruebas, etc.). Si un elemento en
Página 3 de 20
cuestión posee niveles inferiores de jerarquía se verá que a la izquierda del nombre
aparece un +, si se hace clic sobre él podremos visualizar los niveles de jerarquía.
Para editar un archivo simplemente hay que hacer doble clic sobre el nombre del
mismo.
• Snapshot view: Muestra todos los snapshots. Un snapshot es una copia de solo
lectura del proyecto actual. Se usan para guardar el proyecto antes de emprender
nuevas modificaciones con el fin de recuperarlo si los cambios no dan el resultado
adecuado, o bien, para tener diferentes versiones del proyecto.
Contiene la pestaña de la vista de procesos. Desde aquí se pueden lanzar las acciones
posibles para cada tipo de fuente del proyecto y también comprobar el estado de las ya
realizadas. En general cada acción de la lista requiere la ejecución de las que la preceden,
no obstante, si fuese necesario, el programa lanzaría de forma automática las acciones
previas pertinentes.
Para los ficheros que forman parte de la jerarquía del diseño las acciones posibles son:
• Desing Entry Utilities: nos sirve de comienzo para verificar y simular nuestro diseño.
• Synthesis: una vez que los archivos del diseño han sido creados podemos sintetizar
el diseño. Al hacerlo se revisará la sintaxis y la jerarquía del diseño con el fin de
optimizarlo para la arquitectura de diseño que hemos escogido.
• Implement Design: nos permite convertir nuestro diseño lógico a un formato físico
que puede ser implementado en el dispositivo sobre el que vamos a trabajar ya sea
una CPLD o una FPGA.
• Simulate Behavioral Model: Permite simular el código sin tener que sintetizarlo
antes. Por tanto, no incluye retardos. Útil para verificar el comportamiento lógico
(funcional) del diseño.
Página 4 de 20
• Simulate Post: Simula el diseño después de completar una determinada fase de
síntesis. Al conocer los bloques implicados y su interconexión ya es posible hacer una
estimación precisa de los retardos.
3.2.3. Consola
La consola nos muestra mensajes de información, avisos y errores. Los avisos se resaltan
con una caja amarilla junto al mensaje, mientras que los errores se indican con una caja roja.
En cualquiera de los dos casos si queremos ir a la parte del código en la que se ha producido
el aviso o el error bastará con seleccionar el mensaje y hacer doble clic sobre él.
A la hora de crear un nuevo proyecto se debe elegir el modo de representación para el nivel
más alto de la jerarquía del diseño: esquemático o HDL. A continuación, se detallan los
pasos a seguir en cada caso:
Utilizando esquemáticos
• Al pulsar siguiente nos aparece un diálogo que nos pregunta si queremos añadir una
fuente nueva al proyecto o bien una ya existente. Seleccionamos Add New Source.
• Nos aparecerá un diálogo que nos muestra una lista de los diversos tipos de fuente
con los que se puede trabajar. Seleccionamos Schematic. Escribimos el nombre del
diseño en File Name y hacemos click en Siguiente.
Página 5 de 20
Utilizando código VHDL
• Al pulsar siguiente nos aparece un diálogo que nos pregunta si queremos añadir una
fuente nueva al proyecto o bien una ya existente. Seleccionamos Add New Source.
• Nos aparecerá un diálogo que nos muestra una lista de los diversos tipos de fuente
con los que se puede trabajar. Seleccionamos VHDL Module. Escribimos el nombre
del diseño en File Name y hacemos click en Siguiente.
• La siguiente ventana nos permite definir las entradas y salidas que tendrá nuestro
módulo, así como el número de bits de que constarán. En Port Name se escribe el
nombre de la entrada o salida, en Direction indicamos si va a ser una entrada, una
salida o una entrada – salida, y finalmente en MSB y LSB indicamos el número de bits.
Una vez definidas todas las entradas/salidas pulsamos Siguiente.
Página 6 de 20
Figura 3. Definición de las entradas y salidas que tendrá el módulo.
Al hacerlo se generará automáticamente el código básico en VHDL para definir las entradas
y salidas que tendrá nuestro diseño y que hemos indicado en el paso 6. En este caso vamos
a crear una sencilla puerta “and”. Debido a su sencillez la única línea que es necesario añadir
al código VHDL pre – generado es “S<=A and B”; como se puede apreciar en la siguiente
figura.
Página 7 de 20
3.4. Uso del editor de esquemáticos
Cuando se abre el editor de esquemáticos veremos una ventana principal en blanco que es
donde podremos dibujar el esquemático. A su izquierda hay dos pestañas llamadas Options
y Symbols.
En Options aparecen varias opciones que nos ofrecen la posibilidad de indicar como
queremos que se comporte la interfaz del programa al usar una herramienta en concreto que
hayamos seleccionado, es decir la pestaña Options cambia dependiendo de la herramienta
seleccionada.
• Categories: nos permite elegir el tipo de componentes que queremos que aparezcan
en el siguiente campo (symbols) si seleccionamos all symbols en symbols aparecerán
todos los componentes.
• Symbol Name Filter: en symbols sólo aparecerán los componentes que empiecen por
las letras que aquí escribamos, así, por ejemplo, si tenemos seleccionado all symbols
en Categories y en Symbol Name Filter escribimos en Symbols sólo aparecerán las
puertas and.
Una vez seleccionado el componente solo resta llevar el cursor al lugar de la ventana
principal donde queremos colocarlo y hacer click.
Para unir los componentes entre sí deberemos usar la herramienta wire, esto se puede
seleccionando Add->Wire en el menú principal. Una vez colocados los componentes y
conectados correctamente entre sí, es imprescindible definir bien las entradas y salidas del
esquema, esto se hace mediante la herramienta marcador de entrada/salida (I/O Marker) que
se encuentra en el menú Add. Para definir el marcador debemos unirlo mediante una línea
(Wire) al componente en cuestión y hacer doble click sobre el marcador; nos aparecerá una
ventana en la que podremos definir la entrada – salida escribiendo el nombre en la celda
Name – Value y el tipo de puerto (entrada, salida o bidireccional) en PortPolarity – Value.
Si queremos dar nombres a los cables, para facilitar su identificación, hay que seleccionar
Add->Net_Name en el menú principal. Para dar nombre al cable debemos escribirlo en la edit
Página 8 de 20
box que aparece en la pestaña Options y seguidamente hacer click sube el cable en
cuestión.
Para verificar la sintaxis debemos ir a la ventana Processes for Source y hacer doble click en
el icono Synthetisize – XTS, automáticamente se revisará la sintaxis y aparecerá una marca
verde junto al icono si no han aparecido errores o warnings; si hay algún warning aparecerá
una exclamación amarilla y si por contra hay errores veremos una "x" roja. De todos modos,
una forma más rápida y sencilla de ver si hemos cometido algún error en la sintaxis es hacer
doble click en Create Schematic Symbol el cual se encuentra en Design Entry Utilities. Una
vez que la sintaxis es correcta podemos pasar a la simulación.
Página 9 de 20
Para simular lo más cómodo es comenzar creando un banco de pruebas donde
introduciremos los valores que se les aplicarán a las entradas y en función de los cuales se
obtendrá la salida.
• Hacer click con el botón derecho en la pestaña Module View en Sources in Proyect y
seleccionar New Source.
• En la ventana New Source escogemos Test Bench Waveform, damos nombre al
archivo y pulsamos Siguiente.
• Seleccionamos el archivo sobre el que queremos realizar la simulación. Para terminar,
hacemos click en Siguiente y Finalizar.
En la ventana Initialize Timing hay que especificar los parámetros de tiempos que se usarán
en la simulación. Si el diseño que vamos a simular es secuencial, y en consecuencia usa una
señal de reloj, deberemos seleccionar Single Clock y fijar sus condiciones de funcionamiento.
Página 10 de 20
Figura 7. Generación del testbench.
Al hacer click en Ok nos aparecerá el banco de pruebas donde podremos ver que las
entradas tienen marcas azules y las salidas marcas amarillas y todas están inicializadas a 0.
Ahora debemos definir los valores de las entradas y salidas para poder probar el diseño, para
ello si hacemos click en la zona coloreada de cada celda (azul para las entradas, amarillo
para las salidas) podremos cambiar el valor. En el caso de que la entrada o salida sea un
vector veremos que al hacer click nos aparece un botón en el que pone pattern (en el caso
de que la entrada o salida sea de un bit deberemos hacer doble clic para que salga el botón
pattern) y una caja donde escribir un valor; el botón pattern sirve para definir un patrón en
esa entrada, de forma que, por ejemplo, podríamos hacer que se asignaran valores a partir
de uno dado y se fueran incrementando en uno en cada ciclo de tiempo; por contra si sólo
queremos dar un valor a esa celda escribiremos el número y presionaremos enter.
Cuando hayamos terminado de definir los valores de las entradas y salidas deberemos
guardar el diseño haciendo click en el icono del diskete en la ventana del banco de pruebas.
Al hacer esto veremos que en la ventana Sources in Project se nos añade un nuevo archivo,
si lo seleccionamos aparecerán en Processes for Source los procesos o funciones para ese
archivo que como veremos están todos relacionados con la simulación. Si hacemos doble
click sobre Simulate Behavioral Model se abrirá el Model Sim y se procederá a la simulación.
Página 11 de 20
Figura 8. Simulación con ModelSim XE de una puerta “and”.
La ventana principal nos da información de los eventos que ocurren en la simulación y nos
informará al final si la simulación ha sido correcta siempre y cuando así lo definamos en el
código VHDL para la simulación.
En la ventana wave podremos ver como varían las entradas y salidas del sistema en el
tiempo. En el caso de que simulemos un diseño sin utilizar ningún banco de pruebas la
ventana signals nos será útil para dar valores a las señales.
A continuación, se describirán cada una de las etapas o fases que conformar el flujo de
diseño para la lógica programable; en la figura 9 se ve una representación gráfica del
proceso.
Página 12 de 20
Figura 9. Flujo de diseño para lógica programable.
• Entrada del diseño: Corresponde a la descripción del sistema a implementar ya sea
con lenguaje de alto nivel (VHDL), en forma esquemática, o ambos. Esto se almacena
en un archivo con extensión .vhd que sirve de entrada a la siguiente etapa.
• Síntesis: Esta herramienta permite realizar una revisión de sintaxis del código fuente
.vhd de nuestro proyecto y genera un reporte de advertencias y errores en caso de
existir.
• Banco de prueba: Para poder simular el circuito primero se crea un banco de pruebas
(testbench waveform) donde se definen los estímulos de entrada, en función de los
cuales se obtendrá la salida que deberá coincidir con el valor esperado de acuerdo a
la funcionalidad del circuito. Estos estímulos incluyen señales de reloj, contadores
(ascendentes y descendentes), etc.
Página 13 de 20
• Archivo de restricciones: Este archivo consta de las especificaciones de las
terminales del FPGA, el tipo de señal que se va a emplear, voltajes y la señalización
que se realizará al momento de descargar el archivo a la tarjeta de desarrollo.
Página 14 de 20
Figura 10. Localización de las herramientas dentro del cuadro processes.
4. TRABAJO PREVIO
a. Consultar documentos que detallen el uso del entorno de desarrollo ISE de Xilinx, según la
versión con la que se va a trabajar y según los requerimientos en el desarrollo de la
práctica en aspectos como: asignación de pines y simulación temporal, por mencionar solo
algunos.
Página 15 de 20
5. DESARROLLO DE LA PRÁCTICA
entity convertidor is
Port ( b : in STD_LOGIC_VECTOR (3 downto 0);
g : out STD_LOGIC_VECTOR (3 downto 0));
end convertidor;
begin
with b select
Página 16 de 20
g <= "0000" when "0000",
"0001" when "0001",
"0011" when "0010",
"0010" when "0011",
"0110" when "0100",
"0111" when "0101",
"0101" when "0110",
"0100" when "0111",
"1100" when "1000",
"1101" when "1001",
"1111" when "1010",
"1110" when "1011",
"1010" when "1100",
"1011" when "1101",
"1001" when "1110",
"1000" when "1111",
"0000" when others;
end Arq_convertidor;
Nota: Una vez verificado el código, realizar el flujo de diseño para lógica programable que se presentó al inicio
de este documento.
Ejemplo 2: Comparador de magnitud
Antecedentes: Los circuitos comparadores son sistemas combinatorios que comparan la
magnitud de dos números binarios de 𝑛 bits e indican cuál de ellos es mayor, menor o si
existe igualdad entre ellos. Dependiendo del número de bits a comparar, será la relación del
comparador. Existen comparadores de 4 bits y de 8 bits. Además de las correspondientes
entradas de datos, disponen de tres entradas más que pueden informar sobre una situación
anterior, y que se usan para conectar en cascada distintos comparadores, de manera que
pueda construirse uno de mayor capacidad.
Página 17 de 20
entity comparador is
end comparador;
begin
process (A,B)
begin
if (A = B) then
Z <= "001";
elsif (A < B) then
Z <= "100";
else
Z <= "010";
end if;
end process;
end Arq_comparador;
Nota: Una vez verificado el código, realizar el flujo de diseño para lógica programable que se presentó al inicio
de este documento.
Ejemplo 3: Multiplicador de magnitud
Antecedentes: Es un circuito digital capaz de multiplicar dos palabras de 𝑚 y 𝑛 bits para
obtener un resultado de 𝑛 + 𝑚 bits. A veces el tamaño del resultado está limitado al mismo
tamaño que las entradas. Los hay de dos tipos:
• Multiplicador paralelo. Es el más rápido y está formado por una matriz de lógica
combinatoria que, a partir de todas las combinaciones posibles de las entradas,
genera sus productos a la salida.
• Suma y desplazamiento. Está formado por un sumador y un registro de
desplazamiento. El sumador comienza con el valor del multiplicando y lo va
desplazando y le vuelve a sumar el multiplicando cada vez que el bit correspondiente
del multiplicador vale 1. El tiempo en realizar esta operación es igual al número de bits
por el periodo de la señal de reloj.
entity multiplicador is
Página 18 de 20
begin
P <= A * B;
end Arq_multiplicador;
Nota: Una vez verificado el código, realizar el flujo de diseño para lógica programable que se presentó al inicio
de este documento.
Restricciones del usuario para los ejemplos 1, 2 y 3
Página 19 de 20
6. EVALUACIÓN
Nota 1: La realización de estos ejercicios de evaluación pueden requerir de conceptos previos impartidos en el
curso de “Diseño Digital”.
7. BIBLIOGRAFÍA
Atlys Spartan-6 FPGA Development Board - Lógica Programable. (n.d.). Retrieved March 6,
2018, from https://sites.google.com/site/logicaprogramable/calculadoras/fpga/digilent---
atlys-spartan-6-fpga-development-board
Castedo, L. (n.d.). Prácticas De Microelectrónica. Madrid: Universidad Politécnica De Madrid.
Retrieved from
http://www.elai.upm.es/webantigua/spain/Asignaturas/uElectronica/archivos/pue.pdf
Domínguez Gómez, M. Á. (2011). Introducción Al Software ISE (Integrated Software
Environment) De Xilinx. España: Universidad De Vigo. Retrieved from
http://mdgomez.webs.uvigo.es/SED/Guia_Inicio_ISE.pdf
Rangel Magdaleno, J. de J., & Romero Troncoso, R. de J. (2006). Manual De Prácticas -
Electrónica Digital II. México: Universidad De Guanajuato. Retrieved from
http://www.hspdigital.org/Documentos/HSP/EDII/LabED-II.pdf
Reyes Barranca, M. A., Arellano Cárdenas, O., & Flores Nava, L. M. (2014). Electrónica
Digital - Prácticas De Laboratorio. Madrid: Universidad Politécnica De Madrid. Retrieved
from http://www.vlsilab.cinvestav.mx/files/Practicas_Spartan_6.pdf
Página 20 de 20