Está en la página 1de 20

APUNTES DE VHDL

1. OBJETIVOS.

Estos Apuntes pretenden ser una guía para comenzar a describir modelos de
circuitos en lenguaje VHDL. No se trata de exponer en profundidad todas las
posibilidades del lenguaje sino de presentar, de una manera sencilla, sus fundamentos
con el objetivo de que el alumno novato en la materia pueda hacer sus primeros
programas de una manera rápida. Tradicionalmente se ha utilizado esta herramienta en
asignaturas o laboratorios de Arquitectura de Computadores y, en este contexto, el
lenguaje VHDL, que es solamente un medio, no debe convertirse en el fin. Con esto no
queremos decir que éste lenguaje de descripción de hardware no tenga interés por sí
mismo. Es cada vez más utilizado en la industria y el empeño por completar su
conocimiento en profundidad es una tarea a la que animamos a cualquiera de nuestros
alumnos de ingeniería ya que, sin duda, será un estupendo remate a su formación
profesional.

El método utilizado aquí no consiste en presentar la sintaxis de forma sistemática


–para eso ya están otros libros– sino en enseñar a través de ejemplos siguiendo la
técnica empleada en algunas universidades norteamericanas y bautizada allí como teach
by example. En definitiva se trata de conducir al estudiante a través de ejemplos
ilustrativos que bajo simples modificaciones se pueden adaptar a varios casos diferentes.
Estos Apuntes son, en realidad, un conjunto de patrones que el alumno debe adaptar al
estudio de los diferentes supuestos de la Arquitectura de Computadores, el verdadero
objetivo.

2. EL LENGUAJE DE DESCRIPCIÓN HARDWARE VHDL: HISTORIA.

El lenguaje VHDL nació para dar respuesta a numerosos problemas planteados


en el desarrollo y documentación de hardware digital. La documentación requerida para
describir un sistema electrónico puede ocupar miles de páginas y suele ser muy costoso
reemplazar la información contenida cuando la tecnología o las especificaciones
cambian. Un lenguaje de descripción adecuado resuelve el problema ya que la
"documentación" es ejecutable.

VHDL se ha convertido en un estándar, lo cual ya es una ventaja, que además


reúne otras características que lo hacen particularmente atrayente. Es un lenguaje
independiente de la tecnología, no emparejado a un determinado simulador y no
requiere una metodología precisa de diseño. VHDL permite implementar nuevas
tecnologías en diseños existentes.

Las siglas VHDL corresponden a VHSIC (Very High Speed Integrated Circuits)
Hardware Description Language. El primer borrador vio la luz en agosto de 1985
diseñado por Intermetrics, IBM y Texas Instruments e impulsado por el Departamento
de Defensa de los Estados Unidos. En diciembre de 1987 fue aprobado como estándar
del IEEE y posteriormente, en 1993, fue revisado y registrado como norma IEEE Std
1076-1993.
© Rafael Rico

VHDL es un lenguaje de semántica orientada a la simulación y por ello su


principal dominio de aplicación es el modelado de dispositivos hardware para
comprobar su correcto funcionamiento. De todos modos tiene otras áreas de aplicación
tales como: síntesis automática, verificación formal, modelado de rendimiento,
diagnosis de fallos y documentación.

3. MODOS DE DESCRIPCIÓN DE CIRCUITOS LÓGICOS.

El lenguaje de descripción de hardware VHDL cuenta con diferentes modos de


llevar a cabo la descripción. Normalmente su aprendizaje se comienza desde la
perspectiva del diseñador tradicional de hardware, utilizando las construcciones del
lenguaje que permiten una descripción estructural desde las puertas lógicas hacia arriba.
Este enfoque resalta la correspondencia existente entre la realidad y el lenguaje pero
oculta la verdadera potencia del modelo temporal soportado por el lenguaje. La
descripción comportamental y la ejecución concurrente de procesos manifiestan la
verdadera potencia del VHDL.

Seguidamente vamos a caracterizar cada uno de los modos de descripción


basándonos en un ejemplo. Sea el circuito lógico de la figura siguiente:
e1
s1
e2
sal
e3
s2
e4

Figura 1. Circuito lógico.

Podemos describirlo indicando la función que realiza, es decir, especificando su


comportamiento:

sal = '1' si (e1 = e2 = '1') o si (e3 = e4 = '1'); [1]

Podemos describirlo también especificando los componentes más básicos que lo


forman y como se conectan entre si, es decir, podemos dar su estructura:

AND (e1, e2, s1); [2]


AND (e3, e4, s2);
OR (s1, s2, sal);

Finalmente, podemos proporcionar la relación entre unas señales y otras, es


decir, indicar el flujo de señales:

sal = s1 OR s2; [3]


s1 = e1 AND e2;
s2 = e3 AND e4;

