You are on page 1of 22

Lab.

Estructura y Tecnologa de Computadores I (ETC1)

Curso 2005/2006

Prctica 0

Manual de VHDL utilizando Xilinx-ISE


Autores: Pablo Haya, Gustavo Sutter, ngel de Castro. Escuela Politcnica Superior - UAM

OBJETIVO
El objetivo de este manual es presentar los fundamentos bsicos del lenguaje de especificacin hardware VHDL. El manual consta de tres partes: en la primera se mostrar paso a paso cmo especificar y simular un diseo lgico con VHDL utilizando la herramientas comerciales ISE, perteneciente a la empresa Xilinx, y ModelSim, comercializada por la empresa Mentor Graphics. La segunda parte del manual presenta una breve introduccin a VHDL. En la ltima se plantear un ejercicio a resolver por el alumno.

Flujo de diseo
FALLO

SI Problema Diseo Sntesis Verificacin

OK FIN

NO
Figura 1. Flujo de diseo que se va a seguir en la asignatura

El flujo de diseo se divide en tres etapas claramente diferenciadas: 1. Diseo: en esta fase el diseador plasma los requisitos del sistema utilizando un lenguaje formal de representacin. Este puede ser grfico o textual. Actualmente en el diseo de circuitos digitales se utilizan: Herramientas grficas de captura de esquemticos. Lenguajes de diseo de hardware (hdl): describen los componentes del sistema utilizando una descripcin textual. Los dos lenguajes ms extendidos en la industria son VHDL y Verilog. 2. Sntesis: esta fase slo es necesaria en el caso de utilizar un lenguaje hdl. Estos lenguajes son independientes de la tecnologa que se utilice para implementar el sistema. Por otro lado permiten mucha flexibilidad para describir el diseo, ms
Escuela Politcnica Superior UAM 1/22

Lab. Estructura y Tecnologa de Computadores I (ETC1)

Curso 2005/2006

all de una representacin estructural. Esta fase ser la encargada de convertir la representacin hdl del diseo a un formato estndar de representacin. 3. Verificacin: Una vez sintetizado el diseo es necesario verificar si cumple con las especificaciones del problema. Para ello realizaremos un banco de prueba (testbench) que prueba lo ms exhaustivamente posible el diseo.

Requisitos del problema


Como ejemplo se va a implementar en VHDL una funcin lgica de cuatro entradas y dos salidas que responde a la siguiente tabla de verdad: D 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 C 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 B 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 A 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 X 0 0 1 0 1 0 1 0 0 0 1 0 1 0 1 0 Y 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1

Tabla 1. Funcin lgica problema

Esto se puede expresar de la siguiente manera: X = AB + AC Y= DB + DC

(1)

Sacando factor comn, las dos ecuaciones quedan en funcin de (B+C): X = A(B + C) Y= D(B + C) (2)

Escuela Politcnica Superior UAM

2/22

Lab. Estructura y Tecnologa de Computadores I (ETC1)

Curso 2005/2006

En un diseo basado en esquemticos se necesitan siete puertas lgicas (4 AND, 2 OR y 1 inversor) para implementar la frmula (1), mientras que en la frmula (2), al compartir ambas ecuaciones el trmino (B+C), slo son necesarias cuatro puertas (ver Figura 2.)

Figura 2. Esquemtico de la funcin lgica propuesta

Project Navigator/Design Manager (Gestor de diseos)


El Project Navigator es una herramienta distribuida por Xilinx que se encarga de gestionar todas las etapas del flujo de diseo. Esta herramienta es una interfaz que se monta sobre todo el conjunto de programas que participan en el diseo. Cada uno de estos programas acta sobre un etapa concreta del diseo. El Project Navigator tiene las siguientes caractersticas: Ayuda a conectar los diversos programas entre s de manera coherente siguiendo el flujo de diseo. Homogeneiza las llamadas a los programas utilizando una misma interfaz independiente de si el proveedor del programa es Xilinx o una empresa externa.

El Project Navigator se divide en cuatro ventanas. En la esquina superior izquierda se muestran las distintas fuentes de diseo que pertenecen al proyecto organizadas jerrquicamente. Debajo de las fuentes se encuentran la ventana de Procesos. En esta ventana se mostrar la lista de procesos disponibles para la fuente seleccionada en la ventana superior. Para cada proceso se muestra el estado del mismo, si ha sido ejecutado, y en caso afirmativo si el resultado ha sido correcto. Dependiendo de la fuente de diseo los procesos disponibles son distintos. La tercera ventana est situada en la parte inferior de la pantalla. Esta es la consola de mensajes que se actualiza con mensajes informativos y de advertencia a medida que se activan los distintos procesos. La ltima ventana se sita a la derecha y es un editor de texto y esquemticos.

