Practica I – Introducción a la Herramienta Xilinx...

23
Práctica I – Introducción ISE. Place & Route 1 Practica I – Introducción a la Herramienta Xilinx ISE. El termino “flujo de diseño” describe el proceso completo que se debe seguir para llevar un proyecto desde la definición de especificaciones hasta el resultado final. Aun cuando nuestra responsabilidad se limite a una parte de este flujo, es indispensable conocerlo en su totalidad para prever los problemas que puedan aparecer en otras fases. En general lo que diferencia a los distintos flujos de diseño empleados para un mismo fin, son las distintas herramientas que se usan en cada fase, así como los distintos puntos de entrada y salida de dichas herramientas. Para estas prácticas se han escogido las herramientas Xilinx ISE. Xilinx ISE en si constituye un flujo de diseño completo formado por muchas herramientas distintas integradas, sin embargo carece de flexibilidad y potencia que proporciona un simulador de lenguajes HDL, sobre todo porque este nos permite la creación de entidades de test para verificación Pre-síntesis y Post-implementación. En la figura 1 se puede observar el flujo de diseño propuesto. Ilustración 1 - Flujo de Diseño HDL

Transcript of Practica I – Introducción a la Herramienta Xilinx...

Práctica I – Introducción ISE. Place & Route

1

Practica I – Introducción a la Herramienta Xilinx ISE. El termino “flujo de diseño” describe el proceso completo que se debe seguir para llevar un proyecto desde la definición de especificaciones hasta el resultado final. Aun cuando nuestra responsabilidad se limite a una parte de este flujo, es indispensable conocerlo en su totalidad para prever los problemas que puedan aparecer en otras fases.

En general lo que diferencia a los distintos flujos de diseño empleados para

un mismo fin, son las distintas herramientas que se usan en cada fase, así como los distintos puntos de entrada y salida de dichas herramientas. Para estas prácticas se han escogido las herramientas Xilinx ISE. Xilinx ISE en si constituye un flujo de diseño completo formado por muchas herramientas distintas integradas, sin embargo carece de flexibilidad y potencia que proporciona un simulador de lenguajes HDL, sobre todo porque este nos permite la creación de entidades de test para verificación Pre-síntesis y Post-implementación. En la figura 1 se puede observar el flujo de diseño propuesto.

Ilustración 1 - Flujo de Diseño HDL

Práctica I – Introducción ISE. Place & Route

2

1. Descripción del diseño En la presente práctica se va a hacer un recorrido por el flujo de diseño antes descrito, empleando para ello un proyecto de complejidad moderada pero con el que se tenga la oportunidad de hacer uso del mayor numero de herramientas y recursos. Se va a desarrollar un circuito que encienda/apague un LED (LD0) a una velocidad de un segundo. Está velocidad se podrá modificar mediante la utilización de los Switch SW3:SW0.

2. Creación de un proyecto en Xilinx ISE El “Project Navigator” es la herramienta integradora de ISE. Constituye un entorno de trabajo desde el que se puede llamar a todas las utilidades. El espacio de trabajo esta dividido en tres ventanas: La inferior donde se muestran mensajes de texto sobre el funcionamiento y dos superiores donde se muestran los ficheros fuente del proyecto con sus librerías y el flujo de diseño ISE. A medida que se vaya avanzando en el desarrollo del proyecto, en las dos ventanas superiores se hará accesible más información sobre los resultados de la síntesis, la implementación en el dispositivo, etc.…. Se tratara en detalle en puntos posteriores.

Ilustración 2 - Flujo diseño ISE

Práctica I – Introducción ISE. Place & Route

3

Ilustración 3 - Ventana principal ISE

Dentro del menú file existe la opción de creación de un proyecto nuevo. Después de seleccionarla se nos preguntara que tipo de proyecto queremos crear: Top level module type: > HDL. Se escoja uno u otro siempre tendremos la opción de incluir ficheros fuente de todo tipo.

Ilustración 4 – Selección Tipo fichero

Pulsando sobre el icono siguiente accederemos a la ventana en la que indicamos con que dispositivo vamos a trabajar, en nuestro caso será con la FPGA Xilinx Spartan 3XC3SS200 y pulsaremos sobre el icono para seguir con el proceso de creación del proyecto.

Práctica I – Introducción ISE. Place & Route