2
Apuntes de VHDL

El lenguaje de descripción hardware VHDL permite estos tres modos de


descripción:
• comportamental (ecuación lógica 1)
• estructural (ecuación lógica 2)
• flujo de datos o RTL (ecuación lógica 3)

En el modelado comportamental lo importante es la función que relaciona la


salida con la entrada. El lenguaje VHDL permite escribir funciones complejas sin
recurrir a su implantación física con lo que se revela como una herramienta de gran
rendimiento ya que proporciona una potencia de diseño muy atractiva a un coste muy
bajo.

entradas
ƒ(e) salidas

Figura 2. Esquema del modelado comportamental.

En el modelado estructural se especifican los bloques que componen un


circuito y sus interconexiones. Cada bloque integrante debe contar con su descripción
previa de manera que se construye una jerarquía de descripciones donde las inferiores
dan lugar a superiores más complejas y así sucesivamente.

entradas salidas

Figura 3. Esquema del modelado estructural.

En el modelado de flujo de datos o RTL (Register Transfer Logic) se declara la


sucesión temporal con la que evolucionan las diferentes señales del modelo descrito.

entradas salidas

Figura 4. Esquema del modelado RTL.

Cada uno de los modos de descripción lleva asociada una sintáxis determinada
que lo caracteriza. Podemos modelar un circuito con cualquiera de ellos.

3
© Rafael Rico

4. ENTIDAD Y ARQUITECTURA DE UN MODELO.

El circuito del ejemplo anterior puede ser visto como una caja negra que se
relaciona con el exterior mediante un conjunto se señales, unas de entrada y otras de
salida. En la figura siguiente se ha señalado el bloque mediante una linea punteada que
encierra los componentes.

e1
s1
e2
sal
e3
s2
e4

Figura 5. Conjunto del circuito lógico y su relación con el exterior.

El bloque se conoce en VHDL como ENTIDAD y se declara en primer lugar. Una


ENTIDAD indica las señales que entran al circuito y las que salen, es decir, declara la
relación del circuito con el mundo exterior.

e1

e2
ENTIDAD sal
e3

e4

Figura 6. Entidad correspondiente al ejemplo anterior.

A cada ENTIDAD le corresponde al menos una descripción (comportamental,


estructural o RTL) –aunque puede tener múltiples– que se especifica en su
ARQUITECTURA.

La sintaxis específica se presenta más adelante pero a continuación vamos a ver


un ejemplo de descripción comportamental.

Cada fichero fuente (modo texto) debe contener una declaración de entidad y, al
menos, una arquitectura. Si modelamos más arquitecturas todas ellas pueden residir en
el mismo fichero fuente. En el caso de utilizar como compilador-simulador el V-System,
esos ficheros deben tener extensión .VHD.

4
Apuntes de VHDL

5. EJEMPLOS DE DESCRIPCIÓN COMPORTAMENTAL VHDL.

Para ilustrar este tipo de modelado se ofrecen algunos ejemplos sencillos de


circuitos. Se empieza con una puerta AND de dos entradas sin retardo y se van
introduciendo elementos nuevos del lenguaje que completan la descripción del circuito
o la llevan a cabo de diferentes modos.

La descripción comportamental es la única disponible al más bajo nivel de


modelado de circuitos digitales (puertas lógicas) ya que no es posible fundamentarla en
bloques más básicos que ya serían los transistores.

• Puerta AND de dos entradas sin retardo:

ENTITY and2 IS e1
PORT (e1, e2: IN BIT; sal: OUT BIT); sal
END and2; ENTIDAD
e2
ARCHITECTURE comportamiento OF and2 IS
BEGIN
PROCESS (e1, e2) e1
BEGIN
sal <= e1 AND e2; sal
END PROCESS; e2
END comportamiento; ARQUITECTURA

Modelo 1. Puerta AND sin retardo. Figura 7. Elementos del modelo.

Es una descripción COMPORTAMENTAL donde la ARQUITECTURA declara


simplemente la función que relaciona salida con entradas. Dicha arquitectura contine un
único proceso. El PROCESO cuenta con una sóla sentencia de asignación de señal que
corresponde a la ecuación lógica de la puerta AND. El proceso se despierta con la
variación de las señales e1 o e2 enumeradas entre paréntesis.

A continuación se muestra la ventana de onda de V-System donde se puede


observar el correcto funcionamiento de la descripción.

Figura 8. Ventana de onda correspondiente a la puerta AND sin retardo.

Una puerta AND sin retardo no es más que un ente de razón. Cualquier puerta
física tiene un retardo que hay que tener en cuenta.

5
© Rafael Rico

• Puerta AND de dos entradas con retardo:

ENTITY and2 IS
PORT (e1, e2: IN BIT; sal: OUT BIT);
END and2;

