Sunteți pe pagina 1din 33

1

Captulo 1. Descripcin de un circuito en VHDL


VHDL es la abreviacin de VHSIC (Very High Speed Integrated Circuit) y HDL (Hardware Description Language), siendo una herramienta EDA (Electronic Design Automation) utilizada en el diseo de sistemas electrnicos. Al igual que el lenguaje de programacin ADA su desarrollo fue patrocinado por la milicia estadounidense para estandarizar la especificacin de sistemas digitales. Se dise con una sintaxis similar a la de ADA. Actualmente en un estndar de descripcin de circuitos respaldado por la IEEE. VHDL permite la descripcin (documentacin), simulacin e implementacin de circuitos digitales. Dicha implementacin se puede realizar en: CPLD (Complex Programable Logic Device), o en un FPGA (field programable gate array). Cualquier diseo de VHDL est compuesto por dos partes esenciales: 1.- La entidad, bloque donde se definen entradas y salidas del circuito 2.- La arquitectura, donde se describe el diseo del mismo circuito.

1.1 Caractersticas de la descripcin de un circuito


El primer propsito de VHDL fue crear un estndar para la descripcin de circuitos. El diseo esquemtico de un circuito con mltiples componentes requiere de mucho espacio en papel; son difciles de analizar, no tienen un principio y un fin. Si se requiere equipo computacional para elaborar el diseo esquemtico son necesarios monitores amplios para alcanzar a visualizar una parte representativa del circuito. Adems se precisan impresoras especiales (plotters) porque los diseos no caben en una hoja simple, de otro modo habra que seccionarlos hacindolos menos comprensibles. VHDL es una alternativa para describir circuitos utilizando slo texto, sin grficas, que ciertamente requiere muchos menos recursos para escribirse, desplegarse y almacenarse. Por otra parte, este lenguaje permite describir los componentes digitales de diferentes formas, de acuerdo al circuito o al gusto del diseador, situacin que no es posible al dibujar esquemticos; al hacerlo no hay estilos de descripcin. A lo ms es posible comprimir en una caja el contenido de varios circuitos e interconectarlo con el resto de los componentes. Para mostrar cmo se describe un circuito, tomemos el siguiente ejemplo.

1.2 Descripcin de un circuito en VHDL


Se tienen tres interruptores: a, b y c. Construir una seal de salida d que tome el valor de 1 cuando dos de los tres interruptores se haya colocado en on, es decir, en 1. La expresin mnima para d es: d = ab+ac+bc, que en un circuito esquemtico es:

Figura 1.1 Circuito prueba

La descripcin en VHDL es:


entity comb1 is Port ( a : in std_logic; b : in std_logic; c : in std_logic; d : out std_logic); end comb1; architecture ecuacion of comb1 is begin d<=(a and b) or (a and c) or (b and c); end ecuacion;

A un circuito se le asocia un nombre, en este caso el nombre asociado es comb1. La descripcin consta dos partes: la entidad y la arquitectura.

Figura 1.2. Descripcin de un circuito.

La entidad define el puerto del circuito, las seales que provienen de fuera del circuito y las que se generarn de salida, es decir, la interface con el exterior del circuito. Como habr notado, el tipo con el que se han definido las seales es std_logic (standard logic). El tipo std_logic es muy comn; indica que una seal puede tomar valores lgicos, como 1 0. Se dar ms detalle al respecto ms adelante. Por otra parte, la arquitectura describe el circuito en s. Para este circuito, su definicin con una expresin booleana es lo ms directo. La palabra ecuacion (sin acento, porque VHDL no acepta acentos) en architecture ecuacion of comb1 is. Es parte de la documentacin del circuito, esa palabra slo tiene significado para el diseador y para quien observe el cdigo, pero no para el compilador.

Figura 1.3 Arquitectura del circuito.

Para iniciar el estudio de VHDL se analizarn solamente circuitos combinacionales, as que la arquitectura se describe utilizando lgebra booleana.

Figura 1.4 Descripcin de la arquitectura.

1. 2. 1 Otras alternativas de descripcin para este circuito