Escuela Politcnica Superior UAM

3/22

Lab. Estructura y Tecnologa de Computadores I (ETC1)

Curso 2005/2006

Figura 3. Interfaz grfica del Gestor de Proyectos

El proceso de diseo del Project Navigator parte de la creacin de un proyecto: 1. Arrancar la aplicacin Project Navigator. Para ello se puede pulsar a travs del icono que se encuentra en el escritorio o acceder mediante el men de Inicio Programas Xilinx ISE Project Navigator. 2. (New Project) Crear un nuevo proyecto: File New Project. Se despliega una nueva ventana (New Project) donde hay que configurar los parmetros del proyecto.

Figura 4. Pantallas de creacin de un nuevo proyecto

Introduciremos un nombre de proyecto con el formato <grupo><pareja>P0, siendo grupo 1a, 1b, 1c ...y pareja el nmero de pareja (utilizar dos dgitos, 01,02 .., 20, ..) que est realizando la prctica. Tambin elegiremos un directorio que haga referencia al

Escuela Politcnica Superior UAM

4/22

Lab. Estructura y Tecnologa de Computadores I (ETC1)

Curso 2005/2006

grupo (siempre en el disco D: ). El resto de las opciones del proyecto las elegiremos tal como muestra la Figura 4.

Device Family: permite elegir la familia de FPGA que se va a utilizar (XC4000, Spartan, Spartan2, Virtex). Utilice una Spartan2. Device: dentro de la familia seleccionada indica la FPGA en concreto donde se va implementar el diseo. Utilice xc2s200e. Package: indica el encapsulado de la FPGA utilizada. Seleccione pq208. Synthesis Tool: indica el tipo de entrada de diseo que se va utilizar. En esta pestaa aparecer una lista de los sintetizadores de VHDL o Verilog que se estn instalados. Siempre dar la opcin de utilizar como entrada un fichero de tipo EDIF. Elija el sintetizador XST para VHDL.

Si todo est correcto, aparecern dos nuevas entradas dentro de la ventana de Fuentes de Diseo del proyecto. Una con el nombre del proyecto, y la otra con el nombre del dispositivo FPGA (xc2s200e-6pq208). Ahora estamos listos para realizar y aadir nuestros diseos al proyecto.

Diseo
En esta fase vamos a plasmar los requisitos del proyecto. Para ello necesitamos elegir un lenguaje de representacin que nos permita expresar formalmente nuestro diseo para luego poder implementarlo. Se ha elegido VHDL. Para poder crear un archivo VHDL nicamente necesitamos un editor de texto. Se va a utilizar el que viene integrado con el Project Navigator. 1. Seleccionamos aadir nueva fuente (Create New Source) tal como indica en la Figura 5.

Figura 5. Cmo aadir un nuevo fichero HDL?

Escuela Politcnica Superior UAM

5/22

Lab. Estructura y Tecnologa de Computadores I (ETC1)

Curso 2005/2006

2. (New Source) Seleccionamos la plantilla VHDL Module, y le asignamos un nombre a la entidad VHDL que vamos a generar, en nuestro caso la llamaremos funcion4a2. Nos aseguramos que la casilla Add to Project se encuentra activada.

Figura 6. Pantalla para crear un nuevo fichero

3. (Define VHDL Source) Definimos la entradas y salidas de nuestro diseo. Para cada una indicamos el nombre de la seal, la direccin (in, out, inout) y en el caso de que queramos un std_logic_vector, el nmero de bits y la disposicin de estos. Rellenamos la plantilla siguiendo la Figura 7:

Figura 7. Pantalla para definir los puertos de una entidad

Escuela Politcnica Superior UAM

6/22

Lab. Estructura y Tecnologa de Computadores I (ETC1)

Curso 2005/2006