ARCHITECTURE comportamiento OF and2 IS


BEGIN
PROCESS (e1, e2)
BEGIN
sal <= e1 AND e2 AFTER 2 ns;
END PROCESS;
END comportamiento;

Modelo 2. Puerta AND con retardo de 2ns.

Se ha añadido un retardo de 2 ns en la descripción del proceso. Este retardo se


podría haber introducido como un GENÉRICO dentro de la declaración de ENTIDAD. La
ventaja está en que es fácilmente modificable sin tener que cambiar todas las sentencias
de asignación de señal que tengan la claúsula AFTER. Quedará como sigue:

ENTITY and2 IS
GENERIC (retardo: TIME := 2 ns);
PORT (e1, e2: IN BIT; sal: OUT BIT);
END and2;

ARCHITECTURE comportamiento OF and2 IS


BEGIN
PROCESS (e1, e2)
BEGIN
sal <= e1 AND e2 AFTER retardo;
END PROCESS;
END comportamiento;

Modelo 3. Puerta ANd con retardo delarado como genérico.

Esta descripción del comportamiento del circuito se puede modificar modelando


otro proceso e incluyéndolo en una nueva ARQUITECTURA que llamaremos
comportamiento1. Se da a continuación y forma parte del mismo fichero AND2.VHD que
la anterior declaración de ENTIDAD-ARQUITECTURA(comportamiento).

ARCHITECTURE comportamiento1 OF and2 IS


BEGIN
PROCESS (e1, e2)
BEGIN
IF e1 = '1' AND e2 = '1' THEN sal <= '1' AFTER retardo;
ELSE sal <= '0' AFTER retardo;
END IF;
END PROCESS;
END comportamiento1;

Modelo 4. Nueva arquitectura para la AND. Se ha añadido al mismo fichero fuente.

Obsérvese como esta nueva descripción es equivalente a la anterior pero utiliza


un proceso diferente donde se han incluido sentencias de tipo condicional.

6
Apuntes de VHDL

Finalmente, podemos imaginar otra descripción del circuito basada en sentencias


condicionales pero donde se evalúa una variable interna al proceso. Hemos de declararla
antes de iniciar el proceso. También es importante notar como la lista de señales a las
que es sensible el proceso (aquellas que lo despiertan) no se da después de la orden
PROCESS sino con una orden WAIT ON dentro del propio proceso.

Esta nueva ARQUITECTURA forma parte del mismo fichero AND2.VHD y se


denomina comportamiento2. Se ha aprovechado para modelar un comportamiento más
real aún. En muchas tecnologías los retardos dependen del valor que tomen las entradas.
En este caso se observa como se ha tenido en cuenta esa eventualidad a la hora de
asignar diferentes retardos para el tiempo de subida y para el tiempo de bajada.

ARCHITECTURE comportamiento2 OF and2 IS


BEGIN
PROCESS
--declaro una variable temporal de tipo bit
--para usar dentro del proceso
VARIABLE temporal: BIT;
BEGIN
temporal:= e1 AND e2;
IF temporal = '1' THEN sal <= '1' AFTER retardo*1.5;
ELSE sal <= '0' AFTER retardo;
END IF;
WAIT ON e1, e2;
END PROCESS;
END comportamiento2;

Modelo 5. Modelado basado en sentencias condicionales. También se han utilizado


sentencias de asignación de señal y de asignación de variable.

El modelo anterior cuenta con sentencias de asignación de señal y sentencias de


asignación de variable. El operador de asignación en el primer caso es := mientras que
en el segundo es <=. Ya podemos deducir que SEÑALES y VARIABLES,
independientemente de su tipo, son objetos diferentes tanto en su almacenamiento,
como en su procesamiento y en su significado.

A continuación se ilustra la ventana de onda de V-System en donde se puede


observar el correcto funcionamiento de la puerta además de los retardos que se han
modelado en el único proceso presente en la ARQUITECTURA.

Figura 9. Ventana de onda correspondiente al modelo anterior.

7
© Rafael Rico

La figura siguiente ilustra el hecho de que el lenguaje VHDL nos permite asociar
a cada entidad una colección de arquirtecturas. Esta colección puede contener una
variedad de codificaciones con la misma función de transferencia, como sucede en dicha
figura. Sin embargo, también podrían ser modificaciones al comportamiento en función
de tipos de implantación, tecnología, encapsulados, respuesta térmica, etc. Incluso
podríamos pensar en asociar a una entidad arquitecturas de comportamientos
absolutamente contradictorios. En este sentido, no es infrecuente el error de asociar a la
misma entidad de 2 entradas y una salida el comportamiento de dos puertas lógicas
diferentes. Solamente el programador detectará el fallo ya que los compiladores-
simuladores no pueden hacerlo.

ARCHITECTURE comportamiento_3 OF nand2 IS


