Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Curso 2002/2003
Prctica 0
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
1/22
Curso 2002/2003
(1)
(2)
2/22
Curso 2002/2003
3/22
Curso 2002/2003
4/22
Curso 2002/2003
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
5/22
Curso 2002/2003
6/22
Curso 2002/2003
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.
7/22
Curso 2002/2003
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:
8/22
Curso 2002/2003
9/22
Curso 2002/2003
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
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.
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
Curso 2002/2003
Seales (signals):
Esta ventana contiene la seales, tanto de entrada como de salida, que intervienen en la
simulacin.
Lista (List):
12/22
Curso 2002/2003
13/22
Curso 2002/2003
Zoom
Cursores
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.
14/22
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:
15/22
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.
16/22
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
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
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
17/22
Curso 2002/2003
declaracin de la entidad
nombre de la arquitectura
declaracin de seales,
variables, y componentes
nombre
entidad
de
la
declaracin de la
arquitectura
begin
parte del
describe
cdigo
que
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).
18/22
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;
19/22
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;
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).
20/22
Curso 2002/2003
21/22
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:
Figura 23 Aspecto de la ventana de Fuentes de Diseo tras aadir todas las entidades y el testbench
22/22