4. (New Source Information) En la siguiente pantalla comprobamos que los parmetros introducidos son correctos, y los aceptamos si son correctos. 5. Rellenamos el cdigo VHDL que falta para completar nuestro diseo segn la Figura 8.
-------------------------------------------------------------------------- Nombre: funcion4a2 -- Fichero: funcion4a2.vhd -- Descripcin: Funcin lgica de 4 entradas y dos salidas -definida por las siguientes ecuaciones: -X =A' ( B + C ) -Y =D ( B + C ) -- Autor: Pablo Haya -Escuela Politecnica Superior. UAM -Pablo.Haya@uam.es -- Version: 1.0 18/02/2002 ------------------------------------------------------------------------library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity funcion4a2 is Port ( A : in std_logic; B : in std_logic; C : in std_logic; D : in std_logic; X : out std_logic; Y : out std_logic); end funcion4a2; architecture DataFlow of funcion4a2 is begin X <= not A and (B or C); Y <= D and (B or C); end DataFlow; Figura 8. Cdigo VHDL que implementa la funcin lgica problema

Si todos los pasos son correctos deberemos tener una nueva entrada de diseo asociada al proyecto. El siguiente paso que tenemos que dar es comprobar si es posible sintetizar nuestro nuevo diseo.

Sntesis
En esta fase se traduce el cdigo HDL a una representacin a nivel de puertas lgicas en un formato estndar. En este proceso el sintetizador seleccionado deber inferir del cdigo HDL los componentes clsicos del diseo, tales como mquinas de estados, contadores, decodificadores... Debido a la flexibilidad que proveen los lenguajes HDL, el diseador tiene que tener especial cuidado en desarrollar cdigo fcilmente sintetizable.

Escuela Politcnica Superior UAM

7/22

Lab. Estructura y Tecnologa de Computadores I (ETC1)

Curso 2005/2006

Los procesos disponibles en la fase de sntesis se muestran en la Figura 9. Para realizar la fase de sntesis, hacer doble clic en Synthesize si slo se quiere convertir la descripcin en VHDL a un formato estndar, y en Implement Design si adems se quiere que meta el diseo en la estructura de la FPGA. Estos pasos se realizan de manera secuencial. Si todo ha ido correctamente se podr pasar a la siguiente fase.

Figura 9. Procesos disponibles en la fase de sntesis

Verificacin funcional
La etapa de verificacin se va a realizar utilizando una herramienta de simulacin que no pertenece a Xilinx. Esta se llama ModelSim y pertenece a la empresa Mentor Graphics. Primeramente hay que realizar un banco de pruebas (testbench) para la entidad creada. Este consiste en un fichero VHDL en el cual se instancia la entidad que se quiere probar (uut:unit under test). A esta unidad se le aplican un conjunto de vectores de prueba, de los cuales se conoce la salida esperada. Se compara la salida que ofrece la uut con la salida esperada, y si no son iguales es que ha habido algn error. En nuestro caso realizar el testbench es sencillo y exhaustivo, ya que la entidad implementa una funcin lgica de la cual conocemos para cada entrada cul es su salida. Esto no suele ocurrir en casos reales, en los cuales o bien el nmero de entradas es excesivo para probar todos los vectores en un tiempo razonable, o bien se desconocen parcialmente las salidas del problema. El primer paso de la fase de verificacin es crear el fichero de testbench. Para ello vamos a emplear una herramienta grfica de ISE que nos va a evitar tener que escribir el cdigo.

Escuela Politcnica Superior UAM

8/22

Lab. Estructura y Tecnologa de Computadores I (ETC1)

Curso 2005/2006

1. Seleccionamos aadir nueva fuente (Create New Source) (ver paso 1 del apartado diseo) 2. (New Source) Seleccionamos la plantilla Test Bench WaveForm, y le asignamos un nombre al testbench que vamos a generar. Es recomendable emplear alguna regla mnemotcnica que relacione el nombre del testbench con el nombre de la entidad. En nuestro caso aadiremos a todos los testbench que creemos el prefijo tb_. As nos queda el nombre tb_funcion4a2. Por ltimo, nos aseguramos de que la casilla Add to Project se encuentre activada. 3. (Select) En la siguiente pantalla asociamos el testbench con la entidad que queremos probar (Source File). Para ello tenemos que elegir una de las fuentes de diseo de entre todas las que consta el proyecto. Como slo tenemos una basta con apretar el botn Siguiente. 4. (New Source Information) Comprobamos que los parmetros introducidos son correctos antes de pulsar el botn Finalizar. 5. (Initialize Timing) Si no hay ningn error nos aparecer la pantalla de la Figura 10:

Figura 10. Ventana de configuracin de la temporizacin del testbench

Esta ventana permite establecer los parmetros temporales de la simulacin. Dependiendo de si nuestro circuito es secuencial (gobernado por un reloj) o combinacional seleccionaremos la opcin Single clock, Multiple Clocks o Combinatorial (or internal clock).

Escuela Politcnica Superior UAM

9/22