Existen ms alternativas para la descripcin de este circuito que la mostrada anteriormente, en la que se utiliza slo una expresin booleana. stas se ilustran a continuacin.

Figura 1.5 Descripcin con expresin booleana.

Es posible etiquetar las salidas intermedias de algunas o todas las compuertas y fraccionar el circuito. Note que las salidas intermedias son entradas de otra seccin del circuito. Estas seales intermedias no son parte del puerto porque no tienen contacto con el exterior. La

definicin de estas seales se efecta en la seccin architecture. Se inicia con la palabra


entity comb1 is Port (a : in std_logic; b : in std_logic; c : in std_logic; d : out std_logic); end comb1; architecture ecuaciones of comb1 is signal S1, S2, S3 : std_logic; begin d<=S1 or S2 or S3; S1<= a and b; S2<= b and c; S3<= a and c; end ecuaciones;

signal:

Cabe aclarar que tanto a, b, c, d como S1, S2 y S3 son seales, pero las primeras son seales que estn conectadas al puerto del circuito y las segundas son seales internas del mismo. El orden en que se describen las seales intermedias S1, S2 y S3, as como la salida d no tiene importancia. Cualquier orden es correcto, finalmente en los circuitos esquemticos no hay un inicio o un fin. El diseador puede definir el orden en que desea describir su circuito. Esta sera otra posibilidad:
entity comb1 is Port (a : in std_logic; b : in std_logic; c : in std_logic; d : out std_logic); end comb1; architecture ecuaciones of comb1 is signal S1, S2, S3 : std_logic; begin S1<= a and b; S2<= b and c; d<=S1 or S2 or S3; S3<= a and c; end ecuaciones;

Hay ms informacin sobre los operadores booleanos y la construccin de expresiones booleanas que ser tratada en el siguiente captulo.

1. 2. 2 Simulacin de un circuito
Al tener un circuito descrito en VHDL, cualquiera que est capacitado en la programacin de un compilador puede visualizar la factibilidad de programar un simulador que muestre el comportamiento de las salidas de un circuito a travs del tiempo a partir de construir estructuras de datos consistentes de tablas que evale las salidas cada vez que ocurren cambios en las entradas. Antes de que existieran simuladores disponibles a estudiantes universitarios, la autora desarroll un simulador como parte de un curso de posgrado. Pero pronto surgieron opciones alternas y actualmente) hay una variedad d de sistemas de desarrollo que nos permiten simular circuitos. Para comprender la simulacin, el primer paso es analizar la respuesta de un circuito. Para ello, analicemos el retraso de una compuerta: Una compuerta tiene un retraso que consiste en el tiempo que requiere para que su salida sea estable y vlida. Este tiempo est en el orden de XXX. Como el tiempo es muy pequeo, denominmosle como un delta de tiempo.

Figura 1.6 Descripcin del circuito con un delta de tiempo.

Si en tiempo=0 las entradas al circuito tienen un valor estable, las salidas S1, S2 y S3 tendrn salidas estables y vlidas al mismo tiempo, esto ser en tiempo=delta, y la salida d tendr un valor estable en tiempo=2 delta. Las salidas S1, S2 y S3 son estables al mismo tiempo, pero de manera alguna es posible que el cdigo. A continuacin, se evala al mismo tiempo, as que para el simulador es una variable a manipular:

S1<= a and b; S2<= b and c; S3<= a and c;

Para lograr el artificio de la ejecucin concurrente para la simulacin, es necesario crear una estructura de datos que indique en qu tiempo est estable cada salida, y cuando una salida es entrada de otra parte del circuito se hace el clculo del retraso. La salida de cada compuerta o de cada seccin del circuito se calcula con el tiempo en que es vlida su entrada ms el tiempo de retraso de esa seccin del circuito. Por otra parte, cada vez que cambia el valor de una seal de la cual depende una seal de salida, se calcula de nuevo el valor de la salida; esto ocurre hasta que el valor de todas las salidas queda estable. Por ejemplo, para la descripcin:
architecture ecuacion of comb1 is begin d<=(a and b) or (a and c) or (b and c); end ecuacion;

