Anda di halaman 1dari 20

APUNTES DE VHDL

1. OBJETIVOS.
Estos Apuntes pretenden ser una gua 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 rpida. 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 descripcin de hardware no tenga inters por s mismo. Es cada vez ms utilizado en la industria y el empeo por completar su conocimiento en profundidad es una tarea a la que animamos a cualquiera de nuestros alumnos de ingeniera ya que, sin duda, ser un estupendo remate a su formacin profesional. El mtodo utilizado aqu no consiste en presentar la sintaxis de forma sistemtica para eso ya estn otros libros sino en ensear a travs de ejemplos siguiendo la tcnica empleada en algunas universidades norteamericanas y bautizada all como teach by example. En definitiva se trata de conducir al estudiante a travs 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 DESCRIPCIN HARDWARE VHDL: HISTORIA.


El lenguaje VHDL naci para dar respuesta a numerosos problemas planteados en el desarrollo y documentacin de hardware digital. La documentacin requerida para describir un sistema electrnico puede ocupar miles de pginas y suele ser muy costoso reemplazar la informacin contenida cuando la tecnologa o las especificaciones cambian. Un lenguaje de descripcin adecuado resuelve el problema ya que la "documentacin" es ejecutable. VHDL se ha convertido en un estndar, lo cual ya es una ventaja, que adems rene otras caractersticas que lo hacen particularmente atrayente. Es un lenguaje independiente de la tecnologa, no emparejado a un determinado simulador y no requiere una metodologa precisa de diseo. VHDL permite implementar nuevas tecnologas en diseos 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 diseado por Intermetrics, IBM y Texas Instruments e impulsado por el Departamento de Defensa de los Estados Unidos. En diciembre de 1987 fue aprobado como estndar del IEEE y posteriormente, en 1993, fue revisado y registrado como norma IEEE Std 1076-1993.

Rafael Rico

VHDL es un lenguaje de semntica orientada a la simulacin y por ello su principal dominio de aplicacin es el modelado de dispositivos hardware para comprobar su correcto funcionamiento. De todos modos tiene otras reas de aplicacin tales como: sntesis automtica, verificacin formal, modelado de rendimiento, diagnosis de fallos y documentacin.

3. MODOS DE DESCRIPCIN DE CIRCUITOS LGICOS.


El lenguaje de descripcin de hardware VHDL cuenta con diferentes modos de llevar a cabo la descripcin. Normalmente su aprendizaje se comienza desde la perspectiva del diseador tradicional de hardware, utilizando las construcciones del lenguaje que permiten una descripcin estructural desde las puertas lgicas 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 descripcin comportamental y la ejecucin concurrente de procesos manifiestan la verdadera potencia del VHDL. Seguidamente vamos a caracterizar cada uno de los modos de descripcin basndonos en un ejemplo. Sea el circuito lgico de la figura siguiente:
e1 s1 e2 sal e3 s2 e4

Figura 1. Circuito lgico. Podemos describirlo indicando la funcin que realiza, es decir, especificando su comportamiento:
sal = '1' si (e1 = e2 = '1') o si (e3 = e4 = '1'); [1]

Podemos describirlo tambin especificando los componentes ms bsicos que lo forman y como se conectan entre si, es decir, podemos dar su estructura:
AND (e1, e2, s1); AND (e3, e4, s2); OR (s1, s2, sal); [2]

Finalmente, podemos proporcionar la relacin entre unas seales y otras, es decir, indicar el flujo de seales:
sal = s1 OR s2; s1 = e1 AND e2; s2 = e3 AND e4; [3]

Apuntes de VHDL

