tutorial vhdl

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

Upload: ram-efx

Post on 25-Dec-2015

25 views

Category:

Documents


0 download

DESCRIPTION

descripcionde hardware

TRANSCRIPT

Page 1: Tutorial VHDL

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

Page 2: Tutorial VHDL

Tutorial FPGAs y VHDL UTM/2012-A

1

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.

A

B

A > B

A = B

A < B4 bits

4 bits

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.

Page 3: Tutorial VHDL

Tutorial FPGAs y VHDL UTM/2012-A

2

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

Page 4: Tutorial VHDL

Tutorial FPGAs y VHDL UTM/2012-A

3

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.

Page 5: Tutorial VHDL

Tutorial FPGAs y VHDL UTM/2012-A

4

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).

Page 6: Tutorial VHDL

Tutorial FPGAs y VHDL UTM/2012-A

5

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.

Page 7: Tutorial VHDL

Tutorial FPGAs y VHDL UTM/2012-A

6

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.

Page 8: Tutorial VHDL

Tutorial FPGAs y VHDL UTM/2012-A

7

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:

Page 9: Tutorial VHDL

Tutorial FPGAs y VHDL UTM/2012-A

8

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.

Page 10: Tutorial VHDL

Tutorial FPGAs y VHDL UTM/2012-A

9

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.

Page 11: Tutorial VHDL

Tutorial FPGAs y VHDL UTM/2012-A

10

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.

Page 12: Tutorial VHDL

Tutorial FPGAs y VHDL UTM/2012-A

11

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.

Page 13: Tutorial VHDL

Tutorial FPGAs y VHDL UTM/2012-A

12

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).

Page 14: Tutorial VHDL

Tutorial FPGAs y VHDL UTM/2012-A

13

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.

Page 15: Tutorial VHDL

Tutorial FPGAs y VHDL UTM/2012-A

14

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.

Page 16: Tutorial VHDL

Tutorial FPGAs y VHDL UTM/2012-A

15

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.

Page 17: Tutorial VHDL

Tutorial FPGAs y VHDL UTM/2012-A

16

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.

1

2

3

4

Page 18: Tutorial VHDL

Tutorial FPGAs y VHDL UTM/2012-A

17

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.

Page 19: Tutorial VHDL

Tutorial FPGAs y VHDL UTM/2012-A

18

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.

Page 20: Tutorial VHDL

Tutorial FPGAs y VHDL UTM/2012-A

19

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.

Page 21: Tutorial VHDL

Tutorial FPGAs y VHDL UTM/2012-A

20

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.

A

B

A > B

A = B

A < B4 bits

4 bitsEstímulos

para las

entradas

Visualización

de las

salidas

BANCO DE PRUEBAS

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.

Page 22: Tutorial VHDL

Tutorial FPGAs y VHDL UTM/2012-A

21

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');

Page 23: Tutorial VHDL

Tutorial FPGAs y VHDL UTM/2012-A

22

-- 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.

Page 24: Tutorial VHDL

Tutorial FPGAs y VHDL UTM/2012-A

23

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.

Page 25: Tutorial VHDL

Tutorial FPGAs y VHDL UTM/2012-A

24

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.

Page 26: Tutorial VHDL

Tutorial FPGAs y VHDL UTM/2012-A

25

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).

Page 27: Tutorial VHDL

Tutorial FPGAs y VHDL UTM/2012-A

26

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.

Page 28: Tutorial VHDL

Tutorial FPGAs y VHDL UTM/2012-A

27

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.

Page 29: Tutorial VHDL

Tutorial FPGAs y VHDL UTM/2012-A

28

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.

Page 30: Tutorial VHDL

Tutorial FPGAs y VHDL UTM/2012-A

29

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.

Page 31: Tutorial VHDL

Tutorial FPGAs y VHDL UTM/2012-A

30

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.

Page 32: Tutorial VHDL

Tutorial FPGAs y VHDL UTM/2012-A

31

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.

Page 33: Tutorial VHDL

Tutorial FPGAs y VHDL UTM/2012-A

32

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.

Page 34: Tutorial VHDL

Tutorial FPGAs y VHDL UTM/2012-A

33

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.

Page 35: Tutorial VHDL

Tutorial FPGAs y VHDL UTM/2012-A

34

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.

Page 36: Tutorial VHDL

Tutorial FPGAs y VHDL UTM/2012-A

35

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.

Page 37: Tutorial VHDL

Tutorial FPGAs y VHDL UTM/2012-A

36

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.

Page 38: Tutorial VHDL

Tutorial FPGAs y VHDL UTM/2012-A

37

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.

s0s1s2s3s4s5s6s7

E0

E1

E2

Decodificador 3 a 8

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.