Si en tiempo=0 se asocian valores a a, b, c, 0, 1, 1 en forma correspondiente.

Figura 1.7 Asociacin de valores al cambiar una seal de salida.

Si el circuito se hubiera descrito fragmentado habra una diferencia en el tiempo de retraso calculado en la simulacin, dado que el simulador relaciona un retraso delta al circuito completo asignado a una salida, no lo hace compuerta por compuerta.

Por ejemplo, para la siguiente descripcin:


d<=S1 or S2 or S3; S1<= a and b; S2<= b and c; S3<= a and c;

O para la siguiente:
S1<= a and b; S2<= b and c; d<=S1 or S2 or S3; S3<= a and c;

La simulacin generara los siguientes resultados:

Figura 1.8 Asociacin de valores al cambiar de nueva cuenta la seal de salida.

Para practicar este tema resuelva S, a continuacin se plantea un ejercicio. Utilice como modelo el cdigo del ejemplo que se present. Por el momento slo se explicar cmo elaborar una expresin booleana. En VHDL existen operadores para todas las compuertas lgicas, las compuertas simples que constituyen las operaciones bsicas del lgebra booleana: NOT, AND, OR y las compuertas compuestas, es decir, que incluyen varias operaciones bsicas: XOR, XNOR,

NAND, NOR. Cabe aclarar que aunque se utilicen compuertas compuestas, la expresin se convertir a una que est construida con compuertas bsicas. Hay que recalcar en este momento que las maysculas y minsculas son indistintas; la a y la A se interpretan igual. As que se podr escribir: AND, aND, And, and, AnD, And, anD, And y esto aplica a los nombres de seales, a los operadores y a las palabras reservadas. Los nombres de los operadores tambin son palabras reservadas del lenguaje. En VHDL la precedencia de operadores no existe, de manera que no hay prioridades. Al construir una expresin considere como si fuera a ser evaluada de izquierda a derecha. Adems, tambin tome en cuenta que es posible definir funciones en las que se usen compuertas de ms de dos entradas. De acuerdo a que no hay precedencias, es decir, que todos los operadores tienen la misma prioridad, la funcin (que tambin llamaremos ecuacin): F(a,b,c,d) = a+b+c+d equivale al circuito De acuerdo a que no hay precedencias, es decir, a que todos los operadores tienen la misma prioridad, la funcin, que tambin llamaremos ecuacin: F(a,b,c,d) = a+b+c+d, equivale al siguiente circuito:)

Figura 1.9 Circuito de la funcin: F(a,b,c,d) = a+b+c+d .

F(a,b,c,d)= a and b or (b and d) or (c and d). Aqu note que el primer and no requiere parntesis por ser el primero de izquierda a derecha.

Figura 1.10 Circuito de la funcin: F(a,b,c,d)= a and b or (b and d) or (c and d).

10

F(a,b,c,d) = (a and b) or (b and d) or (c and d). Esta expresin equivale al mismo circuito que el anterior.

Figura 1.11 Circuito de la funcin: F(a,b,c,d) = (a and b) or (b and d) or (c and d).

F(a,b,c,d) = a and b or b and c or c and d. Note lo que se define sin parntesis:

Figura 1.12 Circuito de la funcin: F(a,b,c,d) = a and b or b and c or c and d.

La expresin equivalente con parntesis es la siguiente: F(a,b,c,d) = (((((a and b) or b) and c) or c) and d). F(a,b,c,d) = not a and not b or c, note que el not es unitario, es decir, es una compuerta con slo una entrada:

11

Figura 1.13 Circuito de la funcin: F(a,b,c,d) = not a and not b or c.

F(a,b,c,d) = a xor b xor c, observe que el xor es una compuerta de slo dos entradas:

Figura 1.14 Circuito de la funcin: F(a,b,c,d)= a xor b xor c.

F(a,b,c)= (a nand b nand not c) nand not d:

Figura 1.15 Circuito de la funcin: F(a,b,c)= (a nand b nand not c) nand not d.