El lenguaje de descripcin hardware VHDL permite estos tres modos de descripcin: comportamental (ecuacin lgica 1) estructural (ecuacin lgica 2) flujo de datos o RTL (ecuacin lgica 3) En el modelado comportamental lo importante es la funcin que relaciona la salida con la entrada. El lenguaje VHDL permite escribir funciones complejas sin recurrir a su implantacin fsica con lo que se revela como una herramienta de gran rendimiento ya que proporciona una potencia de diseo 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 descripcin previa de manera que se construye una jerarqua de descripciones donde las inferiores dan lugar a superiores ms 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 sucesin temporal con la que evolucionan las diferentes seales del modelo descrito.

entradas

salidas

Figura 4. Esquema del modelado RTL. Cada uno de los modos de descripcin lleva asociada una sintxis determinada que lo caracteriza. Podemos modelar un circuito con cualquiera de ellos.

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 seales, unas de entrada y otras de salida. En la figura siguiente se ha sealado el bloque mediante una linea punteada que encierra los componentes.
e1
s1

e2 sal e3
s2

e4

Figura 5. Conjunto del circuito lgico y su relacin con el exterior. El bloque se conoce en VHDL como ENTIDAD y se declara en primer lugar. Una ENTIDAD indica las seales que entran al circuito y las que salen, es decir, declara la relacin del circuito con el mundo exterior. e1 e2

ENTIDAD
e3 e4

sal

Figura 6. Entidad correspondiente al ejemplo anterior. A cada ENTIDAD le corresponde al menos una descripcin (comportamental, estructural o RTL) aunque puede tener mltiples que se especifica en su ARQUITECTURA. La sintaxis especfica se presenta ms adelante pero a continuacin vamos a ver un ejemplo de descripcin comportamental. Cada fichero fuente (modo texto) debe contener una declaracin de entidad y, al menos, una arquitectura. Si modelamos ms 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 extensin .VHD.

Apuntes de VHDL

5. EJEMPLOS DE DESCRIPCIN 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 descripcin del circuito o la llevan a cabo de diferentes modos. La descripcin comportamental es la nica disponible al ms bajo nivel de modelado de circuitos digitales (puertas lgicas) ya que no es posible fundamentarla en bloques ms bsicos que ya seran los transistores. Puerta AND de dos entradas sin 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; END PROCESS; END comportamiento;
e1

ENTIDAD
e2

sal

e1 sal e2

ARQUITECTURA

Modelo 1. Puerta AND sin retardo.

Figura 7. Elementos del modelo.

Es una descripcin COMPORTAMENTAL donde la ARQUITECTURA declara simplemente la funcin que relaciona salida con entradas. Dicha arquitectura contine un nico proceso. El PROCESO cuenta con una sla sentencia de asignacin de seal que corresponde a la ecuacin lgica de la puerta AND. El proceso se despierta con la variacin de las seales e1 o e2 enumeradas entre parntesis. A continuacin se muestra la ventana de onda de V-System donde se puede observar el correcto funcionamiento de la descripcin.

Figura 8. Ventana de onda correspondiente a la puerta AND sin retardo. Una puerta AND sin retardo no es ms que un ente de razn. Cualquier puerta fsica tiene un retardo que hay que tener en cuenta.

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 aadido un retardo de 2 ns en la descripcin del proceso. Este retardo se podra haber introducido como un GENRICO dentro de la declaracin de ENTIDAD. La ventaja est en que es fcilmente modificable sin tener que cambiar todas las sentencias de asignacin de seal que tengan la clasula 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 genrico. Esta descripcin del comportamiento del circuito se puede modificar modelando otro proceso e incluyndolo en una nueva ARQUITECTURA que llamaremos comportamiento1. Se da a continuacin y forma parte del mismo fichero AND2.VHD que la anterior declaracin 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 aadido al mismo fichero fuente. Obsrvese como esta nueva descripcin es equivalente a la anterior pero utiliza un proceso diferente donde se han incluido sentencias de tipo condicional.

Apuntes de VHDL

