Está en la página 1de 38

INSTITUTO DE ELECTRÓNICA Y

MECATRÓNICA

REPORTE TÉCNICO

Tutorial para el Diseño y Simulación de un Circuito Digital con VHDL,


Síntesis e Implementación en un FPGA

Para ser empleado en los cursos: Sistemas Digitales y Electrónica Digital II

Elaborado por:

M. C. Felipe Santiago Espinosa


Dr. Enrique Guzmán Ramírez

Noviembre de 2011
Tutorial FPGAs y VHDL UTM/2012-A

1. Introducción

En este documento se presentan de manera detallada los pasos a seguir para implementar un
sistema digital en la tarjeta de desarrollo Nexys 2 de Digilent, desde el planteamiento del
problema hasta su puesta en marcha y verificación en la tarjeta, la cual contiene un FPGA Spartan-
3E XC3S500E de Xilinx. El ejemplo que se desarrolla es bastante simple, porque el objetivo del
tutorial no es resolver un problema complejo, sino ilustrar el proceso de desarrollo.

Para el desarrollo del tutorial se requiere de las siguientes herramientas de Software:

Active-HDL versión 6.2: Herramienta desarrollada por Aldec, es empleada para la captura y
simulación de las descripciones en VHDL.

ISE 12.1i de Xilinx: Es un ambiente integrado de desarrollo desde el que se invocan diferentes
herramientas, conforme se van requiriendo. Se utiliza para la síntesis, implementación y
creación del archivo de descarga. También puede utilizarse para programar al FPGA si se
emplea una interfaz conocida como JTAG.

Adept de Digilent: Es una utilería que permite programar a los FPGAs en algunas tarjetas
desarrolladas por Digilent, a través del puerto USB.

Para el Active-HDL y el ISE actualmente existen versiones más recientes, se ocuparán las que se
han citado porque emplean menos recursos en su instalación y son suficientes para las
aplicaciones a desarrollar.

2. Planteamiento del problema

Se desea diseñar e implementar un comparador de 4 bits: Un circuito que como entradas reciba
dos números A y B de 4 bits y como salidas indique si A > B, A < B o A = B, esto se muestra en la
figura 1.

4 bits A A> B

A= B

4 bits B A< B

Figura 1. Circuito a implementar

3. Diseño con VHDL

Para el diseño y simulación se utilizará la herramienta Active-HDL versión 6.2, desarrollada por
Aldec, cuyo Icono de acceso directo se muestra en la figura 2.

1
Tutorial FPGAs y VHDL UTM/2012-A

Figura 2. Acceso directo para el programa Active-HDL 6.2

Este programa organiza los diseños en espacios de trabajo (workspace) si es la primera vez que se
ejecuta, deberá crearse un nuevo espacio de trabajo, en caso contrario podrá usarse un espacio de
trabajo existente.

En la figura 3 se observa cómo, aunque existan algunos espacios de trabajo, siempre es posible
iniciar con uno nuevo.

Figura 3. Iniciando con el programa Active-HDL

Un espacio de trabajo puede contener diversos diseños independientes. Si es la primera vez que
trabaja con esta herramienta, es conveniente iniciar con un nuevo espacio de trabajo propio. Al
cual deberá asignársele un nombre, en este caso se le puso “tutorial” (figura 4).

Figura 4. Iniciando con un nuevo espacio de trabajo

2
Tutorial FPGAs y VHDL UTM/2012-A

Si se abre un espacio de trabajo existente, automáticamente se abre el último diseño elaborado.


Para los espacios de trabajo nuevos, se presenta el asistente para iniciar con nuevos diseños, el
asistente inicia con la ventana mostrada en la figura 5.

Figura 5. Creando un diseño en el espacio de trabajo

La primera opción se usa cuando ya se cuenta con módulos que se agregarán al diseño. La segunda
es para importar un diseño completo.

La última opción es necesaria para nuevos diseños, ésta es la opción que debe seleccionarse y
después continuar con el paso siguiente.

Posteriormente se deben definir algunas características del diseño relacionadas con las
herramientas que se cuenten para síntesis e implementación, y al tipo de FPGA sobre el cual se
realizará la descarga. Pero como esta versión de Active-HDL es muy previa a las nuevas
herramientas de Xilinx, no es posible relacionarlas, por ello, el Active-HDL sólo será utilizado para
describir y simular al circuito, no se seleccionan herramientas como se muestra en la figura 6.

Figura 6. Diseño sin herramientas de síntesis.

3
Tutorial FPGAs y VHDL UTM/2012-A

Finalmente deberá escribirse el nombre del diseño, en este caso es “comparador” (figura 7).

Figura 7. Nombrando al diseño.

A continuación se tiene disponible al ambiente de trabajo completo de la herramienta, el cual


tiene un aspecto como el que se muestra en la figura 8.

Figura 8. Entorno de trabajo en la herramienta Active-HDL 6.2.

En (1) se tiene un navegador en el que se puede seleccionar una de las 3 opciones siguientes (con
sus cejas inferiores):

 Archivos (Files) – Se muestran los archivos del diseño, organizados bajo un esquema: Espacio
de Trabajo (Workspace)-> Diseños -> Archivo. Un espacio de trabajo puede contener varios
diseños y un diseño a la vez puede contener varios archivos (módulos descritos en VHDL).

4
Tutorial FPGAs y VHDL UTM/2012-A

 Estructura (Structure) – Tiene sentido una vez que los módulos han sido compilados, muestra
la organización del diseño, así como las señales internas, externas y variables de cada uno de
sus módulos, esta opción es útil para simulación.
 Recursos (Recursos) – Muestra la organización en directorios de todos los elementos que se