Lab. Estructura y Tecnologa de Computadores I (ETC1)

Curso 2005/2006

Seleccionamos esta ltima, ya que nuestro diseo es puramente combinacional. A continuacin configuramos la temporizacin del testbench. Para ello debemos decidir tres parmetros: (a) cunto margen vamos a dejar desde que introducidimos una entrada hasta que comprobamos si la salida es correcta (Check Outputs xx ns Alter Inputs are Assigned), (b) cunto esperamos para introducir una nueva entrada (Assign Inputs xx ns Alter Outputs are Checked) y (c) el tiempo que durar el testbench (Initial Length of Test Bench). Estos tiempos dependern del retardo combinacional de la entidad, ya que siempre habr que asegurar que esperamos lo suficiente para que el resultado est estable en la salida. En nuestro caso, dejamos los parmetros por defecto salvo el Initial Length of Test Bench, que ponemos a 1600 ns (16 ciclos para las 16 combinaciones de entradas) y pulsamos OK. 6. Aparecen una nueva ventana correspondiente a la aplicacin HDL Bencher (ver Figura 11).

Figura 11. Herramienta HDL Bencher

La herramienta HDL Bencher permite configurar visualmente las formas de onda de los vectores de entrada y de la salida esperada. A continuacin habr que reproducir la tabla de verdad de la funcin lgica (ver Tabla 1). Para ello hay que tener en cuenta que cada fila de la funcin lgica se relaciona con un intervalo de tiempo. Ej, la fila tercera (D=0, C=0, B=0, A=0, X=1, Y=0) corresponde con la columna que representa el intervalo de 200 ns. Para rellenar los valores de cada seal, el mtodo ms sencillo es pulsar sobre las zonas azules para variar las entradas y sobre las amarillas para variar las salidas esperadas. Los valores de las salidas no es necesario introducirlos, pues ser el resultado de la simulacin. Podemos utilizar los botones de Zoom In y Zoom out para ajustar las seales a la pantalla. Una vez rellenados todos los vectores de entrada debemos obtener la ventana de la Figura 12.

Escuela Politcnica Superior UAM

10/22

Lab. Estructura y Tecnologa de Computadores I (ETC1)

Curso 2005/2006

Figura 12. Entradas introducidas en el testbench

7. Una vez completadas todas las seales pulsamos el botn de Save File. En este punto tendr que aperecer en el testbench generado (tb_funcion4a2.tbw) asociado a la entidad funcion4a2. Como curiosidad podemos ver el cdigo VHDL del testbench haciendo doble clic en la opcin View Generated Test Bench as HDL. Si seleccionamos la fuente del testbench (tb_funcion4a2.tbw), en la ventana inferior aparecern los procesos asociados al testbench (ver Figura 13). Este conjunto de procesos se corresponden con los diferentes hitos en los cuales se recomienda realizar la verificacin del diseo. Se va a ejecutar el proceso de verificacin funcional (Simulate Behavioral Model), es decir, comprobar que el diseo realizado funciona correctamente sin tener en cuenta ningn tipo de restriccin temporal.

Figura 13. Conjunto de procesos asociados al testbench

Escuela Politcnica Superior UAM

11/22

Lab. Estructura y Tecnologa de Computadores I (ETC1)

Curso 2005/2006

ModelSim Hacemos doble clic sobre el proceso Simulate Behavioral Model. De esta forma se lanzar la aplicacin de simulacin asociada al Project Navigator. En el caso del laboratorio es ModelSim. La simulacin se ejecutar automticamente dando como resultado en la consola de ModelSim: # Loading work.funcion4a2(dataflow) . # ** Failure: Simulation successful (not a failure). No problems detected. Es posible que el tiempo de simulacin por defecto (OptionsSimulationDefault Run) sea menor que el tiempo necesario para completarla. En este caso habr que ejecutar la parte que falta para obtener el mensaje anterior. Para ello introducir del la consola la instruccin run all o run XX ns, siendo XX el nmero de nanosegundos necesarios. VSIM> run -all Si ha habido algn error en la simulacin hay que leer el mensaje de error, cerrar ModelSim y revisar tanto el cdigo VHDL como el testbench hasta encontrar el fallo. El aspecto de la ventana de ModelSim es el de la Figura 14.

Figura 14. Ventana de ModelSim

Escuela Politcnica Superior UAM

12/22

Lab. Estructura y Tecnologa de Computadores I (ETC1)

Curso 2005/2006