Luego de estos ejemplos, resuelva los siguientes ejercicios.

12

Ejercicio 1.1
a) Describa en VHDL el siguiente circuito:

Llame d a la salida.

b) Construya la tabla de tiempo de ejecucin de la respuesta que eligi. Suponga que ocurre en tiempo=0 a=0, b=1 y c=1.

c) Dibuje el circuito equivalente a la siguiente ecuacin: z = a and b and not c or d:

13

1.2.3 Definicin de Retrasos

Como un delta de tiempo tiende a cero, cuando la simulacin se observa en forma grfica los deltas de tiempo no se alcanzan a apreciar. Se observa como si el retraso fuera cero, es decir, como si la respuesta de un circuito fuera instantnea. Existe la posibilidad de definir un retraso especfico para un circuito. Esto slo es posible con fines de simulacin. Si se tiene un propsito didctico de entender el retraso de un circuito, se definen retrasos de la siguiente manera: agregar after X unidad de tiempo a una ecuacin. Las unidades de tiempo vlidas son: picosegundos (ps), nanosegundos (ns), microsegundos (us), milisegundos (ms), segundos (s). Ejemplo: supongamos que el retraso de una compuerta and es de 30 ns y el de una compuerta or es de 50 ns.

Figura 1.16

14

La definicin de este circuito en VHDL es:


architecture ecuaciones of comb_retraso is signal S1, S2, S3: std_logic; begin d<=S1 or S2 or S3 after 50 ps; S1<= a and b after 30 ps; S2<= b and c after 30 ps; S3<= a and c after 30 ps; end ecuaciones;

La simulacin de este circuito se muestra con la siguiente tabla:

t=0 a=0 b= 1 c=1 S1=U S2=U S3=U d=U

t = 0 + 30ps t = 0 +80 ps

a=0 b= 1 c=1 S1=0 S2=1 S3=0 d=U

a=0 b= 1 c=1 S1=0 S2=1 S3=0 d=1

15

Figura 1.17

Existe otro tipo alterno al std_logic, es el tipo bit. Con ste la definicin del circuito es:
entity comb1 is Port (a : in bit; b : in bit; c : in bit; d : out bit); end comb1; architecture ecuaciones of comb_retraso is signal S1, S2, S3: bit; begin d<=S1 or S2 or S3 after 50 ps; S1<= a and b after 30 ps; S2<= b and c after 30 ps; S3<= a and c after 30 ps; end ecuaciones;

La diferencia entre el tipo bit y el tipo std_logic es que el tipo bit inicia todas las seales en cero, en vez de iniciar indeterminadas.

16

Con este tipo, la simulacin reporta los siguientes valores:

t=0 a=0 b= 1 c=1 S1=0 S2=0 S3=0 d=0

t = 0 + 30ps t = 0 +80 ps

a=0 b= 1 c=1 S1=0 S2=1 S3=0 d=0


Figura 1.18

a=0 b= 1 c=1 S1=0 S2=1 S3=0 d=1

17

Ejercicio 1.2 (algunos problemas tienen respuesta y otros no, luego la pongo)*
1. Suponga que el tiempo de respuesta (retraso) de un not es de 5ps, de un and 30ps y

de un or 20ps. Si en tiempo=0 estn listas las seales a, b y c. a) En qu momento como mximo es vlida la salida del siguiente circuito?

b) Y como mnimo? (tome en cuenta que en una compuerta or al haber un 1 en cualquiera de sus entradas, luego de transcurrir tiempo de retraso la salida es estable) No se entiende as dejarlo como lo redact en amarillo 2. a) Defina en VHDL el siguiente circuito secuencial (en VHDL es vlido el operador nand).

b) Analice el funcionamiento de este circuito e indique a qu circuito conocido corresponde.

18

Respuesta: es un latch S-R c) Muestre cul sera el resultado de la simulacin de este circuito. 3. Disee en VHDL un dispositivo que genere dos seales oscilatorias, equivalentes a