Finalmente, podemos imaginar otra descripcin del circuito basada en sentencias condicionales pero donde se evala una variable interna al proceso. Hemos de declararla antes de iniciar el proceso. Tambin es importante notar como la lista de seales a las que es sensible el proceso (aquellas que lo despiertan) no se da despus 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 ms real an. En muchas tecnologas 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. Tambin se han utilizado sentencias de asignacin de seal y de asignacin de variable. El modelo anterior cuenta con sentencias de asignacin de seal y sentencias de asignacin de variable. El operador de asignacin en el primer caso es := mientras que en el segundo es <=. Ya podemos deducir que SEALES y VARIABLES, independientemente de su tipo, son objetos diferentes tanto en su almacenamiento, como en su procesamiento y en su significado. A continuacin se ilustra la ventana de onda de V-System en donde se puede observar el correcto funcionamiento de la puerta adems de los retardos que se han modelado en el nico proceso presente en la ARQUITECTURA.

Figura 9. Ventana de onda correspondiente al modelo anterior.

Rafael Rico

La figura siguiente ilustra el hecho de que el lenguaje VHDL nos permite asociar a cada entidad una coleccin de arquirtecturas. Esta coleccin puede contener una variedad de codificaciones con la misma funcin de transferencia, como sucede en dicha figura. Sin embargo, tambin podran ser modificaciones al comportamiento en funcin de tipos de implantacin, tecnologa, encapsulados, respuesta trmica, etc. Incluso podramos 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 lgicas diferentes. Solamente el programador detectar el fallo ya que los compiladoressimuladores no pueden hacerlo.
ARCHITECTURE comportamiento_3 OF nand2 IS BEGIN PROCESS (e1, e2) BEGIN IF e1='1' AND e2='1' THEN sal <='0' AFTER retardo; ELSE sal <='1' AFTER retardo; END IF; END PROCESS; END comportamiento_3;

ARCHITECTURE comportamiento_1 OF nand2 IS BEGIN PROCESS (e1, e2) BEGIN sal <= e1 NAND e2; END PROCESS; END comportamiento_1;

ARQUITECTURAS

e2 sal e1 ENTIDAD

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

Figura 10. Esquema ilustrativo de cmo VHDL permite asociar a una entidad una coleccin 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 ms importante es el proceso. A su vez, el proceso encierra un conjunto de sentencias secuenciales.

Apuntes de VHDL

6. ELEMENTOS BSICOS DE SINTAXIS VHDL.


De lo visto hasta el momento se desprende que toda descripcin hardware mediante VHDL consta de la declaracin de una ENTIDAD y de, al menos, una ARQUITECTURA asociada. La sintaxis bsica de estos elementos es la siguiente:
ENTITY identificador IS --esto es un comentario [GENERIC (nombre: TIPO := valor);] [PORT (seal1,seal2,...:IN TIPO; seal3, seal4,...:OUT TIPO);] END identificador; ARCHITECTURE nombre OF identificador IS --parte declarativa de la arquitectura BEGIN --sentencias concurrentes END nombre;

Sintxis 1. Declaracin de entidad y arquirtectura. La declaracin de entidad se realiza mediante la palabra reservada ENTITY seguida de una etiqueta identificadora. Dentro de la entidad se declaran las seales que entran y salen usando la palabra reservada PORT. Tambin se declaran los genricos o constantes as como sus valores usando la palabra reservada GENERIC. Las seales pueden ser de varios tipos, unos definidos en la propia normalizacin 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 seales de una entidad se agrupan por tipos y modos y se separan por comas (,). La declaracin 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 seales. Inmediatamente detrs de ARCHITECTURE y antes de la palabra BEGIN se encuentra la parte declarativa de la arquitectura que sirve para declarar variables y seales locales a la arquitectura. Despus 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 simultnea en tiempo de simulacin con el resto de forma que todas parten del mismo instante de simulacin. Como se puede ver ms 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 lmites 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 evala segn su orden y hace avanzar el tiempo de simulacin de acuerdo a los retardos asociados. Cada sentencia secuencial parte del origen de tiempos que marca el final de la sentencia anterior.