agreguen al diseño activo.

En (2) se tiene una consola en la que aparecerán mensajes de acuerdo con las actividades
realizadas por el usuario. Es solo con carácter informativo, no es posible introducir información a
través de esta consola.

El espacio en (3) es el área de trabajo, aquí se va a mostrar el contenido de cada uno de los
módulos que integren a un diseño. Archivos con código VHDL, ventanas de simulación, diagramas
de bloques, etc. Basta dar doble clic dentro del navegador para observar el contenido de un
archivo y poder modificarlo.

Para agregar un nuevo archivo al diseño activo, en el navegador se debe dar doble clic en la
opción Add New File ( ), se abre la ventana de la figura 9, para permitir insertar
archivos vacíos, archivos existentes o usar uno de los asistentes (Wizards) para crear uno nuevo.

Figura 9. Ventana para insertar un nuevo archivo.

Lo más simple es emplear uno de los asistentes, específicamente se debe seleccionar al que apoya
para crear un nuevo archivo empleando código VHDL, como se muestra en la figura 10. Los otros
asistentes son para crear diagramas a Bloques (para módulos con mayor jerarquía), diagramas de
estado o archivos en Verilog.

Figura 10. Agregando un nuevo archivo VHDL con ayuda del asistente.

5
Tutorial FPGAs y VHDL UTM/2012-A

Después de aceptar, se va a iniciar con el nuevo módulo, se deja activa la opción de que el código
generado se integre al proyecto y se avanza (figura 11).

Figura 11. Creación de un nuevo archivo VHDL con ayuda del asistente.

A continuación se debe escribir el nombre del archivo a crear y de manera opcional el nombre de
la entidad y de la arquitectura, si estos se omiten, todos los campos tomarán el mismo nombre,
que se decidió fuera “comp4b” (figura 12).

Figura 12. Personalizando al nuevo archivo VHDL.

Luego se deben insertar una a una las señales que formarán parte de la entidad (interfaz), la
inserción de una señal comienza con un clic en el botón new, luego se le pone un nombre, si es un
vector su tamaño se determina con los índices y debe definirse su modo (entrada o salida).

El proceso debe repetirse con cada una de las señales, de acuerdo a las especificaciones del
diseño. En la figura 13 se muestra el entorno mediante el cual se definen los puertos que forman
parte de la entidad, desde que se inserta la primera, hasta que todas han sido incluidas.

6
Tutorial FPGAs y VHDL UTM/2012-A

Figura 13. Ventana para definir los puertos que forman parte de la entidad.

Al concluir con la inserción de señales se presiona el botón finalizar, con lo que se creará la
plantilla del módulo en el archivo comp4b, el cual es automáticamente abierto en el área de
trabajo, como se puede ver en la figura 14.

Figura 14. Plantilla creada a partir del asistente.

Los comentarios de la plantilla pueden completarse para una adecuada documentación. En este
momento ya se tiene descrita la entidad (la interfaz del módulo) y falta por describir su
arquitectura para determinar su comportamiento.

El tipo de dato generado por default es STD_LOGIC, el cual es una ampliación del tipo Bit con la
característica de que maneja otros niveles lógicos, además de falso y verdadero, como
desconocido, alta impedancia, no importa, etc.

Nota: Si se quiere modificar la entidad, para agregar una nueva señal, eliminar una existente o
modificar algún parámetro, debe hacerse manualmente, respetando la sintaxis de VHDL, no es
posible regresar al asistente anterior.

El módulo a desarrollar es un comparador de 4 bits, de manera que su comportamiento puede


determinarse por el proceso siguiente:

7
Tutorial FPGAs y VHDL UTM/2012-A

process( A, B )
begin
mayor <= ‘0’;
menor <= ‘0’;
igual <= ‘0’;
if A > B then
mayor <= ‘1’;
elsif A < B then
menor <= ‘1’;
else
igual <= ‘1’;
end if;
end process;

Existen otras alternativas, sin embargo la descripción funcional es más entendible porque refleja
directamente la solución del problema.

Nota: Después de la palabra process se coloca la lista de sensitividad, son señales que activarán la
ejecución del proceso, cuando ocurra un cambio en cualquiera de ellas. En el caso del comparador,
será activado con cualquier cambio en las señales A y B.

Este código debe insertarse en la arquitectura, sustituyendo al comentario: -- enter your


statements here --, como se muestra en la figura 15.

Figura 15. Inserción de un proceso en la arquitectura.

Una vez insertado el código, se verifica su sintaxis realizando su compilación. Para ello se

selecciona al archivo y se presiona al botón compilar . Otra


alternativa consiste en obtener un menú contextual dando un clic derecho en el archivo y
seleccionar la opción de compilación (compile).

Si no hay errores de sintaxis, el archivo tendrá otro marcador indicando su estado


y la consola reflejará el éxito de la compilación.

8
Tutorial FPGAs y VHDL UTM/2012-A

En caso de que hubiera errores, el archivo en el navegador quedará marcado de manera diferente
y los errores se mostrarán en la consola:

Los errores deben resolverse considerando la sintaxis del lenguaje.

4. Simulación

Una vez realizada la compilación de un módulo es posible simularlo. La simulación se inicializa


seleccionando la opción Initialize Simulation en el menú Simulation, como se muestra en la figura
16.

Figura 16. Inicialización de la simulación.

En este caso se trata de un sólo módulo, por lo que no existen jerarquías, cuando se trata de un
diseño con más módulos, a través de un cuadro de diálogo debe determinarse cuál es el de mayor
jerarquía.

Al iniciar la simulación, el navegador indica cual es el módulo de mayor jerarquía y conmuta