4

Ilustración 5 – Selección dispositivo

En la siguiente ventana procederemos a la creación de nuestros ficheros fuente, si no lo tenemos ya creado. Pulsaremos New Source y nos aparecerá una ventana con todos los tipos de ficheros fuente que podemos realizar. En nuestro caso seleccionaremos VHDL Module y le daremos un nombre, aceptamos y nos saldrá una ventana donde podemos realizar la descripción de nuestra Entidad.

Ilustración 6 – Creación Módulo VHDL

Práctica I – Introducción ISE. Place & Route

5

En esta ventana definimos los puertos de entrada y salida, una vez especificados todos los puertos, procederemos a pulsar Siguiente con lo que accederemos a nuestra ultima ventana, en la que procederemos a confirmar todos nuestros datos. Con estos pasos ya tenemos creada una parte de nuestro fichero fuente. Si nos queremos crear nuevos ficheros fuente pulsaremos en el icono siguiente para acceder a la ventana Add Existing Sources, en ella añadiremos ficheros VHDL ya creados. Si no tenemos añadir ningún fichero VHDL existente a nuestro proyecto pulsaremos en siguiente y pasaremos a una ventana en la que finalizaremos el proceso de creación del proyecto.

Ilustración 7 – Sumario Proyecto

Nuestro siguiente paso será terminar de confeccionar nuestro fichero VHDL con la declaración de Arquitectura. Para confeccionar nuestro fichero VHDL disponemos editor de textos, el cual es capaz de reconocer las palabras clave reservadas, señalándolas en rojo, los tipos de datos reconocidos aparecen en gris y los comentarios en verde.

• El editor lleva incorporado un chequeador de sintaxis ( Check Syntax ) en el menú síntesis. Esta herramienta comprueba además la coherencia entre los tipos de datos y otros errores de construcción muy comunes.

Práctica I – Introducción ISE. Place & Route

6

Ilustración 8 - Ventana edición VHDL

Ilustración 9 – Código y chequeo de sintaxis.

Práctica I – Introducción ISE. Place & Route

7

• Otra herramienta muy útil es el Language Templates, en el que se nos abre una ventana con información sobre como declarar determinados tipos de entidades, información sobre el lenguaje, ejemplos de descripciones estructuras que podemos utilizar para síntesis, etc.

Ilustración 10 - Ventana Lenguaje Template

Terminada la introducción del código HDL y después de haber comprobado la sintaxis, se explicará la estructura de ficheros fuente HDL dentro del “Project Navigator”, así como las diferentes opciones para comenzar la síntesis. 2.1. Inclusión de componentes de librería y generados con

herramientas auxiliares

• Componentes de librería

En función de la FPGA escogida en la creación del proyecto o durante el proceso de síntesis lógica, el Project Navigator incluye la librería de componentes propia de cada dispositivo. Dicha librería consta de un set completo de puertas lógicas. Diversos tipos de flip-flops, componentes de memoria, componentes digitales básicos y además incluye recursos propios del dispositivo escogido, es decir, buffers, osciladores internos, multiplicadores, componentes relacionados con la programación, etc.

• Herramientas de generación de componentes prefabricados

ISE posee una herramienta auxiliar que permite incorporar a nuestro diseño componentes prefabricados. Estos componentes poseen algunos

Práctica I – Introducción ISE. Place & Route

8

parámetros configurables, por ejemplo, en el caso de una memoria podremos elegir la profundidad de la memoria, así como la anchura de palabra de datos.

Esta herramienta se llama Core Generador. Esta herramienta es muy potente y esta en constante evolución, sirve de soporte para lo que se han denominado I.P. Cores (Cores de propiedad intelectual). Estos cores desarrollados por terceros, tienen gran complejidad y en ocasiones son sistemas completos por si mismos (µC, etc), que podemos comprar e incluir en nuestros diseños.

Ilustración 11 - Ventana Core Generator

Los componentes generados con estas herramientas son algo más que código HDL sintetizable o previamente sinteticazo. Poseen (en ocasiones, es opcional) información sobre su emplazamiento y rutado en el dispositivo, lo que se conoce como bloques RPM (relational placement modules). Es decir estos bloques son linkados directamente en la fase de implementación y “se supone” que están optimizados al máximo. El modo de utilización de las dos herramientas es muy similar. Veremos la utilización de estas herramientas en practicas posteriores.