BEGIN
ARCHITECTURE comportamiento_1 OF nand2 IS PROCESS (e1, e2)
BEGIN BEGIN
PROCESS (e1, e2) IF e1='1' AND e2='1' THEN sal <='0' AFTER retardo;
BEGIN ELSE sal <='1' AFTER retardo;
sal <= e1 NAND e2; END IF;
END PROCESS; END PROCESS;
END comportamiento_1; END comportamiento_3;

ARQUITECTURAS

e2

sal

e1
ENTIDAD

ARQUITECTURAS

ARCHITECTURE comportamiento_2 OF nand2 IS ARCHITECTURE comportamiento_4 OF nand2 IS


BEGIN BEGIN
PROCESS (e1, e2) PROCESS
BEGIN BEGIN
sal <= e1 NAND e2 AFTER retardo; IF e1='1' AND e2='1' THEN sal <='0' AFTER retardo;
END PROCESS; ELSE sal <='1' AFTER retardo;
END comportamiento_2; END IF;
WAIT ON e1, e2;
END PROCESS;
END comportamiento_4;

Figura 10. Esquema ilustrativo de cómo VHDL permite asociar a una entidad una
colección de arquitecturas. En el ejemplo se ha usado la puerta NAND.

Una pincelada sobre sintaxis del lenguaje. La arquitectura de un modelo es un


conjunto de sentencias concurrentes de entre las cuales la más importante es el proceso.
A su vez, el proceso encierra un conjunto de sentencias secuenciales.

8
Apuntes de VHDL

6. ELEMENTOS BÁSICOS DE SINTAXIS VHDL.

De lo visto hasta el momento se desprende que toda descripción hardware


mediante VHDL consta de la declaración de una ENTIDAD y de, al menos, una
ARQUITECTURA asociada. La sintaxis básica de estos elementos es la siguiente:

ENTITY identificador IS
--esto es un comentario
[GENERIC (nombre: TIPO := valor);]
[PORT (señal1,señal2,...:IN TIPO; señal3, señal4,...:OUT TIPO);]
END identificador;

ARCHITECTURE nombre OF identificador IS


--parte declarativa de la arquitectura
BEGIN
--sentencias concurrentes
END nombre;

Sintáxis 1. Declaración de entidad y arquirtectura.

La declaración de entidad se realiza mediante la palabra reservada ENTITY


seguida de una etiqueta identificadora. Dentro de la entidad se declaran las señales que
entran y salen usando la palabra reservada PORT. También se declaran los genéricos o
constantes así como sus valores usando la palabra reservada GENERIC.

Las señales pueden ser de varios tipos, unos definidos en la propia normalización
del lenguaje (BIT, BITVECTOR, etc.) y otros definidos por el programador. Cada tipo lleva
asociado un modo de entre tres posibles: IN, OUT e INOUT. Los listados de señales de una
entidad se agrupan por tipos y modos y se separan por comas (“,”).

La declaración de la arquitectura utiliza la palabra ARCHITECTURE seguida de un


identificador de la misma y del identificador de la entidad a la que se asocia y con la que
debe ser consistente en tipos y nombres de señales. Inmediatamente detrás de
ARCHITECTURE y antes de la palabra BEGIN se encuentra la parte declarativa de la
arquitectura que sirve para declarar variables y señales locales a la arquitectura.

Después de BEGIN tenemos las sentencias concurrentes del modelo. La


existencia de sentencias concurrentes ha sido heredada del lenguaje ADA. Cada
sentencia concurrente se ejecuta de manera simultánea en tiempo de simulación con el
resto de forma que todas parten del mismo instante de simulación.

Como se puede ver más arriba el interior de la ARQUITECTURA está constituido


por un conjunto de sentencias concurrentes. Hasta el momento solo hemos visto una de
ellas que es el PROCESO.

Un proceso marca los límites del dominio secuencial. Es decir, dentro del
proceso el funcionamiento es secuencial mientras que lo que sucede dentro de la
arquitectura es concurrente. Cada sentencia secuencial (dentro del proceso) se evalúa
según su orden y hace avanzar el tiempo de simulación de acuerdo a los retardos
asociados. Cada sentencia secuencial parte del origen de tiempos que marca el final de
la sentencia anterior.

9
© Rafael Rico

ARCHITECTURE nombre OF identificador IS


BEGIN
PROCESS [(lista de sensibilización)]
[--declararación de variables
VARIABLE nombre_variable: TIPO [:= valor_inicial];
--declaración de constantes
CONSTANT nombre_constante: TIPO [:= valor inicial];]
BEGIN
sentencias secuenciales
END PROCESS;
END nombre;

Sintáxis 2. El proceso como conjunto de sentencias secuenciales.

El proceso utiliza la palabra PROCESS. Entre ésta y la palabra BEGIN tenemos la