automáticamente las cejas inferiores para mostrar la estructura de los módulos. Si se expande
alguno de los módulos, podrán verse las señales que contiene, como se muestra en la figura 17.

Figura 17. Señales para el simulador.

9
Tutorial FPGAs y VHDL UTM/2012-A

Para simular se requiere agregar una nueva forma de onda (new Waveform) dando clic al botón
, aparecerá una ventana de señales vacía, como la mostrada en la figura 18.

Figura 18. Ventana de señales vacía.

Las señales se agregan activando el menú Waveform y seleccionando la opción Add Signals, con lo
que se obtiene el cuadro de dialogo mostrado en la figura 19. En el que habrá que seleccionar las
señales y dar clic en Add. Una alternativa más simple consiste en seleccionar las señales del
navegador y arrastrarlas a la ventana de señales, en ambos casos, se obtiene el resultado de la
figura 20.

Figura 19. Se agregan las señales para visualizar el comportamiento del comparador.

Figura 20. Señales disponibles para la simulación del comparador.

10
Tutorial FPGAs y VHDL UTM/2012-A

Además del nombre de las señales, se tienen una columna con su valor y otra indicando el tipo de
estímulo. A la derecha hay una zona donde se mostrará el comportamiento temporal de cada
señal. Dado que se está simulando hardware, es necesario ingresar algunas señales a las entradas
y observar las salidas, con ello se evalúa si la funcionalidad del módulo es o no correcta.

Las señales de entrada son proporcionadas a través de estímulos, existen estímulos de diferentes
tipos, adecuados para cada tipo de señal. Los estímulos se obtienen al dar un clic derecho a una
señal de entrada, con ello aparece el menú contextual mostrado en la figura 21, en el cual debe
seleccionarse la opción estímulos (Stimulators).

Figura 21. Menú contextual relacionado con las señales.

Con esto se obtiene el cuadro de dialogo mostrado en la figura 22, el cual de izquierda a derecha
muestra: La señal bajo consideración, la lista de estímulos y las características propias en cada
estímulo (estás se obtienen al seleccionar un estímulo particular y en algunos casos es necesario
introducir diferentes parámetros).

Figura 22. Cuadro de diálogo para definir los estímulos de las señales.

Para el comparador de 4 bits, puesto que A y B son vectores, para ambas señales se elegirán
estímulos tipo contador, sólo que para observar la activación de las diferentes salidas A será
ascendente (Up) y B descendente (Down).

Una vez que se selecciona el tipo de estímulo y se determinan sus parámetros, debe presionarse el
botón Aplicar (Apply) de lo contrario los estímulos no serán considerados.

No es necesario cerrar la ventana de estímulos y abrirla para una nueva señal, es suficiente dar un
clic a la señal y ésta se incorporará a la ventana de estímulos, en la figura 23 se muestra la
inserción de la señal B en la ventana de estímulos.

11
Tutorial FPGAs y VHDL UTM/2012-A

Figura 23. Definición del estímulo para la señal B.

Una vez definidos todos los estímulos debe cerrarse la ventana (Close). Con esto se han
establecido todas las condiciones de simulación, la cual se controla con los botones

, el primero de ellos (Run until) permite simular hasta que se alcance un


tiempo dado, éste se introduce en el cuadro de diálogo de la figura 24, el cual aparece después de
que se presiona al botón.

Figura 24. Definición del intervalo de tiempo de simulación.

El segundo botón (Run for) realiza la simulación por el tiempo indicado en el cuadro de edición
contiguo, este tiempo puede modificarse para proporcionar diferentes intervalos de simulación. El
último botón (Restart) ignora los eventos transcurridos para iniciar nuevamente con la simulación.

Las señales se generan conforme se avanza en la simulación, las entradas están dadas por los
generadores de estímulos y las salidas son una función de las entradas, como se puede ver en la
figura 25.

Figura 25. Simulación del comparador de 4 bits.

Para una mejor visualización de las señales, pueden usarse los botones: cuya
respectiva función es: acercar (zoom in), alejar (zoom out), acercar para llenar la pantalla (zoom to
fit) y acercar un rango de tiempo (zoom range).

12
Tutorial FPGAs y VHDL UTM/2012-A

En la figura 26 se ha alejado la información para mostrar un espacio de tiempo más amplio.

Figura 26. Ajuste para visualizar más resultados de la simulación del comparador de 4 bits.

Para propósitos de documentación, es posible agregar comentarios con explicaciones, esto se


consigue al dar un clic derecho y elegir la opción Insertar Comentario (Insert Comment) del menú
contextual, en la figura 27 se muestra el resultado al agregar comentarios.

Figura 27. Documentando las señales.

Una vez realizada la simulación, puede garantizarse que el módulo funciona y puede procederse
con la Síntesis e Implementación. La simulación se detiene seleccionando la opción End Simulation
en el menú Simulation, resaltado en la figura 28.

Figura 28. Opción para concluir con la simulación.

El archivo con la simulación puede guardarse para documentación (archivo con extensión awf). En
este momento es posible cerrar al Active-HDL dado que para los pasos siguientes se utilizarán
otras herramientas.

5. Síntesis
La síntesis se va a realizar con las herramientas de Xilinx desde un Ambiente Integrado de
Software (Integrated Software Environment – ISE) el cual se inicia con un doble clic en el ícono
mostrado en la figura 29.

13
Tutorial FPGAs y VHDL UTM/2012-A

Figura 29. Acceso directo para el Ambiente Integrado de Software (ISE) de Xilinx.

Al iniciar este programa se mostrará el Tip del Día y luego se abrirá el último proyecto en el que se
ha trabajado (excepto cuando es la primera vez que se ejecuta al software).