3. Simulación HDL con ISE Simulator. Aunque la simulación HDL previa a la síntesis podría ser un paso prescindible en proyectos de pequeña envergadura, resulta necesario cuando la complejidad del mismo provoca que el proceso de síntesis sea costoso y por lo tanto no susceptible de emplear el “método de prueba y error”. Además usando la simulación HDL disfrutamos de muchas ventajas, como por ejemplo la posibilidad de crear entidades de test y por lo tanto utilizar ficheros externos de entrada y salida de datos, sin

Práctica I – Introducción ISE. Place & Route

9

mencionar el ahorro de tiempo, ya que un simulador de alto nivel es varias veces más rápido que un simulador EDIF (netlist).

3.1. Creación de un fichero testbench

El proceso de creación de un testbench es el paso principal para la verificación de un modelo VHDL.

• En la ventana de sources, seleccionamos el proyecto y con el botón

derecho seleccionamos un nuevo fichero (New source) e indicamos que queremos un fichero VHDL Testbench. Pulsamos en next y lo asociamos a la entidad a simular. De esta manera el asistente nos declarará todas las señales/instanciaciones necesarias para la realización del fichero testbench.

Ilustración 12 – Creación fichero testbench.

• A continuación visualizaremos los ficheros necesarios para la realización de la simulación mediante la selección en la ventana sources:

Práctica I – Introducción ISE. Place & Route

10

Ilustración 13 – Selección Flujo diseño

• Por ultimo, definiremos los estímulos necesarios para verificar el correcto funcionamiento de la entidad. Ya solo quedará comprobar la sintaxis y realizar la simulación.

Ilustración 14 – Estímulos testbench

A continuación podemos ver los resultados de simular el proyecto HDL del diseño propuesto empleando el testbench mostrado a continuación:

Práctica I – Introducción ISE. Place & Route

11

Ilustración 15 – Simulador

4. Síntesis lógica El proceso de síntesis es uno de los más importantes del flujo de diseño. El sintetizador se encarga de traducir el código HDL a puertas lógicas. El conocimiento del funcionamiento del sintetizador, así como su control, nos permitirá sacarle todo el partido y mejorar las características de los diseños. Nosotros utilizaremos el sintetizador que esta incluido en la herramienta Xilinx ISE, aunque también se pueden utilizar otros sintetizadores como LeonardoSpectrum, FPGA Express, Precision RTL, etc.

Lo primero que tenemos que hacer es arrancar el Project Navigator e irnos en la ventana Process View la opción de síntesis, una vez seleccionado realizaremos doble clic y procederemos a la síntesis del fichero VHDL. Recordad que debemos de volver a seleccionar la opción Implementation en la opción Sources for:

Ilustración 16 – Síntesis XST

Práctica I – Introducción ISE. Place & Route

12

Si una vez seleccionada la opción de síntesis pulsamos sobre el botón derecho accederemos a las opciones de síntesis:

Ilustración 17 – Configuración propiedades síntesis

En vez dentro de las opciones de síntesis tenemos tres pestañas, seleccionando una u otra, iremos seleccionando las distintas opciones, este paso es muy importante ya que una buena configuración de nuestro sintetizador, nos puede dar muy buenos resultados.

Ilustración 18 – Opciones síntesis

En primer lugar podemos optimizar el funcionamiento para ahorrar área o para mejorar la velocidad. En este último caso el sintetizador puede replicar hardware para acelerar el diseño, de ahí que en ocasiones aumente considerablemente el área del mismo. La opción más aconsejable es la optimización por velocidad. El nivel de esfuerzo (efford level) determinara la cantidad de tiempo que la herramienta va a emplear en el proceso. Es recomendable invertir un mayor esfuerzo en la síntesis lógica que en el emplazamiento y rutado, ya que siempre es preferible obtener un buen diseño a nivel lógico donde las mejoras en funcionamiento serán siempre superiores a las que podamos obtener por introducir adecuadamente el diseño en la FPGA seleccionada. Las demás opciones las dejaremos por defecto.

Práctica I – Introducción ISE. Place & Route

13

Ilustración 19 - Opciones síntesis (y2)