Rafael Rico

ARCHITECTURE nombre OF identificador IS BEGIN PROCESS [(lista de sensibilizacin)] [--declararacin de variables VARIABLE nombre_variable: TIPO [:= valor_inicial]; --declaracin de constantes CONSTANT nombre_constante: TIPO [:= valor inicial];] BEGIN sentencias secuenciales END PROCESS; END nombre;

Sintxis 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 seales locales al proceso. Depus de BEGIN colocamos la serie de sentencias secuenciales. Un proceso slo se evala si cambia alguna de las seales de su lista de sensibilizacin. Es lgico: si las seales de la lista no cambian no hay nada que calcular, las seales no tienen valores nuevos. La lista de sensibilizacin se da entre parntesis despus de la palabra PROCESS. Si no se da lista de seales 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 ms importantes pueden agruparse bajo dos categoras: sentencias de declaracin y asignacin de variable sentencias de control de flujo En los ejemplos de modelos propuestos hasta el momento se puede estudiar cmo se utilizan y cul es su sintaxis.

10

Apuntes de VHDL

7. EJEMPLOS

DE CONCURRENTES.

ARQUITECTURAS

CON

VARIOS

PROCESOS

Siguiendo con el modelo de descripcin comportamental vamos a poner algunos ejemplos ilustrativos de la ejecucin concurrente de la mano de otro circuito: una puerta AND de cuatro entradas. La entidad responder a:
a b c d

ENTIDAD

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

Figura 11. Entidad de 4 entradas y 1 salida.

Modelo 6. Declaracin de la entidad.

Nos podemos imaginar su arquitectura de varios modos. En la figura siguiente tenemos dos de ellos:
a b c d z a b c d s1

s2

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. Descripcin basada en un nico proceso. El modelo anterior es la extensin natural de la puerta AND de 2 entradas utilizada como ejemplo en apartados anteriores. En este caso, el proceso cuenta con una sentencia de asignacin de seal que describe la funcin lgica que relaciona salida con entradas. Cada vez que cambia alguna de las seales de entrada (lista de sensibilizacin) se evala el proceso y se calcula el valor de la seal de salida. Tambin se calcula el tiempo de simulacin en el que se produce el cambio en la salida en funcin del instante en el que vara la entrada ms 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 --declaracin de seales 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. Descripcin 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 sensibilizacin que lo despierta. Cuando un proceso se evala puede provocar un cambio en una seal de salida que a su vez hace despertar otro proceso. Si dos procesos se despiertan a la vez, avanzarn simultnemente en tiempo de simulacin desde el instante en que variaron las seales asociadas a sus listas de sensibilizacin. En la siguiente imagen se da la ventana de onda tal como queda despus 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 continuacin se da una tabla con la lista de seales y sus valores en el tiempo. Se dan los tiempos fsicos en ns y los de simulacin . La tabla corresponde a lo mostrado en la figura anterior. ns
0 0 10 12 20 22 30 32 40 42 44 46 50

+0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0

a
0 1 1 1 1 1 1 1 0 0 0 0 0

b
0 0 1 1 1 1 1 1 1 1 1 1 0

c
0 0 0 0 1 1 1 1 1 1 1 1 1

d
0 0 0 0 0 0 1 1 1 1 1 1 1

s1
0 0 0 1 1 1 1 1 1 0 0 0 0

s2
0 0 0 0 0 1 1 1 1 1 0 0 0

z
0 0 0 0 0 0 0 1 1 1 1 0 0