parte declarativa del proceso. Es el lugar donde colocar las declaraciones de variables o
señales locales al proceso. Depués de BEGIN colocamos la serie de sentencias
secuenciales.

Un proceso sólo se evalúa si cambia alguna de las señales de su lista de


sensibilización. Es lógico: si las señales de la lista no cambian no hay nada que calcular,
las señales no tienen valores nuevos. La lista de sensibilización se da entre paréntesis
después de la palabra PROCESS. Si no se da lista de señales el proceso no se “ejecuta”
nunca. Existe una manera alternativa de dar la lista: usando una sentencia con WAIT ON.
Ver el ejemplo del modelo 5.

Las sentencias secuenciales más importantes pueden agruparse bajo dos


categorías:
• sentencias de declaración y asignación de variable
• sentencias de control de flujo

En los ejemplos de modelos propuestos hasta el momento se puede estudiar


cómo se utilizan y cuál es su sintaxis.

10
Apuntes de VHDL

7. EJEMPLOS DE ARQUITECTURAS CON VARIOS PROCESOS


CONCURRENTES.

Siguiendo con el modelo de descripción comportamental vamos a poner algunos


ejemplos ilustrativos de la ejecución concurrente de la mano de otro circuito: una puerta
AND de cuatro entradas. La entidad responderá a:

a ENTITY and4 IS
GENERIC (retardo: TIME := 2 ns);
b
z PORT (a, b, c, d:IN BIT; z:OUT BIT);
c ENTIDAD END and4;
d

Figura 11. Entidad de 4 entradas Modelo 6. Declaración de la entidad.


y 1 salida.

Nos podemos imaginar su arquitectura de varios modos. En la figura siguiente


tenemos dos de ellos:

a a
s1
b z b s2
z
c c
d d

Figura 12. Posibles implantaciones de la puerta AND de 4 entradas.

La ARQUITECTURA de la izquierda se puede describir mediante un solo PROCESO


mientras que la de la derecha se puede hacer mediente tres procesos concurrentes uno
por cada puerta. Se dan ambas descripciones pertenecientes al fichero fuente AND4.VHD.

ARCHITECTURE comportamiento1 OF and4 IS


BEGIN
PROCESS (a, b, c, d)
BEGIN
z <= a AND b AND c AND d AFTER retardo;
END PROCESS;
END comportamiento1;

Modelo 7. Descripción basada en un único proceso.

El modelo anterior es la extensión natural de la puerta AND de 2 entradas


utilizada como ejemplo en apartados anteriores. En este caso, el proceso cuenta con una
sentencia de asignación de señal que describe la función lógica que relaciona salida con
entradas. Cada vez que cambia alguna de las señales de entrada (lista de sensibilización)
se evalúa el proceso y se calcula el valor de la señal de salida. También se calcula el
tiempo de simulación en el que se produce el cambio en la salida en función del instante
en el que varía la entrada más el retardo incluido tras la clausula AFTER.

11
© Rafael Rico

Si modelamos el circuito basado en tres puertas con tres procesos nos queda el
programa siguiente.

ARCHITECTURE comportamiento2 OF and4 IS


--declaración de señales
SIGNAL s1, s2: BIT;
BEGIN
--proceso correspondiente a la puerta 1
PROCESS (a, b)
BEGIN
s1 <= a AND b AFTER retardo;
END PROCESS;
--proceso correspondiente a la puerta 2
PROCESS (s1, c)
BEGIN
s2 <= s1 AND c AFTER retardo;
END PROCESS;
--proceso correspondiente a la puerta 3
PROCESS (s2, d)
BEGIN
z <= s2 AND d AFTER retardo;
END PROCESS;
END comportamiento2;

Modelo 8. Descripción basada en 3 procesos concurrentes.

En este modelo encontramos tres procesos concurrentes. Cada uno de ellos


describe una puerta de 2 entradas y posee su propia lista de sensibilización que lo
“despierta”. Cuando un proceso se evalúa puede provocar un cambio en una señal de
salida que a su vez hace despertar otro proceso. Si dos procesos se despiertan a la vez,
avanzarán simultánemente en tiempo de simulación desde el instante en que variaron las
señales asociadas a sus listas de sensibilización.

En la siguiente imagen se da la ventana de onda tal como queda después de


trabajar con el modelo de tres procesos concurrentes.

Figura 13. Cronograma correspondiente al modelo anterior.

12
Apuntes de VHDL

8. MODELO TEMPORAL EN VHDL.

A continuación se da una tabla con la lista de señales y sus valores en el tiempo.


Se dan los tiempos físicos en ns y los de simulación δ. La tabla corresponde a lo
mostrado en la figura anterior.