Para este tutorial se iniciará con un nuevo proyecto, dando un clic al botón New Project, en los
comandos para proyectos ubicados a la izquierda de la ventana, mostrados en la figura 30. Con
ello se obtendrá el cuadro de diálogo mostrado en la figura 31.

Figura 30. Comandos para los proyectos en el ISE de Xilinx.

Figura 31. Cuadro de diálogo para crear un nuevo proyecto.

Primero se debe seleccionar la ubicación y el directorio de trabajo del nuevo proyecto y luego se le
debe asignar un nombre. El proyecto queda ubicado en una carpeta con el mismo nombre.

En este caso, los proyectos se ubican en la carpeta C:\Practicas y el nuevo proyecto llevará por
nombre comparador. Para el tipo de módulo superior (Top-level source type) se mantiene HDL
porque el comparador ya fue descrito en VHDL. En la figura 32 se ha personalizado el cuadro de
diálogo de la figura 31.

14
Tutorial FPGAs y VHDL UTM/2012-A

Figura 32. Definición del nombre y ubicación del nuevo proyecto.

Una vez que se introduzcan estos datos se debe proceder con el paso siguiente. En el cual se
definen las propiedades del proyecto relacionadas con el FPGA en el que se va a realizar la
descarga, por lo que es necesario seleccionar los valores correctos, incluyendo el lenguaje
preferido. En la figura 33 se muestran los valores que corresponden con el FPGA que está
integrado en las tarjetas de desarrollo Nexys 2.

Figura 33. Información relacionada con el FPGA a utilizar.

Con un clic en Next se obtiene el resumen del proyecto mostrado en la figura 34, si los datos con
correctos, con el botón Finish se finaliza con la creación del proyecto.

15
Tutorial FPGAs y VHDL UTM/2012-A

Figura 34. Resumen del proyecto.

Una vez que se cierra el cuadro de diálogo inicial se podrá ver el entorno de desarrollo de Xilinx, el
cual se muestra en la figura 35.

Figura 35. Entorno de desarrollo de Xilinx.

16
Tutorial FPGAs y VHDL UTM/2012-A

En la figura 35 se distinguen cuatro áreas principales:

1. Área de archivos. Se muestran los diferentes archivos fuente que integran al proyecto, a
manera de un árbol. Si un proyecto está formado por varios módulos, en este árbol los
módulos se ubicarán de acuerdo con sus niveles jerárquicos.
2. Espacio de trabajo. Acá serán abiertos los diferentes archivos fuente, reportes o información
de internet, inicialmente se muestra un resumen de la versión 12 del ISE con ligas para
mostrar sus diferentes características. Para abrir un archivo en el espacio de trabajo, basta con
dar doble clic a su nombre en el área de archivos.
3. Área de procesos. Los procesos que se pueden aplicar a un archivo dependen de su tipo. Una
vez que se selecciona un archivo en el área 1, en esta área se mostrará una lista con los
procesos aplicables, por ello, la lista puede cambiar en función del tipo de archivo.
4. Área de mensajes. Muestra una consola con mensajes indicando las diferentes actividades que
se están realizando. Además, existen otras cejas para mostrar errores o precauciones.

Hasta el momento se tiene un diseño vacío, para agregar un archivo nuevo o copiar uno existente
se debe dar un clic derecho en el área de archivos para obtener el menú contextual que permitirá
hacerlo, en la figura 36 se muestra el citado menú.

Figura 36. Menú contextual para agregar archivos nuevos o existentes.

Puesto que el archivo en VHDL del comparador ya fue realizado, se debe seleccionar la opción Add
Copy of Source, para copiar el archivo en la carpeta del proyecto. Con un clic en esta opción se
abre una ventana de navegación en la que se debe buscar al archivo comp4b.vhd, el cual se
encuentra en la ruta: my_designs -> tutorial -> comparador -> src, esto porque el Active-HDL
trabaja en la carpeta denominada my_designs, el espacio de trabajo se denominó tutorial, en el
cual se inició con un diseño denominado comparador, y todos los diseños dejan los archivos del
código fuente en una carpeta denominada src.

En la figura 37 se muestra el cuadro de diálogo resultante de agregar al archivo, en la columna


Association se debe dejar la opción All, lo que significa que el archivo podrá ser empleado para
síntesis y simulación.

17
Tutorial FPGAs y VHDL UTM/2012-A

Figura 37. Archivo agregado al proyecto.

Al presionar OK en la figura 37 se tendrá al archivo comp4b.vhd en el área de archivos y en el


espacio de trabajo se mostrará un resumen del proyecto. Puesto que el archivo comp4b.vhd está
seleccionado, en el área de procesos se muestran los procesos que son aplicables a un archivo de
este tipo, esto se observa en la figura 38.

Figura 38. Archivo comp4b.vhd agregado al proyecto.

Con el archivo comp4b.vhd seleccionado se realiza su síntesis. Para ello, en el área de procesos se
da un doble clic al proceso de síntesis, si no hay errores de sintaxis, en el proceso de síntesis
aparecerá la indicación de que se realizó con éxito y la consola reflejará el mismo hecho. Ambas
indicaciones se pueden ver en la figura 39.

18
Tutorial FPGAs y VHDL UTM/2012-A

Figura 39. Proceso de síntesis realizado con éxito.

En caso de que hubiera errores, el proceso de síntesis no sería superado y el error se mostraría en
el espacio de la consola, en la ceja de errores también se mostraría la posición del error.