seales de reloj. Las seales se llamarn CLK1 y CLK2. CLK2 debe tener el doble de frecuencia que CLK1. El perodo de CLK1 debe ser de 20ns y el de CLK2 de 10ns. Respuesta:
c/k1<= not c/k1 after 10ns; c/k2<= not c/k2 after 5ns;

4. a) Describa en VHDL el siguiente circuito:


A B C 0 1 1 S2

Q D 1 S0 S3

S1

Los retrasos de las compuertas son:


Retraso not: Ins Retraso or: 2ns Retraso and: 3ns

19

Respuesta:
s2<= A and B and C alter 3ns; s3<= s0 or s1 after 2ns; s0<= not D alter 1 ns; s1<=not Q alter 1 ns; Q<= s2 or s3 after 2 ns;

4. a) Construya la tabla de tiempo de retraso del circuito mostrado en el inciso a). b)Suponga que en tiempo=0 A=0, B=, C=1y D=1 Respuesta:

T(ns) 0 1 3 5 6 8 10 11 13 15 16 18 20

A 0 0 0 0 0 0 0 0 0 0 0 0 0

B 1 1 1 1 1 1 1 1 1 1 1 1 1

C 1 1 1 1 1 1 1 1 1 1 1 1 1

D 1 1 1 1 1 1 1 1 1 1 1 1 1

S0 0 0 0 0 0 0 0 0 0 0 0 0 0

S1 0 1 1 1 0 0 0 1 1 1 0 0 0

S2 0 0 0 0 0 0 0 0 0 0 0 0 0

S3 0 0 1 1 1 0 0 0 1 1 1 0 0

Q 0 0 0 1 1 1 0 0 0 1 1 1 0

20

1.3 Ms informacin sobre la definicin de un circuito


1.3.1 Entidad
La entidad es la seccin en la que se define el nombre del circuito y el puerto del circuito de ste). El puerto est constituido por las seales con las que el circuito se comunica con el exterior. En la figura 1.19 se describe un circuito con entradas a, b, c y salida d. Las entradas y salidas conforman el puerto, y las compuertas interconectadas son la arquitectura:

Figura 1.19 Descripcin del circuito.

La manera de declarar la entidad de este circuito en VHDL es:


Entity circuito_prueba is Port ( a, b, c: in std_logic; d: out std_logic); end circuito_prueba;

Para la descripcin en VHDL de una entidad es necesario que se defina un nombre para el circuito y tambin, al momento de definir las entradas y salidas, se le asocie a cada una: un nombre, modo y tipo. En el ejemplo anterior), una seal tiene de nombre a, modo in y tipo std_logic.

1.3.2 Nombres

21

Si el circuito fuera construido en un protoboard, las seales representaran a los cables que van conectados a las entradas de los componentes o que provienen de sus salidas. Para hacer referencia a las seales en la arquitectura del circuito, es necesario etiquetarlas con un nombre; se recomienda que el nombre de la seal sea fcil de identificar, es decir, si existe una seal que se encargue de reiniciar algn proceso, entonces el nombre ms indicado para la seal seria reset. Para crear un nombre correcto, lado es necesario conocer las reglas de construccin: VHDL no distingue entre maysculas. Es decir, la seal A y a son la misma. (Eliminar comillas) Slo permite letras, nmeros y guin bajo. Cabe mencionar que el nombre de una seal ;debe comenzar con una letra y no puede contener doble guin seguido. No es posible utilizar palabras reservadas. No se deben repetir nombres para seales distintas. Las mismas reglas de construccin aplican al nombre general del circuito que se indica despus de entity.

Ejercicio 1.3

22

1. En el siguiente fragmento de cdigo se encuentran algunos errores respecto a los nombres de las seales. Identifquelos y explique dnde reside el error:
entity Nombres is port( a, A, ab12c, 1Abc, t_4: in std_logic; y__xr, 1bt, _ce3, y_t_b: out std_logic); end Nombres;

Respuesta: VHDL interpreta que se esta definiendo dos veces la variable a pues no distingue entre maysculas. Las seales 1Abc y _ce3 comienzan con un carcter diferente de una letra y la seal y__xr contiene doble guin seguido. Todas los dems nombres de seales estn correctamente escritos.