ns δ a b c d s1 s2 z
0 +0 0 0 0 0 0 0 0
0 +1 1 0 0 0 0 0 0
10 +0 1 1 0 0 0 0 0
12 +0 1 1 0 0 1 0 0
20 +0 1 1 1 0 1 0 0
22 +0 1 1 1 0 1 1 0
30 +0 1 1 1 1 1 1 0
32 +0 1 1 1 1 1 1 1
40 +0 0 1 1 1 1 1 1
42 +0 0 1 1 1 0 1 1
44 +0 0 1 1 1 0 0 1
46 +0 0 1 1 1 0 0 0
50 +0 0 0 1 1 0 0 0

Tabla 1. Tiempos físicos y de simulación asociados al cronograma previo.

Obsérvese como se da un solo caso en el que tengo δ + 1. Al comenzar se ha


forzado la señal a al valor '1' con lo que en tiempo físico 0 ha debido pasar de su valor
por defecto '0' a '1', es decir, en un tiempo de simulación δ. En el resto de los casos
debido a los retardos introducidos el tiempo de simulación avanza con el tiempo físico.

El tiempo físico avanza gracias a los retardos incluidos en las sentencias de


asignación de señal. El tiempo de simulación avanza en δ (δ + 0, δ + 1, δ + 2, …, δ + n).
Cada δ corresponde a la evaluación de un proceso pero no hace avanzar el tiempo físico
si no hay retardos. Todo lo que sucede en δ + n es concurrente.

Antes de seguir haremos una definición de SEÑAL. Una señal es un array de


pares valor-tiempo. Es decir, una señal almacena la secuencia de valores que toma un
“cable” y el instante de tiempo en el que se produce cada cambio.

proceso
proceso driver de señal fuente
destino
t0 t1 t2 t3
v0 v1 v2 v3

valor actual valores proyectados señal <= ...


...<= señal

Figura 14. Visión esquemática de una señal.

13
© Rafael Rico

¿Qué sucedería si la arquitectura se hubiera modelado sin retardos? El modelo


que se ajusta a este caso se expone seguidamente:

ARCHITECTURE comportamiento2 OF and4 IS


--declaración de señales
SIGNAL s1, s2: BIT;
BEGIN
--proceso correspondiente a la puerta 1
PROCESS (a, b)
BEGIN
s1 <= a AND b;
END PROCESS;
--proceso correspondiente a la puerta 2
PROCESS (s1, c)
BEGIN
s2 <= s1 AND c;
END PROCESS;
--proceso correspondiente a la puerta 3
PROCESS (s2, d)
BEGIN
z <= s2 AND d;
END PROCESS;
END comportamiento2;

Modelo 9. Puerta AND de cuatro entradas sin retardos.

Tendríamos la siguiente tabla de señales y tiempos:

ns δ a b c d z s1 s2
0 +0 0 0 0 0 0 0 0
10 +0 1 0 0 0 0 0 0
20 +0 1 1 1 0 0 0 0
20 +1 1 1 1 0 0 1 0
20 +2 1 1 1 0 0 1 1
30 +0 0 1 1 1 0 1 1
30 +1 0 1 1 1 1 0 1
30 +2 0 1 1 1 1 0 0
30 +3 0 1 1 1 0 0 0

Tabla 2. Tiempos físicos y de simulación para el modelo sin retardos.

Notar como, al no haber retardos de tiempo físico, al variar una señal se


despiertan los procesos a los que afecta en sucesivos δ de tiempo de simulación pero sin
hacer avanzar el tiempo físico. Por ejemplo, a los 30ns de tiempo físico cambia el valor
de a. En δ + 1 se despierta el proceso correspondiente a la puerta1 y varia el valor de s1.
Este cambio en s1 hace que se despierte en δ + 2 el proceso de la puerta2 con lo que
cambia el valor de s2 y se despierta el tercer proceso en δ + 3 y se obtiene el valor de la
señal de salida. Todo ello ha sucedido sin que varie el instante de tiempo, que sigue
“estancado” en los 30ns.

Por otra parte, la ARQUITECTURA en la que se han definido tres procesos


concurrentes ha requerido la declaración de dos señales nuevas (s1 y s2) que
interconectan los procesos. Se han introducido en la parte declarativa de la
arquitectura.

14
Apuntes de VHDL

9. DESCRIPCIÓN ESTRUCTURAL VHDL.

En una descripción estructural se declaran los bloques componentes del circuito


y se realizan las interconexiones. Los componentes del dispositivo habrán sido descritos
en algun otro diseño VHDL que deberá estar previamente compilado.

• Puerta AND de cuatro entradas:

El modelo estructural de la puerta estudiada anteriormente sería:

ARCHITECTURE estructural1 OF and4 IS