Se esperaría que no ocurrieran errores, dado que el módulo cont4b.vhd ya fue evaluado con el
Active-HDL, sin embargo, si se realiza algún ajuste en el código VHDL que genere algún error, éste
debe resolverse considerando la sintaxis del lenguaje, en la figura 40 se muestra un error al quitar
un ; en el archivo cont4b.vhd.

Figura 40. Errores durante el proceso de síntesis.

6. Simulación en el ISE de Xilinx

El entorno de Xilinx también permite realizar simulaciones, este paso puede omitirse porque ya se
realizó una simulación previa en el Active-HDL, sin embargo, el paso se describe para que se
observen las diferencias que existen entre ambas herramientas.

Para la simulación en el ISE de Xilinx debe agregarse un nuevo archivo, conocido como un banco
de pruebas, con un clic derecho en cualquier parte del área de archivos se obtiene un menú
contextual en el que se debe seleccionar New Source, como se muestra en la figura 41.

19
Tutorial FPGAs y VHDL UTM/2012-A

Figura 41. Opciones para agregar un nuevo archivo al proyecto.

Con ello se muestran los diferentes tipos de archivo que pueden agregarse (figura 42), se
selecciona Test Bench WaveForm (banco de pruebas) y se le agrega un nombre.

Figura 42. Se agrega un banco de pruebas al proyecto.

Un banco de pruebas es un archivo que se asocia con el módulo a simular, proporcionándole


estímulos para sus entradas y el entorno de desarrollo permitirá observar las señales de salida, el
banco de pruebas no forma parte de la implementación final en la tarjeta. La relación entre el
banco de pruebas y el comparador se muestra en la figura 43.

BANCO DE PRUEBAS

4 bits A A> B
Estímulos
Visualización
para las
A= B de las
entradas
salidas
4 bits B A< B

Figura 43. Relación del comparador con el banco de pruebas.

Por lo tanto, al presionar el botón de siguiente, se asocia al banco de pruebas con el comparador.

20
Tutorial FPGAs y VHDL UTM/2012-A

Figura 44. Asociación del banco de pruebas con el módulo a simular.

Al presionar siguiente se muestra un resumen en el cual se debe presionar finalizar, con lo que se
crea un archivo en VHDL en el que aparece el módulo a simular como un componente. La Entidad
en este archivo es nula, dado que sólo sirve para simulación, con código VHDL deben definirse los
estímulos para las señales de entrada.

Los estímulos son señales que cambian a lo largo del tiempo, por lo que se debe definir su estado
a lo largo del tiempo de prueba. Para este ejemplo, básicamente se utilizan contadores, la señal A
va aumentando y la señal B disminuyendo. Si el circuito fuera secuencial, también se debe definir
el comportamiento de la señal de reloj.

Por lo tanto, es necesario modificar al archivo test_comp4b.vhd para que quede de la siguiente
manera:

--------------------------------------------------------------------------------
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_unsigned.ALL; -- Se agrega para operaciones aritméticas

ENTITY test_comp4b IS
END test_comp4b;

ARCHITECTURE behavior OF test_comp4b IS

-- Declaración del Componente para la Unidad Bajo Prueba


COMPONENT comp4b
PORT(
A : IN std_logic_vector(3 downto 0);
B : IN std_logic_vector(3 downto 0);
mayor : OUT std_logic;
menor : OUT std_logic;
igual : OUT std_logic
);
END COMPONENT;

-- Entradas
signal A : std_logic_vector(3 downto 0) := (others => '0');
signal B : std_logic_vector(3 downto 0) := (others => '0');

21
Tutorial FPGAs y VHDL UTM/2012-A

-- Salidas
signal mayor : std_logic;
signal menor : std_logic;
signal igual : std_logic;

BEGIN

-- Instancia la Unidad Bajo Prueba (Unit Under Test)


uut: comp4b PORT MAP (
A => A,
B => B,
mayor => mayor,
menor => menor,
igual => igual
);

-- Proceso para los estímulos


stim_proc: process
begin
-- Estado inicial, por 100 ns
A <= "0000";
B <= "0000";
wait for 100 ns;

for i in 0 to 15 loop
A <= A + 1; -- Estímulos para los datos de entrada
B <= B - 1;
wait for 100ns;
end loop;

wait; -- Se mantiene inactivo

end process;

END;

El banco de pruebas debe seleccionarse en el área de archivos para verificar su sintaxis y proceder
con la simulación. Si no aparece debe cambiarse a la vista de simulación en la parte superior de la
misma área: . Con el archivo seleccionado, se verifica su sintaxis
en el área de procesos y si no hay errores, se puede iniciar con la simulación. En la figura 45 se
muestran ambos procesos.

Figura 45. Procesos para un banco de pruebas.

Si la sintaxis correcta, se procede con la simulación del comportamiento del módulo VHDL, al dar
un clic en la opción Simulate Behavioral Model se abrirá la aplicación ISim, el simulador incluido en
el ISE. En la figura 46 se muestra la simulación del Comparador, sin embargo, para ese resultado se
han avanzado otros ciclos de simulación y se han realizado los ajustes necesarios en el diagrama
de tiempos para visualizar diferentes combinaciones.

22
Tutorial FPGAs y VHDL UTM/2012-A

Figura 46. Simulación del comparador.

Para concluir con la simulación y cerrar la aplicación ISim, se teclea el comando exit en la consola
del programa (parte inferior de la ventana), con lo cual se regresa al entorno del ISE.

El banco de pruebas queda disponible para cuando se requiera regenerar la simulación.

7. Modelos de Hardware

Con la herramienta de trabajo, después de haber realizado la síntesis, se pueden observar los
componentes de hardware a los cuales se ha sintetizado el módulo en una lógica de transferencia
de registros (RTL), para ello, primeramente se debe regresar a visualizar para una implementación,
en la parte superior del área de archivos se debe seleccionar: .