Seleccionando HDL Options, la única opción reseñable es como codificar las Maquinas de Estado, FSM Encoding Algorithm, pulsando sobre el icono vemos todos los tipos de codificación, a continuación se comentan varios tipos de codificación de maquinas de estado:

• Auto: En la codificación automática el sintetizador varía el tipo de

codificación dependiendo del ancho de los bits. Por ejemplo, para tipos enumerados y algunos elementos como enteros son codificados como Binarios. Tipos enumerados grandes son codificados OneHot, etc.

• Binary: Generación de maquinas de estado con el menor numero de flip-flops posibles. Este tipo de codificación para los diseños en los que el tamaño del diseño es critico y las temporizaciones no son importantes.

• Gray: Generación de maquinas de estado en los que solo un flip-flop cambia de estado cuando ocurre una transición de estado. Este tipo de codificación se utiliza para reducir el riesgo de glitches.

• OneHot: Generación de maquinas de estado en las que cada estado contiene un solo flip-flop. Con este tipo de codificación se obtiene el mejor rendimiento y unos retardos bastante pequeños. Las implementaciones usando codificación OneHot usan más área que las Binarias.

Práctica I – Introducción ISE. Place & Route

14

Ilustración 20 - Opciones síntesis (y3)

En esta última ventana tenemos opciones específicas para los dispositivos de Xilinx, dejaremos todas las opciones por defecto, para terminar pulsaremos Aceptar. Si no ha habido ningún error podemos ver la implementación de nuestro circuito mediante la opción View RTL Schematic:

Ilustración 21 – Resultado Síntesis RTL.

o mediante la opción View Technology Schematic ( primitivas de síntesis):

Ilustración 22 – Resultado Síntesis Primitivas Xilinx.

Práctica I – Introducción ISE. Place & Route

15

Ilustración 23 – Resultado Síntesis.

5. Introducción de Constraints

En este apartado se va a describir como introducir constraits por medio de una utilidad Create Timing Constraints, con esta herramienta elegiremos tanto constraints temporales, como la asignación de nuestras señales a pines de la FPGA. La influencia de estos constraints en el funcionamiento del sintetizador es muy relativa, sin embargo si que pueden exportarse para su posterior uso en al fase de implementación, evitando así el uso de la complicada herramienta Constraints editor. Para ello una vez sintetizado nuestro circuito pincharemos en el siguiente programa, dentro del menú User Constraints, para ello realizaremos doble clic sobre Create Timing Constraints y comenzaremos nuestra definición.

Ilustración 24 – Creación Fichero Constraints.

Práctica I – Introducción ISE. Place & Route

16

Antes de comenzar con la definición de constraints, tendremos que crear un archivo donde almacenaremos nuestros datos, para ello iremos al menú Project > New Source y seleccionaremos Implementation Constraints File, le daremos un nombre y aceptaremos.

Ilustración 25

Ya podemos empezar con la definición de Constraints, para ello disponemos de cuatro apartados:

1. Definición de reloj o relojes de diseño. Tanto la herramienta de síntesis como el analizador de tiempo están perfectamente preparados para trabajar con varios relojes y lo que es más importante con varia fases de reloj1. En esta ventana se definen los relojes. Si hacemos doble click en la opción period podemos definir un constraint para el reloj.

1 Se desaconseja el uso de más de un reloj, para respetar las reglas de diseño síncrono, aunque puede ser interesante en diseños complejos y de gran tamaño el empleo de varias fases de un mismo reloj.

Práctica I – Introducción ISE. Place & Route

17

Ilustración 26 – Asignación de Constraints temporales

Ilustración 27 – Asignación de Constraints temporales de reloj

2. La ventana dedicada a los ports consiste es una tabla en la que podemos ver

todas las características de los mismos. En la primera columna tenemos todos los ports de entrada y salida del diseño. En la columna de direcciones se especifica (automáticamente) la dirección de los ports. Las dos columnas siguientes presentan características temporales que nuestro diseño debe cumplir con respecto al exterior del dispositivo, considerando una filosofía

Práctica I – Introducción ISE. Place & Route

18

síncrona de un único flanco activo de reloj en todo el entorno ( la PCB por ejemplo).

Ilustración 28 – Constraints temporales puertos I/O

Las otras dos ventanas son para controlar opciones más complejas, por lo que normalmente las dejaremos por defecto.