1.4 Modos

23

El modo define la direccin o sentido de conexin de una seal. Existen cuatro modos: in (entrada), out (salida), inout (entrada/salida), y buffer.

Modo in Representa a las seales de entrada al circuito.

Modo out Se refiere a las seales de salida del circuito.

Modo inout Indica que una seal puede ser tanto de modo in como de modo out, es decir bidireccional.

Modo buffer Modo bidireccional. Bastante similar al modo inout, con la diferencia de que la seal se comporta como una de salida.

1.5 Tipos de datos

24

Los tipos de datos son usados para asignar un formato lgico a los valores elctricos que transitan por una seal. Generalmente el diseador usa el tipo de dato que ms se ajuste al circuito que desea construir. Algunos de los tipos de datos que son: Std_logic, que puede tomar los siguientes valores: o o o 0 1 lgico, es decir, un bit. Z que indica alta impedancia, es decir, desconexin. U que indica undetermined, indeterminado, esto ocurre cuando a una seal no se le ha asociado un valor, solo aplica a la simulacin del circuito, as que indistintamente podra ser 0 1 X que indica un corto, sucede cuando una seal recibe valores de distintas fuentes, por ejemplo: A<=B; A<=C.

Bit. Slo toma valores de 0 y 1. A diferencia de std_logic, toma 0 como valor en la simulacin cuando una seal no tiene valor. Integer. Permite que en la descripcin de un circuito se utilicen valores con representaciones decimales enteras asociados a estas seales, por ejemplo, (/:) A<=5, en vez de A<=101. El compilador que se utilice se encarga de convertir a binario los datos escritos en decimal. Std_logic_vector. Bus de bits tipo std_logic. La definicin de una seal mltiple, es decir, un bus de datos, permite que se utilice slo un nombre para hacer referencia a un conjunto de seales digitales (o bits). Cada seal individual puede tomar los valores de un dato std_logic. La sintaxis que se utiliza y su uso se estudiarn en el siguiente captulo. Bit_vector. Es un bus de bits de tipo bit, en el siguiente captulo se estudiar su uso y definicin.

1.6 Arquitectura

25

Como ya se menciono, la arquitectura es la seccin en la que se describe el circuito. Existen tres diferentes niveles de descripcin de una arquitectura en VHDL 1. Nivel estructural. 2. Nivel ecuaciones. 3. Nivel comportamiento o funcional.)

Nivel estructural. Consiste en describir un circuito a partir de las conexiones de entrada y salida de sus compuertas o bien de las conexiones de sus componentes bsicos. Es la descripcin ms parecida a la conexin que se realizara si se cableara el circuito. Nivel ecuaciones. Consiste en describir un circuito a partir de las expresiones booleanas que lo conforman. Nivel comportamiento o funcional. Un circuito puede ser descrito a partir de su funcionamiento , Para esto en VHDL existen algunas estructuras bsicas que lo permiten. Adems, facilitan el uso de condiciones que describen la respuesta del circuito a sus entradas.

En el segundo captulo se ver a detalle cada uno de estos niveles de descripcin. A continuacin se muestra la codificacin en VHDL del circuito de la Figura 1.1 Circuito prueba para analizarla a detalle:
architecture Behavioral of circuito_prueba is begin d<= (a and b) or c; end Behavioral;

sta y cualquier otra descripcin cumple con el siguiente patrn sintctico:

26

Sintaxis en VHDL de la definicin de un componente


entity nombre-componente is Port ( seal: tipo; seal: tipo; ... seal: tipo;); end nombre-componente ; architecture tipo-de-descripcin of nombre-componente is begin instruccin_concurrente; instruccin_concurrente; ... instruccin_concurrente; end tipo-de-descripcin ;

