Você está na página 1de 117

5Ejemplos de

5.1 INTRODUCCION

Aplicaciones del VHDL.

En los captulos anteriores se describi el proceso de diseo para sistemas digitales y las herramientas disponibles (tanto software como hardware) para su implementacin. En este captulo se trataran ejemplos prcticos de diseo de sistemas digitales, iniciando con su descripcin hasta llegar a su implementacin final utili ando en algunos casos componentes discretos y !"#$.

5.2

UE E! UNA "!#$
%na m&uina de estados es un sistema secuencial sincrnico &ue posee un n'mero fijo de posibles estados. El (alor de sus salidas y la transicin entre los estados depende del (alor de sus entradas y del estado en &ue se encuentra actualmente. Todos los cam%ios de es&ado oc'((en an&e 'n de&e(minado )lanco de la se*al de (eloj (ya sea de subida o bajada). )ara entender mejor este concepto imaginemos &ue nuestra m&uina de estados es un tele(isor, &ue slo puede sintoni ar cuatro canales y &ue se puede controlar por un control remoto &ue tiene solo dos teclas para aumentar o disminuir el canal. $os estados de nuestro sistema estn representados por el n'mero de canales &ue se pueden sintoni ar, as pues, solo tendremos cuatro posibles estados (*'mero fijo de estados). En la +igura , se muestra un diagrama de nuestro sistema-

+igura ,. Ejemplo de +./.

Carlos Ivn Camargo Bareo

0hora hagmonos una pregunta- 12u3 nos produce un cambio en el estado de nuestro sistema4, $o 'nico &ue nos puede producir un cambio de estado (5anal sintoni ado) es un cambio en las teclas de nuestro control remoto (Entradas del sistema). 6bser(emos como act'a el sistema ante cambios de las entradas.i oprimimos la tecla de aumentar el canal, el tele(isor aumentar en uno la cadena sintoni ada, por ejemplo, si estaba en el canal , pasar al 7, si estaba en el 7 al 8, del 8 al 9 y del 9 al , nue(amente. .i oprimimos la tecla menos es canal diminuir pasando del 9 al 8, del 8 al 7, del 7 al , y del , al 9 nue(amente. .i no oprimimos una tecla, el tele(isor debe permanecer en la cadena sintoni ada actualmente y &uedarse ah hasta &ue se le ordene un cambio por medio del control remoto. *ote &ue el estado (canal sintoni ado) al &ue pasar el sistema depende del estado actual (canal actual) y de las entradas (tecla del control remoto oprimida). .i las entradas no cambian el sistema no cambia su posicin (esto no es necesariamente cierto para todas las m&uinas de estado).

5.+

TA,LA! - DIA.RA#A! DE E!TADO


E:isten (arias formas de representar el comportamiento de las m&uinas de estado, siendo los ms utili ados las tablas y los diagramas de estado. ;omemos nue(amente el ejemplo del tele(isor y representemos en una tabla los estados actual y siguiente (Estado al &ue pasa el sistema ante un cambio de las entradas).

+igura 7. Entradas y salidas del .istema. $a +igura 7 muestra el sistema como una caja negra en la &ue slo se indican las entradas y las salidas. .upongamos &ue nuestro sistema tiene dos entradas &ue son las correspondientes a 0delantar (%)) y disminuir (#*) canal, y &ue tiene cuatro salidas 5,, 57, 58, 59 &ue corresponden a los cuatro canales y &ue me indican cual canal se est sintoni ando actualmente. En este punto debemos tomar (arias decisiones-

Carlos Ivn Camargo Bareo

15uando se considera &ue una entrada esta acti(a4, Es decir, con &ue (alor lgico de la entrada se produce un cambio y con cual no. En nuestro caso un (alor lgico alto en las entradas producir un cambio de estado, es decir, si %) < =,> el canal sintoni ado aumentar o si #* < =,> el canal disminuir. 6tra decisin &ue debemos tomar y &ue se deri(a de esta es- &ue sucede si por error las dos entradas son =,> simultneamente, lo ms con(eniente es &ue el sistema conser(e su estado ante esta posible situacin. El (alor de las salidas para cada estado, en este ejemplo, un uno lgico en una salida indica &ue el canal ha sido seleccionado (por ejemplo, un uno en 5, indicara &ue actualmente el canal seleccionado es el ,), por lo tanto slo una salida puede tener un (alor lgico alto. %na (e definido completamente el funcionamiento de nuestro sistema se procede a representarlo mediante una tabla de estados-

?.8.,

;0@$0 #E E.;0#6.

+igura 8. ;abla de estados del sistema ;ele(isor. $a +igura 8. /uestra una tabla de estados tpica en la cual se resume el comportamiento del sistema. $a tabla tiene tres seccionesEl estado actual- $ista de todos lo posibles estados. )osibles combinaciones de las entradas- El n'mero de entradas del sistema determina el n'mero de columnas de la tabla de estados. 0s, si la m&uina tiene n entradas, la tabla tendr 7n A, 5olumnas. El estado siguiente- Bndica a &ue estado pasar la +./ cuando se presente una determinada entrada, )or ejemplo, .i %)<C y #6D* < , y el estado actual es el canal 9 la m&uina de estados ir al estado 5anal 8.

Carlos Ivn Camargo Bareo

6tra forma de representar el estado de las entradas es utili ando una con(encin en la &ue si la (ariable aparece negada entonces toma un (alor de cero lgico, pero si no lo esta tiene un (alor de uno lgico. Esto se hace para simplificar las tablas. )or ejemplo0- 0 < =,> E00 < CF 5on lo &ue la tabla de estados se con(ierte en Estado 0ctual 5anal , 5anal 7 5anal 8 5anal 9 Estado .iguiente E%).E#* E%).#* %).E#* 5anal , 5anal 7 5anal 8 5anal 9 5anal 9 5anal 7 %).#* .alidas 5,,57,58,5 9 ,,C,C,C

;abla ,. ;abla

5anal , 5anal , 5anal 8 5anal C,,,C,C 7 5anal 7 5anal 9 5anal C,C,,,C 8 5anal 8 5anal , 5anal C,C,C,, 9 de Estados del sistema ;ele(isor.

?.8.7

#B0GH0/0 #E E.;0#6.
6tra forma de representar el comportamiento de una m&uina de estados es el diagrama de estados, este diagrama es una representacin grfica del funcionamiento del sistema.

+igura 9. #iagrama de estados del sistema ;ele(isor. $a +igura 9 muestra el diagrama de blo&ues del sistema tele(isor. 6bser(amos &ue cada estado est representado por un crculo en el &ue se indica el nombre del mismo y el (alor de las salidas. $as lneas &ue unen los estados representan el cambio &ue sufre la m&uina cuando se cumple una determinada regla de transicin. ($a regla de transicin normalmente se indican en las lneas &ue unen los estados). En esta figura se introduce una nue(a

Carlos Ivn Camargo Bareo

nomenclatura para representar las funciones lgicas, el operador not se representa con el signo !, la operacin AND con el signo & y la OR con #. 0nali ando el estado 5anal,, obser(amos &ue de este estado salen dos lneas"acia el estado 5anal7, esta lnea indica &ue la m&uina pasar de 5anal, a 5anal7 si %) < =,> y #* < =C> y se presenta un flanco adecuado en la seal de reloj. "acia el estado 5anal9- $a m&uina de estados pasar de 5anal, a 5anal9 si %) < =C>, #* < =,> y se presenta un flanco adecuado en la seal de reloj. Entrad dos lneas#esde el estado 5anal7- El sistema pasar de 5anal7 a 5anal , si %) < =C>, #* < =,> y se presenta un flanco adecuado en la seal de reloj. #esde el estado 5anal9- El sistema pasar de 5anal9 a 5anal , si %) < =,> y #* < =C> y se presenta un flanco adecuado en la seal de reloj. 0dems obser(amos &ue e:iste una lnea &ue sale del 5anal, y (uel(e a entrar a 5anal,, esto indica &ue la m&uina mantendr su estado si- (%) < =C> I #* < =C> ) 6 (%) < =,> I #* < =,>).

5./

!INTE!I! DE "!#
En esta seccin anali aremos la ar&uitectura de la +./ y el proceso de sntesis. 5omo (imos en el captulo anterior la sntesis parte de una descripcin funcional y llega a una descripcin a ni(el de compuertas.

+igura ?. Estructura de una +./.

?.9.,

E.;H%5;%H0 #E %*0 +./

Carlos Ivn Camargo Bareo

$a estructura general de una m&uina de estados se muestra en la +igura ?. 5omo puede obser(arse e:isten tres blo&ues bien definidos$gica de estado siguiente- Est encargada de generar las seales necesarias para producir un cambio de estado en la +./ (Estado .iguiente). )uede obser(arse &ue el estado siguiente depende del estado actual y de las entradas /emoria de Estado- *ormalmente esta formada por +lipJ+lops tipo # o KL, los cuales tienen la misma seal de reloj. $as salidas de los +lipJ+lops determinan el estado actual de la +./, cada salida del +lipJ+lop puede tomar dos (alores distintos =,> o =C>, por lo tanto se pueden tener dos estados con un +lipJ+lop. .i tenemos * +lipJ +lops tendremos 7* estados. $gica de .alida- $a lgica de salida esta encargada de producir los (alores necesarios a la salida de la +./, su la ar&uitectura esta basada en decodificadores. E:isten dos tipos de m&uinas de estados/oore- El estado siguiente depende del (alor de las entradas y del estado actualF I la salida depende 'nicamente del estado actual. /ealy- 0l igual &ue la m&uina de /oore el estado siguiente depende del (alor de las entradas y del estado actual, pero se diferencian en &ue la salida depende del estado actual y del (alor de las entradas.

?.9.7

)H65E.6 #E .M*;E.B.
El primer paso en el proceso de sntesis de una +./ y en general de cual&uier sistema digital es la descripcin del sistema ya sea mediante un algoritmo o de un diagrama de tiempos. El siguiente paso consiste en pasar la descripcin funcional a un diagrama de estados para su posterior representacin en tablas de estado y de salida. 0 continuacin debemos reducir el n'mero de estados (si es posible) utili ando algoritmos de minimi acin. #espu3s debemos reali ar la codificacin de estados, es decir, asignarle a los estados un grupo 'nico de (alores &ue corresponden a los (alores &ue tomarn los +lipJ+lops. 0 continuacin se debemos obtener las ecuaciones de estado siguiente y de salidas. El siguiente paso consiste en la eleccin del tipo de +lipJ+lop &ue se (a a utili ar para la implementacin, recuerde &ue todos los +lipN+lops tienen diferentes ecuaciones de estado siguiente;ipo de +J + # KL ; Estado .iguiente (2O) 2O < # 2O < K,E2 A EL.2 2O < E2

Carlos Ivn Camargo Bareo

.H 2O < . A EH.2 ;abla 7. Ecuaciones de Estado siguiente de los +lipJ+lop. %na (e elegido el +lipJ+lop se procede a obtener las ecuaciones de las seales de e:citacin de los ++s. #espu3s se de be reali ar un proceso de minimi acin con las ecuaciones obtenidas anteriormente para reali ar un diagrama de la implementacin lgica de las ecuaciones. +inalmente debemos (erificar el correcto funcionamiento del circuito, esto se logra simulando el circuito obtenido y si cumple con lo re&uerimientos se lle(ar al plano fsico para reali ar pruebas de tiempos. $a figura P resume los pasos a seguir en el proceso de sntesis.

D e s c r ip c i n d e l D i s e o

E le c c i n d e l t i p o d e " "

D ia g r a m a d e E s t a d o s

E c u a c io n e s d e E $ c it a c i n

T a b la s d e E s t a d o

M in im iz a c i n # g ic a

M in im iz a c i n d e E s ta d o s

D ia g r a m a # g ic o y d e T ie m p o s

C o d i ic a c i n d e E n t r a d a s ! S a lid a s y E s t a d o s

S i m u l a c i n

E c u a c io n e s d e E s t a d o S ig u i e n t e y S a l id a s

% r u e b a s & s ic a s '

+igura P. #iagrama de flujo del proceso de .ntesis para +./ )ara entender mejor el proceso de sntesis reali aremos paso a paso un sencillo ejemplo. #esarrollando todas las posibilidades de implementacin para buscar la ms ptima.

?.9.8

56*;H6$ #E /6;6H #E )0.6.

Carlos Ivn Camargo Bareo

%n motor de paso a diferencia de los motores de 5orriente 5ontinua necesita una secuencia determinada en sus cuatro terminales para originar el giro de su rotor. $a secuencia necesaria para controlar el motor es la siguiente0 !A !A G*# G*# @ G*# G*# !A !A 5 !A G*# G*# !A # G*# !A !A G*#

., .7 .8 .9

)ara &ue el motor gire un paso (normalmente ,.Q grados) es necesario &ue se apli&ue ., y luego .7, o .7 y .8 o .8 y .9 o .9 y .,. .i se desea &ue el motor gire cinco pasos se debe seguir la secuencia .,, .7, .8, .9, .?. $a in(ersin del sentido de giro se logra in(irtiendo la secuencia anterior, es decir, .,, .9, .8, .7, .,. ?.9.8., #B0GH0/0 #E 50K0 *EGH0 El primer paso consiste en reali ar un diagrama de caja negra en el &ue se indi&uen las entradas y salidas (+igura R).
D I* E) C#( C, C( ) T*( # D E M ( T( * D E %+S( + B C D

+igura R. #iagrama de 5aja *egra del 5ontrolador de /otor de )aso. 0 continuacin reali aremos una bre(e descripcin del funcionamiento del circuito. 5omo se obser(a en la +igura R. .e tienen tres entradas#BH- Encargada de indicar la direccin de giro del motor. #BH < C .ecuencia #irecta (.,, .7, .8, .9), #BH < , .ecuencia Bn(ertida (.9, .8, .7, .,) E*- E*0@$E, encargada de habilitar nuestro control .i E* < , el circuito reali ar su funcin si E* < C el control conser(ar el 'ltimo estado de las salidas. 5$65L- Es el reloj del sistema y gobierna todas las transiciones entre estados. I las cuatro salidas 0, @, 5, # son las encargadas de manejar los terminales del motor de paso.

Carlos Ivn Camargo Bareo

?.9.8.7

#B0GH0/0 #E E.;0#6 %na (e se conoce el funcionamiento del circuito, o las funciones &ue debe cumplir se procede a reali ar el diagrama de estados del mismo. $a +igura Q muestra este diagrama para el controlador de motor de paso.

+igura Q #iagrama de Estados del 5ontrolador de /otor de )aso.

?.9.8.8

;0@$0 #E E.;0#6. %na (e reali ado el diagrama de estados se procede a la reali acin de la tabla de estados y salidas. #icha tabla para el controlador de motor de paso se presente a continuacinEstado .iguiente EE*.E#BH EE*.#BH E*.E#BH ., .7 .8 .9 ., .7 .8 .9 .7 .8 .9 ., .alidas 0, @, 5, # ,, ,, C, C, C, C, ,, ,, ,, C, C, ,, C , , C

Estado 0ctual ., .7 .8 .9

E*.#BH .9 ., .7 .8

?.9.8.9

/B*B/BS05BT* #E E.;0#6. El objeti(o de la minimi acin de estados es la reduccin del n'mero de +lipJ+lops necesarios para la implementacin, reduciendo de este modo el costo de la misma. .in embargo para reducir el n'mero de +lipJ+lops de un circuito es necesario reducir el n'mero de estados en m'ltiplos de 7. )or ejemplo,

Carlos Ivn Camargo Bareo

supongamos &ue tenemos R estados, para lo cual necesitamos 8 ++s, para utili ar slo 7 ++s necesitamos reducir el n'mero de estados de R a 9 o menos. $a minimi acin de estados se basa en la e&ui(alencia funcional, por ejemplo, se dice &ue dos circuitos son e&ui(alentes cuando proporcionan la misma salida ante los mismos cambios de entrada. #os o ms estados son e&ui(alentes s0mbos estados producen las mismas salidas ante igual cambio en las seales de entrada. 0mbos estados tienen los mismos estados siguientes ante los mismos cambios de las seales de entrada. En nuestro caso no tenemos e&ui(alentes ya &ue todos tienen diferentes (alores de salida y diferentes estados siguientes ante (ariaciones de las entradas. ?.9.8.? 56#B+B505BT* #E E.;0#6. $a codificacin de estados consiste en la asignacin de (alores a las salidas de los ++s para cada estado, estos (alores deben ser 'nicos para cada estado, es decir, no se deben repetir. #ebido a &ue nuestra m&uina tiene cuatro estados, tenemos 7 ++s y por lo tanto debemos asignar a cada estado un cdigo formado por dos bits. E:isten muchas posibles codificaciones para los cuatro estados, unas ms eficientes &ue otras. En este libro no se tratarn las t3cnicas e:istentes para hallar la codificacin ptima ya &ue esta funcin las reali an las herramientas 50# y adems, se sale del objeti(o de este libro. )ara nuestro ejemplo utili aremos la siguiente codificacin2, C C , , 2C C , C ,

., .7 .8 .9

#onde 2, y 2C son las salidas del primer y segundo ++ correspondientemente. 5on esta asignacin de estados la tabla de estados &ueda de la siguiente formaEstado 0ctual (.) 2, 2C C C C , , C , , Estado .iguiente (.O) .0$B#0. EE* E* E#BH #BH 0, @, 5, # O O O O O O 2, 2C 2, 2C 2, 2C C C C , , , ,, C, ,, C C , , C C C ,, C, C, , , C , , C , C, ,, C, , , , C C , C C, ,, ,, C

Carlos Ivn Camargo Bareo

#onde 2,O y 2CO representan los (alores siguientes de las seales 2, y 2C respecti(amente. *ote &ue no se representaron los casos EE*.E#BH y EE*.#BH, esto se debe a &ue cuando la seal En tiene un (alor lgico bajo la +./ conser(a su estado sin importar el (alor de #BH. ?.9.8.P E5%05B6*E. #E E.;0#6 .BG%BE*;E %na (e reali ada la codificacin de estados se procede a la obtencin de las ecuaciones de estado siguiente 2,O y 2CO. )ara obtener estas ecuaciones debemos sumar todos los unos de la tabla de estados (suma de minit3rminos). )ara 2,O debemos obser(ar todas las columnas correspondientes a 2,O y sumar los minit3rminos asociados. )or ejemplo, la primera columna de 2,O correspondiente a la asociada con EE*, el primer minit3rmino asociado es- EE*.2,.E2C ya &ue est en la fila correspondiente a 2, < , y 2C < C. I el segundo EE*.2,.2C. 2,O < EE*.2,.E2C A EE*.2,.2C A E*.E#BH.E2,.2C A E*.E#BH.2,.E 2C A E*.#BH.E2,.E2C A E*.#BH.2,.2C. 2CO < EE*.E2,.2C A EE*.2,.2C A E*.E#BH.E2,.E2C A E*.E#BH.2,.E 2C A E*.#BH.E2,.E2C A E*.#BH.2,.E2C. Estas ecuaciones deben pasar a tra(3s de un proceso de minimi acin para encontrar una implementacin ptima. 2,O < EE*.2,(E2CA2,) A E*.(E#BH.(E2,.2C A 2,.E2C) A #BH (E 2,.E2C A 2,.2C)) 2,O < EE*.2, A E*.(E#BH.2, 2C A #BH.E(2, 2C)) 2,O < EE*.2, A E*.#BH (2, U6H 2C) 2CO < EE*.2C.(E2, A 2,) A E*.(E2,.E2C.(E#BH A #BH) A 2,.E2C.(E #BH A #BH)) 2CO < EE*.2C A E*.(E2,.E2C A 2,.E2C) 2CO < EE*.2C A E*.(E2C.(E2,A 2,)) 2CO < EE*.2C A E*.E2C 2CO < E* U6H 2C $as ecuaciones para las salidas son0 < E2,.E2C A E2,.2C < E2, @ < 2,.E2C A 2,.2C < 2, 5 < E2,.E2C A 2,.2C < E(2, 2C) # < E2,.2C A 2,.E2C < 2, 2C 0 < E@ < E2, 5 < E# < 2, U6H 2C

Carlos Ivn Camargo Bareo

?.9.8.R

E$E55BT* #E$ ;B)6 #E +$B)J+$6), E5%05B6*E. #E EU5B;05BT* I /B*B/BS05BT* %tili ando las ecuaciones obtenidas anteriormente para 2,O y 2CO, debemos escoger el tipo de +lipJ+lop a utili ar. $a siguiente tabla resume los (alores necesarios en las entradas de los ++s para obtener los cambios indicados en sus salidas. )or ejemplo en un ++ KL si 2 tiene un (alor de C lgico y se &uiere &ue pase a tener un (alor de , lgico es necesario &ue K < , y el (alor de L no importa. 2 C C , , 2O C , C , . C , C U H U C , C K C , U U L U U , C ; C , , C # C , C ,

El diagrama de Larnough para la m&uina de estados es el siguiente CC 0C 0, 1, 1C C, 0C 0, 1, 1C ,, 1, 0C 1C 0, ,C 0, 1C 0C 1,

CC C, ,, ,C

$a regin sombreada corresponde a los (alores de las seales 2,O (en negrilla) y 2CO. )ara el ++ # tenemos- 2O < #. )or lo tanto#, < EE*.2, A E*.#BH (2, U6H 2C) #C < E* U6H 2C )ara el ++ KL debemos ordenar las ecuaciones obtenidas de la forma- 2O < K.E2 A EL.2 )ara 2,CC 0 U 0 U 1 C 1 C C, 0 U 0 U 1 C 1 C ,, 1 U 0 U 1 C 1 , ,C 0 U 1 U 1 , 1 C

CC C, ,, ,C

$a regin sombreada indican los (alores &ue deben tener las seales K,(en negrilla) y L,. K, < E2,.E2C.E*.#BH A E2,.2C.E*.E#BH < E*.E2,(2C U6H #BH)

Carlos Ivn Camargo Bareo

L, < 2,.E2C.E*.#BH A 2,.2C.E*.E#BH < E*.2,.(2C U6H #BH) )ara 2C CC 0 U 1 C 1 C 0 U C, 0 U 1 C 1 C 0 U ,, 1 U 1 , 1 , 1 U ,C 1 U 1 , 1 , 1 U

CC C, ,, ,C KC < E* LC < E* +lipJ+lop tipo ;)ara 2,-

CC C, ,, ,C

CC C C C C

C, C C C C

,, , C C ,

,C C , , C

;, < E2C.E*.#BH A 2C.E*.E#BH < E*.(2C U6H #BH) )ara 2CCC C C C C C, C C C C ,, , , , , ,C , , , ,

CC C, ,, ,C ;C < E* +lipJ+lop tipo .H. )ara 2,-

CC C, ,, ,C

CC 0 U 0 U 1 C 1 C

C, 0 U 0 U 1 C 1 C

,, ,C 1 0 C U 0 1 C U 1 0 , C 0 1 , C

., < E2,.E2C.E*.#BH A E2,.2C.E*.E#BH < E*.E2,(2C U6H #BH) H, < 2,.E2C.E*.#BH A 2,.2C.E*.E#BH < E*.2,.(2C U6H #BH) )ara 2C-

Carlos Ivn Camargo Bareo

CC C, ,, ,C .C < E*.E2C HC < E*.2C

CC 0 U 1 C 1 C 0 U

C, 0 U 1 C 1 C 0 U

,, 1 C 0 , 0 , 1 C

,C 1 C 0 , 0 , 1 C

#el anlisis anterior obser(amos &ue la implementacin &ue ocupa el menor n'mero de compuertas es la correspondiente a los +lipJ+lops tipo ;. ?.9.8.Q .B/%$05B6* En la +igura V se muestra la implementacin final de la m&uina de Estados (.in la %nidad de .alida) y en la +igura ,C la simulacin correspondiente.

+igura V. #iagrama a ni(el de compuertas del controlador de /otor de )aso. 5omo puede obser(arse en la +igura V, la m&uina de estados est formada por la lgica de estado siguiente (5ompuertas U6H y 0*#), la memoria de estado (++s tipo ; con la misma seal de Heloj) y la lgica de salida, (5ompuertas *6; y U6H) &ue en este caso corresponde al de una m&uina de estados tipo /66HE.

Carlos Ivn Camargo Bareo

+igura ,C. .imulacin del 5ontrolador de /otor de )aso.

5.5

DE!CRI2CION VHDL DE UNA "!#


En esta seccin se reali ar la descripcin en !"#$ del controlador de motor de paso. Bnicialmente se har una descripcin estructural, basndose en los resultados obtenidos en la seccin ?.9.8.R. I a continuacin se utili ar la descripcin funcional para la implementacin del controlador.

?.?.,

#E.5HB)5B6* E.;H%5;%H0$
Hecordemos &ue la descripcin estructural en !"#$ reali a la intercone:in entre los componentes &ue forman el sistema. En nuestro caso (!er +igura V), primero debemos reali ar la descripcin de los componentes-

?.?.,.,

56/)%EH;0 0*# #E #6. E*;H0#0.


ENTITY and2 IS PORT( A B " END and2! ARCHITECTURE " OF and2 IS BEGIN " $% A AND B! END! : : : IN IN OUT BI ! BI ! BI #! -- Debido a que AND es una palabra reservada del lenguaje -- no puede utilizarse para nombrar una entidad

?.?.,.7

56/)%EH;0 U6H #E #6. E*;H0#0.


ENTITY &or2 IS PORT( A B " END &or2! ARCHITECTURE ') OF &or2 IS BEGIN " $% A XOR B! : : : IN IN OUT BI ! BI ! BI #! -- Debido a que '() es una palabra reservada del lenguaje -- no puede utilizarse para nombrar una entidad

Carlos Ivn Camargo Bareo

END!

?.?.,.8

B*!EH.6H
ENTITY inv IS PORT( A " END inv! : : IN OUT BI ! BI #!

ARCHITECTURE N( OF inv IS BEGIN " $% not (A#! END!

?.?.,.9

+$B) +$6) ;B)6 ;


ENTITY ** IS PORT( +,-. / END ** ! : : IN BI ! BUFFER BI #!

ARCHITECTURE OF ** IS BEGIN process (,-.# begin if (,-. e!ent "n# ,-. % 010# t$en if (t % 010# t$en / $% not (/#! e%se / $% /! en# i2! en# i2! en# pro3ess! END!

%na (e reali ada la implementacin de los componentes, se procede a su unin. )ara lograr esto se deben sinteti ar las anteriores declaraciones, y sus archi(os deben estar en el mismo directorio de trabajo. ?.?.,.? 56*;H6$ #E /6;6H #E )0.6
ENTITY 4tep5otor IS PORT( ,-.+ 6N+ DI) A(+ B(+ ,(+ D( END 4tep5otor!

: :

IN BUFFER

BI ! BI #!

ARCHITECTURE ,(N )(--6) OF 4tep5otor IS SIGNA& I1+ 1+ /7N: BIT! IN OUT BI ! BI #!

CO'PONENT AND26 PORT (A+ B : " : END CO'PONENT!

Carlos Ivn Camargo Bareo

CO'PONENT '()2 PORT (A+ B : " : END CO'PONENT! CO'PONENT IN8 PORT (A : " : END CO'PONENT! CO'PONENT ** PORT( ,-.+ : / : END CO'PONENT!

IN OUT

BI ! BI #!

IN OUT

BI ! BI #!

IN OUT

BI ! BI #!

BEGIN '1: '()2 port ("p(DI)+ /7N+ I1#! '2: AND26 port ("p(6N+ I1+ 1#! '9: ** port ("p(,-.+ 1+ B(#! ':: ** port ("p(,-.+ 6N+ /7N#! ';: '()2 port ("p(B(+ /7N+ D(#! '<: IN8 port ("p(B(+ A(#! '=: IN8 port ("p(D(+ ,(#! END ,(N )(--6)!

?.?.7

#E.5HB)5B6* +%*5B6*0$
$a descripcin Estructural no es el mejor ejemplo de la potencialidad del !"#$, ya &ue como (imos, es necesario reali ar todo el proceso de sntesis para obtener las ecuaciones de e:citacin de los +lipJ+lops. Heali ando la descripcin funcional no es necesario preocuparse por escoger el +lip W +lop &ue redu ca el n'mero de compuertas ni de minimi ar las ecuaciones booleanas obtenidas, todos estos procesos los reali an automticamente las herramientas 50# disponibles comercialmente. El cdigo !"#$ del controlador del motor de paso se muestra a continuacin, y en la +igura ,, se muestra el resultado de la simulacin.
%ibr"r) ieee! USE ieee>std?logi3?11<:>all! USE ieee>std?logi3?arit@>all! ENTITY *45* IS PORT( 3lA 6N+ DI) A+ B+ ,+ D END *45*!

: : :

IN IN OUT

std?logi3! std?logi3! std?logi3#!

ARCHITECTURE 2un3ional OF *45* IS TYPE estados I4 (41+ 42+ 49+ 4:#! SIGNA& state : estados!

Carlos Ivn Camargo Bareo

BEGIN PROCESS (3lA# BEGIN IF (3lA e!ent "n# 3lA % 010# t$en c"se state is *$en 41 %B A $% 010! B $% 070! , $% 010! D $% 070! IF (6N % 070# t$en state $% 41! E&SIF (DI) % 070# t$en state $% 42! E&SE state $% 4:! END IF! *$en 42 %B A $% 010! B $% 070! , $% 070! D $% 010! IF (6N % 070# t$en state $% 42! E&SIF (DI) % 070# t@en state $% 49! E&SE state $% 41! END IF! *$en 49 %B A $% 070! B $% 010! , $% 070! D $% 010! IF (6N % 070# t$en state $% 49! E&SIF (DI) % 070# t@en state $% 4:! E&SE state $% 42! END IF! *$en 4: %B A $% 070! B $% 010! , $% 010! D $% 070! IF (6N % 070# t$en state $% 4:! E&SIF (DI) % 070# t$en state $% 41! E&SE state $% 49! END IF! END CASE! END IF! END PROCESS! END 2un3ional!

El cdigo para la reali acin del ;est @ench es&IBRARY ieee! USE ieee>std?logi3?11<:>A--! USE ieee>numeri3?std>A--! ENTITY testben3@ IS END testben3@! ARCHITECTURE be@avior OF testben3@ IS CO'PONENT 2sm2 PORT( 3lA : IN std?logi3! 6N : IN std?logi3! DI) : IN std?logi3!

Carlos Ivn Camargo Bareo

A : OUT std?logi3! B : OUT std?logi3! , : OUT std?logi3! D : OUT std?logi3 #! END CO'PONENT! SIGNA& 3lA : std?logi3! SIGNA& 6N : std?logi3! SIGNA& DI) : std?logi3! SIGNA& A : std?logi3! SIGNA& B : std?logi3! SIGNA& , : std?logi3! SIGNA& D : std?logi3! const"nt n3C3les : integer :% :7! const"nt @al2period : ti(e :% ; ns! BEGIN uut: 2sm2 PORT 'AP( 3lA %B 3lA+ 6N %B 6N+ DI) %B DI)+ A %B A+ B %B B+ , %B ,+ D %B D#! -- Denera3ion del )eloj ,lo3A?4our3e: process begin for i in 7 to n3C3les %oop -- Denera n3C3los de periodo 17 ns 3lA $% 070! *"it for @al2period! 3lA $% 010! *"it for @al2period! en# %oop! *"it! en# process ,lo3A?4our3e! tb : E)(,644 BEGIN for i in 1 to n3C3lesF: %oop *"it +nti% ,lA%010 "n# ,lA e!ent! 6N $% 070! DI) $% 070! en# %oop! for i in 1 to n3C3lesF: %oop *"it +nti% ,lA%010 "n# ,lA0e!ent! 6N $% 070! DI) $% 010! en# %oop! for i in 1 to n3C3lesF: %oop *"it +nti% ,lA%010 "n# ,lA0e!ent! 6N $% 010! -- Durante n3C3losF: genera las di2erentes -- ,ombina3iones de 6N C DI)

Carlos Ivn Camargo Bareo

DI) $% 070! en# %oop! for i in 1 to n3C3lesF: %oop *"it +nti% ,lA%010 "n# ,lA0e!ent! 6N $% 010! DI) $% 010! en# %oop! END PROCESS! END!

+igura ,,. .imulacin de la descripcin funcional del controlador de motor de paso. 5on la descripcin funcional no es necesario preocuparse por el tipo de +lipJ+lop ni por los procesos de minimi acin. *ormalmente las herramientas 50# proporcionan informacin sobre resultado de ls sntesis del diseo, las ecuaciones implementadas en un 5)$# por una de estas herramientas es3lA DI) 6N : INEG ! : INEG ! : INEG !

A % D**6( stateH2 I 8,,+ D-(BA-( 3lA#+ 8,,+ 8,,+ 8,,#! B % D**6(JstateH2 I 8,,+ D-(BA-( 3lA#+ 8,,+ 8,,+ 8,,#! , % D**6(JstateH1 I stateH2+ D-(BA-( 3lA#+ 8,,+ 8,,+ 8,,#! D % D**6( stateH1 I stateH2+ D-(BA-( 3lA#+ 8,,+ 8,,+ 8,,#! st"te,- . TFFE/ EN0 G&OBA&/ c%120 3CC0 3CC0 3CC24 st"te,5 . TFFE/ 6E788-0 G&OBA&/ c%120 3CC0 3CC0 3CC24 6E788- . 9DIR : EN : st"te,- ; DIR : EN : 9st"te,-!

En donde se puede obser(ar &ue se lleg a las mismas ecuaciones obtenidas anteriormente. 6bser(e &ue se utili aron 7 +lipJ+lops tipo ; uno de los cuales tiene a la seal E* como entrada (primera sea &ue aparece dentro de los par3ntesis despu3s de ;++E. ). /ientras &ue el otro tiene a la seal NE2CC, conectada a su entrada ;. $a ecuacin para NE2CC, es!DIR & EN & state~1 # DIR.sate~1) + (DIR.!state~1) DIR & EN & !state~1 = EN.((!

Carlos Ivn Camargo Bareo

5omo (imos en captulos anteriores la ar&uitectura de un 5)$# no posee compuertas U6H, por lo tanto las ecuaciones son de la forma de suma de productos. $o interesante es obser(ar el ahorro de tiempo asociado a la utili acin del !"#$ como herramienta de diseo.

E3E#2LO 24 Implemen&aci5n de m'l&iplicado( %ina(io de n %i&s sin si6no.

'n

0 continuacin reali aremos el diseo de un dispositi(o ms complejo &ue el anterior para aplicar ms elementos del lenguaje !"#$ y se seguir el mismo proceso del ejemplo anterior. 5omo mencionamos anteriormente, el primer paso en el diseo de un sistema digital es reali ar su descripcin a ni(el funcional o de diagramas de tiempo, en este caso el primero es el ms adecuado, en la +igura ,7 se muestra una multiplicacin de dos n'meros binarios.

+igura ,7. /ultiplicacin de dos n'meros binarios El algoritmo de multiplicacin de la +igura ,7 se basa en productos parciales, el primer producto parcial siempre es cero, a continuacin se reali a la multiplicacin iniciando con el bit menos significati(o del multiplicador, el resultado de la multiplicacin se suma al primer producto parcial y se obtiene el segundo producto parcial. 0 continuacin se reali a la multiplicacin del siguiente bit (a la i &uierda del $.@) y el resultado se suma al producto parcial dos, pero corrido un bit a la i &uierda, (el corrimiento es debido al grado del n'mero del multiplicador). Este proceso contin'a hasta completar los bits del multiplicador y el 'ltimo producto parcial es el resultado. En la +igura ,8 se muestra el diagrama de flujo de un multiplicador de m bits. 5omo (emos en la +igura ,8, el primer paso para reali ar la multiplicacin es hacer el producto parcial ())) y el contador de n'mero de bits (i) iguales a cero. 0 continuacin se reali a una (erificacin del bit del multiplicador, esto se hace para e(itar

Carlos Ivn Camargo Bareo

p3rdida de tiempo al sumar al producto parcial un cero (originado por la multiplicacin de un =C> con el multiplicando). .i el bit del multiplicador es =C> no se afecta el contenido de )), pero si es igual a =,>, se le debe sumar el multiplicando (/#) corrido a la i &uierda un apropiado n'mero de (eces. Este corrimiento se reali a con la multiplicacin, si un n'mero binario se multiplica por 7 el resultado es el mismo n'mero corrido a la i &uierda, )or ejemplo,? (,,,,) U 7 < ,,,,C < (8C) ,? (,,,,) U 9 < ,,,,CC < (PC) El corrimiento en el diagrama de flujo se representa con la operacin 7 i : /#. Ia &ue inicialmente i < C, 7i < , y /# no sufre corrimiento, pero si /# < , 7i < 7 y el n'mero se corre un bit a la i &uierda. %na (e reali ado el producto de un bit del multiplicador con /# se aumenta el (alor de i en , para indicar &ue se repite el proceso con el siguiente bit del multiplicador, hasta &ue i < m. El (alor contenido en )) es el resultado de la multiplicacin.
I) IC I(

%% - . i- .

/B i - 0 1

Si

) o

% % - % % 2 34 5i $ M D 6

i- i2 0 ) o

/i - m 1

Si

% ro d u c to - % %

" I)

+igura ,8. #iagrama de +lujo de la multiplicacin de dos n'meros binarios.

Carlos Ivn Camargo Bareo

%na (e conocido el funcionamiento del sistema se procede a reali ar el diagrama de entradas y salidas del mismo (!er +igura ,9).

M7#TI%#IC+D(*

+igura ,9. #iagrama de Entradas y .alidas del /ultiplicador En la +igura ,9 se muestran el multiplicando y el multiplicador (0 y @), seales de m bits cada una, el resultado de la multiplicacin ) (@us de 7m @its) y la seal de reloj (5$65L), las seales B*B; y #6*E se utili an para iniciar el proceso de multiplicacin e indicar &ue el resultado est disponible respecti(amente. 0 continuacin debemos reali ar una di(isin del sistema en mdulos ms sencillos, para facilitar el proceso de diseo. $a +igura ,? /uestra el diagrama de @lo&ues y la intercone:in entre ellos.

+igura ,?. #iagrama de blo&ues del /ultiplicador.

Carlos Ivn Camargo Bareo

En la +igura ,? se muestran los subJblo&ues del multiplicador y sus intercone:iones. 0nalicemos el comportamiento del sistema (la seal de reloj no se muestra pero llega a todos los blo&ues e:cepto a 56/) &ue es un blo&ue combinatorio)El registro de corrimiento $.H est encargado del despla amiento a la i &uierda de multiplicando (/#). )osee dos seales de control."- 5uando ." < =,> se reali a el corrimiento. . ." < =C> las salidas conser(an su (alor. $60#- 5uando $60# < =,>, el (alor de 0 pasa a las salidas. . $60# < =C> funcionamiento normal del registro. El registro de corrimiento H.H, reali a el despla amiento a la derecha del multiplicador, cada (e &ue se reali a un corrimiento, en el bit menos significati(o de la salida se obtiene el bit a multiplicar con /# (@i de la +igura ,8), por ejemplo si tenemos el n'mero ,C,C en el bit menos significati(o de la salida de H.H se obtiene- C, ,, C, ,. )osee las mismas seales de control &ue $.H y cumplen las mismas funciones. El blo&ue 055 est encargado de reali ar las sumas de los productos parciales, bsicamente es un acumulador &ue suma la entrada con el (alor almacenado en 3l pre(iamente. .us seales de control son0##- 5uando 0## < =,>F ) < ) A .0. .i 0## < =C>, ) conser(a su (alor HE.E;- 5uando HE.E; < =,> ) < =C>. .i HE.E; < =C> funcionamiento normal. $a salida S del blo&ue 56/) indica cuando el (alor de la salida de H.H es igual a cero, indicando de esta forma &ue ya se reali el algoritmo con todos los bits del multiplicador. (.i B* < =C>F S < =,>). 0dems este blo&ue proporciona el (alor del bit menos significati(o ($.@) del registro de corrimiento a la derecha. El mdulo 56*;H6$ est encargado de implementar el algoritmo de multiplicacin, manejando las seales .", HE.E;, 0##, $.@ y #6*E. @sicamente es una m&uina de control y su diagrama de estados se muestra en la +igura ,P.

Carlos Ivn Camargo Bareo

+igura ,P. #iagrama de blo&ues del mdulo 56*;H6$. $a m&uina de estados debe iniciar en .;0H; y se &ueda en este estado siempre &ue la seal B*B; tenga un (alor de =C>, En el estado B*B; la seal HE.E; < =,>, con lo &ue el (alor del acumulador se hace cero y se cargan los registros 0 y @. 5uando B*B; < =,>, entramos al estado 5"E5L el cual e(al'a las seales $.@ y S, s S < =,> significa &ue las salidas de H.H son cero, lo cual indica &ue se termino el proceso, pero si S < =C>, debe e(aluarse el (alor de $.@- . $.@ < =C>, no se debe reali ar la suma de /#, pero si se debe reali ar un corrimiento para obtener el siguiente bit del multiplicador y reali ar el corrimiento necesario en /#. .i $.@ < =,> se debe sumar el (alor de las salidas de $.H al (alor del acumulador, y despu3s se debe reali ar un corrimiento. En el estado 0## se hace la salida 0## < =,> para &ue el (alor a la entrada del acumulador se sume al (alor almacenado en 3l. En el estado ."B+; se reali a el corrimiento de H.H y $.H haciendo el (alor de la seal ." < ,.

Carlos Ivn Camargo Bareo

)ara (erificar el buen funcionamiento del diagrama de estado debemos reali ar una prueba de escritorio- .upongamos &ue tenemos 0 < R y @ < ? y &ue B*B; < ,E.;0#6 5"E5L 0## ."B+; 5"E5L ."B+; 5"E5L 0## ."B+; 5"E5L E*#, .;0H; ." C C , C , C C , C C C $.H CCCCC, ,, CCCCC, ,, CCCC,, ,C CCCC,, ,C CCC,,, CC CCC,,, CC CCC,,, CC CC,,,C CC CC,,,C CC CC,,,C CC CCCCC, ,, H.H S C,C, C C,C, C CC,C C CC,C C CCC, C CCC, C CCC, C CCCC , CCCC , CCCC , C,C, C $.@ , , C C , , , C C C , 0## C , C C C C , C C C C #6*E C C C C C C C C C , C 055 CCCCCCC C CCCCC,, , CCCCC,, , CCCCC,, , CCCCC,, , CCCCC,, , CC,CCC, , CC,CCC, , CC,CCC, , CC,CCC, , CCCCCCC C

5omo puede obser(arse el resultado es correcto (8?), en la tabla las casillas sombreadas corresponden a las seales &ue cambian de un estado a otro. 6bser(e &ue para reali ar el diagrama de estados no se tu(ieron en cuenta los dems blo&ues, esta regla se sigue en general, es decir, siempre &ue trabajemos con un mdulo slo, debe tenerse en cuenta su funcionamiento como un objeto independiente. 5onociendo el funcionamiento de cada uno de los blo&ues procedemos a reali ar la descripcin en !"#$L!R )ara hacer el diseo general haremos uso de la clusula generic para indicar el ancho del registro.
&IBRARY ieee! USE ieee>std?logi3?11<:>A--! USE ieee>numeri3?std>A--! ENTITY lsr IS generic(Kidt@ : natural:%L#! port ( --4e debe asignar un valor por de2e3to al genMri3o

Carlos Ivn Camargo Bareo

4N+ -(AD+ ,-. : in std?logi3! INA : in std?logi3?ve3tor(Kidt@ #o*nto 1#! (G A : b+ffer std?logi3?ve3tor(Kidt@O2 #o*nto 1##! END lsr! ARCHITECTURE le2t of lsr is begin process (3lA# begin if 3lA e!ent "n# (3lA % 010# t$en --*lan3o de subida en la sePal ,-. if (-(AD % 010# t$en -((E2: for i in (Kidt@ Q 1# to (Kidt@O2# -((E --4i -(AD % 1 se 3arga INA en las salidas (G A(i# $% 070! --Debido a que INA tiene L bits C (G A 1< en# -((E! --los primeros (Kidt@# bits deben ser 3ero (G A(Kidt@ #o*nto 1# $% INA!--" los (Kidt@# restantes se 3argan 3on INA e%sif (4N % 010# t$en --4i -(AD % 7 C 4N % 1 se realiza el -((E1: for i in 1 to (Kidt@O2 -1# -((E --3orrimiento a la izquierda> (G A(iQ1# $% (G A(i#! en# -((E! (G A(1# $% 070! --6l -4B bit despuMs del 3orrimiento es 7 e%se (G A $% (G A! --4i -(AD % 7 C 4N % 7 se 3onserva el valor en# if! --de las salidas> en# if! en# process! en#!

$a descripcin anterior para el registro de corrimiento, tambi3n lo podemos escribir de la siguiente forma&IBRARY ieee! USE ieee>std?logi3?11<:>all! USE ieee>std?logi3?arit@>all! ENTITY lsr IS generic(Kidt@ : integer:%2;;#! --4e debe asignar un valor por de2e3to al genMri3o port ( 4N+ -(AD+ ,-. : in st#6%ogic! INA : in integer r"nge 7 to Kidt@! (G A : b+ffer integer r"nge 7 to (Kidt@OKidt@ -1##! END lsr! ARCHITECTURE le2t of lsr is begin process (3lA# begin if 3lA e!ent "n# (3lA % 010# t$en if (-(AD % 010# t$en (G A $% INA! e%sif (4N % 010# t$en (G A $% (G A O 2! e%se (G A $% (G A!

--*lan3o de subida en la sePal ,-. --4i -(AD % 7 C 4N % 1 se realiza el --,())I5I6N (> --4i -(AD % 7 C 4N % 7 se 3onserva el valor

Carlos Ivn Camargo Bareo

en# if! en# if! en# process! en# "rc$itect+re!

--de las salidas>

El cdigo correspondiente al testbench del mdulo lsr es&IBRARY ieee! USE ieee>std?logi3?11<:>A--! USE ieee>numeri3?std>A--! ENTITY testben3@ IS END testben3@! ARCHITECTURE be@avior OF testben3@ IS -- ,omponent De3laration CO'PONENT lsr PORT ( 4N+ -(AD+ ,-. : in std?logi3! INA : in std?logi3?ve3tor( L #o*nto 1 #! (G A : b+ffer std?logi3?ve3tor( 1< #o*nto 1 # #! END CO'PONENT! SIGNA& 4N : std?logi3! SIGNA& -(AD : std?logi3! SIGNA& ,-. : std?logi3! SIGNA& INA : std?logi3?ve3tor( L doKnto 1 #! SIGNA& (G A : std?logi3?ve3tor( 1< doKnto 1 #! const"nt n3C3les : integer :% 17! const"nt @al2period : time :% ; ns! BEGIN -- ,omponent Instantiation uut: lsr PORT 'AP( 4N %B 4N+ -(AD %B -(AD+ ,-. %B ,-.+ INA %B INA+ (G A %B (G A #! -- Denera3ion del )eloj ,lo3A?4our3e: process begin for i in 7 to n3C3les %oop -- Denera n3C3los de periodo 17 ns ,-. $% 070! *"it for @al2period! ,-. $% 010! *"it for @al2period! en# %oop! *"it! en# process ,lo3A?4our3e! -est Ben3@ 4tatements tb : PROCESS

Carlos Ivn Camargo Bareo

BEGIN 4N $% 070! -(AD $% 070! INA $% R77117711R! *"it +nti% ,-. e!ent "n# ,-.%010! -(AD $% 010! *"it +nti% ,-. e!ent "n# ,-.%010! *"it +nti% ,-. e!ent "n# ,-.%070! -(AD $% 070! *"it +nti% ,-. e!ent "n# ,-.%070! 4N $% 010! for i in 1 to ; %oop *"it +nti% ,-. e!ent "n# ,-.%070! -(AD $% 070! en# %oop! *"it +nti% ,-. e!ent "n# ,-.%010! -(AD $% 010! INA $% R77177717R! 4N $% 010! *"it +nti% ,-. e!ent "n# ,-.%010! *"it +nti% ,-. e!ent "n# ,-.%070! -(AD $% 070! END PROCESS! END!

0&u utili amos la multiplicacin por dos para generar el corrimiento a la derecha, pero para utili ar el operador * debemos incluir el pacXage aritm3tico de la BEEE- std_logic_arith.

+igura ,R. .imulacin del mdulo $.H. H.H


&IBRARY ieee! USE ieee>std?logi3?11<:>A--! USE ieee>numeri3?std>A--! ENTITY rsr IS generic(Kidt@ : natural:%L#! --4e debe asignar un valor al genMri3o port ( 4N+ -(AD+ ,-. : in std?logi3!

Carlos Ivn Camargo Bareo

INB (G B END rsr!

: in std?logi3 ?ve3tor(Kidt@ #o*nto 1#! : b+ffer std?logi3 ?ve3tor(Kidt@O2 #o*nto 1##!

ARCHITECTURE rig@t of rsr is begin process (3lA# begin if 3lA e!ent "n# (3lA % 010# t$en --*lan3o de subida en la sePal ,-. if (-(AD % 010# t$en (G B $% INB! --4i -(AD % 1 se 3arga el registro e%sif (4N % 010# t$en --4i -(AD % 7 C 4N % 1 se realiza el -((E1: for i in (Kidt@# #o*nto 2 -((E --3orrimiento a la dere3@a> (G B(i - 1# $% (G B(i#! en# -((E! (G B(Kidt@# $% 070! --6l 54B bit despuMs del 3orrimiento es 7 e%se (G B $% (G B! --4i -(AD % 7 C 4N % 7 se 3onserva el valor en# if! --de las salidas> en# if! en# process! en#!

0l utili ar el pacXage std_logic_arith de la librera ieee el cdigo es el siguiente%ibr"r) ieee! USE ieee>std?logi3?11<:>all! USE ieee>std?logi3?arit@>all! ENTITY rsr IS generic(Kidt@ : integer:%2;;#! --4e debe asignar un valor por de2e3to al genMri3o port ( 4N+ -(AD+ ,-. : in st#6%ogic! INB : in integer r"nge 7 to (Kidt@#! (G B : b+ffer integer r"nge 7 to (Kidt@##! END rsr! ARCHITECTURE rig@t of rsr is begin process (3lA# begin if 3lA e!ent "n# (3lA % 010# t$en if (-(AD % 010# t$en (G B $% INB! e%sif (4N % 010# t$en (G B $% (G B F 2! e%se (G B $% (G B! en# if! en# if! en# process! en# "rc$itect+re!

--*lan3o de subida en la sePal ,-. --4i -(AD % 1 se 3arga el registro --4i -(AD % 7 C 4N % 1 se realiza el --4i -(AD % 7 C 4N % 7 se 3onserva el valor --de las salidas>

Carlos Ivn Camargo Bareo

El siguiente es el cdigo !"#$ para la reali acin del est!ench&IBRARY ieee! USE ieee>std?logi3?11<:>A--! USE ieee>numeri3?std>A--! ENTITY testben3@ IS END testben3@! ARCHITECTURE be@avior OF testben3@ IS -- ,omponent De3laration Co(ponent rsr PORT( 4N+ -(AD+ ,-. : in std?logi3! INB : in std?logi3?ve3tor( L doKnto 1 #! (G B : b+ffer std?logi3?ve3tor( L doKnto 1 # #! END CO'PONENT! SIGNA& 4N : std?logi3! SIGNA& -(AD : std?logi3! SIGNA& ,-. : std?logi3! SIGNA& INA : std?logi3?ve3tor( L doKnto 1 #! SIGNA& (G A : std?logi3?ve3tor( L doKnto 1 #! const"nt n3C3les : integer :% 27! const"nt @al2period : ti(e :% ; ns! BEGIN -- ,omponent Instantiation uut: rsr PORT 'AP( 4N %B 4N+ -(AD %B -(AD+ ,-. %B ,-.+ INB %B INA+ (G B %B (G A #! -- Denera3ion del )eloj ,lo3A?4our3e: process begin for i in 7 to n3C3les %oop -- Denera n3C3los de periodo 17 ns ,-. $% 070! *"it for @al2period! ,-. $% 010! *"it for @al2period! en# %oop! *"it! en# process ,lo3A?4our3e! -est Ben3@ 4tatements tb : PROCESS BEGIN 4N $% 070! -(AD $% 070!

Carlos Ivn Camargo Bareo

INA $% R17771777R! *"it +nti% ,-. e!ent "n# ,-.%010! -(AD $% 010! *"it +nti% ,-. e!ent "n# ,-.%010! *"it +nti% ,-. e!ent "n# ,-.%070! -(AD $% 070! *"it +nti% ,-. e!ent "n# ,-.%070! 4N $% 010! for i in 1 to < %oop *"it +nti% ,-. e!ent "n# ,-.%010! -(AD $% 070! en# %oop! -(AD $% 010! 4N $% 010! *"it +nti% ,-. e!ent "n# ,-.%070! INA $% R11111111R! *"it +nti% ,-. e!ent "n# ,-.%070! -(AD $% 070! 4N $% 010! for i in 1 to S %oop *"it +nti% ,-. e!ent "n# ,-.%010! -(AD $% 070! en# %oop! 4N $% 070! *"it! END PROCESS! END!

+igura ,Q. .imulacin del mdulo H.H. 56*;H6$


&IBRARY ieee! USE ieee>std?logi3?11<:>A--! USE ieee>numeri3?std>A--! ENTITY 3ontroll IS

Carlos Ivn Camargo Bareo

PORT( 3lA INI + -4B+ T 4N+)646 ADD+ D(N6 END 3ontroll! : : : : IN IN OUT OUT std?logi3! std?logi3! std?logi3! std?logi3#!

ARCHITECTURE 2un3ional OF 3ontroll IS TYPE estados IS (start+ 3@e3A+ addd+ s@i2t+ end1#! SIGNA& 3urrent?state+ ne&t?state : estados! BEGIN PROCESS (3urrent?state+ INI + -4B+ T# BEGIN c"se 3urrent?state is *$en start %B 4N $% 070! )646 $% 010! ADD $% 070! D(N6 $% 070! if (INI % 010# t$en ne&t?state $% 3@e3A! e%se ne&t?state $% start! en# if! *$en 3@e3A %B 4N $% 070! )646 $% 070! ADD $% 070! D(N6 $% 070! if (T % 010# t$en ne&t?state $% end1! e%sif (-4B % 010# t$en ne&t?state $% addd! e%se ne&t?state $% s@i2t! en# if! *$en addd %B 4N $% 070! )646 $% 070! ADD $% 010! D(N6 $% 070! ne&t?state $% s@i2t! *$en s@i2t %B 4N $% 010! )646 $% 070! ADD $% 070! D(N6 $% 070! ne&t?state $% 3@e3A! *$en end1 %B 4N $% 070! )646 $% 070! ADD $% 070! D(N6 $% 010! ne&t?state $% start! en# c"se! END PROCESS! process (,-.# begin if 3lA e!ent "n# (3lA % 010# t$en 3urrent?state $% ne&t?state! en# if! en# process! END 2un3ional!

El cdigo correspondiente al testbench del mdulo 56*;H6$ es&IBRARY ieee! USE ieee>std?logi3?11<:>A--! USE ieee>numeri3?std>A--! ENTITY testben3@ IS END testben3@! ARCHITECTURE be@avior OF testben3@ IS CO'PONENT 3ontroll PORT( 3lA : IN std?logi3!

Carlos Ivn Camargo Bareo

INI : IN std?logi3! -4B : IN std?logi3! T : IN std?logi3! 4N : OUT std?logi3! )646 : OUT std?logi3! ADD : OUT std?logi3! D(N6 : OUT std?logi3 #! END CO'PONENT! SIGNA& 3lA : std?logi3! SIGNA& INI : std?logi3! SIGNA& -4B : std?logi3! SIGNA& T : std?logi3! SIGNA& 4N : std?logi3! SIGNA& )646 : std?logi3! SIGNA& ADD : std?logi3! SIGNA& D(N6 : std?logi3! const"nt n3C3les : integer :% 2<! const"nt @al2period : time :% ; ns! BEGIN uut: 3ontroll PORT 'AP( 3lA %B 3lA+ INI %B INI + -4B %B -4B+ T %B T+ 4N %B 4N+ )646 %B )646 + ADD %B ADD+ D(N6 %B D(N6 #! -- Denera3ion del )eloj ,lo3A?4our3e: process begin for i in 7 to n3C3les %oop -- Denera n3C3los de periodo 17 ns ,-. $% 070! *"it for @al2period! ,-. $% 010! *"it for @al2period! en# %oop! *"it! en# process ,lo3A?4our3e! tb : PROCESS BEGIN INI $% 070! -4B $% 070! T $% 070! *"it +nti% ,-. e!ent "n# ,-.%010! *"it +nti% ,-. e!ent "n# ,-.%070! INI $% 010!

Carlos Ivn Camargo Bareo

*"it +nti% ,-. e!ent "n# ,-.%070! INI $% 070! *"it +nti% ,-. e!ent "n# ,-.%070! -4B $% 010! *"it +nti% ,-. e!ent "n# ,-.%070! *"it +nti% ,-. e!ent "n# ,-.%010! -4B $% 070! for i in 1 to < %oop *"it +nti% ,-.0e!ent "n# ,-.%070! en# %oop! -4B $% 010! for i in 1 to S %oop *"it +nti% ,-.0e!ent "n# ,-.%010! en# %oop! -4B $% 070! *"it +nti% ,-. e!ent "n# ,-.%010! T $% 010! *"it +nti% ,-. e!ent "n# ,-.%010! *"it +nti% ,-. e!ent "n# ,-.%070! T $% 070! *"it! END PROCESS! END!

+igura ,V. .imulacin del mdulo 56*;H6$ ACC


&IBRARY ieee! USE ieee>std?logi3?11<:>all! USE ieee>std?logi3?arit@>all! ENTITY a331 IS

Carlos Ivn Camargo Bareo

D6N6)I,(Kidt@ : integer :% 2;;#! E() ( 3lA+ )646 + ADD : IN std?logi3! 4A : IN integer r"nge 7 to Kidt@! E : b+ffer integer r"nge 7 to Kidt@#! END entit) a331! ARCHITECTURE 2un3ional OF a331 IS BEGIN PROCESS (3lA# BEGIN if (3lA e!ent "n# 3lA % 010# t$en if ()646 % 010# t$en E $% 7! e%sif (ADD % 070# t$en E $% E! e%se E $% 4A Q E! en# if! en# if! END PROCESS! END "rc$itect+re 2un3ional!

En el cdigo del mdulo 055 incluimos el pacXage std_logic_arith de la librera BEEE, esto se debe hacer cuando se utilicen los operadores aritm3ticos, adems definimos las seales .0 y ) como enteros, esto se hace por&ue la clusula + opera sobre este tipo de seales (para las seales tipo bitN(ector no est declarada la clusula +). El cdigo !"#$ correspondiente al testbench del 0cumulador es el siguiente&IBRARY ieee! USE ieee>std?logi3?11<:>all! USE ieee>std?logi3?arit@>all! ENTITY testben3@ IS END testben3@! ARCHITECTURE be@avior OF testben3@ IS CO'PONENT a331 PORT( 3lA : IN std?logi3! )646 : IN std?logi3! ADD : IN std?logi3! 4A : IN integer r"nge 7 to <;72:! E : BUFFER integer r"nge 7 to <;72: #! END CO'PONENT! SIGNA& 3lA SIGNA& )646 SIGNA& ADD SIGNA& 4A SIGNA& E : std?logi3! : std?logi3! : std?logi3! : integer range 7 to <;72:! : integer range 7 to <;72:!

Carlos Ivn Camargo Bareo

const"nt n3C3les : integer :% 1L! const"nt @al2period : time :% ; ns! BEGIN uut: a331 PORT 'AP( 3lA %B 3lA+ )646 %B )646 + ADD %B ADD+ 4A %B 4A+ E %B E #! -- Denera3ion del )eloj ,lo3A?4our3e: process begin for i in 7 to n3C3les %oop -- Denera n3C3los de periodo 17 ns ,-. $% 070! *"it for @al2period! ,-. $% 010! *"it for @al2period! en# %oop! *"it! en# process ,lo3A?4our3e! 4A?4our3e:Process Begin *"it +nti% ,-. e!ent "n# ,-.%070! *"it +nti% ,-. e!ent "n# ,-.%070! 4A $% 1! for i in 1 to S %oop *"it +nti% ,-. e!ent "n# ,-.%070! *"it +nti% ,-. e!ent "n# ,-.%070! 4A $% 4A Q 1! en# %oop! *"it! En# Process! tb : PROCESS BEGIN )646 $% 070! ADD $% 070! *"it +nti% ,-. e!ent "n# ,-.%070! *"it +nti% ,-. e!ent "n# ,-.%070! )646 $% 010! *"it +nti% ,-. e!ent "n# ,-.%070! )646 $% 070! *"it +nti% ,-. e!ent "n# ,-.%070! ADD $% 010!

Carlos Ivn Camargo Bareo

for i in 1 to < %oop *"it +nti% ,-. e!ent "n# ,-.%070! en# %oop! ADD $% 070! *"it +nti% ,-. e!ent "n# ,-.%070! )646 $% 010! *"it +nti% ,-. e!ent "n# ,-.%070! )646 $% 070! *"it +nti% ,-. e!ent "n# ,-.%010! ADD $% 010! *"it! END PROCESS! END!

+igura 7C. .imulacin del 0cumulador. CO#2


&IBRARY ieee! USE ieee>std?logi3?11<:>all! USE ieee>std?logi3?arit@>all! entit) 3omp is generic (Kidt@ : integer :% 2;;#! port( INB : in integer r"nge 7 to Kidt@! T : o+t std?logi3#! en# entit) 3omp! "rc$itect+re 3omp of 3omp is begin ,6)(: process (INB# begin if (INB % 7# t$en T $% 010! e%se T $% 070! en# if! en# process! -4BB: process(INB# begin if ((INBF2#O2 % INB# t$en lsb $% 070! e%se

Carlos Ivn Camargo Bareo

lsb $% 010! en# if! en# process! en# "rc$itect+re 3omp!

El cdigo correspondiente al testbench del mdulo 56/) es el siguiente&IBRARY ieee! USE ieee>std?logi3?11<:>A--! USE ieee>numeri3?std>A--! ENTITY testben3@ I4 END testben3@! ARCHITECTURE be@avior OF testben3@ IS -- ,omponent De3laration Co(ponent 3omp PORT( INB : in integer r"nge 7 to 2;;! T+lsb : o+t std?logi3 #! END CO'PONENT! SIGNA& INB : integer r"nge 7 to 2;;! SIGNA& T+ lsb : std?logi3! BEGIN -- ,omponent Instantiation uut: 3omp PORT 'AP( INB %B INB+ T %B T+ lsb %B lsb #! tb : PROCESS BEGIN for i in 7 to : %oop INB $% i! *"it for 277 ns! en# %oop! INB $% 7! *"it for 277 ns! for i in < to L %oop INB $% i! *"it for 277 ns! en# %oop! *"it! -- Kill Kait 2orever

Carlos Ivn Camargo Bareo

END PROCESS! END!

+igura 7,. .imulacin del mdulo 56/) %na (e reali ados los mdulos del multiplicador los unimos utili ando la siguiente descripcin estructural%ibr"r) ieee! USE ieee>std?logi3?11<:>all! USE ieee>std?logi3?arit@>all! entit) multipli3a is generic( buz: integer :%2;;#! port( A+B : in integer r"nge 7 to buz! 4 +,-. : in std?logi3! D(N6 : o+t std?logi3! E : b+ffer integer r"nge 7 to (buzObuz -1##! en# entit) multipli3a! "rc$itect+re multi of multipli3a is co(ponent lsr generic(Kidt@ : integer#! port ( 4N+ -(AD+ ,-. : in std?logi3! INA : in integer r"nge 7 to Kidt@! (G A : b+ffer integer r"nge 7 to (Kidt@OKidt@ -1##! END co(ponent! co(ponent rsr generic(Kidt@ : integer#! port ( 4N+ -(AD+ ,-. : in std?logi3! INB : in integer r"nge 7 to (Kidt@#! (G B : b+ffer integer r"nge 7 to (Kidt@##! END co(ponent! co(ponent contro%% PORT( 3lA : IN std?logi3! INI + -4B+ T : IN std?logi3! 4N+)646 : OUT std?logi3! ADD+ D(N6 : OUT std?logi3#! END co(ponent! co(ponent a331 GENERIC(Kidt@ : integer#!

Carlos Ivn Camargo Bareo

PORT( 3lA+ )646 + ADD : 4A : E : en# co(ponent! IN std?logi3! IN integer r"nge 7 to (Kidt@OKidt@ -1#! b+ffer integer r"nge 7 to (Kidt@OKidt@ - 1##!

co(ponent co(p generic (Kidt@ : integer#! port( INB : in integer r"nge 7 to Kidt@! T+ -4B : o+t std?logi3#! en# co(ponent! sign"% add+ s@i2t+ lsb+ 3ero+ load : std?logi3! sign"% INN2 : integer r"nge 7 to buz! sign"% INN1 : integer r"nge 7 to (buzObuz -1#! begin )1: lsr generic ("p(buz# port ("p(s@i2t+ load+ ,-.+ A+ INN1#! )2: rsr generic ("p(buz# port ("p(s@i2t+ load+ ,-.+ B+ INN2#! '1: a331 generic ("p(buz# port ("p(,-.+ load+ add+ INN1+ E#! '2: 3omp generic ("p(buz# port ("p(INN2+ 3ero+ lsb#! ,1: 3ontroll port ("p(,-.+ 4 + lsb+ 3ero+ s@i2t+ load+ add+ done#! en# "rc$itect+re multi!

El cdigo en !"#$ correspondiente al testbench del multiplicador es el siguiente&IBRARY ieee! USE ieee>std?logi3?11<:>A--! USE ieee>numeri3?std>A--! ENTITY testben3@ IS END testben3@! ARCHITECTURE be@avior OF testben3@ IS CO'PONENT multipli3a PORT( A : IN integer r"nge 7 to 2;;! B : IN integer r"nge 7 to 2;;! 4 : IN std?logi3! ,-. : IN std?logi3! D(N6 : OUT std?logi3! E : BUFFER integer r"nge 7 to <;72: #! END CO'PONENT!

Carlos Ivn Camargo Bareo

SIGNA& A : integer r"nge 7 to 2;;! SIGNA& B : integer r"nge 7 to 2;;! SIGNA& 4 : std?logi3! SIGNA& ,-. : std?logi3! SIGNA& D(N6 : std?logi3! SIGNA& E : integer r"nge 7 to <;72:! const"nt n3C3les : integer :% :7! const"nt @al2period : ti(e :% ; ns! BEGIN uut: multipli3a PORT 'AP( A %B A+ B %B B+ 4 %B 4 + ,-. %B ,-.+ D(N6 %B D(N6+ E %B E #! -- Denera3ion del )eloj ,lo3A?4our3e: process begin for i in 7 to n3C3les %oop -- Denera n3C3los de periodo 17 ns 3lA $% 070! *"it for @al2period! 3lA $% 010! *"it for @al2period! en# %oop! *"it! en# process ,lo3A?4our3e! tb : PROCESS BEGIN A $% 12! B $% 12! 4 $% 070! *"it +nti% ,lA%010 "n# ,lA e!ent! 4 $% 010! *"it +nti% ,lA%010 "n# ,lA e!ent! 4 $% 070! *"it +nti% D(N6 e!ent "n# D(N6 % 070! -- 6spera a que termine la opera3ion A $% 27! B $% 27! *"it +nti% ,lA%010 "n# ,lA0e!ent! 4 $% 010! *"it +nti% ,lA%010 "n# ,lA0e!ent! 4 $% 070! *"it +nti% D(N6 e!ent "n# D(N6 % 070! -- 6spera a que termine la opera3ion A $% 27! B $% 27!

Carlos Ivn Camargo Bareo

*"it +nti% ,lA%070 "n# ,lA e!ent! *"it +nti% ,lA%070 "n# ,lA e!ent! *"it +nti% ,lA%010 "n# ,lA e!ent! A $% 12! B $% 1! *"it +nti% ,lA%070 "n# ,lA e!ent! 4 $% 010! *"it +nti% ,lA%010 "n# ,lA e!ent! 4 $% 070! *"it! -- Kill Kait 2orever END PROCESS! END!

+igura 77. .imulacin del multiplicador. 5omo se obser(a en la +igura 77 el multiplicador funciona correctamente, adems obser(e &ue el tiempo re&uerido para dar la respuesta (.eal #6*E < =,>) depende de los n'meros a multiplicar.

Ejemplo +4 Implemen&aci5n de 'n di7iso( de n %i&s sin si6no.


El presente ejemplo es un di(isor binario de n bits, en este ejemplo y en los siguientes solo se reali ar el testbench a las implementaciones finales. En la +igura 78 se muestra un ejemplo de di(isin de dos n'meros binarios (8? Y ?).

Carlos Ivn Camargo Bareo

+igura 78. #i(isin de dos n'meros binarios sin signo. El proceso de di(isin de n'meros binarios es similar al de n'meros decimales- Bnicialmente se separan dgitos del #i(idendo de i &uierda a derecha hasta &ue la cifra as formada sea mayor o igual &ue el di(isor. En la figura ,8 separamos el primer dgito de la derecha ( C ) y le restamos el di(isor (la operacin de resta se reali en complemento a dos), el resultado de esta operacin es un n'mero negati(o (los n'meros negati(os en representacin complemento a dos comien an por ,). Esto indica &ue el n'mero es menor &ue el di(isor, por lo tanto, colocamos un cero en el resultado parcial de la di(isin (este dgito ser el ms significati(o) y separamos los dos primeros dgitos (CC) y repetimos el proceso. En la +igura ,8 aparece en negrilla el n'mero formado al reali ar la separacin de dgitos. Este n'mero es el residuo parcial de la operacin de di(isin. .lo hasta el se:to resultado parcial obtenemos un cero en la primera cifra de la resta (recuerde &ue en complemento a dos los n'meros tienen una longitud fija en nuestro caso 9 bits, s una operacin pro(oca un bit adicional este se descarta, los bits descartados se encerraron en lneas punteadas en la +igura 78). Bndicando &ue el n'mero es mayor o igual &ue el di(isor. En este caso se coloca un =,> en el resultado parcial y se conser(a el (alor de la operacin de resta, el cual se con(ierte en el nue(o residuo parcial, este proceso se repite hasta haber Zbajado [ todos los dgitos del di(idendo.

Carlos Ivn Camargo Bareo

En la +igura 79 se muestra el algoritmo de di(isin de dos n'meros sin signo.


I)ICI(
+-. M - Divisor 8 - Dividendo i-m Desplazar a la iz9uierda + y 8

+-+:M

)o

/+ ; .1

Si

8o - 0

8o - . +-+2M

i-i:0

)o

/i - .1

Si

"I) Cociente 8 *esiduo +

+igura 79. #iagrama de flujo para la di(isin de n'meros binarios sin signo. 2(ime(a Implemen&aci5n4 El di(isor de * @its se implementar de dos formas- $a primera siguiendo un procedimiento similar al del multiplicador y despu3s se reali ar una implementacin directa del algoritmo de di(isin utili ando un pacXage propio. #el diagrama de flujo podemos deducir &ue necesarios para la implementacin del di(isor sonlos blo&ues

Carlos Ivn Camargo Bareo

%n registro de corrimiento a la i &uierda con precarga para 0 ($.H)- El registro de corrimiento debe tener precarga ya &ue cuando es necesario modificar el (alor de este registro. %n registro de corrimiento a la i &uierda para 2 ($.H2). %n .umador Hestador (0##.%@). %n contador descendente (#E5)- El cual est encargado de controlar el n'mero de corrimientos. %na unidad de control (56*;H6$$) En la siguiente figura se muestra el diagrama de entradas y salidas del di(isor y el diagrama de blo&ues del mismo.

+igura 7?. #iagrama de blo&ues del di(isor de * bits. 5on el diagrama de blo&ues anterior podemos generar la descripcin estructural del di(isor&ibr"r) I666! USE I666>4 D?-(DI,?11<:>all! USE I666>4 D?-(DI,?A)I N>all! USE I666>4 D?-(DI,?GN4IDN6D>all! Entit) divisor is Generic(*i#t$:natural:%=#! Port( A+B : IN 4 D?-(DI,?86, ()(Kidt@ doKnto 7#! Init+3lA : IN 4 D?-(DI,! D+) : BUFFER 4 D?-(DI,?86, ()(Kidt@ doKnto 7#! Done : OUT 4 D?-(DI,#! En# Divisor! Arc$itect+re estr+ct+r"% o2 #i!isor is co(ponent 3ontroll

Carlos Ivn Camargo Bareo

Port( ,lA+Init+ msb+ T s@i2t+reset+q7+done sub+add+de3+load+sq En# ,omponent! :IN 4 D?-(DI,! :OUT 4 D?-(DI,! :OUT 4 D?-(DI,#!

Co(ponent lsrq GENERIC(Kidt@:n"t+r"%:%=#! PORT( 3lA+s@i2t+DIN+reset: IN 4 D?-(DI,! /lsrq: BUFFER 4 D?-(DI,?86, ()(Kidt@ doKnto 7##! END Co(ponent! Co(ponent lsr GENERIC(Kidt@:natural:%=#! PORT( 3lA+s@i2t+load+reset: IN 4 D?-(DI,! Data+Data-: IN 4 D?-(DI,?86, ()(Kidt@ #o*nto 7#! /lsr: BUFFER 4 D?-(DI,?86, ()(Kidt@ #o*nto 7##! END Co(ponent! Co(ponent De3rement Port( ,lA+Init+de3 : IN 4 D?-(DI,! T : OUT 4 D?-(DI,#! En# Co(ponent! Co(ponent addsub GENERIC(Kidt@:n"t+r"%:%=#! PORT( 3lA+reset+add+sub: IN 4 D?-(DI,! msb: OUT 4 D?-(DI,! A+B : IN 4 D?-(DI,?86, ()(Kidt@ #o*nto 7#! A4: BUFFER 4 D?-(DI,?86, ()(Kidt@ #o*nto 7##! END Co(ponent! Sign"% ld+s@+re+ad+su+T+msb+de+q7+sq : 4 D?-(DI,! Sign"% INN1 :4 D?-(DI,?86, ()(Kidt@ #o*nto 7#! Begin A1: lsr Generic ("p(Kidt@# Port '"p(3lA+s@+ld+re+A+INN1+)#! A2: lsrq Generic ("p(Kidt@# Port '"p(3lA+sq+q7+re+D#! A9: De3rement Port '"p(,lA+re+de+T#! A:: Add4ub Generic ("p(Kidt@# Port '"p(3lA+re+ad+su+msb+)+B+INN1#! A;: ,ontroll Port '"p(,lA+Init+msb+T+s@+re+q7+done+su+ad+de+ld+sq#! En# Estr+ct+r"%!

CONTROLL

Carlos Ivn Camargo Bareo

0 continuacin debemos reali ar la descripcin funcional de cada uno de los componentes. 5omen ando por la unidad de control. En la siguiente figura se muestra el diagrama de estados de la misma-

+igura 7P. #iagrama de estados de la unidad de control. 5omo puede obser(arse en el diagrama de estados primero se reali a un corrimiento del di(idendo seguido por una operacin de resta, en este diseo no se reali a la suma para restaurar el registro 0, ya &ue 0 no cambia hasta &ue se cargue el registro. )or lo tanto solo se cargar el registro con el resultado de la resta cuando el resultado de la misma sea positi(a. $a descripcin funcional del mdulo controll es la siguiente&ibr"r) I666! USE I666>4 D?-(DI,?11<:>all! USE I666>4 D?-(DI,?A)I N>all! USE I666>4 D?-(DI,?GN4IDN6D>all! Entit) ,ontroll is Port( ,lA+Init+ msb+ T s@i2t+reset+q7+done sub+add+de3+load+sq En# ,ontroll!

: IN 4 D?-(DI,! : OUT 4 D?-(DI,! :OUT 4 D?-(DI,#!

Arc$itect+re 2un3ional of ,ontroll is T)pe st"te is (rst+ s@2t+ subb+ 3@e3A+ end1+ 3@e3A1+ Uait1#! sign"% ne&t?state+3urrent?state : state! Begin

Carlos Ivn Camargo Bareo

Process (Init+msb+T+ 3urrent?state# Begin C"se 3urrent?state is <$en rst %B s@i2t $% 070!reset $% 070!q7 $% 070!sub $% 070! add $% 070!de3 $%070! load $% 070!done $% 070!sq $% 070! if init % 010 t$en ne&t?state $% Kait1! e%se ne&t?state $% rst! En# If! <$en Kait1 %B s@i2t $% 070!reset $% 010!q7 $% 070!sub $% 070! add $% 070!de3 $%070! load $% 070!done $% 070!sq $% 070! ne&t?state $% s@2t! <$en s@2t %B s@i2t $% 010!reset $% 070!sub $% 070!add $% 070! de3 $%010! load $% 070!done $% 070!sq $% 010! ne&t?state $% subb! <$en subb %B s@i2t $% 070!sub $% 010!reset $% 070!add $% 070! de3 $%070! load $% 070!done $% 070!q7$%070!sq $% 070! ne&t?state $% 3@e3A! *$en 3@e3A %B s@i2t $% 070!sub $% 010!reset $% 070!add $% 070! de3 $%070!done $% 070!sq $% 070! if msb % 010 t$en q7 $% 070! load $% 070! e%se q7 $% 010! load $% 010! en# if! ne&t?state $% 3@e3A1! *$en 3@e3A1 %B s@i2t $% 070!sub $% 070!add $% 070!reset $% 070! de3 $%070!done $% 070!sq $% 070! if T % 010 t$en ne&t?state $% end1! e%se ne&t?state $% s@2t! en# if! *$en end1 %B s@i2t $% 070!sub $% 070!add $% 070!de3 $%070! reset $% 070! load $% 070!done $% 010!sq $% 010! ne&t?state $% rst! *$en ot$ers %B s@i2t $% 070! sub $% 070! add $% 070! de3 $%070! reset $% 070! load $% 070! done $% 070! sq $% 070! q7 $% 070! ne&t?state $% rst! En# C"se!

Carlos Ivn Camargo Bareo

En# Process! Process (3lA# Begin if (3lA0e!ent "n# 3lA % 070# t$en 3urrent?state $% ne&t?state! En# if! En# Process! En# f+ncion"%!

$a simulacin de este mdulo se muestra a continuacin-

+igura 7R .imulacin de la unidad de control. L!R Este blo&ue es un registro de corrimiento a la i &uierda con una entrada &ue determina el (alor del bit menos significati(o. .u descripcin funcional es la siguiente&ibr"r) I666! USE I666>4 D?-(DI,?11<:>all! USE I666>4 D?-(DI,?A)I N>all! USE I666>4 D?-(DI,?GN4IDN6D>all! ENTITY lsrq IS GENERIC(Kidt@:natural:%=#! PORT( 3lA+s@i2t+DIN+reset : IN 4 D?-(DI,! /lsrq : BUFFER 4 D?-(DI,?86, ()(Kidt@ #o*nto 7##! END lsrq! Arc$itect+re 2un3ional of lsrq is Begin Process(,lA# Begin if (,lA0e!ent "n# ,lA % 010# t$en if reset % 010 t$en /lsrq $% R77777777R! e%sif (s@i2t % 010# t$en /lsrq(Kidt@ #o*nto 1# $% /lsrq((Kidt@ - 1# #o*nto 7#! /lsrq(7# $% DIN!

Carlos Ivn Camargo Bareo

e%se /lsrq $% /lsrq! en# if! en# if! En# Process! En# f+ncion"%!

$a simulacin del mdulo $.H2 se muestra en la siguiente figura.

+igura 7Q. .imulacin del mdulo $.H2. L!R Este mdulo est encargado de reali ar el corrimiento a la i &uierda del di(idendo y almacenar los resultados de la resta. $a descripcin funcional de este mdulo es el siguiente&ibr"r) I666! USE I666>4 D?-(DI,?11<:>all! USE I666>4 D?-(DI,?A)I N>all! USE I666>4 D?-(DI,?GN4IDN6D>all! ENTITY lsr IS GENERIC(Kidt@:natural:%=#! PORT( 3lA+s@i2t+load+reset: IN 4 D?-(DI,! Data+Data-: IN 4 D?-(DI,?86, ()(Kidt@ #o*nto 7#! /lsr: BUFFER 4 D?-(DI,?86, ()(Kidt@ #o*nto 7##! END lsr! ARCHITECTURE 2un3ional OF lsr IS SIGNA& INN1: 4 D?-(DI,?86, ()(Kidt@ #o*nto 7#! BEGIN Process(,-.# Begin if (3lA0e!ent "n# 3lA % 010# t$en if )eset % 010 t$en /lsr $%R77777777R! INN1 $% Data! e%sif load % 010 t$en /lsr $% Data-! e%sif s@i2t % 010 t$en /lsr(Kidt@ #o*nto 1# $% /lsr((Uidt@ -1 # #o*nto 7#! /lsr(7# $% INN1(Kidt@#! INN1(Kidt@ #o*nto 1# $% INN1((Uidt@ -1 # #o*nto 7#! INN1(7# $% 070! en# if! e%se /lsr $% /lsr! en# if!

Carlos Ivn Camargo Bareo

En# Process! END 2un3ional!

$a simulacin de este mdulo se muestra en la +igura 7V.

+igura 7V. .imulacin del mdulo $.H.

DECRE#ENT Este mdulo est encargado de controlar el n'mero de (eces &ue se reali an las iteraciones. $a descripcin funcional se muestra a continuacin&ibr"r) I666! USE I666>4 D?-(DI,?11<:>all! USE I666>4 D?-(DI,?A)I N>all! USE I666>4 D?-(DI,?GN4IDN6D>all! Entit) De3rement is Port( ,lA+Init+de3 : IN 4 D?-(DI,! T : OUT 4 D?-(DI,#! En# De3rement! Arc$itect+re 2un3ional of De3rement is Sign"% INN1 : 4td?logi3?ve3tor (2 doKnto 7#! sign"% end1 : 4td?-ogi3! Begin Process (,lA+de3# Begin if (,lA e!ent "n# ,lA % 010# t$en if Init % 010 t$en T $% 070! INN1 $% R111R! end1 $% 070! e%sif (de3 % 010 "n# end1 % 070# t$en if (INN1 B 7# t$en z $% 070! INN1 $% INN1 - 1! e%se z$% 010! end1 $% 010! En# if! e%se

Carlos Ivn Camargo Bareo

INN1 $% INN1! en# if! En# if! En# Process! En# f+ncion"%!

$a simulacin de este mdulo se muestra en la +igura 8C.

+igura 8C. .imulacin del mdulo #E5HE/E*;. ADD!U, Este mdulo est encargado de reali ar la resta para determinar si al n'mero contenido en el mdulo $.H se le puede restar el di(isor. $a descripcin funcional de este mdulo se muestra a continuacin.
&ibr"r) I666! USE I666>4 D?-(DI,?11<:>all! USE I666>4 D?-(DI,?A)I N>all! USE I666>4 D?-(DI,?GN4IDN6D>all! ENTITY addsub IS D6N6)I,(Kidt@:natural:%=#! PORT( 3lA+reset+add+sub: IN 4 D?-(DI,! msb: OUT 4 D?-(DI,! A+B : IN 4 D?-(DI,?86, ()(Kidt@ doKnto 7#! A4: BUFFER 4 D?-(DI,?86, ()(Kidt@ doKnto 7##! END addsub! ARCHITECTURE 2un3ional OF addsub IS BEGIN PROCESS (3lA+ )eset# BEGIN if )eset % 010 t$en A4 $% R77777777R! e%se if (3lA e!ent "n# 3lA%010# t$en if add % 010 "n# sub % 070 t$en A4 $% A Q B! e%sif add % 070 "n# sub % 010 t$en A4 $% A - B! e%se A4 $% R77777777R! en# if! en# if! En# ifF END PROCESS! Process(A4#

Carlos Ivn Camargo Bareo

Begin 54B $% A4(Kidt@#! En# Process! END f+ncion"%!

+igura 8,. .imulacin del mdulo 0##.%@. DIVI!OR +inalmente se reali la simulacin del archi(o #B!B.6H.!"#. El cual contiene la unin de los mdulos anteriores. $a simulacin del di(isor se muestra en la +igura 87. I la implementacin en !"#$ del testbench se muestra a continuacin&IBRARY ieee! USE ieee>std?logi3?11<:>A--! USE ieee>numeri3?std>A--! ENTITY testben3@ IS END testben3@! ARCHITECTURE be@avior OF testben3@ IS CO'PONENT divisor PORT( A : IN std?logi3?ve3tor(= #o*nto 7#! B : IN std?logi3?ve3tor(= #o*nto 7#! Init : IN std?logi3! 3lA : IN std?logi3! D : BUFFER std?logi3?ve3tor(= #o*nto 7#! ) : BUFFER std?logi3?ve3tor(= #o*nto 7#! Done : OUT std?logi3 #! END CO'PONENT! SIGNA& A : std?logi3?ve3tor(= #o*nto 7#! SIGNA& B : std?logi3?ve3tor(= #o*nto 7#! SIGNA& Init : std?logi3! SIGNA& 3lA : std?logi3! SIGNA& D : std?logi3?ve3tor(= #o*nto 7#! SIGNA& ) : std?logi3?ve3tor(= #o*nto 7#! SIGNA& Done : std?logi3! const"nt n3C3les : integer :% L7! const"nt @al2period : ti(e :% ; ns! BEGIN uut: divisor E() 5AE( A %B A+

Carlos Ivn Camargo Bareo

B %B B+ Init %B Init+ 3lA %B 3lA+ D %B D+ ) %B )+ Done %B Done #! -- Denera3ion del )eloj ,lo3A?4our3e: process begin for i in 7 to n3C3les %oop -- Denera n3C3los de periodo 17 ns ,-. $% 070! *"it for @al2period! ,-. $% 010! *"it for @al2period! en# %oop! *"it! en# process ,lo3A?4our3e! tb : PROCESS BEGIN A $% R71177177R! B $% R77777711R! INI $% 070! *"it for @al2period! INI $% 010! *"it +nti% ,-. e!ent "n# ,-.%010! *"it +nti% ,-. e!ent "n# ,-.%010! *"it +nti% ,-. e!ent "n# ,-.%070! INI $% 070! *"it +nti% Done e!ent "n# Done % 070! for i in 1 to < %oop *"it +nti% ,-. e!ent "n# ,-.%010! en# %oop! INI $% 010! B $% R77771111R! *"it +nti% ,-. e!ent "n# ,-.%010! *"it +nti% ,-. e!ent "n# ,-.%010! *"it +nti% ,-. e!ent "n# ,-.%070! INI $% 070! *"it +nti% Done e!ent "n# Done % 070! *"it! END PROCESS! END!

Carlos Ivn Camargo Bareo

+igura 87. .imulacin del di(isor. !e6'nda Implemen&aci5n4 En esta seccin se reali ar la implementacin del di(isor utili ando un procedimiento &ue realice la operacin de di(isin. Bnicialmente declararemos un pacXage al cual llamaremos arit"etico para despu3s utili arlo en una entidad%ibr"r) ieee! +se ieee>std?logi3?11<:>all! p"c1"ge aritmeti3o is -- odo pa3Aage se divide en dos partes en la primera (en3abezado# se realiza la -- de3lara3iVn de los elementos que los 3onstituCen+ indi3ando Wni3amente sus entradas -- C salidas: proce#+re add ( A+ B : in bit?ve3tor! suma : o+t bit?ve3tor! over : o+t boolean #! proce#+re sub ( A+ B : in bit?ve3tor! resta : o+t bit?ve3tor! over : o+t boolean #! proce#+re divisor ( /+ 5 : in bit?ve3tor! 3o3iente : o+t bit?ve3tor! residuo : o+t bit?ve3tor! div?3ero : o+t boolean#! en# p"c1"ge aritmeti3o! --De3lara3iVn de un sumador

--De3lara3iVn de un restador

--De3lara3iVn de un divisor>

-- -a segunda parte del Ea3Aage re3ibe el nombre de 3uerpo (bodC# C debe -- 3ontener la des3rip3iVn 2un3ional de 3ada uno de los 3omponentes de3larados -- en la primera parte> p"c1"ge bo#) aritmeti3o is --Gna vez realizada la des3rip3iVn de los elementos que 2orman el pa3Aage se --debe ndi3ar su 2un3ionemiento --OOOOOOOOOOOOOOOOOOOOOOOOOOOOO --OOOOO4G5AD() D6 N BI 4OOOOOOO --OOOOOOOOOOOOOOOOOOOOOOOOOOOOO proce#+re add ( A+ B : in bit?ve3tor!

Carlos Ivn Camargo Bareo

suma : o+t bit?ve3tor! --6sta de3lara3iVn debe ser idMnti3a a la anterior over : out boolean # is "%i"s op1 : bit?ve3tor(A0lengt@ - 1 doKnto 7# is A! "%i"s op2 : bit?ve3tor(B0lengt@ - 1 doKnto 7# is B! !"ri"b%e result : bit?ve3tor(suma0lengt@ - 1 #o*nto 7#! !"ri"b%e 3arrC?in : bit! !"ri"b%e 3arrC?out : bit :% 070! begin for inde& in result re!erse?range %oop 3arrC?in :% 3arrC?out! -- ,arrC IN % ,arrC (G del bit anterior result(inde&# :% op1(inde&# =or op2(inde&# =or 3arrC?in! -- 4umador de un bit 3arrC?out :% (op1(inde&# "n# op2(inde&## -- 3on ,arrC> or (3arrC?in "n# (op1(inde&# =or op2(inde&###! en# %oop! suma :% result! over :% 3arrC?out F% 3arrC?in! en# add! --OOOOOOOOOOOOOOOOOOOOOOOOOOOOOO --OOOOO)64 AD() D6 N BI 4OOOOOOO --OOOOOOOOOOOOOOOOOOOOOOOOOOOOOO proce#+re sub ( A+ B : in bit?ve3tor! resta : o+t bit?ve3tor! over : o+t boolean # is "%i"s op1 : bit?ve3tor(A %engt$ - 1 #o*nto 7# is A! "%i"s op2 : bit?ve3tor(B %engt$ - 1 #o*nto 7# is B! !"ri"b%e result : bit?ve3tor(resta %engt$ - 1 #o*nto 7#! !"ri"b%e 3arrC?in : bit! !"ri"b%e 3arrC?out : bit :% 010 -- Eara realizar la suma en 3omplemento a dos -- 6s ne3esario realizar (A Q ,omplemento (B# Q 1#> begin --Implementa3iVn de un restador+ utilizando suma en 3omplemento a dos for inde& in result re!erse6r"nge %oop 3arrC?in :% 3arrC?out! result(inde&# :% op1(inde&# =or (not op2(inde&## =or 3arrC?in! 3arrC?out :% (op1(inde&# "n# (not op2(inde&### or (3arrC?in and (op1(inde&# =or (not op2(inde&####! en# %oop! resta :% result! over :% 3arrC?out F% 3arrC?in! en# sub! --OOOOOOOOOOOOOOOOOOOOOOOOOOOOO --OOOOODI8I4() D6 N BI 4OOOOOOO --OOOOOOOOOOOOOOOOOOOOOOOOOOOOO proce#+re divisor ( /+ 5 : in bit?ve3tor! 3o3iente : o+t bit?ve3tor!

Carlos Ivn Camargo Bareo

residuo : o+t bit?ve3tor! div?3ero : o+t boolean # is const"nt len : natural :% / %engt$! const"nt zero?divisor : bit?ve3tor(len - 1 #o*nto 7# :% (ot$ers %B 070#! "%i"s dividend : bit?ve3tor(/ %engt$ - 1 #o*nto 7# is /! !"ri"b%e divisor : bit?ve3tor(5 %engt$ #o*nto 7# :% 070 X 5! !"ri"b%e quotient : bit?ve3tor(len - 1 #o*nto 7#! !"ri"b%e remainder : bit?ve3tor(len #o*nto 7# :% (ot$ers %B 070#! !"ri"b%e ignore?over2loK : boolean! begin -- )evisa si se estY dividiendo por 3ero> if 5 % zero?divisor t$en div?3ero :% true! -- 4i 5 % 7! div?3ero % true ret+rn! -- 4alir del pro3edimiento en# if! -- Algoritmo de divisiVn for iter in len - 1 #o*nto 7 %oop if remainder(len# % 070 t$en -- 4i el 54B del residuo (A# es 3ero+ el -- residuo es positivo remainder :% remainder s%% 1! -- )ota3iVn a la izquierda del residuo remainder(7# :% dividend(iter#! -- 4e RbajaR el siguiente bit del Dividendo -- )esiduo (A# % )esiduo Q Divisor (5# s+b(remainder+ divisor+ remainder+ ignore?over2loK#! e%se -- 4i el 54B del residuo es uno+ el residuo es negativo remainder :% remainder s%% 1! -- )ota3iVn a la izquierda del residuo remainder(7# :% dividend(iter#! -- 4e RbajaR el siguiente bit del Dividendo -- )esiduo (A# % )esiduo - Divisor (5# "##(remainder+ divisor+ remainder+ ignore?over2loK#! en# if! quotient(iter# :% not remainder(len#! -- 6l bit a3tual del 3o3iente es 1 si el -- residuo es positivo en# %oop! -- C es 7 si es negativo>

-- ,uando el residuo es negativo se restaura el valor del mismo


if remainder(len# % 010 t$en> "##(remainder+ divisor+ remainder+ ignore?over2loK#! en# if! 3o3iente :% quotient! residuo :% remainder(len - 1 #o*nto 7#! div?3ero :% 2alse! en# divisor! en# p"c1"ge bo#) aritmeti3o!

0 continuacin se presenta un ejemplo procedimiento di(isor por una entidad%ibr"r) ieee! +se ieee>std?logi3?11<:>all!

de

llamado

del

--Al @a3er el llamado del Ea3Aage se debe indi3ar que se en3uentra en el --dire3torio de trabajo (libreria KorA#! %ibr"r) KorA! +se KorA>aritmeti3o>all! --De3lara3iVn de la 6ntidad

Carlos Ivn Camargo Bareo

entit) 3ain is port( A+B : in bit?ve3tor (: doKnto 1#! D+, : o+t bit?ve3tor(: doKnto 1##! en# entit) 3ain! -- De3lara3iVn de la arquite3tura "rc$itect+re c"in of 3ain is begin test: process (A# !"ri"b%e @@ : boolean! !"ri"b%e ss+ tt : bit?ve3tor(: #o*nto 1#! begin #i!isor(A+ B+ ss+ tt+@@#! D $% ss! , $% tt! en# process test! en# "rc$itect+re 3ain!

En la +igura 88. .e muestra la simulacin del di(isor.

E3E#2LO /4 C(on5me&(o di6i&al


.e desea disear un sistema digital &ue sea capa de medir segundos y d3cimas de segundo utili ando una fuente de reloj e:terna de +/"S /" y dos displays de R segmentos para la (isuali acin. El diagrama de blo&ues del sistema aparece en la +igura 89.

+igura 89. #iagrama de blo&ues del 5ronmetro #igital. Di7iso( de )(ec'encia 2(o6(ama%le 8DIVI!OR 94 5omo se habrn dado cuenta el di(isor de frecuencia programable no tiene

Carlos Ivn Camargo Bareo

una entrada fija, esta entrada depende de la disponibilidad del sistema, por lo &ue en este caso es un gen#rico. El cdigo en !"#$ del contador es el siguiente-ibrarC I666! use I666>4 D?-(DI,?11<:>all! use I666>4 D?-(DI,?A)I N>all! use I666>4 D?-(DI,?GN4IDN6D>all! Entit) 3lA?div Is GENERIC( *5NT: N"t+r"% :% L #! -- *5NT genMri3o L5Nz por de2e3to PORT( 3lo3A?*5NT : IN STD6&OGIC! -- 4ePal de reloj e&terna> )eset : IN St#6&ogic! -- )eset del 5Vdulo 3lo3A?1Nz : OUT STD6&OGIC#! -- 4alida a 1Nz> en# 3lA?div! Arc$itect+re ) of 3lA?div is Sign"% 3ount?15@z : St#6&ogic63ector(: DO<NTO 7#! Sign"% ,lo3A?15Nz : St#6&ogic! Sign"% ,ount?1Nz : Integer R"nge 7 to 1777777! Begin Process Begin -- Divisor por *5NT *"it +nti% 3lo3A?*5NT e!ent "n# 3lo3A?*5NT % 010! if )eset % 010 t$en if 3ount?15@z $ ( *5NT - 1 # t$en 3ount?15@z $% 3ount?15@z Q 1! e%se 3ount?15@z $% R77777R! en# if! if 3ount?15@z $ *5NTF2 t$en 3lo3A?15Nz $% 070! e%se 3lo3A?15Nz $% 010! en# if! e%se ,ount?15@z $% R77777R! en# if! en# Process! -- Divisor por 1777777 Process ( 3lo3A?15@z+ )eset # Begin if )eset % 070 t$en ,ount?1Nz $% 7! e%se if 3lo3A?15@z e!ent "n# 3lo3A?15@z % 010 t$en if 3ount?1Nz $ 1777777 t$en 3ount?1Nz $% 3ount?1Nz Q 1! e%se 3ount?1Nz $% 7! en# if!

Carlos Ivn Camargo Bareo

if 3ount?1Nz $ ;777777 t$en 3lo3A?1Nz $% 070! e%se 3lo3A?1Nz $% 010! en# if! en# if! en# if! en# Process! en# RT!

5omo puede obser(arse e:isten dos procesos dentro de la ar&uitectura el primero es un di(isor de frecuencia por +/"S el cual proporciona una seal de reloj de , /" , esto se hi o con el fin de proporcionarle adaptabilidad al sistema a cual&uier seal de reloj mayor a , /" . El segundo proceso es un di(isor de frecuencia por , milln, la salida de este proceso es una seal con frecuencia de , " . CONTADOR4 %na (e obtenida la frecuencia de , " se procede a reali ar el contador. El cdigo !"#$ del contador se muestra a continuacin&ibr"r) Ieee! Use Ieee>4td?-ogi3?11<:>all! Use Ieee>4td?-ogi3?Arit@>all! Use Ieee>4td?-ogi3?unsigned>all! Entit) ,ontador is Port( ,lo3A : In 4td?-ogi3! )eset : In 4td?-ogi3! Gnidades : B+ffer 4td?-ogi3?8e3tor( 9 Do*nto 7 #! De3enas : B+ffer 4td?logi3?8e3tor( 9 Do*nto 7 # #! en# Entit) ,ontador! Arc$itect+re ) of ,ontador is Begin Process (,lo3A+ )eset# Begin If )eset % 070 t$en Gnidades $% R7777R! De3enas $% R7777R! e%se if ,lo3A e!ent "n# ,lo3A % 010 t$en If Gnidades $ R1771R t$en Gnidades $% Gnidades Q R7771R! e%se Gnidades $% R7777R! if De3enas $ R1771R t$en

Carlos Ivn Camargo Bareo

De3enas $% De3enas Q R7771R! e%se Gnidades $% R7777R! De3enas $% R7777R! en# if! en# if! en# if! en# if! En# Process! En# Arc$itect+re ) !

VI!UALI:ACION4 )ara este ejemplo utili aremos (isuali acin dinmicaF el mdulo debe contar con una salida &ue sea capa de manejar un display de R segmentos y seales para la seleccin del display. 0 continuacin se muestra el diagrama de blo&ues y las entradas y salidas del (isuali ador-

+igura. 8? #iagrama de @lo&ues de la (isuali acin. $a (isuali acin dinmica funciona de esta forma- $os segmentos comunes de los #isplays estn unidos entre s de tal forma &ue el (alor a desplegar se pueda mostrar en cual&uiera de los dos. $as entradas de seleccin indican en cual de ellos se mostrar el (alor en(iado. )or ejemplo para mostrar el n'mero PV se deben seguir los siguientes pasos.eleccionar el #isplay de la #erecha haciendo .el\C] < , y .el\,] < C. 5olocar la informacin correspondiente al *'mero V en @5#N6ut,. Esperar ;# milisegundos. 7. "acer @5#N6ut < C, ( Esto para e(itar &ue por un bre(e instante de tiempo se muestre la informacin del otro display ) 8. .eleccionar el #isplay de la i &uierda haciendo .el\C] < C y .el\,] < ,. 9. 5olocar la informacin correspondiente al *'mero P en @5#N6ut?. Esperar ;# milisegundos. P. Hepetir el paso ,. $os pasos &ue debe reali ar el mdulo de (isuali acin son lo mismos del ejemplo, pero la informacin &ue muestran en cada momento son los (alores de las entradas Z%nidades[ y Z#ecenas[.

Carlos Ivn Camargo Bareo

#ebido a &ue necesitamos una seal de reloj con un perodo de ;# ms, podemos incluir un di(isor de frecuencia dentro de la (isuali acin, pero esto implica gastar ms compuertas lgicasF la solucin ms ptima es incluir el di(isor de frecuencia en el mdulo di(isor. 5on lo &ue el cdigo del di(isor &ueda de la siguiente forma&ibr"r) I666! +se I666>4 D?-(DI,?11<:>all! +se I666>4 D?-(DI,?A)I N>all! +se I666>4 D?-(DI,?GN4IDN6D>all! Entit) 3lA?div2 Is GENERIC( *5NT: Natural :% L! D : Natural :% 27 #! -- *5NT genMri3o L5Nz por de2e3to PORT( 3lo3A?*5NT : In 4td?-ogi3! -- 4ePal de reloj e&terna> )eset : In 4td?-ogi3! -- )eset del 5Vdulo 3lo3A?1Nz : O+t 4td?-ogi3! ,lo3A? D : O+t 4td?-ogi3 #! -- 4alida a 1Nz> END 3lA?div2! Arc$itect+re ) of 3lA?div2 is Sign"% 3ount?15@z : 4 D?-(DI,?86, ()(: D(UN ( 7#! Sign"% ,lo3A?15Nz : 4td?-ogi3! Sign"% ,lo3A?1ms : 4td?-ogi3! Sign"% ,ount?1Nz : Integer )ange 7 to 177! Sign"% ,ount?1ms : Integer )ange 7 to 177! Sign"% ,ount? Dms : Integer )ange 7 to 177! Begin Process Begin -- Divisor por *5NT *"it +nti% 3lo3A?*5NT e!ent "n# 3lo3A?*5NT % 010! if )eset % 010 t$en if 3ount?15@z $ ( *5NT - 1 # t$en 3ount?15@z $% 3ount?15@z Q 1! e%se 3ount?15@z $% R77777R! en# if! if 3ount?15@z $ *5NTF2 t$en 3lo3A?15Nz $% 070! e%se 3lo3A?15Nz $% 010! en# if! e%se ,ount?15@z $% R77777R! en# if! en# Process! -- Divisor por 1777

Carlos Ivn Camargo Bareo

Process ( 3lo3A?15@z+ )eset # Begin if )eset % 070 t$en ,ount?1ms $% 7! e%se if 3lo3A?15@z e!ent "n# 3lo3A?15@z % 010 t$en if 3ount?1ms $ 1777 t$en 3ount?1ms $% 3ount?1ms Q 1! e%se 3ount?1ms $% 7! en# if! if 3ount?1ms $ ;77 t$en 3lo3A?1ms $% 070! e%se 3lo3A?1ms $% 010! en# if! en# if! en# if! En# Process! -- Divisor por 1777 Process ( 3lo3A?1ms+ )eset # Begin if )eset % 070 t$en ,ount?1Nz $% 7! e%se if 3lo3A?1ms e!ent "n# 3lo3A?1ms % 010 t$en if 3ount?1Nz $ 1777 t$en 3ount?1Nz $% 3ount?1Nz Q 1! e%se 3ount?1Nz $% 7! en# if! if 3ount?1Nz $ ;77 t$en 3lo3A?1Nz $% 070! e%se 3lo3A?1Nz $% 010! en# if! en# if! en# if! En# Process! -- Base De tiempo para la visualiza3iVn dinYmi3a Process ( 3lo3A?1ms+ )eset # Begin if )eset % 070 t$en ,ount? Dms $% 7! e%se if 3lo3A?1ms e!ent "n# 3lo3A?1ms % 010 t$en if 3ount? Dms $ D t$en 3ount? Dms $% 3ount? Dms Q 1! e%se 3ount? Dms $% 7! en# if! if 3ount? Dms $ DF2 t$en 3lo3A? D $% 070! e%se 3lo3A? D $% 010! en# if!

Carlos Ivn Camargo Bareo

en# if! en# if! en# Process! END ) !

En esta (ersin del di(isor de frecuencia se obtiene una seal con una frecuencia de ,L" al reali ar la di(isin de la seal de ,/" entre ,CCC. Esta seal se toma como base para obtener las seales de @ase de tiempo para la (isuali acin dinmica (#i(idiendo por ;#) y base de tiempo de , " . +inalmente el cdigo del mdulo de (isuali acin se muestra a continuacin&ibr"r) Ieee! Use Ieee>4td?-ogi3?11<:>all! Use Ieee>4td?-ogi3?Arit@>all! Use Ieee>4td?-ogi3?unsigned>all! Entit) 4@oK is Port( Gnidades : In 4td?-ogi3?ve3tor( 9 #o*nto 7 #! De3enas : In 4td?-ogi3?ve3tor( 9 #o*nto 7 #! ,lA? Dms : In 4td?-ogi3! 4el : O+t 4td?-ogi3?ve3tor( 1 #o*nto 7 #! B,D?(ut : O+t 4td?-ogi3?8e3tor( < #o*nto 7 # -- B,D?(utZ=>>7[ % a+ b+ 3+ d+ e+ 2+ g #! En# Entit) 4@oK! Arc$itect+re ) of 4@oK is Sign"% BinarC : 4td?logi3?8e3tor ( 9 #o*nto 7 #! T)pe 6stados is ( 4@oK?De3enas+ 4@oK?Gnidades #! Sign"% 4tate : 6stados! Begin Process( BinarC # Begin C"se BinarC is <$en R7777R %B B,D?(ut $% R7111111R! <$en R7771R %B B,D?(ut $% R7177771R! <$en R7717R %B B,D?(ut $% R1117117R! <$en R7711R %B B,D?(ut $% R1117711R! <$en R7177R %B B,D?(ut $% R1171771R! <$en R7171R %B

Carlos Ivn Camargo Bareo

B,D?(ut $% R1711711R! <$en R7117R %B B,D?(ut $% R1711111R! <$en R7111R %B B,D?(ut $% R7117771R! <$en R1777R %B B,D?(ut $% R1111111R! <$en R1771R %B B,D?(ut $% R1111711R! <$en ot$ers %B B,D?(ut $% R7777777R! en# C"se! En# Process! Process(,lA? Dms# Begin If (,lA? Dms e!ent "n# ,lA? Dms % 010# T$en C"se 4tate is <$en 4@oK?De3enas %B BinarC $% De3enas! 4tate $% 4@oK?Gnidades! 4el $% R71R! <$en 4@oK?Gnidades %B BinarC $% Gnidades! 4tate $% 4@oK?De3enas! 4el $% R17R! En# C"se! En# If! En# Process! En# Arc$itect+re ) !

%na (e reali ados los diferentes mdulos del sistema se debe reali ar una descripcin estructural para reali ar la intercone:in entre ellos&ibr"r) I666! USE I666>4 D?-(DI,?11<:>all! USE I666>4 D?-(DI,?A)I N>all! USE I666>4 D?-(DI,?GN4IDN6D>all! Entit) ,ronometro is Port( )eset+3lA : IN 4 D?-(DI,! 4el : O+t 4 D?-(DI,?86, ()( 1 #o*nto 7 #! 4even?4eg : O+t 4 D?-(DI,?86, ()( < #o*nto 7 # #! En# Entit) ,ronometro! Arc$itect+re 6stru3tural Of ,ronometro is

Carlos Ivn Camargo Bareo

Co(ponent 4@oK Port( Gnidades : In 4td?-ogi3?ve3tor( 9 #o*nto 7 #! De3enas : In 4td?-ogi3?ve3tor( 9 #o*nto 7 #! ,lA? Dms : In 4td?-ogi3! 4el : O+t 4td?-ogi3?ve3tor( 1 #o*nto 7 #! B,D?(ut : O+t 4td?-ogi3?8e3tor( < #o*nto 7 # #! En# Co(ponent 4@oK! Co(ponent ,ontador Port( ,lo3A : In 4td?-ogi3! )eset : In 4td?-ogi3! Gnidades : B+ffer 4td?-ogi3?8e3tor( 9 Do*nto 7 #! De3enas : B+ffer 4td?logi3?8e3tor( 9 Do*nto 7 # #! en# Co(ponent ,ontador! Co(ponent 3lA?div2 GENERIC( *5NT: Natural :% L! D : Natural :% 27 #! PORT( 3lo3A?*5NT : In 4td?-ogi3! )eset : In 4td?-ogi3! 3lo3A?1Nz : O+t 4td?-ogi3! ,lo3A? D : O+t 4td?-ogi3 #! END Co(ponent 3lA?div2! Sign"% ,-.1Nz+ ,-. D : 4td?logi3! Sign"% Gnidades+ De3enas : 4td?logi3?ve3tor( 9 doKnto 7 #! Begin A1: 3lA?div2 Generic ("p(L+ 27# Port '"p( 3lA+ )eset+ ,-.1Nz+ ,-. D #! A2: ,ontador port ("p( ,-.1Nz+ )eset+ Gnidades+ De3enas #! A9: 4@oK port ("p( Gnidades+ De3enas+ ,-. D+ 4el+ 4even?4eg #! En# Arc$itect+re 6stru3tural!

El cdigo correspondiente al testbench del cronometro es&IBRARY ieee! USE ieee>std?logi3?11<:>A--! USE ieee>numeri3?std>A--! ENTITY testben3@ IS END testben3@! ARCHITECTURE be@avior OF testben3@ IS

Carlos Ivn Camargo Bareo

-- ,omponent De3laration Co(ponent 3ronometro PORT( )eset+ 3lA : IN std?logi3! 4el : OUT std?logi3?ve3tor(1 #o*nto 7#! 4even?4eg : OUT std?logi3?ve3tor(< #o*nto 7# #! END CO'PONENT! SIGNA& )eset : std?logi3! SIGNA& 3lA : std?logi3! SIGNA& 4el : std?logi3?ve3tor(1 #o*nto 7#! SIGNA& 4even?4eg : std?logi3?ve3tor(< #o*nto 7#! const"nt n3C3les : integer :% :7777777! const"nt @al2period : time :% ; ns! BEGIN -- ,omponent Instantiation uut: 3ronometro PORT 'AP( )eset %B )eset+ 3lA %B 3lA+ 4el %B 4el+ 4even?4eg %B 4even?4eg #! -- Denera3ion del )eloj ,lo3A?4our3e: process begin for i in 7 to n3C3les %oop -- Denera n3C3los de periodo 17 ns 3lA $% 070! *"it for @al2period! 3lA $% 010! *"it for @al2period! en# %oop! *"it! en# process ,lo3A?4our3e! tb : PROCESS BEGIN )eset $% 070! *"it +nti% 3lA0e!ent "n# 3lA % 010! *"it +nti% 3lA0e!ent "n# 3lA % 010! )eset $% 010! *"it! END PROCESS! END!

E3E#2LO 54 Con&ado( U2;DO<N


En este ejemplo se disear un contador ascendente descendente de C a VV. El sistema tendr como entradas de control tres

Carlos Ivn Camargo Bareo

pulsadores- Heset, 0umento y dismunicin. El diagrama de blo&ues del sistema se muestra en la siguiente figura-

+igura 8P. Bnterfa del 5ontador %pY#own El diagrama de blo&ues de este sistema es el siguiente-

+igura 8R. #iagrama de @lo&ues del contador %pY#own 5omo se puede (er el circuito de (isuali acin es id3ntico al del ejemplo anterior. #ebido a &ue utili aremos elementos mecnicos ( pulsadores ) debemos disear un circuito &ue elimine el ruido el3ctrico introducido por estos. ANTIRE,OTE- Este mdulo se encarga de eliminar el ruido el3ctrico introducido por los pulsadores, pre(iniendo de esta forma conteos errneos. 0dems incorpora un circuito &ue genera un pulso de duracin de un perodo de la seal de reloj para e(itar &ue cuando se deja oprimido el )ulsador se genere ms de un conteo.

Carlos Ivn Camargo Bareo

+igura 8Q. #iagrama de estados del mdulo antirrebote

El cdigo en !"#$ de este mdulo es el siguiente%ibr"r) I666! +se ieee>std?logi3?11<:>all! +se ieee>std?logi3?arit@>all! Entit) deboun3e Is Port( Eus@?Button+ ,lA : In 4td?-ogi3! )eset : In 4td?-ogi3! EB?D : O+t 4td?-ogi3#! En# deboun3e! Arc$itect+re ) OF deboun3e Is T)pe estados Is ( )ise+ 2all+ 47+ 41 #! Sign"% state : estados! Sign"% 4NI* ?EB : 4td?-ogi3?8e3tor( 9 doKnto 7 #! Sign"% EB?D6B(GN,6D : 4td?-ogi3! Begin Process -- 6ste pro3eso elimina el ruido elM3tri3o generado por los pulsadores begin

Carlos Ivn Camargo Bareo

*"it +nti% ( ,lA E3ENT # AND ( ,lA % 010 #! 4NI* ?EB( 2 Do*nto 7 # $% 4NI* ?EB( 9 Do*nto 1 #! 4NI* ?EB(9# $% NOT Eus@?Button! If 4NI* ?EB( 9 Do*nto 7 #%R7777R THEN EB?D6B(GN,6D $% 070! E%se EB?D6B(GN,6D $% 010! En# if! en# process! Process ( ,lA+ EB?D6B(GN,6D+ )eset # Begin If )eset % 010 t$en state $% )ise! EB?D $% 070! e%se If ,lA e!ent and ,lA % 070 t$en C"se state is <$en )ise %B EB?D $% 070! If EB?D6B(GN,6D % 070 t$en 4tate $% )ise! e%se 4tate $% 47! en# if! <$en 47 %B EB?D $% 010! 4tate $% 41! <$en 41 %B EB?D $% 070! 4tate $% *all! <$en *all %B EB?D $% 070! If EB?D6B(GN,6D % 010 t$en 4tate $% *all! e%se 4tate $% )ise! en# if! <$en (t@ers %B 4tate $% )ise! En# C"se! En# If! En# If! En# Process! en# "rc$itect+re ) !

Carlos Ivn Camargo Bareo

+igura 8V. Bnterfa del mdulo contador. CONTADOR- Este mdulo est encargado de aumentar o disminuir el (alor de sus salidas de acuerdo a la entrada &ue este actuando. $a interfa de este mdulo se muestra en la figura anterior y el cdigo en !"#$ se muestra a continuacin.
&ibr"r) Ieee! Use Ieee>4td?-ogi3?11<:>all! Use Ieee>4td?-ogi3?Arit@>all! Use Ieee>4td?-ogi3?unsigned>all! Entit) ,ontador is Port( Gp : In 4td?-ogi3! DoKn : In 4td?-ogi3! )eset : In 4td?logi3! ,lA : In 4td?logi3! Gnidades : B+ffer 4td?-ogi3?8e3tor( 9 Do*nto 7 #! De3enas : B+ffer 4td?logi3?8e3tor( 9 Do*nto 7 # #! en# Entit) ,ontador! Arc$itect+re ) of ,ontador is Begin Process ( Gp+ DoKn+ )eset+ ,lA # Begin If )eset % 010 t$en Gnidades $% R7777R! De3enas $% R7777R! e%se If ,lA e!ent "n# 3lA%010 t$en if Gp % 010 "n# DoKn % 070 t$en If Gnidades $ R1771R t$en Gnidades $% Gnidades Q R7771R! e%se Gnidades $% R7777R! if De3enas $ R1771R t$en De3enas $% De3enas Q R7771R! e%se Gnidades $% R7777R! De3enas $% R7777R! en# if! en# if! e%sif Gp % 070 "n# DoKn % 010 t$en If Gnidades B R7777R t$en Gnidades $% Gnidades - R7771R!

Carlos Ivn Camargo Bareo

e%se Gnidades $% R1771R! if De3enas B R7777R t$en De3enas $% De3enas - R7771R! e%se Gnidades $% R1771R! De3enas $% R1771R! en# if! en# if! e%se Gnidades $% Gnidades! De3enas $% De3enas! en# if! en# if! en# if! En# Process! En# Arc$itect+re ) !

$a descripcin estructural del contador %pY#own es la siguiente%ibr"r) I666! +se I666>std?logi3?11<:>all! entit) GD,ounter is port ( Gp : in 4 D?-(DI,! DoKn : in 4 D?-(DI,! ,lA : in 4 D?-(DI,! )eset : in 4 D?-(DI,! 4el : B+ffer 4 D?-(DI,?86, () (1 #o*nto 7#! 46D : o+t 4 D?-(DI,?86, () (< #o*nto 7# #! en# GD,ounter! "rc$itect+re GD,ounter?ar3@ of GD,ounter is Co(ponent 4@oK Port( Gnidades : In 4td?-ogi3?ve3tor( 9 doKnto 7 #! De3enas : In 4td?-ogi3?ve3tor( 9 doKnto 7 #! ,lA? Dms : In 4td?-ogi3! 4el : Bu22er 4td?-ogi3?ve3tor( 1 doKnto 7 #! B,D?(ut : (ut 4td?-ogi3?8e3tor( < doKnto 7 # #! En# Co(ponent 4@oK! Co(ponent ,ontador Port( Gp : In 4td?-ogi3! DoKn : In 4td?-ogi3! )eset : In 4td?logi3! ,lA : In 4td?logi3! Gnidades : B+ffer 4td?-ogi3?8e3tor( 9 DoKnto 7 #! De3enas : O+t 4td?logi3?8e3tor( 9 DoKnto 7 # #! en# Co(ponent ,ontador! Co(ponent deboun3e Port(

Carlos Ivn Camargo Bareo

Eus@?Button+ ,lA : In 4td?-ogi3! )eset : In 4td?-ogi3! EB?D : O+t 4td?-ogi3#! En# Co(ponent deboun3e! Co(ponent 3lA?div2 GENERIC( *5NT: Natural :% L! D : Natural :% 27 #! PORT( 3lo3A?*5NT : In 4td?-ogi3! )eset : In 4td?-ogi3! 3lo3A?1Nz : O+t 4td?-ogi3! ,lo3A? D : O+t 4td?-ogi3 #! END Co(ponent 3lA?div2! Sign"% ,-. D+ ,-.1Nz+ GEI+ DNI : 4td?-ogi3! Sign"% Gnidades+ De3enas : 4td?logi3?ve3tor( 9 #o*nto 7 #! begin A1: 3lA?div2 Generic ("p(L+ 27# Port '"p( ,lA+ )eset+ ,-.1Nz+ ,-. D #! A2: deboun3e Port '"p( Gp+ ,-. D+ )eset+ GEI #! A9: deboun3e Port '"p( DoKn+ ,-. D+ )eset+ DNI #! A:: ,ontador Port '"p( GEI+ DNI+ )eset+ ,-. D+ Gnidades+ De3enas #! A;: 4@oK Port '"p( Gnidades+ De3enas+ ,-. D+ 4el+ 46D #! en# GD,ounter?ar3@!

Ejemplo =4 UART 8 Uni7e(sal As>nc?(ono's Recei7e( @ T(ansmi&&e( 9


$a comunicacin asncrona es ampliamente utili ada en los sistemas digitales, por esta ra n en este ejemplo se disear un sistema cap de reali ar una comunicacin serial asncrona. En la +igura 9C se muestra una trama tpica de este tipo de comunicacin, el primer bit en ser en(iado es el @it de .tart ( 5ero $gico ), despu3s se en(an los bits de datos los cuales pueden (ariar de P a Q @its, a continuacin el bit de paridad el cual es 'til para la deteccin de errores en la transferenciaF Este bit no es obligatorio y en este ejemplo no lo utili aremos y por 'ltimo est el bit de stop.

Carlos Ivn Camargo Bareo

+igura 9C. ;rama bsica de la transmisin asncrona- , bit de .tart, Q bits de #atos, un bit de paridad ( opcional ) y un @it de .top. En un protocolo asncrono el emisor y el receptor no comparten el mismo reloj, debido a esto se debe conocer la (elocidad de transmisin ( @aud Hate ) antes de iniciarse las comunicaciones. )or lo cual los relojes internos del transmisor y el receptor se deben fijar a la misma frecuencia. El receptor sincroni a su reloj interno al iniciar cada trama, esto se puede reali ar detectando la transicin de alto a bajo en seal de recepcin. %n concepto cla(e en el diseo de %0H;s es &ue el reloj interno de la %0H; debe ser ms rpido &ue la (elocidad de transmisin. En la %0H; ,P9?C su reloj es ,P (eces ms rpido &ue la ;asa de @audios. %na (e &ue el inicio de la transmisin se detecta se debe esperar un tiempo igual a 79 ciclos de muestreo ( ,P del @it de .tart A Q del @it ) esto se hace para &ue el receptor pueda reli ar la lectura del dato entrante en la mitad de cada @B;. #espu3s de esto se muestrea la seal de entrada cada ,P ciclos del reloj de muestreo. En la +igura 9, se muestra este concepto.

+igura 9,. )untos de muestreo del receptor.

Carlos Ivn Camargo Bareo

El diseo del transmisor es ms sencillo ya &ue el puede iniciar a en(iar datos en cual&uier momento y simplemente debe reali ar el corrimiento de los datos cada ,Y@aud Hate. En la siguiente figura se muestra la interfa blo&ues de la %0H;. y el diagrama de

+igura 97. #iagrama de @lo&ues de la %0H;. #ondeHeset - Heset general del sistema acti(a alta. 5lX - .eal de Heloj. H: - .eal de entrada serial asncrona. HeadN#ata - 0cti(a alta le informa al receptor &ue el dato a sido ledo. #ataNHeady - Bndica la recepcin de un dato por la lnea H:. El dato est disponible en #ataNH:. #ataNH:( R..C ) - #ato recibido por el receptor. #ataN;:( R..C ) - #ato a transmitir por la %0H;. .tartN;: - Bnicio de la transmisin. ;: - .eal de salida serial ;:NEmpty - En estado lgico alto ndica &ue el transmisor est disponible para una nue(a transmisin.

Carlos Ivn Camargo Bareo

.ene(ado( de #'es&(eo- Este mdulo est encargado de generar la frecuencia de muestreo del receptor y el reloj del transmisor. En la siguiente figura se muestra la interfa y el diagrama de blo&ues de este mdulo.

+igura 98. #iagrama de blo&ues del generador de muestreo. El blo&ue Z #i(isor : ,P [ como su nombre lo indica di(ide la seal de entrada en ,P. El di(isor de frecuencia programable es capa de di(idir la seal de entrada de , a ++++ " ( P??8? ). El factor de di(isin debe ser ingresado de la siguiente forma- 5olocar el byte menos significati(o en cte_di$ y hacer %oad_&i = ' y %oad_%o( < ,. 5olocar el byte ms significati(o en cte_di$ y hacer %oad_&i < , y %oad_%o( < C. 0signar %oad_&i = ' y %oad_%o( = '. 5omo se obser(a en la +igura anterior el reloj del transmisor 5lXN;:s se genere al di(idir la seal de reloj entrante entre ,PO,POcteNdi(, si por ejemplo tenemos un cristal de 9.V,7? /h y deseamos reali ar una transmisin a 79CC @). cte_di$ ser igual acte ? div = fin BPS > 4<=

2ue para nuestro ejemplo seraAB0<4.. = @ = ...@ H 4A.. > 4<=

0 continuacin se muestr el cdigo de los mdulos di(,P y di(Nms-

Carlos Ivn Camargo Bareo

-- Ini3io del mVdulo div1< &ibr"r) Ieee! Use Ieee>4td?-ogi3?11<:>all! Use Ieee>4td?-ogi3?Arit@>all! Use Ieee.Std_Logic_unsigned.all; entit) div1< is port ( )eset: in 4 D?-(DI,! ,lA: in 4 D?-(DI,! ,lA?In: in 4 D?-(DI,! ,lA?(ut: o+t 4 D?-(DI, #! en# div1<! "rc$itect+re div1<?ar3@ of div1< is Sign"% divider : 4td?-ogi3?8e3tor( 9 #o*nto 7 #! begin Process( ,-.+ )eset # Begin if 3lA e!ent "n# 3lA % 010 t$en if )eset % 010 t$en divider $% R7777R! e%sif ,lA?In % 010 t$en if divider % R1111R t$en divider $% R7777R! ,lA?(ut $% 010! e%se divider $% divider Q R7771R! ,lA?(ut $% 070! en# if! en# if! en# if! en# process! en# div1<?ar3@!

--Ini3io del mVdulo div?ms &ibr"r) Ieee! Use Ieee>4td?-ogi3?11<:>all! Use Ieee>4td?-ogi3?Arit@>all! Use Ieee.Std_Logic_unsigned.all; entit) Div?ms is port ( )eset : in 4 D?-(DI,! ,lA : in 4 D?-(DI,! ,lA?In : in 4 D?-(DI,! Divider : in 4 D?-(DI,?8e3tor( = #o*nto 7 #! -d?Div?-oK : in 4 D?-(DI,! -d?Div?Ni : in 4 D?-(DI,! ,lA?(ut : o+t 4 D?-(DI, #! en# Div?ms! "rc$itect+re Div?ms?ar3@ o2 Div?ms is Sign"% 3ount+ Div?*a3tor : 4td?-ogi3?8e3tor( 1; #o*nto 7 #!

Carlos Ivn Camargo Bareo

begin Process( ,-.+ )eset # Begin if 3lA e!ent "n# 3lA % 010 t@en If )eset % 010 t$en 3ount $% ( ot@ers %B 070 #! e%se if -d?Div?-oK % 010 t$en Div?*a3tor( = #o*nto 7 # $% Divider! 3ount $% ( ot@ers %B 070 #! en# if! if -d?Div?Ni % 010 t$en Div?*a3tor( 1; #o*nto L # $% Divider! 3ount $% ( ot@ers %B 070 #! en# if! if 3ount % Div?*a3tor t$en 3ount $% ( ot@ers %B 070 #! ,lA?(ut $% 010! e%se if ,lA?In % 010 t$en 3ount $% 3ount Q 1! ,lA?(ut $% 070! en# if! en# if ! en# if! en# if! en# process! en# Div?ms?ar3@!

T(ansmiso(- Este mdulo est encargado de generar la trama a la (elocidad determinada en la seal ;:. El transmisor es bastante sencillo ya &ue lo 'nico &ue debe hacer es reali ar un corrimiento a la i &uierda de un registro de ,C bits conformado de la siguiente forma#gito C - C ( @it de .tart ). #gitos , W V - #ato a transmitir. #gito ,C - @it de .top. El cdigo en !"#$ del transmisor se muestra a continuacin&ibr"r) Ieee! Use Ieee>4td?-ogi3?11<:>all! Use Ieee>4td?-ogi3?Arit@>all! Use Ieee>4td?-ogi3?unsigned>all! entit) Bu22er? ' is port ( )eset : in 4 D?-(DI,! ,lA : in 4 D?-(DI,! -oad : in 4 D?-(DI,! 4@i2t : in 4 D?-(DI,! Data?IN : in 4 D?-(DI,?86, () (= #o*nto 7#! & : o+t 4 D?-(DI,!

Carlos Ivn Camargo Bareo

&?6mptC : Bu22er 4 D?-(DI, #! en# Bu22er? '! "rc$itect+re Bu22er? '?ar3@ of Bu22er? ' is Sign"% ,ount? & : 4td?-ogi3?8e3tor ( 9 #o*nto 7 #! Sign"% )eg? & : 4td?-ogi3?8e3tor( S #o*nto 7 #! Sign"% &?(n : 4td?-ogi3! -- \1] indi3a transmisiVn en progreso Be>?n -- 6ste pro3eso realiza un 3orrimiento 3ada vez que la sePal 4@i2t (,lA? &s # es igual a \1] Process( ,-.+ )eset+ -oad+ 4@i2t # Begin if 3lA0e!ent "n# 3lA % 010 t$en If )eset % 010 t$en )eg? & $% ( ot$ers %B 010 #! & $% 010! e%se if -oad % 010 "n# &?(n % 070 t$en --*orma3iVn de la trama a transmitir> )eg? &( L #o*nto 1 # $% Data?In! )eg? &( 7 # $% 070! )eg? &( S # $% 010! e%se if 4@i2t % 010 t$en ^ ,orrimiento de la trama> )eg? &( L #o*nto 7 # $% )eg? &( S #o*nto 1 #! & $% )eg? &( 7 #! en# if! en# if! en# if! en# if! en# process!

Process( ,-.+ )eset+ -oad+ 4@i2t # -- 6ste pro3eso 3ontrola el nWmero de 3orrimientos realizados por el transmisor Begin if 3lA e!ent "n# 3lA % 010 t$en If )eset % 010 t$en &?(n $% 070! &?6mptC $% 010! ,ount? & $% R7777R! e%se if -oad % 010 "n# &?(n % 070 t$en &?6mptC $% 070! &?(n $% 010! e%sif 4@i2t % 010 t$en if &?(n % 010 t$en ,ount? & $% ,ount? & Q 1! if ,ount? & % R1771R t$en ,ount? & $% R7777R! &?(n $% 070! &?6mptC $% 010! e%se &?(n $% 010! en# if! en# if!

Carlos Ivn Camargo Bareo

end @ufferN;UNarchF

e%se &?6mptC $% &?6mptC! &?(n $% &?(n! en# if! en# if! en# if! en# process!

Recep&o(- El receptor est encargado de generar los pulsos de muestreo en la mitad de cada @it y detectar el inicio y fin de la trama ( @it de .tart y @it de .top ). 5omo puede (erse en la +igura 98. El generador de pulsos de muestreo produce la seal cl)ls la cual es ,P (eces ms rpida &ue la seal 5lXN;:s la cual se produce cada ,Y@aud Hate. )or lo tanto el receptor debe esperar Q ciclos de la seal clXls para leer los bits de datos y .top. En la siguiente figura se muestra la interfa y el diagrama de blo&ues del receptor.

+igura 9P. #iagrama de blo&ues del receptor. BnterfaceNH: - Est encargada de sincroni ar la seal de entrada R* con la seal cl)ls. 5omo salida tiene la seal R*Ds.
%ibr"r) I666! +se I666>std?logi3?11<:>all! entit) Inter2a3e?)& is port ( )eset: in 4 D?-(DI,! ,lA: in 4 D?-(DI,! 3lA?ms: in 4 D?-(DI,!

Carlos Ivn Camargo Bareo

)&D: in 4 D?-(DI,! )&Ds: o+t 4 D?-(DI, #! en# Inter2a3e?)&! "rc$itect+re Inter2a3e?)&?ar3@ of Inter2a3e?)& is Sign"% i2r&d : 4td?-ogi3?8e3tor( 2 #o*nto 7 #! begin Process( ,-.+ )eset # Begin if 3lA0e!ent "n# 3lA % 010 t$en if )eset % 010 t$en i2r&d $% R111R! e%se if ( i2r&d(7# % i2r&d(2# # "n# ( i2r&d(7# F% i2r&d(1# # t$en i2r&d(2# $% i2r&d(7#! e%se i2r&d(2# $% i2r&d(1#! i2r&d(1# $% i2r&d(7#! i2r&d(7# $% )&D! en# if! )&Ds $% i2r&d(2#! en# if! en# if! en# process! en# Inter2a3e?)&?ar3@!

.ampleNH:- Este mdulo est encargado de generar la seal de muestreo sa"+les. $a generacin de pulsos inicia al detectar una transicin de alto a bajo en la lnea R*Ds y finali a cuando la seal R*_,-ll sea igual a =,>.
%ibr"r) I666! +se I666>std?logi3?11<:>all! Use Ieee>4td?-ogi3?Arit@>all! Use Ieee>4td?-ogi3?unsigned>all! entit) 4A5E-6?)' is port ( )eset: in 4 D?-(DI,! ,-.: in 4 D?-(DI,! )st?4: in 4 D?-(DI,! ,lAms: in 4 D?-(DI,! )&Ds: in 4 D?-(DI,! 4ample: o+t 4 D?-(DI, #! en# 4A5E-6?)'! "rc$itect+re 4A5E-6?)'?ar3@ of 4A5E-6?)' is Sign"% 3ont?m : 4td?-ogi3?8e3tor( 9 #o*nto 7 #! -- ,ontador del modulo de muestreo Sign"% *lag?)&: 4td?-ogi3! -- *lag de )e3ep3ion en 3urso begin

Carlos Ivn Camargo Bareo

Process( ,-.+ )eset # Begin if 3lA e!ent "n# 3lA % 010 t$en If )eset % 010 t$en 3ont?m $% R7777R! sample $% 070! *lag?)& $% 070! e%sif )st?4 % 010 t$en 3ont?m $% R7777R! sample $% 070! *lag?)& $% 070! e%sif ,lAms % 010 t$en if *lag?)& % 070 "n# )&Ds % 070 t$en -- Bit de 4tart *lag?)& $% 010! -- Ini3io de la re3ep3ion e%sif *lag?)& % 010 t$en 3ont?m $% 3ont?m Q R7771R! if 3ont?m % R7117R t@en sample $% 010! e%se sample $% 070! en# if! en# if! en# if! en# if! En# Process! en# 4A5E-6?)'?ar3@!

ctrlNt:- Est3 mdulo es bsicamente un contador de pulsos de muestreo samples, cuando el conteo llega a ,C ( @it de .tart, Q bits de datos y @it de .tor ), la seal H:N+ull es igual a =,>.
%ibr"r) I666! +se I666>std?logi3?11<:>all! USE I666>4 D?-(DI,?A)I N>all! USE I666>4 D?-(DI,?GN4IDN6D>all! entit) 3trl?t& is port ( )eset : in 4 D?-(DI,! ,lA : in 4 D?-(DI,! -oad : in 4 D?-(DI,! 4@i2t : in 4 D?-(DI,! &?6mptC : B+ffer 4 D?-(DI, #! en# 3trl?t&! "rc$itect+re 3trl?t&?ar3@ of 3trl?t& is Sign"% ,ount? & : 4td?-ogi3?8e3tor ( 9 #o*nto 7 #! Sign"% &?(n : 4td?-ogi3! begin Process( ,-.+ )eset+ -oad+ 4@i2t # Begin if 3lA0e!ent "n# 3lA % 010 t$en If )eset % 010 t$en &?(n $% 070! &?6mptC $% 010!

Carlos Ivn Camargo Bareo

,ount? & $% R7777R! e%se if -oad % 010 "n# &?(n % 070 t$en &?6mptC $% 070! &?(n $% 010! e%sif 4@i2t % 010 t$en if &?(n % 010 t$en ,ount? & $% ,ount? & Q 1! if ,ount? & % R1771R t$en ,ount? & $% R7777R! &?(n $% 070! &?6mptC $% 010! e%se &?(n $% 010! en# if! en# if! e%se &?6mptC $% &?6mptC! &?(n $% &?(n! en# if! en# if! en# if! en# process! en# 3trl?t&?ar3@!

@ufferNH:- Est encargado de reali ar la con(ersin de seria a paralelo del dato de entrada.
%ibr"r) I666! +se I666>std?logi3?11<:>all! USE I666>4 D?-(DI,?A)I N>all! USE I666>4 D?-(DI,?GN4IDN6D>all! entit) Bu22er? ' is port ( )eset : in 4 D?-(DI,! ,lA : in 4 D?-(DI,! -oad : in 4 D?-(DI,! 4@i2t : in 4 D?-(DI,! Data?IN : in 4 D?-(DI,?86, () (= #o*nto 7#! & : o+t 4 D?-(DI,! &?6mptC : B+ffer 4 D?-(DI, #! en# Bu22er? '! "rc$itect+re Bu22er? '?ar3@ of Bu22er? ' is Sign"% ,ount? & : 4td?-ogi3?8e3tor ( 9 #o*nto 7 #! Sign"% )eg? & : 4td?-ogi3?8e3tor( S #o*nto 7 #! Sign"% &?(n : 4td?-ogi3! begin Process( ,-.+ )eset+ -oad+ 4@i2t # Begin if 3lA e!ent "n# 3lA % 010 t$en If )eset % 010 t$en )eg? & $% ( ot$ers %B 010 #! & $% 010!

Carlos Ivn Camargo Bareo

e%se if -oad % 010 "n# &?(n % 070 t$en )eg? &( L doKnto 1 # $% Data?In! )eg? &( 7 # $% 070! )eg? &( S # $% 010! e%se if 4@i2t % 010 t$en )eg? &( L #o*nto 7 # $% )eg? &( S #o*nto 1 #! & $% )eg? &( 7 #! en# if! en# if! en# if! en# if! en# process! Process( ,-.+ )eset+ -oad+ 4@i2t # Begin if 3lA e!ent "n# 3lA % 010 t$en If )eset % 010 t$en &?(n $% 070! &?6mptC $% 010! ,ount? & $% R7777R! e%se if -oad % 010 "n# &?(n % 070 t$en &?6mptC $% 070! &?(n $% 010! e%sif 4@i2t % 010 t$en if &?(n % 010 t$en ,ount? & $% ,ount? & Q 1! if ,ount? & % R1771R t$en ,ount? & $% R7777R! &?(n $% 070! &?6mptC $% 010! e%se &?(n $% 010! en# if! en# if! e%se &?6mptC $% &?6mptC! &?(n $% &?(n! en# if! en# if! en# if! en# process! en# Bu22er? '?ar3@!

0 continuacin se presenta la descripcin estructural de la %art%ibr"r) I666! Use Ieee>4td?-ogi3?11<:>all! Use Ieee>4td?-ogi3?Arit@>all! Use Ieee.Std_Logic_unsigned.all; entit) uart is port (

Carlos Ivn Camargo Bareo

-- 4enales 3omunes )eset : in 4 D?-(DI,! -- )eset A3tivo Alto ,lA : in 4 D?-(DI,! -- ,lo3A del sistema -- )e3eptor )& : in 4 D?-(DI,! -- -inea de re3ep3ion )ead?Data : in 4 D?-(DI,! -- 010 : -e3tura del dato re3ibido Data?)eadC : o+t 4 D?-(DI,! -- 010 : Dato disponible Data?)& : o+t 4 D?-(DI,?86, () ( = #o*nto 7 #! -- ransmisor Data? & : in 4 D?-(DI,?8e3tor( = #o*nto 7 #! -- Dato a transmitir 4tart? & : in 4 D?-(DI,! -- 010 : Ini3io de la transmision & : O+t 4 D?-(DI,! -- -inea de transmision &?6mptC : B+ffer 4 D?-(DI, -- 010 ransmisor disponible> #! en# GA) ! "rc$itect+re GA) ?ar3@ o2 GA) is Sign"% Ni: 4td?-ogi3! Co(ponent 4A5E-6?)' port ( )eset : in 4 D?-(DI,! ,-. : in 4 D?-(DI,! )st?4 : in 4 D?-(DI,! ,lAms : in 4 D?-(DI,! )&Ds : in 4 D?-(DI,! 4ample : out 4 D?-(DI, #! en# Co(ponent 4A5E-6?)'! Co(ponent ,trl?)& port ( )eset : in 4 D?-(DI,! ,lA : in 4 D?-(DI,! 4amples : in 4 D?-(DI,! )ead?Data : in 4 D?-(DI,! Data?)eadC: o+t 4 D?-(DI,! )&?*ull : B+ffer 4 D?-(DI, #! en# Co(ponent ,trl?)&! Co(ponent Bu22er?)& port ( )eset : in 4 D?-(DI,! ,lA : in 4 D?-(DI,! )&Ds : in 4 D?-(DI,! 4amples : in 4 D?-(DI,! 6nd?)& : in 4 D?-(DI,! Data?)& : o+t 4 D?-(DI,?86, () (= #o*nto 7# #! en# Co(ponent Bu22er?)&! Co(ponent Inter2a3e?)& port ( )eset : in 4 D?-(DI,!

Carlos Ivn Camargo Bareo

,lA : in 4 D?-(DI,! 3lA?ms : in 4 D?-(DI,! )&D : in 4 D?-(DI,! )&Ds : o+t 4 D?-(DI, #! en# Co(ponent Inter2a3e?)&! Co(ponent div1< port ( )eset : in 4 D?-(DI,! ,lA : in 4 D?-(DI,! ,lA?In : in 4 D?-(DI,! ,lA?(ut : o+t 4 D?-(DI, #! en# Co(ponent div1<! Co(ponent pulso port ( )eset : in 4 D?-(DI,! ,lA : in 4 D?-(DI,! Data?asCn : in 4 D?-(DI,! Data?sCn : o+t 4 D?-(DI, #! en# Co(ponent pulso! Co(ponent Div?ms port ( )eset : in 4 D?-(DI,! ,lA : in 4 D?-(DI,! ,lA?In : in 4 D?-(DI,! Divider : in 4 D?-(DI,?8e3tor( = #o*nto 7 #! -d?Div?-oK : in 4 D?-(DI,! -d?Div?Ni : in 4 D?-(DI,! ,lA?(ut : o+t 4 D?-(DI, #! en# Co(ponent Div?ms! Co(ponent ,ontrol?)' GENERIC( Div?Ni : Integer :% 7! Div?-oK : Integer :% 2 #! port ( )eset : in 4 D?-(DI,! ,lA : in 4 D?-(DI,! -d?Div?-oK : o+t 4 D?-(DI,! -d?Div?Ni : o+t 4 D?-(DI,! Data?(ut : o+t 4 D?-(DI,?86, () (= #o*nto 7# #! en# Co(ponent ,ontrol?)'! Co(ponent Bu22er? ' port ( )eset : in 4 D?-(DI,! ,lA : in 4 D?-(DI,! -oad : in 4 D?-(DI,! 4@i2t : in 4 D?-(DI,! Data?IN : in 4 D?-(DI,?86, () (= #o*nto 7#!

Carlos Ivn Camargo Bareo

& : o+t 4 D?-(DI,! '?6mptC : B+ffer 4 D?-(DI, #! en# Co(ponent Bu22er? '! Sign"% )&?*ull+ )&Ds+ samples+ sample+ 3lA?pres+ 3lAls+ 3lAl : 4td?-ogi3! Sign"% ,lA? &+ ,lA? &s : 4 D?-(DI,! Sign"% 3arga?div?loK+ 3arga?div?Ni : 4 D?-(DI,! Sign"% Data?In : 4 D?-(DI,?86, ()( = #o*nto 7 #! begin Ni $% 010!
--OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO -- O Denerador de *re3uen3ia: -a 2re3uen3ia de muestreo debe ser 1< ve3es maCor que O -- O la velo3idad de transmision> O -- OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO

A1 : div1< port ("p( )eset+ ,-.+ Ni+ 3lA?pres #! A2 : div?ms port ("p( )eset+ ,-.+ 3lA?pres+data?in+ 3arga?div?loK+ 3arga?div?Ni+ 3lAl #! A9 : pulso port ("p( )eset+ ,-.+ 3lAl+ 3lAls #! A: : div1< port ("p( )eset+ ,-.+ 3lAls+ ,lA? & #! A; : pulso port ("p( )eset+ ,-.+ ,lA? &+ ,lA? &s #! -- OOOOOOOOOOOOOO -- O )e3eptor O -- OOOOOOOOOOOOO -- 4in3roniza la sePal de entrada )& 3on 3lAls+ )&Ds sePal de salida sin3ronizada A< : Inter2a3e?)& port ("p( )eset+ ,-.+ 3lAls+ )&+ )&Ds #! -- Dete3ta Bit de 4tart C genera una sePal (sample# que indi3a 3uando se debe -- leer un bit> 4ample tiene una dura3ion de un 3i3lo de reloj ,-.> A= : 4ample?)& port ("p( )eset+ ,-.+ )&?*ull+ 3lAls+ )&Ds+ sample #! -- 4in3roniza la senal de entrada sample+ samples senal sin3ronizada> AL : pulso port ("p( )eset+ ,-.+ sample+ samples #! -- ,ontrol del numero de bits+ 3uando se re3iben 17 pulsos de la sePal sample -- )&?*ull se @a3e igual a 010> AS : 3trl?r& port ("p( )eset+ ,-.+ samples+ )ead?Data+ Data?)eadC+ )&?*ull #! -- )ealiza la 3onversiVn de serie a paralelo del dato re3ibido> A17: Bu22er?)& port ("p( )eset+ ,-.+ )&Ds+ samples+ )&?*ull+ Data?)& #!

Carlos Ivn Camargo Bareo

-- ,arga los registros del divisor para 2un3ionar a S<77 BE4 A11: ,ontrol?)' generic ("p( 7+ 2 # port ("p( )eset+ ,-.+ 3arga?div?loK+ 3arga?div?Ni+ Data?In #! -- OOOOOOOOOOOOOO -- O ransmisor O -- OOOOOOOOOOOOOO A12: Bu22er? & port ("p( )eset+ ,lA+ 4tart? &+ ,lA? &s+ Data? &+ &+ &?6mptC #! en# GA) ?ar3@!

El test bench de la %0H; se muestra a continuacin, junto con su correspondiente simulacin.


Use Ieee>4td?-ogi3?11<:>all! Use Ieee>4td?-ogi3?Arit@>all! Use Ieee>4td?-ogi3?unsigned>all! ENTITY testben3@ IS END testben3@! ARCHITECTURE be@avior (* testben3@ I4 -- ,omponent De3laration Co(ponent GA) port ( -- 4enales 3omunes )eset : in 4 D?-(DI,! -- )eset A3tivo Alto ,lA : in 4 D?-(DI,! -- ,lo3A del sistema -- )e3eptor )& : in 4 D?-(DI,! -- -inea de re3ep3ion )ead?Data : in 4 D?-(DI,! -- 010 : -e3tura del dato re3ibido Data?)eadC : o+t 4 D?-(DI,! -- 010 : Dato disponible Data?)& : o+t 4 D?-(DI,?86, () ( = #o*nto 7 #! -- ransmisor Data? & : in 4 D?-(DI,?8e3tor( = #o*nto 7 #! -- Dato a transmitir 4tart? & : in 4 D?-(DI,! -- 010 : Ini3io de la transmision & : O+t 4 D?-(DI,! -- -inea de transmision &?6mptC : B+ffer 4 D?-(DI, -- 010 ransmisor disponible> #! en# co(ponent! SIGNA& )eset : 4 D?-(DI,! SIGNA& ,lA : 4 D?-(DI,! SIGNA& )& : 4 D?-(DI,! SIGNA& )ead?Data : 4 D?-(DI,! SIGNA& Data?)eadC : 4 D?-(DI,! SIGNA& Data?)& : 4 D?-(DI,?86, () (= #o*nto 7#!

Carlos Ivn Camargo Bareo

SIGNA& Data? & : 4 D?-(DI,?86, () (= #o*nto 7#! SIGNA& 4tart? & : 4 D?-(DI,! SIGNA& & : 4 D?-(DI,! SIGNA& &?6mptC : 4 D?-(DI,! const"nt n3C3les : integer :% SSSSSSSSS! const"nt @al2period : time :% 171>=2 ns! const"nt tbit : integer :% ;12! BEGIN -- ,omponent Instantiation uut: Gart PORT 'AP( )eset %B )eset+ ,lA %B ,lA+ )& %B )&+ )ead?Data %B )ead?Data+ Data?)eadC %B Data?)eadC+ Data?)& %B Data?)&+ Data? & %B Data? &+ 4tart? & %B 4tart? &+ & %B &+ &?6mptC %B &?6mptC #! -- Denera3ion del )eloj ,lo3A?4our3e: process begin for i in 7 to n3C3lesO17 %oop -- Denera n3C3los de periodo 17 ns 3lA $% 070! *"it for @al2period! 3lA $% 010! *"it for @al2period! en# %oop! *"it! en# process ,lo3A?4our3e! )e3eiver : PROCESS BEGIN )eset $% 010! )& $% 010! )ead?Data $% 070! *"it +nti% 3lA e!ent "n# 3lA % 010! *"it +nti% 3lA e!ent "n# 3lA % 010! )eset $% 070! *"it +nti% 3lA e!ent "n# 3lA % 010! *"it +nti% 3lA e!ent "n# 3lA % 010! *"it +nti% 3lA e!ent "n# 3lA % 010! -- BI D6 4 A) )& $% 070! for i in 7 to tbit %oop

Carlos Ivn Camargo Bareo

*"it +nti% 3lA0e!ent "n# 3lA % 010! end loop! -- D7 )& $% 010! for i in 7 to tbit %oop *"it +nti% 3lA0e!ent "n# 3lA % 010! en# %oop! -- D1 )& $% 010! for i in 7 to tbit %oop *"it +nti% 3lA0e!ent "n# 3lA % 010! en# %oop! -- D2 )& $% 070! for i in 7 to tbit %oop *"it +nti% 3lA0e!ent "n# 3lA % 010! en# %oop! -- D9 )& $% 010! for i in 7 to tbit %oop Kait until 3lA0e!ent "n# 3lA % 010! en# %oop! -- D: )& $% 070! for i in 7 to tbit %oop *"it +nti% 3lA0e!ent "n# 3lA % 010! en# %oop! -- D; )& $% 070! for i in 7 to tbit %oop *"it +nti% 3lA0e!ent "n# 3lA % 010! en# %oop! -- D< )& $% 010! for i in 7 to tbit %oop *"it +nti% 3lA0e!ent "n# 3lA % 010! en# %oop! -- D= )& $% 010! for i in 7 to tbit %oop *"it +nti% 3lA0e!ent "n# 3lA % 010! en# %oop! -- B4 (E )& $% 010! for i in 7 to tbit %oop *"it +nti% 3lA0e!ent "n# 3lA % 010! en# %oop! -- 46DGND( BI 6N8IAD(

Carlos Ivn Camargo Bareo

-- BI D6 4 A) )& $% 070! for i in 7 to tbit %oop *"it +nti% 3lA0e!ent "n# 3lA % 010! en# %oop! -- D7 )& $% 070! for i in 7 to tbit %oop *"it +nti% 3lA0e!ent "n# 3lA % 010! en# %oop! -- D1 )& $% 070! for i in 7 to tbit %oop *"it +nti% 3lA0e!ent "n# 3lA % 010! en# %oop! -- -6, G)A D6- E)I56) BI )6,I8ID( )ead?Data $% 010! *"it +nti% 3lA0e!ent "n# 3lA % 010! )ead?Data $% 070! -- D2 )& $% 010! for i in 7 to tbit %oop *"it +nti% 3lA0e!ent "n# 3lA % % 010! en# %oop! -- D9 )& $% 070! for i in 7 to tbit %oop *"it +nti% 3lA0e!ent "n# 3lA % 010! en# %oop! -- D: )& $% 010! for i in 7 to tbit %oop *"it +nti% 3lA0e!ent "n# 3lA % 010! en# %oop! -- D; )& $% 010! for i in 7 to tbit %oop *"it +nti% 3lA0e!ent "n# 3lA % 010! en# %oop! -- D< )& $% 070! for i in 7 to tbit %oop *"it +nti% 3lA0e!ent "n# 3lA % % 010! en# %oop! -- D= )& $% 070! for i in 7 to tbit %oop

Carlos Ivn Camargo Bareo

*"it +nti% 3lA0e!ent "n# 3lA % 010! en# %oop! -- B4 (E )& $% 010! for i in 7 to tbit %oop *"it +nti% 3lA0e!ent "n# 3lA % 010! en# %oop! Kait! -- Kill Kait 2orever END PROCESS! ransmiter : Process Begin for i in 7 to 17 %oop *"it +nti% 3lA0e!ent "n# 3lA %]1]! en# %oop! Data? & $% R17171717R! *"it +nti% 3lA0e!ent "n# 3lA % 010! 4tart? & $% 010! *"it +nti% 3lA0e!ent "n# 3lA % 010! 4tart? & $% 070! *"it +nti% 3lA0e!ent "n# 3lA % % 010! -- 6nv_a un nuevo dato antes de terminar la transmisiVn for i in 7 to 1777 %oop *"it +nti% 3lA0e!ent "n# 3lA % 010! en# %oop! Data? & $% R11177711R! *"it +nti% 3lA0e!ent "n# 3lA % 010! 4tart? & $% 010! *"it +nti% 3lA0e!ent "n# 3lA % 010! 4tart? & $% 070! *"it +nti% 3lA0e!ent "n# 3lA % 010! -- 6spera a que el transmisor este listo para la transmision *"it until &?6mptC % 010! for i in 7 to 1777 %oop *"it +nti% 3lA0e!ent "n# 3lA % 010! en# %oop! Data? & $% R11177711R! *"it +nti% 3lA0e!ent "n# 3lA % 010! 4tart? & $% 010! *"it +nti% 3lA0e!ent "n# 3lA % 010!

Carlos Ivn Camargo Bareo

4tart? & $% 070! *"it +nti% 3lA0e!ent "n# 3lA % 010! *"it! En# Process! ENDF

+igura 9?. .imulacin de la %0H;.

E3E#2LO A4 Dise*o de 'n Comp'&ado( !encillo


%n computador est formado principalmente por tres unidades$a %nidad 5entral de )rocesamientoF $a memoria &ue est encargada de almacenar las instrucciones del programa y datosF I las unidades de entrada salida cuya funcin es permitir el intercambio de informacin con el e:terior.

Bnternamente la 5)% est di(idida en- El camino de datos o Data+ath el cual a su (e est formado por)5- ( )rogram 5ounter ) Encargado de almacenar la direccin de memoria de la instruccin &ue se est ejecutando actualmente. BH- ( Bnstruction Hegister ) Encargado de almacenar el cdigo de la instruccin en ejecucin. 055- ( 0cumulator ) %tili ado para reali ar clculos y como almacenamiento temporal de datos de programa.

Carlos Ivn Camargo Bareo

/0H- ( /emory 0ddress Hegister ) %tili ado direccionamiento de la memoria de programa.

para

el

y la lgica de control &ue est encargada de manejar el Data+ath dependiendo de la instruccin en ejecucin.

El primer paso en el diseo de un computador es definir las operaciones &ue se podrn reali ar, este conjunto de operaciones recibe el nombre de .et de Instr-cciones. *uestro computador ser capa de reali ar operaciones de .uma ( 0## ) , Hesta ( .%@ ), $60# y .;6HEF #ebido a &ue tenemos 9 instrucciones sern necesarios dos bits para su codificacin ( opcode ), es importante notar &ue cada instruccin debe tener un cdigo 'nico6peraci 5digo n ADD CC !U, C, LOAD ,C !TORE ,, $a siguiente figura muestra una ar&uitectura simplificada del 5omputador-

Carlos Ivn Camargo Bareo

$a funcin $60# carga el contenido de un registro del @anco en el Hegistro 0 o en el Hegistro @, ra n por la cual su codificacin debe indicar en cual registro se desea almacenar la informacin para esto debemos utili ar un tercer bit &ue nos indi&ue el registro$60# HEG 0 < ,CC $60# HEG @ < ,C, )or otro lado las funciones .;6HE y $60# deben indicar hacia y de donde se debe transferir la informacin por lo &ue estas funciones deben indicar el registro origen o fuente, esto se logra asignndole a cada registro una direccin de memoria e indicando la direccin del mismo en el cdigo de la instruccin. $a siguiente figura muestra la forma de decodificar la direccin dentro de la instruccin.

Carlos Ivn Camargo Bareo

#onde B indica #on^t 5are y 1 C o ,. )ara comprender mejor el funcionamiento de nuestro computador consideremos el siguiente ejemplo-oad regA+ 7 -oad regB+ 1 Add 4tore 2 ! regA )egZ7[ ! regB )egZ1[ ! result regA Q regB ! regZ2[ result)eg

En binario el cdigo es-8888888 -8-888888888888 --8888-8 !,arga el 3ontenido del registro 7 en regA> !,arga el 3ontenido del registro 1 en regB> !)ealiza regA Q regB C lo alma3ena en result> !,arga result en el registro 2>

5on la codificacin anterior no se podra cargar datos desde la memoria de programa al @anco de Hegistro, y nuestro computador estara aislado del mundo e:terno. )ara solucionar esto debemos incluir otra instruccin &ue nos permita el ingreso de datos desde el e:terior. )odemos ampliar la funcin .;6HE de la siguiente forma1 1 0 1 1 1 1 1 0lmacena el contenido del registro de salida de la 0$% en la direccin UUUUU 1 1 1 1 1 1 1 1 0lmacena el contenido de la memoria a la direccin UUUUU. )ara mayor claridad en la codificacin de las instrucciones es mejor di(idir la instruccin .;6HE en .;6HE ( ,,C ) y .;6HEU (,,,) para indicar &ue la fuente es e:terna. )ara entender el funcionamiento consideremos el siguiente programa-oad regA+ 7 4tore& 1 -oad regB+ 1 Add 4tore 2 ! regA )egZ7[ ! reg1 E,Q1 ! regB )egZ1[ ! result regA Q regB ! memZ2[ result)eg

de

esta

instruccin

En binario el cdigo es-

Carlos Ivn Camargo Bareo

-8888888 ---8888-8-8-8-8 -8-888888888888 --8888-8

!,arga el 3ontenido del registro 7 en regA> !,arga 17171717 (E,Q1: l_nea siguiente#en reg1 !Dato a alma3enar !,arga el 3ontenido del registro 1 en regB> !)ealiza regA Q regB C lo alma3ena en result> !,arga result en el registro 2>

)ara poder reali ar estas operaciones la lgica de control debe ser cap de distinguir las diferentes instrucciones y actuar consecuentemente, es decir asignar los (alores lgicos adecuados para cada funcin. $os pasos &ue se deben reali ar para la lectura de una instruccin son los siguientes,. Bniciali ar el 5ontador de )rograma ( )5 < #ireccin base ) para leer la primera instruccin. 7. ;ransferir el contenido del 5ontador de )rograma al Hegistro de #ireccin de /emoria ( /0H ) 8. El contenido de la /emoria debe ser transferido al Hegistro de Bnstruccin ( BH ). 9. #ecodificar la Bnstruccin y reali ar las operaciones adecuadas. ?. 0umentar en , el contenido del contador de )rograma en uno y repetir el proceso para la siguiente instruccin.

$a siguiente figura muestra una ar&uitectura &ue nos ser(ir para reali ar las operaciones de la lgica de control. $a unidad de control es la encargada de sincroni ar las tareas &ue deben reali arse para ejecutar las instrucciones sobre el data+ath.

Carlos Ivn Camargo Bareo

Bmplementacin del Data+ath %na (e diseada la ar&uitectura de nuestro computador procedemos a la implementacin de sus componentes, iniciando por el data+athF El cual est compuesto de0$%- Esta unidad est encargada de reali ar las operaciones aritm3ticas y lgicas re&ueridas por las instrucciones, de acuerdo a nuestro set de instrucciones, necesitamos 'nicamente de la .%/0 y de la HE.;0 ( para set de instrucciones ms complicados es necesario incluir las operaciones necesarias tales como5omplemento, corrimientos, etc ). $a siguiente figura muestra la interfa de la 0$%.

I su cdigo correspondiente en !"#$ es%ibr"r) I666! +se I666>4 D?-(DI,?11<:>A--! +se I666>4 D?-(DI,?A)I N>A--! +se I666>4 D?-(DI,?GN4IDN6D>A--! entit) A-G is Port ( A B (pera (pera3ion )esultado en# entit) A-G! : in std?logi3?ve3tor(= #o*nto 7#! : in std?logi3?ve3tor(= #o*nto 7#! : in std?logi3! : in std?logi3?ve3tor(1 #o*nto 7#! : o+t std?logi3?ve3tor(= #o*nto 7##!

Carlos Ivn Camargo Bareo

"rc$itect+re ) of A-G is begin Process ( A+ B+ (pera+ (pera3ion # Begin If (pera % 010 t$en C"se (pera3ion is <$en R77R %B -- 4uma )esultado $% A Q B! <$en R71R %B )esultado $% A - B! -- )esta

<$en R17R %B -- And logi3o )esultado $% A and B! <$en R11R %B -- (r logi3o )esultado $% A or B! <$en (t@ers %B -- 6rror )esultado $% R''''''''R! en# c"se! e%se )esultado $% A! en# if! En# Process! en# "rc$itect+re ) ! -- 4i no @aC opera3iVn el resultado es A

@anco de Hegistros- El banco de registro posee 9 registros de propsito general en los &ue se almacenan datos pro(enientes de la memoria y de resultados temporales de las operaciones. Este mdulo tiene la interfa &ue se muestra en la siguiente figura.

Carlos Ivn Camargo Bareo

)ara reali ar una escritura se debe colocar la seal /rite en =,> e indicar el registro destino asignndole el (alor adecuado a .el/riteReg y esperar un flanco de subida en la seal del reloj. El proceso de lectura es bastante sencillo, basta con indicar el registro a leer ( asignndole un (alor a .elReadReg ). El cdigo en !"#$ del @anco de Hegistros se muestra a continuacin.
%ibr"r) I666! +se I666>4 D?-(DI,?11<:>A--! +se I666>4 D?-(DI,?A)I N>A--! +se I666>4 D?-(DI,?GN4IDN6D>A--! entit) )agBanA is Port ( ,lA : in std?logi3! Init : in std?logi3! DataUrite : in std?logi3?ve3tor(= #o*nto 7#! 4elUrite)eg : in std?logi3?ve3tor(1 #o*nto 7#! Urite : in std?logi3! 4el)ead)eg : in std?logi3?ve3tor(1 #o*nto 7#! Data)ead : o+t std?logi3?ve3tor(= #o*nto 7##! en# )agBanA! "rc$itect+re ) of )agBanA is begin Process(,lA+ Init+ Urite# t)pe )egBanA is "rr") ( 7 to 9 # of std?logi3?ve3tor( = #o*nto 7 #! !"ri"b%e )egisters: )egBanA! Begin If Init % 010 t$en for i in 7 to 9 loop )egisters( i # :% R77777777R! en# %oop! e%sif Urite % 010 t$en if ,lA e!ent "n# 3lA % 010 t$en )egisters( 3onv?integer( 4elUrite)eg # # :% DataUrite! en# if! en# if! Data)ead $% )egisters( 3onv?integer( 4el)ead)eg # #! En# Process! en# ) !

*tese &ue se utili la funcin con$_integer la cual con(ierte a entero un (alor dado en std_logic_$ector, esto se debe hacer ya &ue el subndice de un arreglo debe ser de tipo entero. Hegistros 0, @ y de salida- Estos registros estn encargados de almacenar los operandos y el resultados de las operaciones de la 0$%. .u interfa se muestra en la siguiente figura.

Carlos Ivn Camargo Bareo

6l 3Vdigo en 8ND- de este registro es el siguiente: %ibr"r) I666! +se I666>4 D?-(DI,?11<:>A--! +se I666>4 D?-(DI,?A)I N>A--! +se I666>4 D?-(DI,?GN4IDN6D>A--! entit) )eg is Port ( ,lA : in std?logi3! IN) : in std?logi3?ve3tor(= #o*nto 7#! )eset : in std?logi3! -oad : in std?logi3! (G ) : o+t std?logi3?ve3tor(= #o*nto 7##! en# )eg! "rc$itect+re ) of )eg is begin Process( 3lA+ load+ reset # Begin if )eset % 010 t$en (G ) $% R77777777R! e%se if 3lA e!ent "n# 3lA % 010 t$en if load % 010 t$en (G ) $% IN)! en# if! en# if! en# if! En# Process! en# RT!

Bmplementacin de la lgica de control5ontador de )rograma- El contador de programa est encargado de mantener la doreccin de memoria donde se encuentra la 'ltima instruccin ejecutada.

Carlos Ivn Camargo Bareo

El cdigo en !"#$ del 5ontador de )rograma es el siguiente%ibr"r) I666! +se I666>4 D?-(DI,?11<:>A--! +se I666>4 D?-(DI,?A)I N>A--! +se I666>4 D?-(DI,?GN4IDN6D>A--! entit) Erog,ount is Port ( ,lA : in std?logi3! )eset : in std?logi3! In3,E : in std?logi3! (ut,E : bu22er std?logi3?ve3tor(= doKnto 7##! en# Erog,ount! "rc$itect+re Be@avioral o2 Erog,ount is begin Process( ,lA+ )eset+ In3,E # Begin if )eset % 010 t$en (ut,E $% R77777777R! e%se if In3,E % 010 t$en if 3lA e!ent "n# 3lA % 010 t$en (ut,E $% (ut,E Q R77777771R! en# if! e%se (ut,E $% (ut,E! en# if! en# if! En# Process! en# Be@avioral!

Hegistro de Bnstrucciones #ecodificador y %nidad de 5ontrolEstos mdulos estn encargados de reali ar todas las microinstrucciones necesarias para reali ar las instrucciones. Este mdulo tiene la interfa mostrada en la siguiente figura.

Carlos Ivn Camargo Bareo

I el cdigo en !"#$ de la lgica de control se muestra a continuacin.


librarC I666! use I666>4 D?-(DI,?11<:>A--! use I666>4 D?-(DI,?A)I N>A--! use I666>4 D?-(DI,?GN4IDN6D>A--! entitC -og,ontrol is Eort ( -,lA : in std?logi3! 4Cs)eset : in std?logi3! -- 5emorC Inter2a3e Data5em : in std?logi3?ve3tor(= doKnto 7#! -- 4pe3i2i3 )egister ,ontrol -oadA : out std?logi3! -oadB : out std?logi3! -oad)esult : out std?logi3! -oad5A) : out std?logi3! In3,E : out std?logi3! 6rase : out std?logi3! -- A-G ,ontrol (perate : out std?logi3! (peration : out std?logi3?ve3tor(1 doKnto 7#! -- )egister BanA ,ontrol 4el)ead)eg : out std?logi3?ve3tor(1 doKnto 7#! 4elUrite)eg : out std?logi3?ve3tor(1 doKnto 7#! Urite : out std?logi3#! end -og,ontrol! ar3@ite3ture Be@avioral o2 -og,ontrol is tCpe state?tCpe is ( )esetE,+ *et3@+ De3ode+ E,(peration+ In3rementE, #! 4ignal 4tate : 4tate?tCpe! tCpe (peration?tCpe is ( (EAdd+ (E4ub+ (E-oad+ (E4tore+ (E4tore& #! 4ignal (per : (peration?tCpe! 4ignal I) : std?logi3?ve3tor( = doKnto 7 #!

Carlos Ivn Camargo Bareo

tCpe Inter?tCpe is ( onein+ tKoin+ t@reein #! 4ignal Inter : Inter?tCpe! begin Ero3ess ( ,lA+ 4Cs)eset # Begin i2 4Cs)eset % 010 t@en state $% )esetE,! Inter $% onein! else i2 ( ,lA0event and ,lA % 010 # t@en ,ase 4tate is K@en )esetE, %B 6rase $% 010! -oadA $% 070! -oadB $% 070! -oad)esult $% 070! In3,p $% 070! (perate $% 070! Urite $% 070! -oad5A) $% 010! 4tate $% *et3@! K@en *et3@ %B 6rase $% 070! -oadA $% 070! -oadB $% 070! -oad)esult $% 070! In3,p $% 070! (perate $% 070! Urite $% 070! -oad5A) $% 010! state $% De3ode! I) $% Data5em! K@en De3ode %B 6rase $% 070! -oadA $% 070! -oadB $% 070! -oad)esult $% 070! In3,p $% 070! (perate $% 070! Urite $% 070! -oad5A) $% 070! ,ase I)( = doKnto ; # is K@en R77'R %B (per $% (EAdd! K@en R71'R %B (per $% (E4ub! K@en R17'R %B (per $% (E-oad! K@en R117R %B (per $% (E4tore! K@en R111R %B (per $% (E4tore&! K@en ot@ers %B end 3ase! 4tate $% E,(peration! Inter $% onein! K@en E,(peration %B ,ase (per is K@en (EAdd%B 6rase $% 070! -oadA $% 070! -oadB $% 070! -oad)esult $% 010! In3,p $% 070! (perate $% 010! Urite $% 070! -oad5A) $% 070! (peration $% R77R! 4tate $% In3rementE,!

Carlos Ivn Camargo Bareo

K@en (E4ub%B 6rase $% 070! -oadA $% 070! -oadB $% 070! -oad)esult $% 010! In3,p $% 070! (perate $% 010! Urite $% 070! -oad5A) $% 070! (peration $% R71R! 4tate $% In3rementE,! K@en (E-oad %B 6rase $% 070! -oad)esult $% 070! In3,p $% 070! (perate $% 070! Urite $% 070! -oad5A) $% 070! ,ase Inter is K@en onein %B 4el)ead)eg $% I)( 1 doKnto 7 #! Inter $% tKoin! K@en tKoin %B i2 I)( ; # % 010 t@en -oadB $% 010! -oadA $% 070! else -oadB $% 070! -oadA $% 010! end i2! Inter $% t@reein! K@en t@reein %B -oadB $% 070! -oadA $% 010! 4tate $% In3rementE,! Inter $% onein! 6nd ,ase! K@en (E4tore%B 6rase $% 070! -oadA $% 070! -oadB $% 070! -oad)esult $% 070! In3,p $% 070! (perate $% 070! Urite $% 070! -oad5A) $% 070! ,ase Inter is K@en onein %B 4elUrite)eg $% I)( 1 doKnto 7 #! Krite $% 010! Inter $% tKoin! K@en tKoin %B Urite $% 070! 4tate $% In3rementE,! Inter $% onein! K@en ot@ers %B Inter $% onein! 6nd ,ase! K@en (E4tore&%B 6rase $% 070! -oadA $% 070! -oadB $% 070! -oad)esult $% 070! In3,p $% 070! (perate $% 070! Urite $% 070! -oad5A) $% 070! end 3ase!

Carlos Ivn Camargo Bareo

K@en In3rementE, %B 6rase $% 070! -oadA $% 070! -oadB $% 070! -oad)esult $% 070! In3,p $% 010! (perate $% 070! Urite $% 070! -oad5A) $% 010! state $% *et3@! end 3ase! end i2! end i2! end Ero3ess! end Be@avioral!

5.=

E3ERCICIO!
,. Escribir el cdigo en !"#$ de la m&uina de estados representada por el siguiente diagrama-

7. En un estacionamiento se cuenta con dos sensores &ue deben detectar el ingreso o salida de (ehculos. 5uando un (ehculo se encuentra frente a uno de los sensores genera un ni(el lgico =,>. En la siguiente figura se muestra el diagrama de tiempos de las seales generadas por los sensores al entrar y al salir un (ehculo.

Carlos Ivn Camargo Bareo

El sistema debe entregar dos seales %) y #6D* las cuales se colocan en un ni(el lgico alto cuando se detecta la secuencia completa de entrada y salida de un autom(il respecti(amente. 8. #isear el decodificador del teclado matricial &ue se muestra en la siguiente figura. 5uando no se tiene ninguna tecla presionada, en las entradas HC a H8 se tiene una lectura de ZCCCC[. .i por ejemplo se presiona la tecla superior i &uierda, se recibir un =,> lgico en HC cuando la secuencia de las columnas 5C a 58 sea Z,CCC[. )or lo tanto un (alor lgico alto en las entradas HC a H8 indica la fila de la tecla oprimida, pero no sabemos cual de las cuatro teclas de la fila est presionada. )ara a(eriguarlo debemos colocar un =,> lgico en solo una de las columnas y rotarlo por todas ellas. HC ser igual a =,> slo cuando se colo&ue el =,> lgico en la columna de la tecla oprimida y =C> en los otros casos.

Carlos Ivn Camargo Bareo

%na (e detectada la tecla oprimida el decodificador debe generar un cdigo 'nico para cada una de ellas y debe indicar el e(ento haciendo )e0_+ress = 112. 9. #isear el sistema de control de los semforos de un cruce de (ehculos.

?. #isear un sistema &ue sea cap de generar caracteres 0.5BB en un monitor !G0. %na trama de (ideo !G0 est compuesta por 9QC lneas de P9C pi:els. El monitor cuenta con las siguientes seales de control Hed, Green, @lue - Entradas de seal anloga de color, estas entradas tienen un rango de C a C.R ! .incronismo "ori ontal - Bndica el principio y fn de cada lnea de (ideo ( 9QC lneas ). .incronismo !ertical - Bndica el principio y fin de cada trama de (ideo.

El flanco de bajada de la seal de sincronismo hori ontal indica el inicio de la lnea y al colocar en alto esta seal se asegura &ue la informacin contenida en la lnea de (ideo (Hed, Green, @lue ) se despliegue en la parte (isible de la pantalla. En la siguiente figura puede (erse la forma de onda y el diagrama de tiempos de esta seal.

Carlos Ivn Camargo Bareo

#e igual forma el flanco de bajada en la seal de sincronismo (ertical indica el inicio y fin de la trama de (ideo formada por 9QC lneas. 5omo puede (erse en la figura anterior una lnea tiene una duracin de 8,.RR us y las 9QC lneas tiene una duracin de 8,.RR us : 9QC < ,?.7? ms. En la siguiente figura se ilustra el funcionamiento del monitor !G0 y se indican las onas no (isibles de la pantalla.

Carlos Ivn Camargo Bareo

P. #isear el control de un display inteligente. Este display tiene como elemento de (isuali acin una matri de leds de R:?. .e desea (isuali ar los caracteres 0.5BB desde el 7C" = = hasta el RE" = _ >. $a siguiente figura muestra el diagrama de blo&ues propuesto.

#ebido a &ue los dispositi(os lgicos programables no pueden suministrar la corriente necesaria para manejar los leds, es necesario utili ar el siguiente circuito para manejar la matri -

Carlos Ivn Camargo Bareo

El contenido de la memoria debe ser el siguiente' '000h,000h,000h,000h,000h '!'000h,000h,0FAh,000h,000h '"'000h,0E0h,000h,0E0h,000h '#'044h,0FEh,044h,0FEh,044h '$'048h,054h,0FEh,054h,024h '%'046h,026h,010h,0C8h,0C4h '&'00Ah,044h,0AAh,092h,06Ch '''000h,0C0h,0A0h,000h,000h '('000h,082h,044h,038h,000h ')'000h,038h,044h,082h,000h '*'028h,010h,07Ch,010h,028h '+'010h,010h,07Ch,010h,010h ','000h,00Ch,00Ah,000h,000h '-'010h,010h,010h,010h,010h '.'000h,006h,006h,000h,000h '/'040h,020h,010h,008h,004h '0'07Ch,0A2h,092h,08Ah,07Ch '1'000h,002h,0FEh,042h,000h '2'062h,092h,08Ah,086h,042h '3'05Ch,0A2h,0A2h,082h,044h '4'008h,0FEh,048h,028h,018h '5'09Ch,0A2h,0A2h,0A2h,0E4h '6'04Ch,092h,092h,092h,07Ch '7'0C0h,0A0h,090h,08Eh,080h '8'06Ch,092h,092h,092h,06Ch '9'07Ch,092h,092h,092h,064h ' '000h,06Ch,06Ch,000h,000h '!'000h,06Ch,06Ah,000h,000h '"'082h,044h,028h,010h,000h '#'014h,014h,014h,014h,014h '$'010h,028h,044h,082h,000h '%'060h,090h,08Ah,080h,040h '&'07Ch,082h,09Eh,092h,04Ch 'A'03Eh,048h,088h,048h,03Eh '''06Ch,092h,092h,092h,0FEh 'C'044h,082h,082h,082h,07Ch '('07Ch,082h,082h,082h,0FEh 'E'082h,082h,092h,092h,0FEh 'F'080h,090h,090h,090h,0FEh ')'05Eh,092h,092h,082h,07Ch '*'0FEh,010h,010h,010h,0FEh '+'000h,082h,0FEh,082h,000h ','080h,0FCh,082h,002h,004h '-'082h,044h,028h,010h,0FEh '.'002h,002h,002h,002h,0FEh '/'0FEh,040h,030h,040h,0FEh '0'0FEh,008h,010h,020h,0FEh '1'07Ch,082h,082h,082h,07Ch '2'060h,090h,090h,090h,0FEh '3'07Ah,084h,08Ah,082h,07Ch '4'062h,094h,098h,090h,0FEh '5'04Ch,092h,092h,092h,064h '6'080h,080h,0FEh,080h,080h '7'0FCh,002h,002h,002h,0FCh '8'0F8h,004h,002h,004h,0F8h '9'0FCh,002h,01Ch,002h,0FCh ':'0C6h,028h,010h,028h,0C6h ';'0E0h,010h,00Eh,010h,0E0h '<'0C2h,0A2h,092h,08Ah,086h '='000h,082h,082h,0FEh,000h '>'004h,008h,010h,020h,040h '?'000h,0FEh,082h,082h,000h '@'020h,040h,080h,040h,020h 'A'002h,002h,002h,002h,002h 'B'000h,020h,040h,080h,000h 'C'01Eh,02Ah,02Ah,02Ah,004h 'D'01Ch,022h,022h,012h,0FEh 'E'004h,022h,022h,022h,01Ch 'F'0FEh,012h,022h,022h,01Ch 'G'018h,02Ah,02Ah,02Ah,01Ch 'H'040h,080h,090h,07Eh,010h 'I'07Ch,04Ah,04Ah,04Ah,030h 'h'01Eh,020h,020h,010h,0FEh 'J'000h,002h,0'Eh,022h,000h 'K'000h,0'Ch,022h,002h,004h 'L'000h,022h,014h,008h,0FEh 'M'000h,002h,0FEh,082h,000h 'N'01Eh,020h,018h,020h,03Eh 'O'01Eh,020h,020h,010h,03Eh 'P'01Ch,022h,022h,022h,01Ch

Carlos Ivn Camargo Bareo

'Q'020h,050h,050h,050h,07Eh 'R'07Eh,030h,050h,050h,020h 'S'010h,020h,020h,010h,03Eh 'T'004h,02Ah,02Ah,02Ah,012h 'U'004h,002h,012h,07Ch,010h 'V'03Eh,004h,002h,002h,03Ch 'W'038h,004h,002h,004h,038h 'X'03Ch,002h,00Ch,002h,03Ch

'Y'022h,014h,008h,014h,022h 'Z'03Ch,00Ah,00Ah,00Ah,030h '['022h,032h,02Ah,026h,022h '\'082h,082h,06Ch,010h,000h ']'000h,000h,0FEh,000h,000h '^'000h,010h,06Ch,082h,082h '_'080h,040h,0C0h,080h,040h

R. .e desea disear un display formado por ? matrices de $eds de R:? &ue sea cap de almacenar mensajes de RC caracteres. El mensaje a desplegar debe ser introducido (ia serial o por medio de un teclado. Q. #isear un circuito &ue permita detectar la tecla oprimida en un teclado5ada (e &ue se oprime una tecla en in teclado B@/ el teclado en(a un cdigo, este cdigo es 'nico para cada tecla. )or ejemplo si se oprime la tecla =0> se en(iar el cdigo ,5". .i se mantiene oprimida esta tecla el cdigo se en(a contnuamenta hasta &ue se suelte o se oprima otra tecla. 5uando se suelta una tecla el teclado en(a el cdigo +C" para indicar &ue se liber una tecla y a continuacin en(a el cdigo de la tecla liberada en nuestro ejemplo cuando se libera la tecla =0> el teclado en(a los cdigos +C" ,5". El teclado siempre en(a el mismo cdigo para cada letra, por lo tanto se debe tener en cuenta &ue cada (e &ue se oprima la tecla =."B+;> la siguiente letra debe cambiarse de may'sculas a min'sculas o (ice(ersa. ;ambi3n se debe tener en cuenta el estado de la tecla =50).>.

Host Commands
ED Set Status LED's - This command can be used to turn on and off the Num Lock, Caps Lock & Scroll Lock LED's. fter Sendin! ED, ke"board #ill repl" #ith C$ %& ' and #ait for another b"te #hich determines their Status. (it ) controls the Scroll Lock, (it * the Num Lock and (it + the Caps lock. (its , to - are i!nored. EE EcCo : 7pon sending a EcCo command to tCe ,eyboard! tCe Deyboard sCould reply EitC a EcCo 3EE6 &) Set Scan Code Set. .pon Sendin! &), ke"board #ill repl" #ith C$ %& ' and #ait for another b"te, )*-), #hich determines the Scan Code .sed. Sendin! )) as the second b"te #ill return Carlos Ivn Camargo Bareo

the Scan Code Set currentl" in .se "F Set Typematic *epeat *ate' ,eyboard Eill +cDnoEledge command EitC "+ and Eait or second byte! ECicC determines tCe Typematic *epeat *ate' &/ $e"board Enable - Clears the ke"boards output buffer, enables $e"board Scannin! and returns an ckno#led!ment. "< ,eyboard Disable : *esets tCe Deyboard! disables ,eyboard Scanning and returns an +cDnoEledgment' &E 0esend - .pon receipt of the resend command the ke"board #ill re- transmit the last b"te sent. "" *eset : *esets tCe ,eyboard'

Commands
Now if the Host Commands are send from the host to the keyboard, then the keyboard commands must be sent from the keyboard to host. If you think this way, you must be correct. elow details some of the commands which the keyboard can send. & ckno#led!e

++ %oEer (n Sel Test %assed 3B+T Completed6 EE See Echo Command %1ost Commands' "E *esend : 7pon receipt o tCe resend command tCe Gost sCould re: transmit tCe last byte sent' )) Error or (uffer 23erflo# "" Error or Bu er (ver loE

Sca
El teclado riene una interfa ).7 la cual cuenta con la disposicin de pines y el diagrama de tiempos indicados en la siguiente figura-

Carlos Ivn Camargo Bareo

$a figura anterior muestra la comunicacin entre el teclado y el "ost. 5omo puede (erse se trata de una comuniacacin serial sincrnica en la cual el teclado genera las seales #ata y 5locX. .olo durante el flanco de bajado se debe leer el estado de la seal de datos. $a comunicacin entre el "ost y el teclado se muestra en la siguiente figura. 5omo puede (erse el "ost debe iniciar la transmisin generando un flanco de bajada en la seal clocX y un tiempo despu3s generar el @it de .tart, despu3s de esto el teclado genera la seal de reloj y el "ost debe en(iar serialmente el comando deseado, si el teclado recibe correctamente la trama responde con 05L.

El conector ).7 tiene P pines los cuales tiene las siguientes funciones-

.e desea &ue el dri(er de teclado tenga una salida 0.5BB, para poder ser utili ado con el #isplay inteligente del ejercicio P. $a siguiente tabla da una relacin entre el cdigo de la tecla y el cdigo 0.5BB de la letra o carcter correspondiente.

NC C + C + NC , + C + NC 7 C NC

"C C + , + Al& , + , + c 7 , n

NC C + 7 + !HL , + 7 + I 7 7 %

"5 C + 8 + NC , + 8 + d 7 8 ?

"+ C + 9 + CTL , + 9 + e 7 9 6

"1 C + ? + F , R ? , / 7 ? >

"2 C + P + l , 8 P , + 7 P =

"12 C + R + NC , + R + NC 7 R NC

NC C + Q + NC , + Q + NC 7 Q NC

"10 C + V + NC , + V + 7 V NC

"D C + 0 + G , R 0 0 7 7 0 m

"= C + @ + s , R @ 8 ) 7 @ j

"/ C + 5 + a , P 5 , & 7 5 '

Ta% 6# C V H ,# R R ( 7# A

E C E 2 , E 5 7 E D 8 7 R 5

NC C + NC , + NC 7 + NC

Carlos Ivn Camargo Bareo

8 C NC 9 C NC ? C NC P C 0 R C

8 , J 9 , NC ? , Q P , . R ,

8 7 K 9 7 M ? 7 NC P 7 2 R 7

8 8 i 9 8 NC ? 8 NC P 8 5 R 8

8 9 o 9 9 N ? 9 NC P 9 = R 9

8 ? 0 9 ? ? ? NC P ? D R ?

8 P C 9 P NC ? P ,R! P P E!C R P

8 R NC 9 R NC ? R NC P R NU# R R

8 Q NC 9 Q CA2 ? Q NC P Q "11 R Q

8 V . 9 V !HR ? V 1 P V O R V

8 0 B 9 0 ENT ? 0 NC P 0 + R 0

8 @ l 9 @ O ? @ / P @ B R @

8 5 * 9 5 NC ? 5 A P 5 S R 5

8# p 9# P ?# NC P# C R#

8 E L 9 E NC ? E NC P E ,D R E

8 + NC 9 + NC ? + NC P + NC R +

;SHIFT + KEY ;00 NC 01 F9 02 NC 03 F5 04 F3 05 F1 06 F2 07 F12 08 NC 09 F10 0B F6 0C F4 0D TAB OE 0F NC db 0FFH, 04300H, 0FFH, 03F00H, 03D00H, 03B00H, 03C00H, 08600H, 0FFH, 04400H, 04200H, 04000H, 03E00H, 009H, 0A7H, 0FFH ;10 NC 11 A T 12 SH 13 NC 14 CT 15 ! 16 " 17 NC 18 NC 19 NC 1B S 1C A 1D $ 1E % 1F NC db 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 051H, 021H, 0FFH, 0FFH, 05AH, 053H, 041H, 057H, 040H, 0FFH ;20 NC 21 C 22 & 23 D 24 E 25 ' 26 ( 27 NC 28 NC 2A * 2B F 2C T 2D + 2E , 2F NC db 0FFH, 043H, 058H, 044H, 045H, 024H, 023H, 0FFH, 0FFH, 056H, 046H, 054H, 052H, 025H, 0FFH ;30 NC 31 N 32 B 33 H 34 35 Y 36 . 37 NC 38 NC 3A / 3B 0 3C 1 3D 2 3E 3 3F NC db 0FFH, 0FFH, 042H, 048H, 047H, 059H, 026H, 0FFH, 0FFH, 04DH, 04AH, 055H, 02FH, 028H, 0FFH ;40 NC 41 ; 42 K 43 I 44 O 45 4 46 5 47 NC 48 NC 4A 7 4B 4C 8 4D ) 4E 9 4F NC db 0FFH, 03BH, 04BH, 049H, 04FH, 03DH, 029H, 0FFH, 0FFH, 05FH, 04CH, 0A5H, 050H, 03FH, 0FFH ;50 NC 51 NC 52 : 53 NC 54 ; 55 < 56 NC 57 NC 58 CA) 5A ENT 5B = 5C NC 5D > 5E NC 5F NC db 0FFH, 0FFH, 05BH, 0FFH, 0B0H, 0ADH, 0FFH, 0FFH, 0FFH, 013H, 02AH, 0FFH, 05DH, 0FFH, 0FFH ;60 NC 61 ? 62 NC 63 NC 64 NC 65 NC 66 BKS 67 NC 68 NC 6A NC 6B @A 6C H/ 6D NC 6E NC 6F NC db 0FFH, 03EH, 0FFH, 0FFH, 0FFH, 0FFH, 08H, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH ;70 0 71 DE 72 AD 73 5 74 A? 75 A1) 76 ESC 77 N1/ 78 F11 7A )DN 7B A 7C = 7D )1) 7E B D 7F NC db 030H, 0FFH, 0FFH, 035H, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 02DH, 02AH, 0FFH, 0FFH, 0FFH ;83 F7 ;E011 A T -+ E014 CT++ E070 INS E071 DE ;E072 DO$N E074 +I-HT E05A INT+O ;E11477E1F014F077 )A1SE ;E012E07C )+INT SC+EEN E069 END E075 1) E06B EFT

0A F8

1A # 0FFH, 29 S)C 0FFH, 39 NC 0FFH, 49 6 03AH, 59 SH+ 0FFH, 69 END 0FFH, 79 + 02BH,

E06C HO/E E07D ) 1)

E07A ) DN

Carlos Ivn Camargo Bareo

Carlos Ivn Camargo Bareo

Você também pode gostar