3. Lo siguiente que tendremos que realizar será la asignación de pines. Hay que indicar a la herramienta cada puerto de la entidad a que pin físico corresponde, para ello daremos doble click en la acción Floorplan IO- Presynthesis. Dentro de la columna LOC en la ventana I/O pins podremos los pines que vayamos a utilizar.

Ilustración 29 – Constraints puertos I/O

Práctica I – Introducción ISE. Place & Route

19

6. El proceso de implementación

Ilustración 30 -Flujo Diseño implementación FPGA

Una vez se ha finalizado la síntesis lógica, el siguiente paso consiste en mapear el Netlist de puertas lógicas en la estructura de la FPGA, es decir, en los CLBs. Estos bloques están formados por una LUT, que es una pequeña RAM estática para implementar funciones lógicas, FF-D, recursos de rutado y buffers.

Ilustración 31 – Place & Route

Práctica I – Introducción ISE. Place & Route

20

A la salida del mapeado obtenemos un fichero .NCD, que junto con el fichero de constraints, que es el mismo que el introducido en la síntesis, se llevan a la fase siguiente, Place And Route. En la fase PAR, nuestro diseño traducido a CLBs se emplaza y ruta automáticamente siguiendo los constraints. Al finalizar, obtenemos un fichero .NCD, reanotado con la posición de cada CLB y cada recurso de la Fuga. Con este fichero, ya se puede generar un fichero .BIT, mediante el programa Generate Programming File dentro del visor de procesos, que será el que se graba en la memoria de configuración de la FPGA. En varios puntos del flujo de implementación disponemos de herramientas accesorias para poder intervenir manualmente. Dos de las más utilizadas son el FPGA Editor y el Floorplanner:

• El FPGA Editor nos permite programar la FPGA manualmente, es decir, introducir la configuración de cada CLB, emplear los recursos especiales de la Fuga y rutar todo el diseño. Se usa en situaciones muy especiales, donde la síntesis lógica no es valida o donde la frecuencia de funcionamiento es un factor critico.

• El Floorplanner permite realizar un emplazamiento manual, del diseño ya mapeado. Se emplea bastante a menudo, por ejemplo para separar adecuadamente aquellos bloques del diseño que tienen una temporización interna critica, o simplemente para mejorar el lo posible los resultados temporales del procedimiento automático de emplazado. Para diseños HDL, la herramienta de Floorplanner recupera perfectamente la jerarquía, lo que sumado a una fiel representación grafica de la FPGA, facilita mucho su empleo.

Conviene destacar que por defecto el proceso de implementación funciona en Auto Run, es decir haciendo doble clic sobre Implement Design comenzará el proceso de mapeado y PAR automáticamente. Si pulsamos con el botón derecho del ratón accederemos a las opciones, lo único a reseñar es la ventana PAR Properties

Ilustración 32 – Propiedades Place & Route

Práctica I – Introducción ISE. Place & Route

21

La primera opción y mas importante es el tiempo (effort) que queremos que la herramienta emplee en el proceso de emplazado y rutado. En ocasiones puede llegar a durar horas, y por lo tanto conveniente realizar algunas pruebas previas para detectar errores con niveles inferiores de esfuerzo.

7. Opciones de configuración Estas opciones hacen referencia a la generación del bit-stream, con el que se configura la FPGA a través de una memoria externa, o bien descargándolo directamente desde otro dispositivo (PC, etc). Para ello realizaremos doble clic sobre Generate Programming File y crearemos el fichero .BIT, ya solo nos quedara mandar este fiche mediante una utilidad de la placa de pruebas a la FPGA y ya tendremos nuestro circuito funcionando.

Ilustración 33 – Generación Fichero Configuración.

Ya solo nos quedará configurar la FPGA con el fichero de configuración generado para ello pulsamos doble click en la opción Configure Target Device y dejamos todo por defecto pulsando Finish. Asignaremos el fichero de configuración al dispositivo Xc2S200 y finalmente programaremos la FPGA.

Práctica I – Introducción ISE. Place & Route

22

Ilustración 34 – Configuración comunicación Placa de Pruebas.

Ilustración 35 – Asignación FPGA fichero Configuración.

Ilustración 36 – Configuración FPGA Programa generado.

Práctica I – Introducción ISE. Place & Route

23

Ilustración 37 – Funcionamiento FPGA Programa generado.