Esta ventana integra las siguientes partes. En la parte inferior (Transcript) estn los mensajes de la herramienta y se pueden introducir comandos en modo texto. En la parte superior izquierda (Workspace) est la jerarqua del diseo con los distintos mdulos. En este caso el nivel superior es el del testbench (tb_funcion4a2) y por debajo est el mdulo que se prueba (uut: unit under test), que es nuestra funcion4a2. A la derecha estn las seales disponibles (Objects). Dependiendo de qu mdulo est seleccionado en el workspace las seales varan, pues son las disponibles para dicho mdulo. Finalmente, a la derecha est la ventana de las formas de onda (wave). En ella se puede ver la evolucin de cada seal a lo largo del tiempo. Por defecto aparecen todas las entradas y salidas del mdulo bajo test, pero se puede aadir cualquier otra seleccionndola en la ventana de objects y arrastrndola a la de wave. Para facilitar la visualizacin de las formas de onda se puede hacer uso de las diversas opciones de zoom (iconos con forma de lupa). Tambin se puede controlar la ejecucin de la simulacin con las opciones que se detallan a continuacin.
Control de la simulacin

Se puede controlar la ejecucin de la simulacin mediante los siguientes botones:

Stop Wave Drawing: para la simulacin. Restart: inicializa la simulacin para poder realizar una nueva ejecucin. Run: simula durante un tiempo igual al tiempo establecido para cada paso de simulacin (visible en una de las opciones de men). Continue Run: contina una simulacin que se hubiera parado en un breakpoint. Run -all: corre la simulacin indefinidamente (hasta que se llegue a una condicin de parada).

Escuela Politcnica Superior UAM

13/22

Lab. Estructura y Tecnologa de Computadores I (ETC1)

Curso 2005/2006

Zoom

Los siguientes botones permiten cambiar el zoom de las formas de onda:

Cursores

La herramienta permite seguir la situacin de mltiples cursores o marcas, mostrando diferencia de tiempos entre cada marca. Para ello se utilizan los botones del cursor:

Formato y base de representacin

Se puede cambiar tanto el formato como la base de representacin de las seales. Para ello se seleccionan una o ms seales. Si queremos cambiar el formato de representacin se hace clic derecho sobre las seales a cambiar y se elige la opcin Format. Se pueden elegir tres opciones: (a) literal, se utiliza una representacin numrica en la base elegida, (b) lgica, que muestra la forma de onda y (c) sucesos, que muestra nicamente las transiciones de la seales. En el caso de que el formato elegido sea literal se puede elegir la base de representacin la opcin Radix, tambin disponible con clic derecho.
Combinar seales

Se puede optar por mostrar varias seales combinadas como si se tratara de una sola. Esta opcin es muy til en el caso de visualizar seales asociadas a un bus. Se seleccionan todas las seales que se quieren combinar y se elige la opcin ToolsCombine Signals. Para que la combinacin sea efectiva hay que definir los siguientes parmetros: Result name: nombre que se va a asociar al nuevo conjunto de seales. Order to combine selected items: se puede elegir que la primera seal del nuevo bus sea la superior o la inferior. Order of result indexes: el bus resultante llevar ndices ascendentes o descendentes.

Escuela Politcnica Superior UAM

14/22

Lab. Estructura y Tecnologa de Computadores I (ETC1)

Curso 2005/2006

Administracin de proyectos
Snapshot Herramienta que sirve para generar versiones del proyecto. Realiza una copia del directorio donde se encuentra ubicada toda la informacin del proyecto. Las acciones que se pueden realizar son: Project Take Snapshot: genera una nueva versin del proyecto, y queda reflejeda en la pestaa de Snapshot View. Project Make Snapshot Current: para que est habilitada esta opcin tiene que estar seleccionada una snapshot. De esta forma se restablece a la versin que se guard cuando se realiz la snapshot. Archive Permite comprimir utilizando un algoritmo zip estndar todos los archivos que pertenecen al proyecto. Para ello seleccionar Project Archive. Esta herramienta es muy til tanto para guardar en disco un proyecto que no se utilice frecuentemente, como para distribuir nuestros proyectos a otros diseadores. Si el diseo comprimido todava ocupa un tamao considerable se pueden realizar dos simplificaciones ms: Elegir la opcin Project Cleanup Project Files. Borra los ficheros auxiliaries que se generan durante los distintos procesos. Borrar cualquier subdirectorio dentro del directorio del proyecto que haya creado la herramienta (work, xst, __express_prj, _ngo ...)

Ambas son complementarias y obligan a volver a realizar todos los procesos de sntesis e implementacin de nuevo cuando se restaure el proyecto.