La palabra concurrente tiene dos propsitos: 1) Todos los circuitos o segmentos de circuito que se describan en la arquitectura estn funcionando al mismo tiempo, es decir, son concurrentes. 2) Ms adelante estudiaremos otras forma de describir circuitos y por eso es necesario diferenciar el tipo de instrucciones, a la otra forma le llamaremos secuencial. Las palabras que se encuentran en negritas (bold) son palabras reservadas del lenguaje. No son intercambiables por otras palabras y son requeridas en la posicin que se indica. No es posible emplear palabras reservadas como nombre ni del componente ni de las seales del circuito. Observe que al final de cada instruccin concurrente y en general de cada seccin de la descripcin se incluye un punto y coma. Este signo de puntuacin no puede omitirse. Las reglas para la construccin vlida de los nombres de las seales se ofrecen en el siguiente captulo. Volviendo al ejemplo dado:
architecture Behavioral of circuito_prueba is begin d<= (a and b) or c; end Behavioral;

27

El trmino Behavioral es el nivel de la arquitectura, es una palabra cualquiera que elige el diseador y tiene propsito de documentacin del circuito. Por otra parte circuito_prueba es el nombre de la entidad que se est describiendo. Despus seguira el espacio en (eliminar) donde se pueden declarar seales internas de la arquitectura, es decir, que no estaban declaradas en la entidad. Posteriormente se encuentra begin que es donde se marca el inicio de la descripcin del circuito mediante el uso de las seales de la entidad y seales internas (si es que las hay) y denotamos el fin escribiendo end y el mismo nivel de arquitectura mencionado al inicio de la arquitectura. Otro ejemplo del uso de las seales internas sin afectar el resultado final del circuito es mostrado en la siguiente arquitectura:
architecture Behavioral of circuito_prueba is signal f: std_logic; begin f<= (a and b) or c; d<=f; end Behavioral;

A la seal f, y a ninguna seal interna, se le asocia un modo, todas son inout, precisamente por ser internas y por no tener salida al exterior, as que as como son salida, tambin deben ser una entrada a otra parte del circuito.

1.7 Descripcin de circuitos combinacionales con mayor nmero de elementos


Ya comprendidos los conceptos de la entidad y arquitectura con los ejemplos sencillos que se presentaron y que resolvi, usted est listo para empezar a codificar en VHDL diseos ms extensos.

Ejemplo 1
Empecemos codificando el siguiente circuito combinacional a nivel ecuaciones:

28

Figura 1.20 Circuito combinacional

La codificacin en VHDL de este circuito a nivel ecuaciones se puede realizar mediante el uso de seales internas o en slo una ecuacin. Para algunos resulta ms cmodo y libre de errores codificarlo con seales internas. La manera de codificarlo con el uso de seales es de la siguiente manera:
library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity Ejemplo is port(a,b,c,d,e: in std_logic; f : out std_logic); end Ejemplo; architecture Behavioral of tercerafigura is signal g,h,i,j,k: std_logic; begin --f<= e xor ( ( (a and b) or (c nor d) ) and ( (a and b) nand (c nor d) ) ); g<= a and b; h<= c nor d; i<= g or h; j<= g nand h; k<= i and j; f<= e xor k; end Behavioral;

Nota: La manera en que se codificara sin uso de seales se encuentra en el cdigo como un comentario. Los comentarios se agregan despus de dos guiones seguidos de la siguiente manera:

Ejemplo 2. Juego de TV
En un programa de concursos de TV hay un juego en el que participan tres personas. Cada participante cuenta con un interruptor. Los interruptores cerrados (posicin on) generan un 1 lgico. Los interruptores abiertos (posicin off) generan un 0 lgico. Por otra parte hay

29

cuatro indicadores (LEDs) en un tablero: A, B, C y D. Un indicador enciende si recibe un 1 lgico. El indicador A debe encender slo cuando todos los jugadores posicionan en on sus interruptores. El indicador B debe encender si y slo si A est apagado. El indicador C debe encender si y slo si dos o ms jugadores posicionan en on sus interruptores. El indicador D debe encender si y slo si uno o ninguno de los jugadores posicionan en on sus interruptores. Dadas las especificaciones anteriores, codifique en VHDL los siguientes circuitos y simlelos: 1. Circuito para encender el indicador A. 2. Circuito para encender el indicador B. 3. Circuito para encender el indicador C. 4. Circuito para encender el indicador D. Para la solucin de este problema y cualquier circuito que sea dese codificar es altamente recomendable realizar algn esquemtico antes de comenzar a programarlo con el fin de tener ms clara la idea de la elaboracin de ste. Despus de realizar las funciones booleanas necesarias para que este circuito funcione se procede al esquemtico mostrado en la figura 1.21