Tabla 1. Tiempos fsicos y de simulacin asociados al cronograma previo. Obsrvese como se da un solo caso en el que tengo + 1. Al comenzar se ha forzado la seal a al valor '1' con lo que en tiempo fsico 0 ha debido pasar de su valor por defecto '0' a '1', es decir, en un tiempo de simulacin . En el resto de los casos debido a los retardos introducidos el tiempo de simulacin avanza con el tiempo fsico. El tiempo fsico avanza gracias a los retardos incluidos en las sentencias de asignacin de seal. El tiempo de simulacin avanza en ( + 0, + 1, + 2, , + n). Cada corresponde a la evaluacin de un proceso pero no hace avanzar el tiempo fsico si no hay retardos. Todo lo que sucede en + n es concurrente. Antes de seguir haremos una definicin de SEAL. Una seal es un array de pares valor-tiempo. Es decir, una seal almacena la secuencia de valores que toma un cable y el instante de tiempo en el que se produce cada cambio.
proceso fuente
t3 v3 seal <= ...

proceso destino

driver de seal
t0 v0 t1 v1 t2 v2

valor actual
...<= seal

valores proyectados

Figura 14. Visin esquemtica de una seal.

13

Rafael Rico

Qu sucedera si la arquitectura se hubiera modelado sin retardos? El modelo que se ajusta a este caso se expone seguidamente:
ARCHITECTURE comportamiento2 OF --declaracin de seales SIGNAL s1, s2: BIT; BEGIN --proceso correspondiente PROCESS (a, b) BEGIN s1 <= a AND b; END PROCESS; --proceso correspondiente PROCESS (s1, c) BEGIN s2 <= s1 AND c; END PROCESS; --proceso correspondiente PROCESS (s2, d) BEGIN z <= s2 AND d; END PROCESS; END comportamiento2; and4 IS

a la puerta 1

a la puerta 2

a la puerta 3

Modelo 9. Puerta AND de cuatro entradas sin retardos. Tendramos la siguiente tabla de seales y tiempos: ns
0 10 20 20 20 30 30 30 30

+0 +0 +0 +1 +2 +0 +1 +2 +3

a
0 1 1 1 1 0 0 0 0

b
0 0 1 1 1 1 1 1 1

c
0 0 1 1 1 1 1 1 1

d
0 0 0 0 0 1 1 1 1

z
0 0 0 0 0 0 1 1 0

s1
0 0 0 1 1 1 0 0 0

s2
0 0 0 0 1 1 1 0 0

Tabla 2. Tiempos fsicos y de simulacin para el modelo sin retardos. Notar como, al no haber retardos de tiempo fsico, al variar una seal se despiertan los procesos a los que afecta en sucesivos de tiempo de simulacin pero sin hacer avanzar el tiempo fsico. Por ejemplo, a los 30ns de tiempo fsico 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 seal 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 declaracin de dos seales nuevas (s1 y s2) que interconectan los procesos. Se han introducido en la parte declarativa de la arquitectura.

14

Apuntes de VHDL

9. DESCRIPCIN ESTRUCTURAL VHDL.


En una descripcin estructural se declaran los bloques componentes del circuito y se realizan las interconexiones. Los componentes del dispositivo habrn sido descritos en algun otro diseo VHDL que deber estar previamente compilado. Puerta AND de cuatro entradas: El modelo estructural de la puerta estudiada anteriormente sera:
ARCHITECTURE estructural1 OF and4 IS --declaracin de componentes COMPONENT and2 PORT (e1, e2: IN BIT; sal: OUT BIT); END COMPONENT; --declaracin de seales 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 descripcin estrctural. En la parte declarativa de la arquitectura se da cuenta de los componentes constituyentes con la clusula COMPONENT. La sintaxis es similar a la de la entidad siendo necesario unicamente incluir las seales que entran y salen. Seguidamente se declaran los cables que realizaran las conexiones, es decir, las seales 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);