Escuela Politcnica Superior UAM

15/22

Lab. Estructura y Tecnologa de Computadores I (ETC1)

Curso 2005/2006

INTRODUCCIN A VHDL
VHDL son las siglas de VHSIC (Very High Speed Integrated Circuit) Hardware Description Language. Como su nombre indica, pertenece a un conjunto de lenguajes especializados en la descripcin de componentes hardware (HDL) 1 . Estos lenguajes son la alternativa que se ha impuesto al diseo mediante esquemticos. Al tratarse de estndares abiertos y aceptados por la industria, facilitan la portabilidad de los diseos entre distintas aplicaciones. Adems cuentan con las mismas funcionalidades que los lenguajes convencionales de programacin, lo cual permite describir las pruebas del diseo utilizando el propio lenguaje. De esta forma se solucionan las dos principales carencias de los lenguajes basados en esquemticos. Hay que tener en cuenta que los lenguajes HDL permiten modelar, especificar y simular sistemas digitales y analgicos, aunque no todos los diseos realizados mediante un HDL pueden ser traducidos a una implementacin real. La transformacin que permite inferir a partir de una descripcin HDL los componentes lgicos necesarios para realizar un sistema real se denomina sintetizar. Aquellos diseos que admiten esta transformacin se denominan sintetizables 2 .

Historia
El lenguaje VHDL naci a principios de los aos 80 como parte de un proyecto del Departamento de Defensa de los Estados Unidos. El objetivo era conseguir un medio de descripcin de circuitos integrados para facilitar el intercambio de informacin entre aplicaciones. Posteriormente, en 1987 el lenguaje fue adoptado como estndar por el IEEE (Std. 1076-1987) denominndose la primera versin VHDL-87. Cinco aos despus se publica la primera revisin dando lugar a VHDL-93.

Fundamentos
Un diseo VHDL se compone de un conjunto de bloques, denominados entidades (entities) conectados entre s por seales (signals). Una entidad presenta una interfaz definida por un conjunto de puertos (ports), mientras que la implementacin queda oculta, es como una caja negra para el resto de circuito. Seales y tipos de datos Una seal permite conectar dos o ms entidades como si se tratara de un cable fsico. Una seal en VHDL, al igual que en la realidad, hay que entenderla como una variacin temporal de un valor. Cada seal tiene un tipo (type) que establece el rango de valores que puede tomar. El lenguaje proporciona un conjunto de tipos bsicos predefinidos como puede ser bit, que admite 0 1, o enteros (integer) desde +(231-1) a (231-1). Los tipos bsicos se pueden extender mediante nuevas definiciones. En esta asignatura se va emplear la biblioteca IEEE 1164, que proporciona tipos de datos que permiten simular el comportamiento de hardware real. Este el caso del tipo std_logic, que simula de forma ms cercana a la realidad los posibles valores que puede tener una seal. Estos se resumen en la Tabla 2.
1

Verilog, junto VHDL, son los dos lenguajes de descripcin hardware ms importantes. Otros lenguajes de menor impacto son ABEL, PALASM. 2 Siguiendo una analoga con el proceso de desarrollo software, un diseo HDL sera similar a un programa descrito en un lenguaje de programacin tradicional (C, Java, Pascal...), y la sntesis de un diseo sera el paso anlogo a la compilacin del cdigo fuente para transformarlo en cdigo mquina.

Escuela Politcnica Superior UAM

16/22

Lab. Estructura y Tecnologa de Computadores I (ETC1)

Curso 2005/2006

Valor U X 0 1 Z W L H -

Significado Sin inicializar Desconocida (corriente fuerte) Cero lgico obtenido con una corriente fuerte Uno lgico obtenido con una corriente fuerte Alta impedancia Desconocida (corriente dbil) Cero lgico obtenido con corriente dbil Uno lgico obtenido con corriente dbil No importa el valor
Tabla 2. Valores posibles del una seal del tipo std_logic

Anlogamente se define el tipo std_logic_vector que permite agrupar lgicamente un conjunto de seales de tipo std_logic.

Operaciones
Las operaciones lgicas definidas para el tipo std_logic son NOT, AND, NAND, OR, NOR, XOR y XNOR.

Entidades
Las entidades son los elementos bsicos del lenguaje VHDL. La definicin de una entidad se compone de dos partes: puertos y arquitectura. Puertos Los puertos constituyen la interfaz de comunicacin de la entidad con el exterior (ver Figura 15). Permiten conectar las seales a la entidad. Un puerto se define por su tipo y por su modo (mode). El tipo establece el tipo de seales que se puede conectar al puerto. El modo define la direccin del puerto. Este puede ser de entrada (in), salida (out), o bidireccional (inout).
nombre de la entidad