--declaración de componentes
COMPONENT and2
PORT (e1, e2: IN BIT; sal: OUT BIT);
END COMPONENT;
--declaración de señales
SIGNAL s1, s2: BIT;
--indicamos donde se encuentra la arquitectura de los componentes
FOR ALL: and2 USE ENTITY WORK.and2(comportamiento);
--realizamos las conexiones
BEGIN
puerta1: and2 PORT MAP (a,b,s1);
puerta2: and2 PORT MAP (s1,c,s2);
puerta3: and2 PORT MAP (s2,d,z);
END estructural1;

Modelo 10. Puerta AND de 4 entradas bajo descripción estrctural.

En la parte declarativa de la arquitectura se da cuenta de los componentes


constituyentes con la cláusula COMPONENT. La sintaxis es similar a la de la entidad
siendo necesario unicamente incluir las señales que entran y salen. Seguidamente se
declaran los “cables” que realizaran las conexiones, es decir, las señales intermedias.
Como son internas no llevan modo: no son ni IN ni OUT. Se usa la palabra reservada
SIGNAL. Finalmente, puede ser conveniente determinar la arquitectura que se va a
utilizar de todas las compiladas disponibles para cada bloque componente. Esto se hace
mediante una sentencia del tipo:

FOR etiquetas_componentes|ALL|OTHERS: identificador_entidad USE ENTITY


WORK.identificador_entidad (identificador_arquitectura);

Después del BEGIN encontramos las instancias (copias) de los bloques


componentes. Cada uno cuenta con una etiqueta identificativa. La cláusula PORT MAP
declara las conexiones. Si PORT fuera una declaración local, PORT MAP sería una forma
de declaración global. En realidad, cada instanciación de un componente puede ser vista
como una llamada a su proceso y, por tanto, a una sentencia concurrente como sucedía
en el modelado comportamental. Si la instancia es también una descripción estructural,
llamará a los procesos correspondientes de un nivel jerárquico inferior y así
sucesivamente hasta encontrar algún modelo comportamental puro.

La lista de conexiones del PORT MAP debe realizarse en el orden en el que las
señales se declararon en la entidad si se hace implícitamente, como en el ejemplo. Si se
hace explícitamente no es necesario.

15
© Rafael Rico

Se puede observar en la simulación del modelo previo que los retardos de la


salida son asimétricos, es decir, el retardo de salida depende de qué señal de entrada
haya variado. Hay que cambiar el circuito para que guarde simetría. Modificar el modelo
de acuerdo al siguiente esquema es muy sencillo. Requiere solamente realizar otro
conexionado.

a
s1
b
z
c
s2
d

Figura 15. Cambio en el conexionado para conseguir un funcionamiento adecuado.

ARCHITECTURE estructural2 OF and4 IS


--declaración de componentes
COMPONENT and2
PORT (e1, e2: IN BIT; sal: OUT BIT);
END COMPONENT;
--declaración de señales
SIGNAL s1, s2: BIT;
--indicamos donde se encuentra la arquitectura de los componentes
FOR ALL: and2 USE ENTITY WORK.and2(comportamiento);
--realizamos las conexiones
BEGIN
puerta1: and2 PORT MAP (a,b,s1);
puerta2: and2 PORT MAP (c,d,s2);
puerta3: and2 PORT MAP (s1,s2,z);
END estructural2;

Modelo 11. Descripción del circuito propuesto.

10. TEST-BENCH.

El test-bench es un tipo de descripción a caballo entre la estructural y la


comportamental. Se utiliza para comprobar el correcto funcionamiento de los modelos
mediante un programa independiente de la plataforma de compilación-simulación.

Un test-bench es una caja sin señales de conexión exterior. Es decir, una entidad
sin puertos. La arquitectura cuenta con una instancia del modelo bajo test y un proceso
que le inyecta señales. Las señales de entrada adoptarán los valores que se requiera en el
instante de tiempo preciso para comprobar el correcto funcionamiento del modelo.
Cuando se simula un test-bench se obtiene un cronograma de respuesta a las señales de
entrada que previamente programamos en el proceso.

Entidad
Proceso bajo test

Figura 16. Esquema de test-bench.

16
Apuntes de VHDL

El modelo siguiente propone un ejemplo de test-bench para la puerta AND de


cuatro entradas utilizada anteriormente:

--este es el test-bench de una AND de 4 entradas


ENTITY run_and4 IS
END run_and4;

ARCHITECTURE test OF run_and4 IS


