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.
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.
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
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
ENTIDAD
e2
sal
e1 sal e2
ARQUITECTURA
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
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.
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
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;
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.
12
Apuntes de VHDL
+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
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
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
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
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