Seleccionando al archivo comp4b, en el área de procesos se hace una expansión de la opción


síntesis, como se muestra en la figura 47, para posteriormente dar doble clic al proceso View RTL
Shematic.

Figura 47. Obtención del esquemático.

23
Tutorial FPGAs y VHDL UTM/2012-A

La primera vez que se ejecute este proceso se presentará una ventana con 2 opciones, la primera
es un asistente, por lo que debe seleccionarse la segunda (Start with a schematic of the top-level
block) para obtener el bloque de mayor jerarquía del comparador, el cual se muestra en la figura
48.

Figura 48. Bloque de mayor jerarquía del comparador.

El diagrama de la figura 48 es el bloque de mayor jerarquía, con un doble clic en el bloque o con el
botón es posible explorar hacia los niveles inferiores en los que se pueden observar más
detalles, lo cual es bastante útil en diseños complejos. En la figura 49 se puede ver el siguiente
nivel del comparador.

Figura 49. Segundo nivel jerárquico del comparador.

Estos diagramas permiten evaluar la relación que se da entre el software y hardware, y son útiles
para documentación, con el botón se puede regresar al nivel jerárquico anterior.

24
Tutorial FPGAs y VHDL UTM/2012-A

En este ejemplo ya no se tienen niveles inferiores, por su simpleza, los componentes del segundo
nivel pueden implementarse directamente en los bloques lógicos del dispositivo seleccionado.

Al cerrar la ventana del área de trabajo se concluye el proceso de visualización del hardware.

8. Acondicionamiento para la implementación.

Como pudo observarse en las figuras 48 y 49, el código VHDL ha sido sintetizado
satisfactoriamente en hardware, ahora se deben tomar en cuenta algunas consideraciones para
poder llevar a cabo su implementación en el dispositivo.

El comparador será descargado en un FPGA XC3S500 de Xilinx, el cual está en una tarjeta Nexys 2
de Digilent, cuya imagen se muestra en la figura 50. Digilent es la empresa que manufactura estas
tarjetas de desarrollo y su manual de referencia puede obtenerse de su sitio web:
www.digilentinc.com. Se observa que la tarjeta tiene diferentes elementos para entrada/salida o
almacenamiento de datos.

Figura 50. Tarjeta Nexys 2, incluye un FPGA Spartan-3E de Xilinx.

Para la implementación del comparador, es de esperarse que las entradas A y B se obtengan de los
interruptores, y las salidas: Mayor, Menor e Igual, se muestren en los LEDs. Por lo tanto, se
requiere conocer a que terminales del FPGA están conectados estos elementos.

En la figura 51 se muestra la organización de las terminales en el FPGA, se observa una disposición


matricial organizada en 4 bancos. Para referirse a una terminal, debe indicarse el renglón (A-V) y la
columna (1-18).

25
Tutorial FPGAs y VHDL UTM/2012-A

Figura 51. Terminales del FPGA Spartan-3E de Xilinx incluido en la tarjeta Nexys 2.

En la figura 52 se muestra a que terminales del FPGA están conectados los dispositivos básicos de
entrada/salida. Sería necesario revisar el manual de la tarjeta si se va a emplear alguna interfaz
especializada, como RS-232, PS/2 o VGA; o bien, si se va a manejar alguna de las memorias
incluidas en la misma Nexys 2.

Figura 52. Conexión del FPGA con los dispositivos básicos de entrada/salida, en la tarjeta Nexys 2.

Para la asignación de terminales, es necesario agregar un archivo de restricciones (archivo con


extensión UCF), para ello, en cualquier parte del área de archivos se debe dar un clic derecho y en
el menú contextual seleccionar la opción New Source, como se muestra en la figura 53.

26
Tutorial FPGAs y VHDL UTM/2012-A

Figura 53. Opciones para agregar un nuevo archivo al proyecto.

Dentro de los diferentes tipos de archivo que se pueden insertar, se debe seleccionar la opción
Implementation Constraints File, como se muestra en la figura 54, y se le asigna un nombre al
archivo, en este caso se le denominó terminales.

Figura 54. Se inserta un archivo de restricciones al proyecto.

El archivo con las restricciones automáticamente se asocia con el archivo del diseño, si hubiera
más módulos se debería seleccionar al de mayor jerarquía. Luego, se muestra la información sobre
este nuevo archivo (figura 55) y se finaliza.

Figura 55. Resumen del archivo de restricciones a insertar en el proyecto.

27
Tutorial FPGAs y VHDL UTM/2012-A

Con esto, el archivo de restricciones es ubicado en el área de archivos, en la figura 56 se puede ver
que el archivo está asociado con el comparador. Para modificarlo, el archivo debe seleccionarse
para que en el área de proceso se muestre la opción Edit Constrains (Text), que es un proceso
asociado a los archivos de restricciones. Al ejecutarlo, se abre el archivo vacío en el espacio de
trabajo (también se muestra en la figura 56).

Figura 56. Archivo de restricciones dentro del proyecto.

La sintaxis para definir la asociación de las señales con las terminales del FPGA es la siguiente:

NET “nombre de la señal” LOC = “terminal” ;

Donde con NET se hace referencia a la señal y con LOC se refiere a su ubicación. Por lo tanto, en el
archivo de restricciones debe insertarse:
# Entradas para el dato A

NET "A<0>" LOC = "G18" ;


NET "A<1>" LOC = "H18" ;
NET "A<2>" LOC = "K18" ;
NET "A<3>" LOC = "K17" ;

# Entradas para el dato B

NET "B<0>" LOC = "L14" ;


