Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Introduccin.
VHDL es un lenguaje poderoso que permite la integraci n de sistemas digitales sencillos, elaborados o ambos en un dispositivo lgico programable, sea de baja capacidad de integracin como un GAL, o de mayor capacidad como los CPLD y FPGA.
2.2 Entidad.
Una entidad (entity) es el bloque elemental de dise o en VHDL, Las entidades son todos los elementos electr nicos (sumadores, contadores, compuertas, flip-flops, memorias, multiplexores, etc.) que forman de manera individual o en conjunto un sistema digital. La entidad puede representarse de muy diversas maneras
Figura 2.1
b) Smbolo funcional de compuertas. Representa a nivel de sistema indicando tan solo con las entradas (Cin, A, B), salidas (SUMA, Cout)
2.2.2 Modos.
Un modo permite definir la direcci n en la cual el dato es transferido a travs de un puerto. Un modo puede tener uno de cuatro valores. (Fig. 2.3). Modo in: Se refiere a las se ales de entrada a la entidad. Modo out: Indica las se ales de salida de la entidad. Modo inout. Permite declarar a un puerto de forma bidireccional es decir, de entrada/salida; adem s permite la retroalimentaci n de seales dentro o fuera de la entidad. Modo buffer. Permite hacer retroalimentaciones internas dentro de la entidad, pero a diferencia del modo inout, el puerto declarado se comporta como una terminal de salida.
Como se declara una Entidad? En la declaracin de entidades, se definen las entradas, salidas y tamao de un circuito, explicitando cuales son, de qu tamao (de 0 a n bits), modo (entrada, salida, ...) tipo (integer, bit,.). Las entidades pueden definir bien a las entradas y salidas de un diseo ms grande o las entradas y salidas de un chip directamente. La declaracin de entidades es anloga al smbolo esquemtico de lo que queremos implementar, el cual describe las conexiones de un componente. Al resto del proyecto, es decir, si hay una entrada o puerto de 8 bits, o dos salidas o puertos de 4 bits, etc. La declaracin de entidades tiene la siguiente forma:
Cabecera del programa Se indica que a continuacin viene los puertos (o grupos seales) de entrada y/o salida Aqu se declaran las entradas y/o salidas con la sintaxis que se ver a continuacin. Las lneas empezadas por dos guiones son ignoradas por el compilador. As mismo, recordamos que el compilador no distingue las maysculas de las minsculas Se indica que se ha acabado la declaracin de puertos de entrada y/o salida, y que se ha acabado la entidad.
); end circuito_a;
Por ejemplo, la forma de declarar la entidad correspondiente al circuito sumador de la figura 2.1b) se muestra a continuaci n:
1 --Declaracin de la entidad de un circuito sumador 2 entity sumador is 3 port (A,B, Cin: in bit; 4 SUMA, Cout: out bit); 5 end sumador; Listado 2.1 Declaracin de la entidad sumador de la figura 2.1 b).
La lnea 1 inicia con dos guiones (--), los cuales indican que el texto que es un comentario En la lnea 2 se inicia la declaraci n de la entidad con la palabra reservada entity, seguida del identificador (sumador) y la palabra reservada is. Las lneas 3 y 4 declaran los puertos de entrada y salida ( port) En esta entidad conviene hacer notar el uso de punto y coma (;) al finalizar una declaraci n y de dos puntos (:) al asignar nombres a las entradas y salidas.
EJEMPLO 2.1 Declare identidad del circuito logico. Solucion: La declaracin de la identidad sera de la siuiente forma: 1 -- Declaracin de la entidad 2 Entity circuito is 3 Port ( a3,b3,a2,b2,a1,b1,a0,b0: in bits; 4 F: out bits); 5 end circuito;
Identificadores.
Los identificadores son un conjunto de caracteres dispuestos de una forma adecuada y siguiendo unas normas propias del lenguaje, para dar un nombre a los elementos en VHDL, por lo que es aconsejable elegir un nombre que sea representativo y que facilite la comprensi n del cdigo. Los identificadores son simplemente los nombres o etiquetas que se usan para referir variables, constantes, se ales, procesos, etc.
Regla El primer carcter siempre es una letra mayscula o minscula. El segundo car cter no puede ser un guin bajo. Dos guiones juntos no pueden ser un guin bajo. Un identificador no puede utilizar (especif. En apndice A).
Las reglas a tener en cuenta a la hora de elegir un identificador son: 1. Los identificadores deben empezar con un carcter alfabtico, no pudiendo terminar con un carcter subrayado, ni tener dos o ms de estos caracteres subrayados seguidos. 2. VHDL identifica indistintamente tanto las maysculas como las minculas, pudindose emplear por igual el identificador "sumador" o "SUMADOR". 3. Que el usuario elija un tamao que confiera sentido y significado al identificador, sin llegar a alcanzar longitudes excesivamente largas. 4. Los identificadores pueden contener caracteres numricos del '0' al '9', sin que stos puedan aparecer al principio. 5. No puede usarse como identificador una palabra reservada por VHDL.
Ejemplo de vectores de 4 bits: vector_A vector_B vector_C =[A3, A2, A1,A0] =[B3, B2, B1, B0] =[S3, S2, S1, S0]
En la figura 2.4 se observa la entidad del sumador analizado antes, slo que ahora las entradas A, B y la salida SUMA incorporan vectores de 4 bits en sus puertos.
En VHDL una configuraci n que utilice vectores consiste en la utilizacin de la sentencia bit- vector, mediante la cual se especifican los componentes de cada uno de los vectores utilizados. Tipo bit_vector: Es un vector de bits. Debemos tener cuidado al definir el peso de los bits que lo integran, ya que segn pongamos la palabra reservada downto o to estaremos diciendo que el bit ms significativo es el nmero ms alto o el ms bajo del vector respectivamente. numero : bit_vector (0 to 7); numero : bit_vector (7 downto 0); En este caso el MSB es numero(0) y numero(7) el LSB. En este caso el MSB es numero(7) y numero(0) el LSB
La parte del cdigo se se usa para declarar un vector dentro de los puertos es el siguiente: port (vector A, vector B: in bit vector (3 downto O); vector_SUMA: out bit_vector (3 downto O)); Esta declaracin define los vectores (A, B y SUMA) con cuatro componentes distribuidos en orden descendente por medio del comando: 3 downto 0 (3 hacia 0)
Los cuales se agruparan de la siguiente manera: vector_A(3) = A3 vector_B(3) = B3 vector_SUMA(3) = S3 vector_A(2) = A2 vector_B(2) = B2 vector_SUMA(2) = S2 vector_A(1) = Al vector_B(1) = B1 vector_SUMA(l) = SI vector_A(O) = AO vector_B(O) = BO vector_SUMA(O) = SO
Una vez que se ha establecido el orden en que aparecern los bits enunciados en cada vector no se puede modificar a menos que se utilice el comando to . 0 to 3 ( 0 hasta 3) Indica el orden de aparicin en sentido ascendente.
Ejemplo 2.2 Describa en VHDL la entidad del circuito sumador representado en la figura 2.4. Observe cmo la entrada Cin (Carry in) y la salida Cout (Carry out) se expresan de forma individual. Solucin 1. entity sumador is 2. port (A,B: in bit_vector (3 downto O); 3. Cin: in bit; 4. Cout: out bit; 5. SUMA: out bit_vector(3 downto O)); 6. end sumador;
entity compa is port ( a,b: in bit_vector(3 downto 0); igual: out bit; ); end compa;
Cabecera de la entidad, cuyo nombre es compa * a y b son las entradas de cuatro bits * igual es la salida de un slo bit Se finaliza la entidad con la palabra clave end y el nombre de la misma (compa).
La librera work es el lugar establecido donde se almacenan los programas que el usuario va generando. Esta librer a se encuentra siempre presente en la compilaci n de un diseo y los diseos se guardan en ella mientras no se especifique otra. Un paquete es una unidad de dise o que permite desarrollar un programa en VHDL de una manera gil, debido a que contiene algoritmos preestablecidos (sumadores. restadores, contadores, etc.) que ya tienen optimizado su comportamiento. Por esta raz n, el diseador no necesita caracterizar paso a paso una nueva unidad de diseo si ya se encuentra almacenada en alg n paquete -en cuyo caso basta con llamada y especificarla en el programa-. Un paquete no es m s que una unidad de dise o formada por declaraciones, programas, componentes y subprogramas, que incluyen los diversos tipos de datos, empleados en la programaci n en VHDL y que suelen formar parte de las herramientas en software. Cuando en el diseo se utiliza algn paquete es necesario llamar a la librera que lo contiene. Para esto se utiliza la siguiente declaracin: library ieee;
PAQUETES El paquete std_logic_1164 (estandar logico_1164) que se encuentra en la librera ieee contiene todos los tipos de datos que suelen emplearse en VHDL (std_logic_vector,std_logic; entre otros). El acceso a la informaci n contenida en un paquete es por medio de la sentencia use, seguida del nombre de la librer a y del paquete, respectivamente: use nombre_ librera.nombre _paquete. all; por ejemplo: use ieee.std_logic_1164. all; En este caso ieee es la librera, std_ logic_1164 es el paquete y la palabra reservada all indica que se pueden usar todos los componentes almacenados en el paquete.
El paquete numeric_std define funciones para realizar operaciones entre diferentes tipos de datos (sobrecargado); adems, los tipos pueden con signo o sin este. El paquete numeric_bit define los tipos de datos binarios con signo o sin este. El paquete std_arith define funciones y operadores aritmticos, como igual (=); mayor que(>); menor que (<); entre otros.
Ejemplo 2.4 En la figura E2.4 se muestra el bloque representativo de un circuito multiplicador de 2 bits. La multiplicacin de (X1, X0)y (Y1,Y0) producen la salida Z3, Z2, Z1, ZO. Declare la entidad del circuito utilizando la librera ieee y el paquete std._logic_1164.all.
Figura 2.4 Solucin library ieee; use ieee.std_logic_ll64.all; entity multiplica is port (X0,Xl,Y0,Yl: in std_logic; Z3,Z2,Zl,ZO: out std_logic); end multiplica;
1 2 3 4 6 7
2.5 Arquitecturas
Una arquitectura (architecture) se define como la estructura que describe el funcionamiento de una entity, de tal forma que permita el desarrollo de los procedimientos que se llevarn a cabo con el fin de que la entidad cumpla las condiciones de funcionamiento deseadas. La gran ventaja que presenta VHDL para definir una arquitectura radica en la manera en que pueden describirse los diseos; es decir, mediante el algoritmo de programacin empleado se puede describir desde el nivel de compuertas hasta sistemas complejos. De manera general, los estilos de programacin utilizados en el diseo de arquitecturas s clasifican como: Estilo funcional Estilo por flujo de datos Estilo estructural.
En la figura 2.6 se describe funcionalmente el circuito comparador. Se trata de una descripci n funcional porque expone la forma en que trabaja el sistema; es decir, las descripciones consideran la relaci n que hay entre las entradas y las salidas del circuito, sin importar como est organizado en su interior.
si si
Ntese cmo la declaraci n de la entidad (entity) se describe en las l neas de la 1 a la 7; el c digo ocupa de la linea 8 a la 18; donde se desarrolla el algoritmo ( rchitecture) que describe el funcionamiento del comparador. Para Iniciar la declaraci n de la arquitectura (l nea 8), es necesario definir un nombre Arbitrario con que se pueda identificar en nuestro caso el nombre asignado Fue funcional- adems de incluir. la entidad con que se relaciona (comp). En la l nea 9 se puede observar el inicio ( begin) de la secci n donde se comienzan a declarar los procesos que rigen el comportamiento del sistema. La declaraci n del proceso (l nea 10) se utiliza para la definici n de algoritmos y comienza con una etiqueta opcional (en este caso compara), seguida de dos puntos (:), la palabra reservada process y une la lista sensitiva (a y b), que hace referencia las se ales que determinan el funcionamiento del proceso. Al seguir e! an lisis, puede notarse que de la l nea 12 a la 17 el proceso se ejecuta mediante declaraciones secuenciales del tipo ifthen-eIse (si-entonces- si no). Esto se interpreta como sigue (l nea 12): si el valor de la se al a es igual al valor de la se al b, entonces 1 ' se asigna a c, si no (else) se asigna un 0' (el s mbolo < = se lee como "se asigna a").
Una vez que se ha definido el proceso, se termina con la palabra reservada end process y de manera opcional el nombre del proceso (compara); de forma similar se a ade la etiqueta (funcional) al terminar la arquitectura en la l nea 18. Como se puede observar, la descripci n funcional se basa principalmente en el uso de procesos y de declaraciones secuenciales, las cuales permiten modelar la funci n con rapidez. Describa mediante declaraciones del tipo if-then-else el funcionamiento de La compuerta OR mostrada en la figura 2.5 con base en la tabla de verdad.
Figura 2.5
Solucin Como puede observarse, la declaraci n de la librera y el paquete se introducen en las l neas 2 y 3,respectivamente. La declaracin de la entidad se define entre las l neas 4 a 7 inclusive. Por ltimo, la arquitectura se describe en las l neas 8 a 17. 15 end if; 1 -- Declaracin funcional 2 library ieee; 16 end process; 3 use ieee.std_logic_1164. all; 17 end funcional; 4 entity com_or is 5 port( a,b: in std_logic; 6 fl: out std_logic); 7 end com_or; 8 architecture funcional of com_or is 9 begin 10 process (a,b) begin 11 if (a = 'O' and b = 'O') then 12 f1 <= 'O'; 13 else 14 f1<= '1';
1 --Ejemplo de declaraci n de la entidad de un comparador 2 library ieee; 3 use ieee.std_logic_1l64. all; 4 entity comp is 5 port (a,b: in bit_vector (1 downto O); 6 c: out bi t) ; 7 end comp; 8 architecture f_datos of comp is 9 begin 10 c <=1 when (a = b) else O '; (asigna a c el valor 11 de 1 cuando a=b si no vale O). 12 end f_datos;
En VHDL se manejan dos tipos de declaraciones: secuenciales y concurrentes. Una declaraci n secuencial de la forma if-then-else se halla en el listado 2.2 dentro del proceso, donde su ejecuci n debe seguir un orden para evitar la p rdida de la l gica descrita. En cambio, en una declaraci n concurrente esto no es necesario, ya que no importa el orden en que se ejecutan. Tal es el caso del listado 2.3. Ejemplo 2.6 Con base en la tabla de verdad y mediante la declaraci n whenelse, describa el funcionamiento de la siguiente compuerta AND.
Figura 2.6
1 --Algoritmo utilizando flujo de datos 2 library ieee; 3 use ieee.std_logic_1164.all; 4 entity com_and is 5 port( a,b: in std_logic; 6 f: out std_logic); 7 end com_and; 8 architecture compuerta of com_and is 9 begin 10 f <=e '1' when (a = '1' and b = '1') else 11 0' ; 12 end compuerta;
b) Descripcin por flujo de datos mediante ecuaciones booleanas Otra forma de describir el circuito comparador de dos bits es mediante la obtenci n de sus ecuaciones booleanas figura 2.7. en el listado 2.4 se observa este desarrollo.
b) Comparador de dos bits realizado con compuertas. El interior del circuito comparador de la figura 2.7 a) Puede representarse por medio de compuertas b sicas [Fig. 2.7b] y este circuito puede describirse mediante la obtenci n de sus ecuaciones booleanas.
1 -- Ejemplo de declaraci n de la entidad de un 2 library ieee; 3 use ieee.std_logic_1164. all; 4 entity comp is 5 port (a ,b : in bit_vector (1 downto 0) ; 6 c: out bit) ; 7 end comp; 8 architecture booleana of comp is 9 begin 10 c <= (a(1) xnor b(1) 11 and a (O) xnor b (O)); 12 end booleana;
comparador
Ejemplo 2.7 La forma de flujo de datos en cualquiera de sus representaciones describe el camino que los datos siguen al ser transferidos de las operaciones efectuadas entre las entradas a y b a la se al de salida c. Describa mediante ecuaciones booleanas el circuito mostrado a continuacin.
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Solucin --Declaracin mediante ecuaciones boolenas library ieee; use ieee.std_logic_1164.all; entity ejemplo is port ( a,b,c,d: in std_logic; f: out std_logic); end ejemplo; architecture compuertas of ejemplo is begin f <= ((a or b) xnor (c and b)); end compuertas;
En nuestro caso, cada compuerta (modelo lgico) se encuentra dentro del paquete gatespkg,6 del cual se toman para estructurar el dise o. A su vez, este tipo de arquitecturas estndares se conoce como componentes, que al interconectarse por medio de seales internas (x0, x1) permiten proponer una solucin. Para iniciar la programaci n de una entidad de manera estructural, es necesario la descomposici n l gica del dise o en peque os subm dulos (jerarquizar), los cuales permiten analizar de manera pr ctica el circuito, ya que la funcin de entrada/salida es conocida.
En nuestro ejemplo se conoce la funci n de salida de las dos compuertas xnor, por lo que al unidas a la compuerta and, la salida c es el resultado de la operaci n and efectuada en el interior a travs de las seales x0 y x1 (Fig. 2.8). Es importante resaltar que una jerarqu a en VHDL se refiere l procedimiento de dividir en bloques y no a que un bloque tenga mayor jerarqua (peso) que otro. Esta forma de dividir el problema hace de la descripci n estructural una forma sencilla de programar. En el contexto del diseo lgico esto es observable cuando se analiza por separado alguna secci n de un sistema integral. En el listado 2.5 se muestra el c digo del programa que representa al esquema de la figura 2.8.
1 library ieee; 2 use ieee.std_logic_1164.all; 3 entity comp is port( 4 a,b: in bit_vector (0 to 1); 5 c: out bit); 6 end comp; 7 use work.compuerta.all; 8 architecture estructural of comp is 9 signal x: bit_vetor (0 to 1); 10 begin 11 U0: xnor2 port map (a(0), b(0), x(0)); 12 U1: xnor2 port map (a(1), b(1), x(1)); 13 U2: and2 port map (x(0), x(1), c);! 14 end estructural;
En el c digo se puede ver que en la entidad nada m s se describen las entradas y salidas del circuito (a, b y c), seg n se ha venido haciendo (l neas 3 a la 6). Los componentes xnor y and no se declaran debido a que se encuentran en el paquete de compuertas (gatespkg), e! cual a su vez est dentro de la librer a de trabajo (work), lnea 7. En la l nea 8 se inicia la declaraci n de la arquitectura estructural. El algoritmo propuesto (l neas 11 a 13) describe la estructura de la siguiente forma: cada compuerta se maneja como un bloque l gico independiente (componente) del dise o original, al cual se le asigna una variable temporal. (U0, U1 y U2); la salida de cada uno de estos bloques se maneja como una se al l nea 9, signal x (x0 y x1), las cuales se declaran dentro de la arquitectura y no en la entidad, debido a que no representan a una terminal (pin) y s lo se utilizan para conectar bloques de manera interna a la entidad. Por ltimo, podemos observar que la compuerta AND recibe las dos se ales provenientes de x (x0 y x1), ejecuta la operaci n y asigna el resultado a la salida c de! circuito. Ejemplo 2.8 Realice el programa correspondiente en VHDL para el circuito mostrado en la figura 2.8. Utilice descripci n estructural.
Figura 2.8 Solucin 1 library ieee; 2 use ieee.std_logic_1164. all; 3 entity comp is 4 port ( A,B,C : in std_logic; 5 F: out std_logic); 6 end comp; 7 use work.compuerta.all; 8 architecture estructura of comp is 9 signal x: bit_vector (0 10 begin
to 2);
11 U0: and2 port map 12 U1: and2 port map 13 02: and2 port map 14 03: or3 port map 15 end estructural
(B, C, x(0)) ; (C, A, x(1)) ; (A, B, x(2)); (x(0), x(1), x(2), F);
Comparacin entre los estilos de dise o El estilo de dise o utilizado en la programaci n del circuito depende del dise ador y de la complejidad del proyecto. por ejemplo, un dise o puede describirse por medio de ecuaciones booleanas, pero si es muy extenso quiz sea ms apropiado emplear estructuras jer rquicas para dividido; ahora bien, si se requiere dise ar un sistema cuyo funcionamiento dependa s lo de sus entradas y salidas, es conveniente utilizar la descripci n funcional, la cual presenta la ventaja de requerir menos instrucciones y el dise ador no necesita un conocimiento previo de cada componente del circuito.