Está en la página 1de 22

Lab.

Estructura y Tecnologa de Computadores I

Curso 2002/2003

Prctica 0

Manual de VHDL utilizando Xilinx-ISE


Autores:
Pablo Haya, Gustavo Sutter.
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 como especificar y simular un diseo lgico 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 introduccin a VHDL. En la ltima se plantear un ejercicio a
resolver por el alumno.

Flujo de diseo
FALLO

Problema

Diseo

Sntesis

OK

SI
Verificacin

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

Curso 2002/2003

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 siguinte tabla de verdad:
D

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)

Escuela Politcnica Superior UAM

(2)

2/22

Lab. Estructura y Tecnologa de Computadores I

Curso 2002/2003

En un diseo basados en esquemticos se necesitan cinco puertas lgicas para


implementar la formula (1) necesitan 6 puertas lgicas(4 AND, 2 OR y 1 inversor),
mientras que en la formula(2) al compartir ambas ecuaciones el termino (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 gestionar
todos 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 ayuda:

A conectarlos 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
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 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 HDL.

Escuela Politcnica Superior UAM

3/22

Lab. Estructura y Tecnologa de Computadores I

Curso 2002/2003

Figura 3. Interfaz grfica del Gestor de Proyector

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 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 parmetros
del proyecto.

Figura 4. Pantalla 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
grupo (siempre en el disco D: ). El resto de las opciones del proyecto las elegiremos tal
como muestra la Figura 4.

Escuela Politcnica Superior UAM

4/22

Lab. Estructura y Tecnologa 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 diseo.
Design Flow: 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. Elegia 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 y el tipo de entrada seleccionada(xc2s200e-6pq208-XST VHDL).
Ahora estamos listo para realizar y aadir nuestros diseo al proyecto.

Diseo
En esta fase vamos a plasmar los requisitos del proyecto. Para ello necesitamos elegir
un lenguaje de representacin que nos permite 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 Manager.
1. Seleccionamos aadir nueva fuente (New Source) tal como indica en la Figura 5

Figura 5. Cmo aadir 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 Politcnica Superior UAM

5/22

Lab. Estructura y Tecnologa 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 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

Curso 2002/2003

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: Funcion lgica 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
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 quedar es comprobar si es posible sintetizar
nuestro nuevo diseo.

Sntesis
En esta fase se traduce el cdigo HDL en un representacin a nivel de puerta 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

Curso 2002/2003

Los procesos disponibles en la fase de sntesis se muestran en la Figura 9. Para realizar


la fase de sntesis, pulsar con el botn derecho en Synthesize y elegir la opcin 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 sntesis

Verificacin funcional
La etapa de verificacin se va a realizar utilizando un herramienta de simulacin 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 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 cual es su salida. Lo cual no suele ocurrir
en casos reales, en los cuales o bien el nmero 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 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.
1. Seleccionamos aadir nueva fuente (New Source) (ver paso 1 del apartado
diseo)
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 nemotcnica que relaciona 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 que
la 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 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:

Escuela Politcnica Superior UAM

8/22

Lab. Estructura y Tecnologa de Computadores I

Curso 2002/2003

Figura 10. Ventana de configuracin de la temporizacin del testbench

Esta ventana permite establecer los parametros temporales de la simulacin.


Dependiendo de si nuestro circuito es secuencial (gobernado por un reloj) o
combinacional seleccionaremos la opcin Master clock o Combinatorial Design.
Seleccionamos esta ltima ya que nuestro diseo es puramente combinacional. A
continuacin configuramos la temporizacin del testbench. Para ello debemos
decidir dos parmetros: (a) cunto margen vamos a dejar desde que introducidimos
una entrada hasta que comprobamos si la salida es correcta (Wait to check), y (b)
cunto esperamos para introducir una nueva entrada. Estos tiempos dependern 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 parmetros por defecto, y pulsamos OK.
6. Aparecen dos ventanas, una correspondiente a la aplicacin HDL Bencher (ver
Figura 11) y otra con el cdigo VHDL de la entidad que estamos probando. Esta
ltima slo no permite realizar ninguna modificacin, y sirve nicamente para
consultar el cdigo de la entidad.

Escuela Politcnica Superior UAM

9/22

Lab. Estructura y Tecnologa 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 slida esperada. A continuacin habr que reproducir
la tabla de verdad de la funcin lgica (ver ...). 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 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 seales 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 seales pulsamos el botn 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 cdigo 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 inferior
aparecern los procesos asociados al testbench (ver Figura 13). Este conjunto de
Escuela Politcnica Superior UAM

10/22

Lab. Estructura y Tecnologa de Computadores I

Curso 2002/2003

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

ModelSim
Pulsamos dos veces seguidas sobre el proceso Simulate Behavioral VHDL Model. De
esta forma se lanzar la aplicacin de simulacin asociada al Project Navigator. En el
caso del laboratorio es Model Sim 5.5f. 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.
# Time: 1600 ns Iteration: 0 Instance: /testbench
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.
VSIM 2> run -all
Si ha habido algn error en la simulacin, leer el mensaje de error, cerrar el ModelSim y
revisar tanto el cdigo VHDL y com el testbench hasta encontrar el fallo.
Si la simulacin se ejecuta correctamente aparecern las siguientes ventanas:
Escuela Politcnica Superior UAM

11/22

Lab. Estructura y Tecnologa de Computadores I

Curso 2002/2003

Seales (signals):

Figura 14. Ventana de seales de ModelSim

Esta ventana contiene la seales, tanto de entrada como de salida, que intervienen en la
simulacin.
Lista (List):

Lista de seales y el estado actual de cada una. Si no se despliega esta ventana


seleccionar View List Signals in Region dentro de la ventana de seales. Muestra la
evolucin de la seales en el tiempo. Muestra una lnea por cada cambio que ocurre en
el vector de salida.

Figura 15. Ventana de lista de seales

Escuela Politcnica Superior UAM

12/22

Lab. Estructura y Tecnologa de Computadores I

Curso 2002/2003

Formas de Ondas (Wave):

Figura 16. Ventana de visualizacin de formas de ondas

En esta ventana se visualiza una representacin grfica de la evolucin de la simulacin


a lo largo del tiempo. Utilizando el botn de zoom etiquetado como Zoom de toda la
zona de simulacin(ver apartado de Zoom) podemos ajustar el resultado final a la
ventana.
A continuacin se detallan las distintas opciones de la ventana Formas de Onda.
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 de simulacin.
Continue Run: realiza una simulacin de forma indefinida.

Escuela Politcnica Superior UAM

13/22

Lab. Estructura y Tecnologa de Computadores I

Curso 2002/2003

Zoom

Probar a obtener una visualizacin completa de la simulacin utilizando los botones de


Zoom:

Cursores

La herramienta permite grabar la situacin del cursor en diferentes puntos, 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 seleccionar una o ms seales. Si queremos cambiar el formato de representacin:
Format 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 mediante
Format Radix.
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
selecciona todas las seales que se quieren combinar y se elige la opcin Edit
Combine. Para que la combinacin sea efectiva que definir los siguientes parmetros:
Nombre: nombre que se va a asociar al nuevo conjunto de seales
Orden de las seales: este puede ser ascendente o descendente. Indica a partir de
que direccin se empieza a computar el bit menos significativo.
Si se quiere eliminar de la ventana de Ondas las seales despus de combinarlas.

Escuela Politcnica Superior UAM

14/22

Lab. Estructura y Tecnologa de Computadores I

Curso 2002/2003

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 a snapshot: genera una nueva versin del proyecto, y queda
reflejeda en la pestaa de Snapshot View.
Project Replace with snapshot: para que es 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.
Comprimir
Permite comprimir utilizando un algoritmo zip estndar 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 a
otros diseadores.
Si el diseo comprimido todava ocupa un tamao considerable se pueden realizar dos
simplificaciones ms:

Eligir la opcin 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


sintetizacin e implementacin de nuevo cuando se restaure el proyecto.

Escuela Politcnica Superior UAM

15/22

Lab. Estructura y Tecnologa de Computadores I

Curso 2002/2003

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. Solucionando as, la dos principales carencias de
los lenguajes basados en esquemticos.
Hay que tener en cuenta que los lenguajes HDL permite 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 sintetizables2.

Historia
El 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
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 tipo s bsicos predefinidos
como puede sen 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 librera 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 ...
2
Siguiendo una analoga con el proceso de desarrollo software, un diseo HDL sera similar a programa
descrito en un lenguaje de programacin tradicional (C, Java, Pascal...), y la sintetizacin 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

Valor
U
X
0
1
Z
W
L
H
-

Curso 2002/2003

Significado
Sin inicializar
Desconocida (corriente fuerte)
Cero lgico obtenido con una corriente fuerte
Uno lgico obtenido con una corriente fuerte
Alta impedancia
Desconocida (corriente fuerte)
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 AND, NAND, OR, NOR,
XOR y XNOR.

Entidades
Las entidades son el elemento bsico del lenguaje VHDL. La definicin de una entidad
se compone de dos partes: puertos y arquitectura.
Puertos
Los puertos son la puerta de comunicacin de la entidad con el exterior (ver Figura 17).
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

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

A
B

D
nombre del
puerto

direccin del
puerto

tipo del
puerto

Figura 17. Definicin de los puertos de una entidad

Arquitectura
La parte de arquitectura define la implementacin de la entidad. Una misma entidad
puede tener asociado una o ms arquitecturas. La definicin de la arquitectura tiene dos
partes: declarativa y el cuerpo(ver Figura 18). 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

Curso 2002/2003

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;

declaracin de la entidad

nombre de la arquitectura

architecture ejemplo of mux2 is

declaracin de seales,
variables, y componentes

nombre
entidad

de

la

declaracin de la
arquitectura

begin

parte del
describe

cdigo

que

end architecture ejemplo;


Figura 18. 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 el no importa el orden en el cual se escriben. (ver
Figura 19)
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 19. Implementacin 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 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 ejecuta
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 20).