NET "B<1>" LOC = "L13" ;
NET "B<2>" LOC = "N17" ;
NET "B<3>" LOC = "R17" ;

# Salidas

NET "igual" LOC = "J14" ;


NET "mayor" LOC = "J15" ;
NET "menor" LOC = "K15" ;

El signo # indica que el resto del renglón es un comentario. En la figura 57 se muestra al archivo de
restricciones modificado.

28
Tutorial FPGAs y VHDL UTM/2012-A

Figura 57. Archivo de restricciones editado.

Es necesario realizar una asociación correcta de los pines del módulo VHDL con las terminales del
FPGA, dado que si se comete un error, por ejemplo, conectando una salida del FPGA con una
terminal que genera voltaje, se podría dañar a la tarjeta.

Con la aplicación PlanAhead es posible revisar la correcta ubicación de los pines en un entorno
gráfico. En la figura 58 se muestra la ejecución de esta aplicación, con la salida igual seleccionada
en la ventana I/O Ports, poniendo en color blanco a la terminal, tanto en el empaque (Package)
como en el dispositivo (Device).

Figura 58. Muestra gráfica de la ubicación de las terminales con la aplicación PlanAhead.

29
Tutorial FPGAs y VHDL UTM/2012-A

La aplicación PlanAhead se invoca seleccionando al archivo VHDL del comparador en el área de


archivos y expandiendo la opción User Constrains en el área de procesos, para posteriormente
ejecutar al proceso I/O Planning (PlanAhead), como se muestra en la figura 59.

Figura 59. Proceso para invocar a la aplicación PlanAhead.

Existen otros tipos de restricciones, de área o temporización, pero éstas requieren definiciones
que son mucho más complejas.

9. Implementación.

La implementación es un proceso que involucra varios pasos: Trasladar el diseño (Traslate),


mapearlo (Map) y realizar su colocación y ruteo (Place & Route). Sin embargo, estos procesos los
realiza la herramienta de manera automática. Para ello, es necesario seleccionar el archivo
comp4b en el área de archivos, con lo que se abrirán los procesos aplicables al archivo, entre los
cuales se debe buscar la lista de procesos Implement Design y darle un doble clic para ejecutarlos,
en la figura 60 se muestra la realización con éxito de la Implementación, con todas sus etapas.

Figura 60. Implementación del diseño.

30
Tutorial FPGAs y VHDL UTM/2012-A

En el resumen del proyecto (que se muestra en el área de trabajo) se pueden ver los recursos que
está usando el diseño dentro del FPGA, estos se observan en la figura 61.

Figura 61. Resumen de recursos utilizados en el diseño.

Es posible explorar el interior del FPGA, para observar los recursos que está ocupando un diseño,
esto se consigue al dar un doble clic al proceso View/Edit Routed Design (FPGA Editor), dentro de
los procesos de Colocación y Ruteo (Place & Route) con esto se ejecutará al programa Xilinx FPGA
Editor, el cual mostrará el interior del FPGA con un aspecto como el de la figura 62.

Figura 62. Interior del FPGA, revisado con FPGA Editor.

La parte en Azul muestra el ruteo requerido por el diseño, no se distinguen los SLICEs y CLBs
utilizados, puesto que son muy pocos en comparación con el total de recursos disponibles.

31
Tutorial FPGAs y VHDL UTM/2012-A

Se pueden hacer acercamientos o bien dar un clic a los diferentes bloques para observar su
contenido. En la figura 63 se muestra un acercamiento de un CLB y un IOB que están siendo
utilizados por el diseño.

Figura 63. Acercamiento a un CLB y a un IOB utilizados por el diseño.

En la figura 64 se muestra un slice, en la parte inferior puede verse la ecuación lógica para uno de
sus LUTs.

Figura 64. Interior de un slice utilizado por el diseño.

Una vez que se ha observado que la implementación se realizó satisfactoriamente, es posible


cerrar este programa (Xilinx FPGA Editor) para continuar.

10. Generación del archivo de configuración

Dentro de los procesos asociados al diseño (los cuales se obtienen al seleccionarlo), se encuentra
el proceso Generate Programming File, ubicado después de los procesos de implementación. Con
este proceso se crea el archivo para descargar en el FPGA, sin embargo, antes de ejecutarlo es
necesario definir uno de sus parámetros, para ello habrá que dar un clic derecho al proceso y
seleccionar la opción propiedades en el menú contextual, como se muestra en la figura 65.

32
Tutorial FPGAs y VHDL UTM/2012-A

Figura 65. Opción para el ajuste de las propiedades del proceso para generar el archivo de programación.

Con ello se abrirá la ventana mostrada en la figura 66, en donde se debe seleccionar la categoría
Startup Options y cambiar el valor de la propiedad FPGA Start-Up Clock para que tenga JTAG Clock,
este ajuste también se muestra en la figura 66.

Figura 66. Ajuste de las propiedades del proceso para generar el archivo de programación.

Después del cambio debe presionarse el botón Aplicar (Apply) y cerrar la ventana presionando OK.
Este cambio es necesario porque la programación del FPGA se hará a través de su interfaz JTAG y
por lo tanto, se requiere que en la misma interfaz se tenga la señal de reloj.

Una vez hecho esto es posible ejecutar al proceso Generate Programming File aplicándole un
doble clic. Si el proceso se realiza con éxito, se obtendrá un estado de éxito, como se muestra en
la figura 67.

Figura 67. La generación del archivo de programación se realizó con éxito.

33
Tutorial FPGAs y VHDL UTM/2012-A

En este momento ha sido creado al archivo con extensión BIT que será descargado en el FPGA, por
lo tanto, para descargas en la tarjeta Nexys 2 empleando la interfaz USB ya es posible cerrar al ISE
de Xilinx.