funcion A B C D
nombre del puerto

X Y

entity funcion is port ( A, B, C, D: in std_logic; X, Y: out std_logic );


direccin del puerto tipo del puerto

Figura 15. Definicin de los puertos de una entidad

Arquitectura La parte de arquitectura define la implementacin de la entidad. Una misma entidad puede tener asociadas una o ms arquitecturas. La definicin de la arquitectura tiene dos partes: declarativa y el cuerpo (ver Figura 16). En la parte declarativa se incluyen las seales, variables y componentes que se van a emplear dentro del cuerpo de la

Escuela Politcnica Superior UAM

17/22

Lab. Estructura y Tecnologa de Computadores I (ETC1)

Curso 2005/2006

arquitectura. El cuerpo es donde se incluye la implementacin propiamente dicha de la entidad.


entity mux2 is port(A,B,C, D: in std_logic; X, Y: out std_logic); end entity mux2; architecture ejemplo of mux2 is

declaracin de la entidad

nombre de la arquitectura

declaracin de seales, variables, y componentes


begin

nombre entidad

de

la

declaracin de la arquitectura

parte del cdigo que describe el funcionamiento


end architecture ejemplo; Figura 16. Definicin de la arquitectura de una entidad

El cuerpo estar formado por una o ms sentencias. Cada una de las sentencias se ejecuta en paralelo, de forma que no importa el orden en el cual se escriben (ver Figura 17).
library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity funcion4a2 is Port ( A,B,C,D : in std_logic; X, Y : out std_logic); end funcion4a2; architecture DataFlow of funcion4a2 is begin X <= not A and (B or C); Y <= D and (B or C); end DataFlow; Figura 17. Implementacin de la arquitectura utilizando dos sentencias concurrentes

Procesos Un proceso engloba un conjunto de operaciones que se realizan de forma secuencial. Los procesos se definen con la etiqueta process, la cual incluye el nombre del proceso y la lista de sensibilidad (sensitivity list) de seales que disparan el proceso. De tal forma que cada vez que cambia el valor de alguna de las seales incluida en la lista, se ejecutan las instrucciones del proceso. Los procesos se componen de una parte declarativa y de otra procedimental. En la primera se incluyen las seales y variables de mbito local. En la segunda las operaciones secuenciales (ver Figura 18).

Escuela Politcnica Superior UAM

18/22

Lab. Estructura y Tecnologa de Computadores I (ETC1)

Curso 2005/2006