--declaración del componente a estudiar
COMPONENT and4
PORT (a, b, c, d: IN BIT; z: OUT BIT);
END COMPONENT;
--especificación de la configuración del componente
FOR componente: and4 USE ENTITY WORK.and4(estructural2);
--declaración de señales de interconexión
SIGNAL a, b, c, d: BIT:= '0';
SIGNAL z: BIT:='0';
--declaración de constante
CONSTANT retardo: TIME:=4 ns;
--comienza la descripción de los procesos
BEGIN
--primer proceso: instanciación del componente a estudiar
componente: and4 PORT MAP (a, b, c, d, z);
--segundo proceso: estimulo de las señales de entrada
PROCESS
VARIABLE vector: BIT_VECTOR(0 TO 3) := "0000";
VARIABLE temporal: INTEGER := 0;
BEGIN
FOR i IN 0 TO 15 LOOP
--convierto el entero i a su valor binario de 4 bits
temporal := i;
FOR k IN 0 TO 3 LOOP
IF (temporal MOD 2) = 0 THEN vector(k) := '0';
ELSE vector(k) := '1';
END IF;
temporal := temporal/2;
END LOOP;
a<= vector(0);
b<= vector(1);
c<= vector(2);
d<= vector(3);
WAIT FOR retardo*2;
END LOOP;
END PROCESS;
END test;

Modelo 12. Test-bench ejemplo.

El proceso utilizado inyecta señales de manera “automática” haciendo un barrido


de todos los posibles valores sobre 4 bits. Se ha implementado el algoritmo de
conversión de entero a binario basado en las sucesivas divisiones entre 2.

A continuación se ilustra la ventana de onda de V-System para el test-bench


modelado anteriormente.

17
© Rafael Rico

Figura 17. Cronograma de ejecución del test-bench ejemplo.

Se puede modificar el proceso de asignación de valores a las señales declarando


una función que realice la transformación de un entero a un número binario. Quedaría
tal como sigue:

ARCHITECTURE test2 OF run_and4 IS


--declaración del componente a estudiar
COMPONENT and4
PORT (a, b, c, d: IN BIT; z: OUT BIT);
END COMPONENT;
--especificación de la configuración del componente
FOR componente: and4 USE ENTITY WORK.and4(estructural2);
--declaración de señales de interconexión
SIGNAL a, b, c, d: BIT:= '0';
SIGNAL z: BIT:='0';
--declaración de constante
CONSTANT retardo: TIME:=4 ns;
--comienza la descripción de los procesos
BEGIN
--primer proceso: instanciación del componente a estudiar
componente: and4 PORT MAP (a, b, c, d, z);
--segundo proceso: estimulo de las señales de entrada
PROCESS
VARIABLE vector: BIT_VECTOR(0 TO 3) := "0000";
--función que convierte un entero a su valor binario de 4 bits
FUNCTION entero_binario (valor_entero : INTEGER) RETURN BIT_VECTOR IS
VARIABLE binario: BIT_VECTOR(0 TO 3) := "0000";
VARIABLE temporal: INTEGER := 0;
BEGIN
temporal := valor_entero;
FOR k IN 0 TO 3 LOOP
IF (temporal MOD 2) = 0 THEN binario(k) := '0';
ELSE binario(k) := '1';
END IF;
temporal := temporal/2;
END LOOP;
RETURN binario;
END entero_binario;

--comienza el proceso

18
Apuntes de VHDL

BEGIN
FOR i IN 0 TO 15 LOOP
vector := entero_binario(i);
a<= vector(0);
b<= vector(1);
c<= vector(2);
d<= vector(3);
WAIT FOR retardo*2;
END LOOP;
END PROCESS;
END test2;

Modelo 13. Test-bench ejemplo modificado.

La declaración de la función se coloca en la parte declarativa del proceso.


Posteriormente se llama a la función dentro de una sentencia secuencial. El parámetro
que se le pasa es el índice del propio bucle en el que se ha situado la sentencia.

19
© Rafael Rico

11. REFERENCIAS.

[1] IEEE Standard VHDL Language Reference Manual. Published by the Institute of
Electrical and Electronics Engineers, 1994.

[2] IEEE Standard VHDL Language Reference Manual IEEE Std 1076-1987. Publicado
por IEEE. 1989.

[3] Lluis Terés et al. VHDL: Lenguaje estándar de diseño electrónico. Mc Graw Hill,
1997.

[4] Rafael Rico y Salvador Marcos, Simulación de Arquitecturas de Computadores.


Servicio de Publicaciones UAH, 1998.

[5] Roger Lipsett, Carl Schaefer and Cary Ussery, VHDL: Hardware Description and
Design. Kluwer Academic Publishers, 1989.

[6] David Coelho. The VHDL Handbook. Kluwer Academic Publishers. 1989.

[7] Zainalabedin Navabi. VHDL: Analysis and Modeling of Digital Systems. Mc Graw
Hill. 1992.

[8] Peter J. Ashenden. The VHDL Cookbook. University of Adelaide, South Australia;
FTP desde ftp.cs.adelaide.edu.au (129.127.8.8) pub/VHDL-Cookbook.

[9] V-System/Windows user´s manual. Model Technology, noviembre 1994.

20

También podría gustarte