11. Programación del dispositivo

La tarjeta puede programarse desde dos diferentes puertos, el puerto JTAG o un puerto mini-USB,
el programa puede enviarse directamente al FPGA o a una FLASH, para que el FPGA cargue el
programa automáticamente, después de que es alimentada la tarjeta.

En la figura 68 se observa cómo en realidad es sólo por el puerto JTAG por el que se tiene acceso al
FPGA y a la Flash. La salida del controlador USB va dirigida hacia el puerto JTAG.

Figura 68. Interfaz para programar al FPGA.

El cable JTAG es similar al de la figura 69, si se utiliza este medio, debe ejecutarse el proceso
Manage Configuratio Project (iMPACT), visible al expandir la opción Configure Target Device,
ubicado por debajo del proceso Generate Programming File.

Figura 69. Cable JTAG, también empleado para programar al FPGA.

En este caso se utilizará un cable USB, para ello se utilizará un programa denominado Adept,
proporcionado gratuitamente por Digilent, el acceso directo del programa Adept se muestra en la
figura 70.

Figura 70. Acceso directo del programa Adept.

En la tarjeta Nexys 2 es conveniente colocar el conector de Modo en la posición de JTAG, en lugar


de ROM, para que no afectar el contenido de la memoria, en la figura 71 puede verse el selector
de modo, por debajo de la interfaz JTAG. La memoria ROM está configurada con un programa de
prueba utilizado para verificar la funcionalidad de la tarjeta y no debe ser modificado.

34
Tutorial FPGAs y VHDL UTM/2012-A

Figura 71. Conectores de la tarjeta.

Antes de ejecutar al programa Adept debe conectarse la tarjeta Nexys a la PC y energizarse, sino
se manejan elementos de hardware adicionales en los conectores de la tarjeta, como ocurre en
este ejemplo, la alimentación de la tarjeta puede tomarse del puerto USB de la PC.

La ventana del programa Adept se muestra en la figura 72. Si la tarjeta no está conectada o está
apagada, sólo se mostrará un mensaje pidiendo que se verifiquen las conexiones. Arregladas las
conexiones será suficiente con presionar al botón Initialize Chain para que el programa reconozca
a la tarjeta y se obtenga la ventana de la figura 72.

Figura 72. Interfaz del programa Adept, una vez que la tarjeta Nexys 2 ha sido reconocida.

35
Tutorial FPGAs y VHDL UTM/2012-A

Con el botón Browse relacionado con el FPGA, se busca al archivo con extensión BIT en la carpeta
del proyecto y se programa al FPGA presionando al botón Program. No se utilizan los botones
relacionados con la PROM, para no alterar su contenido. En la parte inferior de la ventana se
observará el progreso de la programación, como se muestra en la figura 73.

Figura 73. Progreso en la programación del FPGA.

El programa ADEPT, además de emplearse para descargar el programa en el FPGA o en la PROM,


puede emplearse para verificar la integridad de la tarjeta, por medio de diferentes pruebas en sus
recursos.

Después de la programación, el programa ADEPT ya puede cerrarse. Si la tarjeta está alimentada


con un eliminador, el cable USB puede retirarse.

El diseño puede evaluarse modificando las entradas desde los interruptores para observar las
salidas en los LEDs.

Cabe aclarar que los recursos programables en el FPGA están basados en tecnología RAM, por lo
que si se retira la alimentación, el programa se perderá. Para evitar esto, el programa podría
almacenarse en la memoria FLASH, lo cual se evitará para mantener el programa de demostración.
Sin embargo, es conveniente aclarar que en la PROM no se puede programar un archivo con
extensión BIT, primero debería generarse el archivo para la PROM desde el ISE de Xilinx.

10. Conclusión

Se ha revisado de manera detallada el proceso a seguir para implementar sistemas digitales en


FPGAs con ayuda de VHDL, para otro tipo de tarjetas u otro tipo de FPGAs sólo debe hacerse la
selección adecuada del dispositivo y la ubicación correcta de las terminales de entrada y salida.

Se utilizaron 2 herramientas principales durante el proceso, y se pudo observar que la simulación


de un diseño con el Active-HDL es mucho más simple e ilustrativa que la simulación en el mismo
entorno de Xilinx, dado que en el ISE se requiere la creación de otro archivo VHDL como banco de
pruebas.

Si no se tiene éxito en la programación, las causas pueden ser diversas:

 La tarjeta puede estar desconectada.


 Se seleccionó un FPGA que no corresponde con el de la tarjeta.
 El empaque seleccionado no es el empaque del FPGA.
 El puerto o el cable USB no funcionan correctamente.
 El FPGA no funciona correctamente.

36
Tutorial FPGAs y VHDL UTM/2012-A

12. Ejercicio de repaso

Para repasar el tutorial e iniciarse con la programación en VHDL, diseñar e implementar el circuito
decodificador de 3 a 8 mostrado en la figura 74.

Decodificador 3 a 8
s0
E0 s1
s2
E1 s3
s4
E2 s5
s6
s7
Figura 74. Circuito para repetir el tutorial.

Las entradas deberán tomarse de los interruptores y las salidas enviarse a los LEDs.

Realizar un reporte con los siguientes puntos:

a) Descripción del problema.


b) Código VHDL.
c) Diagramas con la Simulación en Active-HDL, con comentarios en las señales.
d) Resumen de los recursos empleados.
e) Modelos de Hardware (diagramas RTL) del nivel superior y siguiente.
f) Restricciones (Archivo UCF).
g) Conclusiones.

37

También podría gustarte