library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity funcion is Port ( A, B, C, D : in std_logic; X, Y : out std_logic; end entity funcion; architecture funcional of funcion is begin p: process (A,B,C,D) begin if (B='1' or C='1') then if (A='0') then X <='1'; else X <='0'; end if; if (D='1') then Y <='1'; else Y <='0'; end if; else X <='0'; Y <='0'; end if; end process p; end architecture funcional;

Figura 18. Implementacin de la arquitectura utilizando procesos

Incluir otras entidades en la arquitectura La implementacin de una entidad se puede definir tambin a partir de otras entidades. Para ello, es necesario incluir una descripcin de la entidad en la parte declarativa de la arquitectura mediante la palabra clave component. Esta vendr descrita por el nombre de la entidad y la definicin de sus puertos. Para cada instancia de la entidad que se quiera emplear, habr que definir un nombre y la correspondencia de las seales con los puertos de la entidad, mediante la etiqueta port map. En el ejemplo que se muestra en la Figura 19 se ha implementado la entidad funcion utilizando las entidades and2, or2, e inv, las cuales se suponen que forman parte de la biblioteca funciones_logicas. De nuevo el orden en que se colocan los port map es irrelevante.

Escuela Politcnica Superior UAM

19/22

Lab. Estructura y Tecnologa de Computadores I (ETC1)

Curso 2005/2006

library IEEE; use IEEE.std_logic_1164.all; use work.funciones_logicas.all; entity funcion is port(A,B,C,D: in std_logic; X,Y: out std_logic); end entity funcion; architecture estructural of funcion is component AND2 port ( I1:in std_logic; I2:in std_logic; O:out std_logic ); end component; component OR2 port ( I1:in std_logic; I2:in std_logic; O:out std_logic ); end component; component INV port ( I:in std_logic; O:out std_logic ); end component; signal Aneg, b_or_c: std_logic; begin u1inv: inv port map (I => A, O => Aneg) ; u2or: or2 port map (I1 => B, I2=> C, O => b_or_c) ; u3and: and2 port map (I1 => Aneg, I2=> b_or_c, O =>X) ; u4and: and2 port map (I1 =>D, I2=> b_or_c, O => Y) ; end architecture estructural;

Figura 19. Implementacin de la arquitectura utilizando puertas lgicas

Estilos de implementacin Tal como se ha podido comprobar, VHDL permite una gran flexibilidad para definir la implementacin de una entidad. En funcin de los ejemplos expuestos se pueden entrever tres enfoques distintos para describir una entidad: descripcin estructural (structural), descripcin funcional (behavioral) o descripcin de flujo de datos (dataflow). La descripcin estructural refleja las entidades que componen la entidad y las conexiones entre ellas, de forma similar a como se representara el circuito utilizando esquemticos. En la descripcin funcional se utiliza un algoritmo que especifica el comportamiento del circuito. Y en la ltima se define cmo vara el flujo de datos desde la entrada a la salida. Nada impide que en un mismo diseo se utilicen los tres enfoques a la vez (ver Figura 20).

Escuela Politcnica Superior UAM

20/22

Lab. Estructura y Tecnologa de Computadores I (ETC1)

Curso 2005/2006

Recomendaciones para realizar cdigo sintetizable


Tener siempre presente que el objetivo es realizar un diseo hardware y no un programa software. Esto implica que para poder sintetizar nuestro cdigo se tienen que poder inferir fcilmente los bloques digitales bsicos (flip-flops, registros, multiplexores, puertas lgicas). Intentar seguir la filosofa de diseo RTL (flujo de datos). NO utilizar estructuras de control iterativas (for, while, loop) dentro de las entidades. Incluir en la lista de sensibilidad del proceso TODAS las seales de entrada al proceso. Contemplar TODOS los casos posibles en estructuras de seleccin como if..then 3 . Para ello ser necesario incluir SIEMPRE terminar con la sentencia else.

library IEEE; use IEEE.std_logic_1164.all; use work.funciones_logicas.all; entity funcion is port(A,B,C,D: in std_logic; X, Y: out std_logic); end entity funcion; architecture mezcla of funcion is component inv port ( I: in std_logic ; O: out std_logic; ); end component; signal Aneg, b_or_c: std_logic; begin p: process (B, C) begin if (B= '1') OR (C='1') then b_or_c <= '1'; else b_or_c <='0'; end if; u1:inv port map (I =>A, O=>Aneg); X <= Aneg and b_or_c; Y <= D and b_or_c; end process p; end architecture mezcla;

Figura 20. Implementacin de la arquitectura utilizando una mezcla de enfoques

If..then..elsif, case, when

Escuela Politcnica Superior UAM

21/22

Lab. Estructura y Tecnologa de Computadores I (ETC1)

Curso 2005/2006

PRCTICA OPCIONAL
En esta seccin se plantea una prctica opcional que permitir al alumno adquirir soltura en el manejo de la herramienta ISE-Xilinx y VHDL. Para ello se pide implementar la funcin lgica propuesta (ver Tabla 1) mediante una arquitectura estrictamente estructural, basndose en el esquemtico de la Figura 2. Los pasos a seguir son: Crear un nuevo proyecto con el nombre <grupo><pareja>P0opc. Crear y aadir al proyecto una nueva entidad INV que represente al inversor y que tendra un nico puerto de entrada (I) y otro de salida (O). Crear y aadir al proyecto una nueva entidad AND2 que represente a la puerta lgica AND de dos entradas. Tendr dos puertos de entrada (I1, I2) y uno de salida (O). Crear y aadir al proyecto una nueva entidad OR2 que represente a la puerta lgica OR de dos entradas. Tendr dos puertos de entrada (I1, I2) y uno de salida (O). Crear y aadir al proyecto la entidad funcion4a2 e implementarla a partir de las puertas lgicas definidas anteriormente basndose en el cdigo de la Figura 19. Crear un testbench con la herramienta HDL Bencher De la misma forma que se hizo en el apartado de Verificacin funcional. Si todo marcha correctamente, la ventana de fuentes del proyecto tendr que ser similar a la Figura 21. Realizar la simulacin funcional utilizando ModelSim.

Figura 21. Aspecto de la ventana de fuentes del proyecto tras aadir todas las entidades y el testbench

Escuela Politcnica Superior UAM

22/22

You might also like