30

Figura 1.21 Esquemtico del juego de TV.

A continuacin se muestra el juego de TV codificado basado en el esquemtico del mismo:

31

library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity TV is Port ( p1,p2,p3 : in STD_LOGIC; a,b,c,d : out STD_LOGIC); end TV; architecture Behavioral of TV is signal snp1, snp2, snp3: std_logic; begin snp1<= not p1; snp2<= not p2; snp3<= not p3; a<= p1 and p2 and p3; b<= not(p1 and p2 and p3); c<= (p1 and p2) or (p1 and p3) or (p2 and p3); d<= (snp1 and snp2) or (snp2 and snp3) or (snp1 and snp3); end Behavioral;

Ejemplo 3. Alarmas residenciales


Se est implementando el sistema de alarmas de un muy pequeo departamento. A usted se le ha contratado para disear y construir los circuitos que hagan funcionar el sistema. El sistema cuenta con sensores, interruptores y diferentes tipos de alarmas. Se instalaron cinco tipos de sensores: Magnticos, para las ventanas. Infrarrojos, para detectar movimiento. De humo. De CO2 (detecta que pase cierto nivel). De humedad (detecta que pase cierto nivel). El nmero de sensores que se instalaron es: 2 magnticos un infrarrojo uno de humo uno de CO2 uno de humedad

Los sensores deben activar 5 tipos de alarmas:

32

contra robo contra incendios para avisar sobre la humedad para avisar sobre el CO2 para avisar que hay alguna alarma encendida

Se colocaron dos interruptores, que en on (1) sirven para: activar la alarma de robos indicar que hay gente en casa (que probablemente encienda estufa, cerillos, etc.) Para implementar su diseo: Utilice dip switches para representar a los sensores y a los interruptores. Utilice LEDs para representar a las alarmas.

El siguiente cdigo est diseado de la siguiente manera: La alarma de robos se encender cuando el interruptor de alarma de robo se encuentre encendido y el interruptor que indica presencia de residentes se encuentre apagado. Teniendo en cuenta ya los interruptores, la alarma se encender cuando el sensor infrarrojo este encendido o alguno de los sensores magnticos se enciendan. La alarma de incendio se encender cuando el sensor de humo detecte un alto nivel de humo. La alarma de humedad depender nicamente del sensor de humedad. La alarma de CO2 se encender solo s la alarma de CO2 lo indica. La alarma de alarma encendida se prender si alguna de las alarmas esta encendida.

Por lo tanto el esquemtico se representara tal como en la figura 1.22

33

Figura 1.22 Esquemtico de alarmas residenciales

Codificando el esquemtico de las alarmas residenciales quedara:


library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity Alarmas is Port ( iar : in STD_LOGIC; --interruptor alarma de robo iig : in STD_LOGIC; --interruptor indica hay gente sm1 : in STD_LOGIC; --sensor magnetico 1 sm2 : in STD_LOGIC; --sensor magnetico 2 sifr : in STD_LOGIC; --sensor infrarojo shumo : in STD_LOGIC; --sensor humo sco : in STD_LOGIC; --sensor co2 shume : in STD_LOGIC; --sensor humedad d arob : inout STD_LOGIC; --alarma de robo ainc : inout STD_LOGIC; --alarma incendio ahume : inout STD_LOGIC; --alarma humedad d aco : inout STD_LOGIC; -- alarma co2 aenc : inout STD_LOGIC); -- alarma encendida end Alarmas; architecture Behavioral of Alarmas is begin arob<= ((not iig and sifr) or sm1 or sm2) and iar; ainc<= shumo; ahume<= shume; aco <= sco; aenc <= arob or ainc or ahume or aco; end Behavioral;

S-ar putea să vă placă și