Escuela Politcnica Superior UAM

18/22

Lab. Estructura y Tecnologa de Computadores I

Curso 2002/2003

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 20. Implementacin de la arquitectura utilizando procesos

Incluir otras entidades en la arquitectura


La implementacin de un 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 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 21 se ha implementado la entidad funcion utilizando las entidades
and2, or2, e inv, las cuales se suponen que forman parte de la librera
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

Curso 2002/2003

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. 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 expuesto se puede entreveer
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 cmo 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 definen cmo vara el flujo de datos desde la entrada a la
salida. Nada impide que en un mismo diseo se utilizen los tres enfoques a la vez (ver
Figura 22).

Escuela Politcnica Superior UAM

20/22

Lab. Estructura y Tecnologa de Computadores I

Curso 2002/2003

Recomendaciones para realizar cdigo sintetizable

Tener siempre presente que el objetivo es realizar un diseo hardware no un


programa software. Esto implica que para poder sintetizar de 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..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';
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 22. 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

Curso 2002/2003

PRCTICA OPCIONAL
En esta seccin se plantea una prctica opcional que permitir al alumno adquirir soltura
en el manejo de la herramienta ISE-Xilinx. 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 un nueva entidad INV con dos puertos (I: in
std_logic, O: out std_logic) que implemente un inversor ( O <= not I).
Crear y aadir al proyecto un nueva entidad AND2 con tres puertos (I1, I2: in
std_logic, O: out std_logic) que implemente una puerta lgica and dos entradas
( O <= I1 and I2).
Crear y aadir al proyecto un nueva entidad OR2 con dos puertos (I1,I2: in
std_logic, O: out std_logic) que implemente una puerta lgica and dos entradas
( O <= I1 or I2).
Crear y aadir al proyecto la entidad funcion4a2 e implementarla a partir de las
puertas lgicas definidas anteriormente basndose en el cdigo de Figura 21.
Crear un testbench con la herramienta HDL Bencher. Tambin se puede copiar
el archivo tb_funcion4a2.tbw creado en la prctica de introduccin en el
directorio de este proyecto y aadirlo al proyecto (Add Source).
Si todo marcha correctamente tendr la ventana de procesos tendr que ser
similar a la Figura 23.
Realizar la simulacin funcional utilizando ModelSim.

Figura 23 Aspecto de la ventana de Fuentes de Diseo tras aadir todas las entidades y el testbench

Escuela Politcnica Superior UAM

22/22

También podría gustarte