Despus del BEGIN encontramos las instancias (copias) de los bloques componentes. Cada uno cuenta con una etiqueta identificativa. La clusula PORT MAP declara las conexiones. Si PORT fuera una declaracin local, PORT MAP sera una forma de declaracin global. En realidad, cada instanciacin de un componente puede ser vista como una llamada a su proceso y, por tanto, a una sentencia concurrente como suceda en el modelado comportamental. Si la instancia es tambin una descripcin estructural, llamar a los procesos correspondientes de un nivel jerrquico inferior y as sucesivamente hasta encontrar algn modelo comportamental puro. La lista de conexiones del PORT MAP debe realizarse en el orden en el que las seales se declararon en la entidad si se hace implcitamente, como en el ejemplo. Si se hace explcitamente no es necesario.

15

Rafael Rico

Se puede observar en la simulacin del modelo previo que los retardos de la salida son asimtricos, es decir, el retardo de salida depende de qu seal de entrada haya variado. Hay que cambiar el circuito para que guarde simetra. Modificar el modelo de acuerdo al siguiente esquema es muy sencillo. Requiere solamente realizar otro conexionado.
a b c d s1 z s2

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


ARCHITECTURE estructural2 OF and4 IS --declaracin de componentes COMPONENT and2 PORT (e1, e2: IN BIT; sal: OUT BIT); END COMPONENT; --declaracin de seales 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. Descripcin del circuito propuesto.

10. TEST-BENCH.
El test-bench es un tipo de descripcin 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 compilacin-simulacin. Un test-bench es una caja sin seales de conexin exterior. Es decir, una entidad sin puertos. La arquitectura cuenta con una instancia del modelo bajo test y un proceso que le inyecta seales. Las seales de entrada adoptarn 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 seales de entrada que previamente programamos en el proceso.

Proceso

Entidad 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 --declaracin del componente a estudiar COMPONENT and4 PORT (a, b, c, d: IN BIT; z: OUT BIT); END COMPONENT; --especificacin de la configuracin del componente FOR componente: and4 USE ENTITY WORK.and4(estructural2); --declaracin de seales de interconexin SIGNAL a, b, c, d: BIT:= '0'; SIGNAL z: BIT:='0'; --declaracin de constante CONSTANT retardo: TIME:=4 ns; --comienza la descripcin de los procesos BEGIN --primer proceso: instanciacin del componente a estudiar componente: and4 PORT MAP (a, b, c, d, z); --segundo proceso: estimulo de las seales 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 seales de manera automtica haciendo un barrido de todos los posibles valores sobre 4 bits. Se ha implementado el algoritmo de conversin de entero a binario basado en las sucesivas divisiones entre 2. A continuacin se ilustra la ventana de onda de V-System para el test-bench modelado anteriormente.

17

Rafael Rico

Figura 17. Cronograma de ejecucin del test-bench ejemplo. Se puede modificar el proceso de asignacin de valores a las seales declarando una funcin que realice la transformacin de un entero a un nmero binario. Quedara tal como sigue:
ARCHITECTURE test2 OF run_and4 IS --declaracin del componente a estudiar COMPONENT and4 PORT (a, b, c, d: IN BIT; z: OUT BIT); END COMPONENT; --especificacin de la configuracin del componente FOR componente: and4 USE ENTITY WORK.and4(estructural2); --declaracin de seales de interconexin SIGNAL a, b, c, d: BIT:= '0'; SIGNAL z: BIT:='0'; --declaracin de constante CONSTANT retardo: TIME:=4 ns; --comienza la descripcin de los procesos BEGIN --primer proceso: instanciacin del componente a estudiar componente: and4 PORT MAP (a, b, c, d, z); --segundo proceso: estimulo de las seales de entrada PROCESS VARIABLE vector: BIT_VECTOR(0 TO 3) := "0000"; --funcin 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 declaracin de la funcin se coloca en la parte declarativa del proceso. Posteriormente se llama a la funcin dentro de una sentencia secuencial. El parmetro 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 Ters et al. VHDL: Lenguaje estndar de diseo electrnico. Mc Graw Hill, 1997. [4] Rafael Rico y Salvador Marcos, Simulacin 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 users manual. Model Technology, noviembre 1994.

20

Anda mungkin juga menyukai