Post on 14-Jan-2016
description
7/18/2019 Manual de Vhdl Utilizando Xilinx-Ise(2)
http://slidepdf.com/reader/full/manual-de-vhdl-utilizando-xilinx-ise2 1/22
Lab. Estructura y Tecnología de Computadores I Curso 2002/2003
Práctica 0
Manual de VHDL utilizando Xilinx-ISE
Autores:Pablo Haya, Gustavo Sutter.
Escuela Politécnica Superior - UAM
OOBBJJEETTIIVVOO El objetivo de este manual es presentar los fundamentos básicos del lenguaje de
especificación hardware VHDL. El manual consta de tres partes: en la primera se
mostrará paso a paso como especificar y simular un diseño lógico con VHDL utilizando
la herramientas herramientas comerciales, ISE, perteneciente a la empresa Xilinx y ModelSim, comercializada por la empresa ModelWork . La segunda parte del manual
presenta una breve introducción a VHDL. En la última se planteará un ejercicio a
resolver por el alumno.
Flujo de diseño
FIN
FALLO
OK Problema
SI Verificación Síntesis Diseño
NO
Figura 1 Flujo de diseño que se va a seguir en la asignatura
El flujo de diseño se divide en tres etapas claramente diferenciadas:
1. Diseño: en esta fase el diseñador plasma los requerimientos del sistema
utilizando un lenguaje formal de representación. Este puede ser gráfico o
textual. Actualmente en el diseño de circuitos digitales se utilizan:
• Herramientas gráficas de captura de esquemáticos.
• Lenguajes de diseño de hardware (hdl ): describen los
componentes del sistema utilizando una descripción textual.
Los dos lenguajes más extendidos en la industria son VHDL y
Verilog.
2. Síntesis: esta fase sólo es necesaria en el caso de utilizar un lenguaje hdl . Estoslenguajes son independientes de la tecnología que se utilice para implementar el
sistema. Por otro lado permiten mucha flexibilidad para describir el diseño, más
Escuela Politécnica Superior – UAM 1/22
7/18/2019 Manual de Vhdl Utilizando Xilinx-Ise(2)
http://slidepdf.com/reader/full/manual-de-vhdl-utilizando-xilinx-ise2 2/22
Lab. Estructura y Tecnología de Computadores I Curso 2002/2003
allá de una representación estructural. Esta fase será la encargada de convertir la
representación hdl del diseño a un formato estándar de representación.
3. Verificación: Una vez sintetizado el diseño es necesario verificar si cumple con
las especificaciones del problema. Para ello realizaremos un banco de prueba
(testbench) que prueba lo más exhaustivamente posible el diseño
Requisitos del problemaComo ejemplo se va a implementar en VHDL una función lógica de cuatro entradas
y dos salidas que responde a la siguinte tabla de verdad:
D C B A X Y
0 0 0 0 0 0
0 0 0 1 0 0
0 0 1 0 1 00 0 1 1 0 0
0 1 0 0 1 0
0 1 0 1 0 0
0 1 1 0 1 0
0 1 1 1 0 0
1 0 0 0 0 0
1 0 0 1 0 0
1 0 1 0 1 11 0 1 1 0 1
1 1 0 0 1 1
1 1 0 1 0 1
1 1 1 0 1 1
1 1 1 1 0 1
Tabla 1. Función lógica problema
Esto se puede expresar de la siguiente manera:
X = AB + ACY= DB + DC (1)
Sacando factor común, las dos ecuaciones quedan en función de (B+C):
X = A(B + C)Y= D(B + C)
(2)
Escuela Politécnica Superior – UAM 2/22
7/18/2019 Manual de Vhdl Utilizando Xilinx-Ise(2)
http://slidepdf.com/reader/full/manual-de-vhdl-utilizando-xilinx-ise2 3/22
Lab. Estructura y Tecnología de Computadores I Curso 2002/2003
En un diseño basados en esquemáticos se necesitan cinco puertas lógicas para
implementar la formula (1) necesitan 6 puertas lógicas(4 AND, 2 OR y 1 inversor),
mientras que en la formula(2) al compartir ambas ecuaciones el termino (B+C) sólo son
necesarias cuatro puertas (ver Figura 2.)
Figura 2. Esquemático de la función lógica propuesta
Project Navigator/Design Manager (Gestor de diseños)El Project Navigator es una herramienta distribuida por Xilinx que se encarga gestionar
todos las etapas del flujo de diseño. Esta herramienta es una interfaz que se monta sobre
todo el conjunto de programas que participan en el diseño. Cada uno de estos programas
actúa sobre un etapa concreta del diseño. El Project Navigator ayuda:
• A conectarlos entre sí de manera coherente siguiendo el flujo de diseño
• Homogeneiza las llamadas a los programas utilizando una misma interfaz
independiente de si el proveedor del programa es Xilinx o una empresa externa
• Mantiene un control de versiones del proyecto.
El Project Navigator se divide en cuatro ventanas. En la esquina superior izquierda se
muestran las distintas fuentes de diseño que pertenecen al proyecto organizadas
jerárquicamente. 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 laventana 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 diseño 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 sitúa a la derecha y es un editor de HDL.
Escuela Politécnica Superior – UAM 3/22
7/18/2019 Manual de Vhdl Utilizando Xilinx-Ise(2)
http://slidepdf.com/reader/full/manual-de-vhdl-utilizando-xilinx-ise2 4/22
Lab. Estructura y Tecnología de Computadores I Curso 2002/2003
Figura 3. Interfaz gráfica del Gestor de Proyector
El proceso de diseño del Project Navigator parte de la creación de un proyecto:
1. Arrancar la aplicación Project Navigator . Para ello se puede pulsar a
través del icono que se encuentra en el escritorio o acceder mediante
el menú de Inicio → Programas → Xilinx ISE 4 → Project Manager.
2. ( New Project ) Crear un nuevo proyecto: File → New Project
Se despliega una nueva ventana ( New Project) donde hay que configurar los parámetros
del proyecto.
Figura 4. Pantalla de creación de un nuevo proyecto
Introduciremos un nombre de proyecto con el formato “<grupo><pareja>P0”, siendo
grupo 1a, 1b, 1c ...y pareja el número de pareja (utilizar dos dígitos, 01,02 .., 20, ..) que
está realizando la práctica. También elegiremos un directorio que haga referencia al
grupo (siempre en el disco D: ). El resto de las opciones del proyecto las elegiremos tal
como muestra la Figura 4.
Escuela Politécnica Superior – UAM 4/22
7/18/2019 Manual de Vhdl Utilizando Xilinx-Ise(2)
http://slidepdf.com/reader/full/manual-de-vhdl-utilizando-xilinx-ise2 5/22
Lab. Estructura y Tecnología de Computadores I Curso 2002/2003
• Device Family: permite elegir la familia de FPGA que se va a utilizar (XC4000,
Spartan, Spartan2, Virtex). Utilice una Spartan modelo xc2s200e-6pq208.
• Device: dentro de la familia seleccionada indica la FPGA en concreto donde se
va implementar el diseño.
• Design Flow: indica el tipo de entrada de diseño que se va utilizar. En esta
pestaña aparecerá una lista de los sintetizadores de VHDL o Verilog que se esténinstalados. Siempre dará la opción de utilizar como entrada un fichero de tipo
EDIF. Elegia el sintetizador XST para VHDL.
Si todo está correcto, aparecerán dos nuevas entradas dentro de la ventana de Fuentes de
Diseño del proyecto. Una con el nombre del proyecto, y la otra con el nombre del
dispositivo FPGA y el tipo de entrada seleccionada(xc2s200e-6pq208-XST VHDL).
Ahora estamos listo para realizar y añadir nuestros diseño al proyecto.
Diseño
En esta fase vamos a plasmar los requisitos del proyecto. Para ello necesitamos elegirun lenguaje de representación que nos permite expresar formalmente nuestro diseño
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 Manager .
1. Seleccionamos añadir nueva fuente ( New Source) tal como indica en la Figura 5
Figura 5. ¿ Cómo añadir un nuevo fichero HDL ?
2. ( New) 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.
Escuela Politécnica Superior – UAM 5/22
7/18/2019 Manual de Vhdl Utilizando Xilinx-Ise(2)
http://slidepdf.com/reader/full/manual-de-vhdl-utilizando-xilinx-ise2 6/22
Lab. Estructura y Tecnología de Computadores I Curso 2002/2003
Figura 6. Pantalla para crear un nuevo proyecto
3. ( Define VHDL Source) Definimos la entradas y salidas de nuestros problema,
para cada una indicamos si el nombre de la señal, la dirección (in, out, inout ) y
en el caso de que queramos un std_logic_vector , el número de bits y la
disposición de estos. Rellenamos la plantilla siguiendo la Figura 7:
Figura 7. Pantalla para definir los puertos de una entidad
Escuela Politécnica Superior – UAM 6/22
7/18/2019 Manual de Vhdl Utilizando Xilinx-Ise(2)
http://slidepdf.com/reader/full/manual-de-vhdl-utilizando-xilinx-ise2 7/22
Lab. Estructura y Tecnología de Computadores I Curso 2002/2003
4. ( New Source Information) En la siguiente pantalla comprobamos que los
parámetros introducidos son correctos, y los aceptamos si son correctos.
5. Rellenamos el código VHDL que falta para completar nuestro diseño según la
Figura 8.
--------------------------------------------------------------------------- Nombre: funcion4a2-- Fichero: funcion4a2.vhd-- Descripción: Funcion lógica de 4 entradas y dos salida que-- 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
beginX <= not A and (B or C);Y <= D and (B or C);;
end DataFlow;
Figura 8. Código VHDL que implementa la función lógica problema
Si todos los pasos son correctos deberemos tener una nueva entrada de diseño asociadaal proyecto. El siguiente paso que tenemos quedar es comprobar si es posible sintetizar
nuestro nuevo diseño.
SíntesisEn esta fase se traduce el código HDL en un representación a nivel de puerta lógicas en
un formato estándar. En este proceso el sintetizador seleccionado deberá inferir del
código HDL los componentes clásicos del diseño tales como máquinas de estados,
contadores, decodificadores... Debido a la flexibilidad que proveen los lenguajes HDL,
el diseñador tiene que tener especial cuidado en desarrollar código fácilmente
sintetizable.
Escuela Politécnica Superior – UAM 7/22
7/18/2019 Manual de Vhdl Utilizando Xilinx-Ise(2)
http://slidepdf.com/reader/full/manual-de-vhdl-utilizando-xilinx-ise2 8/22
Lab. Estructura y Tecnología de Computadores I Curso 2002/2003
Los procesos disponibles en la fase de síntesis se muestran en la Figura 9. Para realizar
la fase de síntesis, pulsar con el botón derecho en Synthesize y elegir la opción Run.
Estos se realizan de manera secuencial. Al final los resultados de todos los procesos se
resumen en la carpeta de informes (View Reports). Si todo ha ido correctamente se
podrá pasar a la siguiente fase.
Figura 9. Procesos disponibles en la fase de síntesis
Verificación funcionalLa etapa de verificación se va a realizar utilizando un herramienta de simulación que no
pertenece a Xilinx. Esta se llama ModelSim y pertenece a la empresa ModelWorks. 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 algún error. En nuestro caso
realizar el testbench es sencillo y exhaustivo, ya que la entidad implementa una función
lógica de la cual conocemos para cada entrada cual es su salida. Lo cual no suele ocurrir
en casos reales, en los cuales o bien el número de entradas es excesivo para probrarlo
todos los vectores en un tiempo razonable, o bien se desconocen parcialmente las
salidas del problema.
El primer paso de la fase de verificación es crear el fichero de testbench. Para ello
vamos a emplear una herramienta gráfica de ISE que nos va a evitar tener que escribir el
código.
1. Seleccionamos añadir nueva fuente ( New Source) (ver paso 1 del apartado
diseño)
2. ( New) Seleccionamos la plantilla Test Bench WaveForm, y le asignamos un
nombre a al testbench que vamos a generar. Es recomendable emplear alguna
regla nemotécnica que relaciona el nombre del testbench con el nombre de la
entidad. En nuestro caso añadiremos a todos los testbench que creemos el prefijo
‘tb_ ’. Así nos queda el nombre tb_funcion4a2. Por último, nos aseguramos quela casilla Add to Project se encuentra activada.
3. (Select ) En la siguiente pantalla asociamos el testbench con la entidad que
queremos probar ( Associate with Source). Para ello tenemos que elegir una de
las fuentes de diseño de entre todas las que consta el proyecto. Como sólo
tenemos una basta con apretar el botón Siguiente.
4. ( New Source Information) Comprobamos que los parámetros introducidos son
correctos antes de pulsar el botón Finalizar.
5. ( Initialize Timing ) Si no hay ningún error nos aparecerá la pantalla de la Figura
10:
Escuela Politécnica Superior – UAM 8/22
7/18/2019 Manual de Vhdl Utilizando Xilinx-Ise(2)
http://slidepdf.com/reader/full/manual-de-vhdl-utilizando-xilinx-ise2 9/22
Lab. Estructura y Tecnología de Computadores I Curso 2002/2003
Figura 10. Ventana de configuración de la temporización del testbench
Esta ventana permite establecer los parametros temporales de la simulación.
Dependiendo de si nuestro circuito es secuencial (gobernado por un reloj) o
combinacional seleccionaremos la opción Master clock o Combinatorial Design.
Seleccionamos esta última ya que nuestro diseño es puramente combinacional. A
continuación configuramos la temporización del testbench. Para ello debemos
decidir dos parámetros: (a) cuánto margen vamos a dejar desde que introducidimos
una entrada hasta que comprobamos si la salida es correcta (Wait to check ), y (b)
cuánto esperamos para introducir una nueva entrada. Estos tiempos dependerán del
retrado 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 el retardo es cero, así que dejamos los parámetros por defecto, y pulsamos OK .
6. Aparecen dos ventanas, una correspondiente a la aplicación HDL Bencher (ver
Figura 11) y otra con el código VHDL de la entidad que estamos probando. Esta
última sólo no permite realizar ninguna modificación, y sirve únicamente para
consultar el código de la entidad.
Escuela Politécnica Superior – UAM 9/22
7/18/2019 Manual de Vhdl Utilizando Xilinx-Ise(2)
http://slidepdf.com/reader/full/manual-de-vhdl-utilizando-xilinx-ise2 10/22
Lab. Estructura y Tecnología de Computadores I Curso 2002/2003
Figura 11. Herramienta HDL Bencher
La herramienta HDL Bencher permite configurar visualemente la forma de onda de
los vectores de entrada y de la sálida esperada. A continuación habrá que reproducir
la tabla de verdad de la función lógica (ver ...). Para ello hay que tener en cuenta quecada fila de la función lógica 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 señal, el método
más sencillo es pulsar doble click sobre la primera casilla (intervalo cero), introducir
el valor, y pulsar el tabulador para pasar a la siguiente. Debermos rellenar hasta el
intervalo 1500 ns. Podemos utilizar los botones de Zoom In y Zoom out para ajustar
las señales a la pantalla.
Una vez rellenadas todas los vectores de entrada y las salidas esperadas debemos
obtener la ventana de la Figura 12.
Figura 12. Resultado final del testbench
7. Una vez completadas todas las señales pulsamos el botón de Save Waveform.
En este punto tendrá que aperecer en el testbench generado ( tb_funcion4a2.tbw)
asociado a la entidad funcion4a2. Como curiosidad podemos ver el código VHDL del
testbench abriendo el fichero tb_funcion4a2.vhw que se encuentra en el directorio del
proyecto.
Si seleccionamos la fuente del testbench (tb_funcion4a2.tbw), en la ventana inferioraparecerán los procesos asociados al testbench (ver Figura 13). Este conjunto de
Escuela Politécnica Superior – UAM 10/22
7/18/2019 Manual de Vhdl Utilizando Xilinx-Ise(2)
http://slidepdf.com/reader/full/manual-de-vhdl-utilizando-xilinx-ise2 11/22
Lab. Estructura y Tecnología de Computadores I Curso 2002/2003
procesos se corresponden con los diferentes hitos en los cuales se recomienda realizar la
verificación del diseño. Se va a ejecutar el proceso de verificación funcional (Simulate
Behavioral VHDL Model ), es decir, comprobar que el diseño realizado funciona
correctamente sin tener en cuenta ningún tipo de restricción temporal.
Figura 13. Conjunto de procesos asociados al testbench
ModelSimPulsamos dos veces seguidas sobre el proceso Simulate Behavioral VHDL Model . De
esta forma se lanzará la aplicación de simulación asociada al Project Navigator . En el
caso del laboratorio es Model Sim 5.5f . La simulación se ejecutará automáticamente
dando como resultado en la consola de ModelSim:
# Loading work.funcion4a2(dataflow)
….
# ** Failure: Simulation successful (not a failure). No problems detected.
# Time: 1600 ns Iteration: 0 Instance: /testbench
Es posible que el tiempo de simulación por defecto (Options→Simulation→Default 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
instrucción run –all .
VSIM 2> run -all
Si ha habido algún error en la simulación, leer el mensaje de error, cerrar el ModelSim y
revisar tanto el código VHDL y com el testbench hasta encontrar el fallo.
Si la simulación se ejecuta correctamente aparecerán las siguientes ventanas:
Escuela Politécnica Superior – UAM 11/22
7/18/2019 Manual de Vhdl Utilizando Xilinx-Ise(2)
http://slidepdf.com/reader/full/manual-de-vhdl-utilizando-xilinx-ise2 12/22
Lab. Estructura y Tecnología de Computadores I Curso 2002/2003
Señales (signals):
Figura 14. Ventana de señales de ModelSim
Esta ventana contiene la señales, tanto de entrada como de salida, que intervienen en la
simulación.
Lista (List):Lista de señales y el estado actual de cada una. Si no se despliega esta ventana
seleccionar View → List → Signals in Region dentro de la ventana de señales. Muestra la
evolución de la señales en el tiempo. Muestra una línea por cada cambio que ocurre en
el vector de salida.
Figura 15. Ventana de lista de señales
Escuela Politécnica Superior – UAM 12/22
7/18/2019 Manual de Vhdl Utilizando Xilinx-Ise(2)
http://slidepdf.com/reader/full/manual-de-vhdl-utilizando-xilinx-ise2 13/22
Lab. Estructura y Tecnología de Computadores I Curso 2002/2003
Formas de Ondas (Wave):
Figura 16. Ventana de visualización de formas de ondas
En esta ventana se visualiza una representación gráfica de la evolución de la simulación
a lo largo del tiempo. Utilizando el botón de zoom etiquetado como Zoom de toda la
zona de simulación(ver apartado de Zoom) podemos ajustar el resultado final a la
ventana.
A continuación se detallan las distintas opciones de la ventana Formas de Onda.
Control de la simulación
Se puede controlar la ejecución de la simulación mediante los siguientes botones:
• Stop Wave Drawing : para la simulación.
• Restart : inicializa la simulación para poder realizar una nueva ejecución.
• Run: simula durante un tiempo igual al tiempo de simulación.
• Continue Run: realiza una simulación de forma indefinida.
Escuela Politécnica Superior – UAM 13/22
7/18/2019 Manual de Vhdl Utilizando Xilinx-Ise(2)
http://slidepdf.com/reader/full/manual-de-vhdl-utilizando-xilinx-ise2 14/22
Lab. Estructura y Tecnología de Computadores I Curso 2002/2003
Zoom
Probar a obtener una visualización completa de la simulación utilizando los botones de
Zoom:
Cursores
La herramienta permite grabar la situación del cursor en diferentes puntos, mostrando
diferencia de tiempos entre cada marca. Para ello se utilizan los botones del cursor:
Formato y base de representación
Se puede cambiar tanto el formato como la base de representación de las señales. Para
ello seleccionar una o más señales. Si queremos cambiar el formato de representación:
Format → Format . Se pueden elegir tres opciones: (a) literal, se utiliza una
representación numérica en la base elegida. (b) lógica, que muestra la forma de onda y
(c) sucesos, que muestra únicamente las transiciones de la señales. En el caso de que el
formato elegido sea literal se puede elegir la base de representación mediante
Format → Radix.
Combinar señales
Se puede optar por mostrar varias señales combinadas como si se tratara de una sola.Esta opción es muy útil en el caso de visualizar señales asociadas a un bus. Se
selecciona todas las señales que se quieren combinar y se elige la opción Edit
→ Combine. Para que la combinación sea efectiva que definir los siguientes parámetros:
• Nombre: nombre que se va a asociar al nuevo conjunto de señales
• Orden de las señales: este puede ser ascendente o descendente. Indica a partir de
que dirección se empieza a computar el bit menos significativo.
• Si se quiere eliminar de la ventana de Ondas las señales después de combinarlas.
Escuela Politécnica Superior – UAM 14/22
7/18/2019 Manual de Vhdl Utilizando Xilinx-Ise(2)
http://slidepdf.com/reader/full/manual-de-vhdl-utilizando-xilinx-ise2 15/22
Lab. Estructura y Tecnología de Computadores I Curso 2002/2003
Administración de proyectos
Snapshot
Herramienta que sirve para generar versiones del proyecto. Realiza una copia del
directorio donde se encuentra ubicada toda la información del proyecto. Las acciones
que se pueden realizar son:
• Project → Take a snapshot : genera una nueva versión del proyecto, y queda
reflejeda en la pestaña de Snapshot View.
• Project → Replace with snapshot : para que es habilitada esta opción tiene que
estar seleccionada una snapshot . De esta forma se restablece a la versión que se
guardó cuando se realizó la snapshot.
Comprimir
Permite comprimir utilizando un algoritmo zip estándar todos los archivos que
pertenecen al proyecto. Esta herramienta es muy útil tanto para guardar en disco
proyecto que no se utilice frecuentemente, como para distribuir nuestros proyectos aotros diseñadores.
Si el diseño comprimido todavía ocupa un tamaño considerable se pueden realizar dos
simplificaciones más:
• Eligir la opción Project → Delete Implementation Data.
• 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
sintetización e implementación de nuevo cuando se restaure el proyecto.
Escuela Politécnica Superior – UAM 15/22
7/18/2019 Manual de Vhdl Utilizando Xilinx-Ise(2)
http://slidepdf.com/reader/full/manual-de-vhdl-utilizando-xilinx-ise2 16/22
Lab. Estructura y Tecnología de Computadores I Curso 2002/2003
IINNTTR R OODDUUCCCCIIÓÓNN AA VVHHDDLL 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 descripción de componentes hardware (HDL)1. Estos lenguajes son
la alternativa que se ha impuesto al diseño mediante esquemáticos. Al tratarse deestándares abiertos y aceptados por la industria, facilitan la portabilidad de los diseños
entre distintas aplicaciones. Además cuentan con las mismas funcionalidades que los
lenguajes convencionales de programación, lo cual permite describir las pruebas del
diseño utilizando el propio lenguaje. Solucionando así, la dos principales carencias de
los lenguajes basados en esquemáticos.
Hay que tener en cuenta que los lenguajes HDL permite modelar, especificar y simular
sistemas digitales y analógicos, aunque no todos los diseños realizados mediante un
HDL pueden ser traducidos a una implementación real. La transformación que permite
inferir a partir de una descripción HDL los componentes lógicos necesarios para realizar
un sistema real se denomina sintetizar. Aquellos diseños que admiten esta
transformación se denominan sintetizables2.
HistoriaEl lenguaje VHDL nació a principios de los anos 80 como parte de un proyecto del
Departamento de Defensa de los Estados Unidos. El objetivo era conseguir un medio de
descripción de circuitos integrados para facilitar el intercambio de información entre
aplicaciones. Posteriormente, en 1987 el lenguaje fue adoptado como estándar por el
IEEE (Std. 1076-1987) denominándose la primera versión VHDL-87. Cinco años
después se publica la primera revisión dando lugar a VHDL-93.
FundamentosUn diseño VHDL se compone de un conjunto de bloques, denominados entidades(entities) conectados entre sí por señales ( signals). Una entidad presenta una interfaz
definida por un conjunto de puertos ( ports), mientras que la implementación queda
oculta, es como una “caja negra” para el resto de circuito.
Señales y tipos de datos
Una señal permite conectar dos o más entidades como si se tratara de un cable físico.
Una señal en VHDL, al igual que en la realidad, hay que entenderla como una variación
temporal de un valor. Cada señal tiene un tipo (type) que establece el rango de valoresque puede tomar. El lenguaje proporciona un conjunto de tipo s básicos predefinidos
como puede sen bit que admite 0 ó 1 o enteros (integer ) desde +(231-1) a –(231-1). Los
tipos básicos se pueden extender mediante nuevas definiciones. En esta asignatura se va
emplear la librería 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
más cercana a la realidad los posibles valores que puede tener una señal. Estos se
resumen en la Tabla 2.
1 Verilog, junto VHDL, son los dos lenguajes de descripción hardware más importantes. Otros lenguajesde menor impacto son ...2
Siguiendo una analogía con el proceso de desarrollo software, un diseño HDL sería similar a programadescrito en un lenguaje de programación tradicional (C, Java, Pascal...), y la sintetización de un diseñosería el paso análogo a la compilación del código fuente para transformarlo en código máquina.
Escuela Politécnica Superior – UAM 16/22
7/18/2019 Manual de Vhdl Utilizando Xilinx-Ise(2)
http://slidepdf.com/reader/full/manual-de-vhdl-utilizando-xilinx-ise2 17/22
Lab. Estructura y Tecnología de Computadores I Curso 2002/2003
Valor Significado
‘U’ Sin inicializar
‘X’ Desconocida (corriente fuerte)
‘0’ Cero lógico obtenido con una corriente fuerte
‘1’ Uno lógico obtenido con una corriente fuerte
‘Z’ Alta impedancia‘W’ Desconocida (corriente fuerte)
‘L’ Cero lógico obtenido con corriente débil
‘H’ Uno lógico obtenido con corriente débil
- No importa el valor
Tabla 2. Valores posibles del una señal del tipo std_logic
Análogamente se define el tipo std_logic_vector que permite agrupar lógicamente un
conjunto de señales de tipo std_logic.
OperacionesLas operaciones lógicas definidas para el tipo std_logic son AND, NAND, OR, NOR,
XOR y XNOR.
EntidadesLas entidades son el elemento básico del lenguaje VHDL. La definición de una entidad
se compone de dos partes: puertos y arquitectura.
Puertos
Los puertos son la puerta de comunicación de la entidad con el exterior (ver Figura 17).
Permiten conectar las señales a la entidad. Un puerto se define por su tipo y por su
modo (mode). El tipo establece el tipo de señales que se puede conectar al puerto. El
modo define la dirección del puerto. Este puede ser de entrada (in), salida (out ), o
bidireccional (inout ).
nombre de la
entidad
tipo del
puerto dirección del
puerto nombre del
puerto
entity funcion isport (
A, B, C, D: in std_logic;X, Y: out std_logic
);
funcion
C
D
B
Figura 17. Definición de los puertos de una entidad
Arquitectura
La parte de arquitectura define la implementación de la entidad. Una misma entidad
puede tener asociado una o más arquitecturas. La definición de la arquitectura tiene dos
partes: declarativa y el cuerpo(ver Figura 18). En la parte declarativa se incluyen las
señales, variables y componentes que se van a emplear dentro del cuerpo de la
Escuela Politécnica Superior – UAM 17/22
7/18/2019 Manual de Vhdl Utilizando Xilinx-Ise(2)
http://slidepdf.com/reader/full/manual-de-vhdl-utilizando-xilinx-ise2 18/22
Lab. Estructura y Tecnología de Computadores I Curso 2002/2003
arquitectura. El cuerpo es donde se incluye la implementación propiamente dicha de la
entidad.
Figura 18. Definición de la arquitectura de una entidad
El cuerpo estará formado por una o más sentencias. Cada una de las sentencias se
ejecuta en paralelo, de forma que el no importa el orden en el cual se escriben. (ver
Figura 19)
entity mux2 is port(A,B,C, D: in std_logic; X, Y: out std_logic);
end entity mux2;
architecture ejemplo of mux2 is
begin
end architecture ejemplo;
nombre de la arquitectura
parte del código que
describe
nombre de la
entidad
declaración de señales,
variables, y componentes declaración de la
arquitectura
declaración de la entidad
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
beginX <= not A and (B or C);Y <= D and (B or C);;
end DataFlow;
Figura 19. Implementación de la arquitectura utilizando dos sentencias concurrentes
Procesos
Un proceso engloba a 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 señales que disparan el proceso. De tal forma
que cada vez que cambia el valor de alguna de las señales incluida en la lista, se ejecuta
las instrucciones del proceso. Los procesos se componen de una parte declarativa y de
otra procedimental. En la primera se incluyen las señales y variables de ámbito local. En
la segunda las operaciones secuenciales (ver Figura 20).
Escuela Politécnica Superior – UAM 18/22
7/18/2019 Manual de Vhdl Utilizando Xilinx-Ise(2)
http://slidepdf.com/reader/full/manual-de-vhdl-utilizando-xilinx-ise2 19/22
Lab. Estructura y Tecnología de Computadores I Curso 2002/2003
Escuela Politécnica Superior – UAM 19/22
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';
elseX <='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 20. Implementación de la arquitectura utilizando procesos
Incluir otras entidades en la arquitectura
La implementación de un entidad se puede definir también a partir de otras entidades.Para ello, es necesario incluir una descripción de la entidad en la parte declarativa de la
arquitectura mediante la la palabra clave component. Esta vendrá descrita por el
nombre de la entidad y la definición de sus puertos. Para cada instancia de la entidad
que se quiera emplear, habrá que definir un nombre y la correspondencia de las señales
con los puertos de la entidad, mediante la etiqueta port map. En el ejemplo que se
muestra en la Figura 21 se ha implementado la entidad funcion utilizando las entidades
and2, or2, e inv, las cuales se suponen que forman parte de la librería
funciones_logicas. De nuevo el orden en que se colocan los port map es irrelevante.
7/18/2019 Manual de Vhdl Utilizando Xilinx-Ise(2)
http://slidepdf.com/reader/full/manual-de-vhdl-utilizando-xilinx-ise2 20/22
Lab. Estructura y Tecnología de Computadores I Curso 2002/2003
Escuela Politécnica Superior – UAM 20/22
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 21. Implementación de la arquitectura utilizando puertas lógicas
Estilos de implementación
Tal como se ha podido comprobar VHDL permite una gran flexibilidad para definir la
implementación de una entidad. En función de los ejemplos expuesto se puede entreveertres enfoques distintos para describir una entidad: descripción estructural ( structural ),
descripción funcional (behavioral ) o descripción de flujo de datos (dataflow). La
descripción estructural refleja las entidades que componen la entidad y las conexiones
entre ellas, de forma similar a cómo se representaría el circuito utilizando esquemáticos.
En la descripción funcional se utiliza un algoritmo que especifica el comportamiento del
circuito. Y en la última se definen cómo varía el flujo de datos desde la entrada a la
salida. Nada impide que en un mismo diseño se utilizen los tres enfoques a la vez (ver
Figura 22).
7/18/2019 Manual de Vhdl Utilizando Xilinx-Ise(2)
http://slidepdf.com/reader/full/manual-de-vhdl-utilizando-xilinx-ise2 21/22
Lab. Estructura y Tecnología de Computadores I Curso 2002/2003
Recomendaciones para realizar código sintetizable• Tener siempre presente que el objetivo es realizar un diseño hardware no un
programa software. Esto implica que para poder sintetizar de nuestro código se
tienen que poder inferir fácilmente los bloques digitales básicos (flip-flops,
registros, multiplexores, puertas lógicas)
• Intentar seguir la filosofía de diseño 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 señales de entrada al
proceso.
• Contemplar TODOS los casos posibles en estructuras de selección como if ..then3.
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';
elseb_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 22. Implementación de la arquitectura utilizando una mezcla de enfoques
3 If ..then..elsif , case, when
Escuela Politécnica Superior – UAM 21/22
7/18/2019 Manual de Vhdl Utilizando Xilinx-Ise(2)
http://slidepdf.com/reader/full/manual-de-vhdl-utilizando-xilinx-ise2 22/22
Lab. Estructura y Tecnología de Computadores I Curso 2002/2003
PPR R ÁÁCCTTIICCAA OOPPCCIIOONNAALL En esta sección se plantea una práctica opcional que permitirá al alumno adquirir soltura
en el manejo de la herramienta ISE-Xilinx. Para ello se pide implementar la función
lógica propuesta (ver Tabla 1) mediante una arquitectura estrictamente estructural,
basándose en el esquemático de la Figura 2. Los pasos a seguir son:
• Crear un nuevo proyecto con el nombre <grupo><pareja>P0opc
• Crear y añadir al proyecto un nueva entidad INV con dos puertos (I: instd_logic, O: out std_logic) que implemente un inversor ( O <= not I).
• Crear y añadir al proyecto un nueva entidad AND2 con tres puertos (I1, I2: instd_logic, O: out std_logic) que implemente una puerta lógica and dos entradas
( O <= I1 and I2).
• Crear y añadir al proyecto un nueva entidad OR2 con dos puertos (I1,I2: instd_logic, O: out std_logic) que implemente una puerta lógica and dos entradas
( O <= I1 or I2).• Crear y añadir al proyecto la entidad funcion4a2 e implementarla a partir de las
puertas lógicas definidas anteriormente basándose en el código de Figura 21.
• Crear un testbench con la herramienta HDL Bencher . También se puede copiar
el archivo tb_funcion4a2.tbw creado en la práctica de introducción en el
directorio de este proyecto y añadirlo al proyecto ( Add Source).
• Si todo marcha correctamente tendrá la ventana de procesos tendrá que ser
similar a la Figura 23.
• Realizar la simulación funcional utilizando ModelSim.
Figura 23 Aspecto de la ventana de Fuentes de Diseño tras añadir todas las entidades y el testbench