Está en la página 1de 35

SISTEMAS

DIGITALES II
FIEC00745
FACULTAD DE INGENIERIA EN
ELECTRICIDAD Y COMPUTACION
Ing. Ronald Ponguillo Intriago
rponguil@espol.edu.ec

CAPITULO 4

INTRODUCCIN
Ing. Ronald Ponguillo Intriago
rponguil@espol.edu.ec

DISEO DE UN SISTEMA DIGITAL GENERADOR DE NUMERO


PROMEDIO
Suponga que k nmeros de n bits son almacenados en un conjunto de
registros (R0,.., Rk-1). El circuito Generador de Numero Promedio debe
mostrar el valor promedio M de los nmeros almacenados en estos
registros.
Primeramente los nmeros deben ser sumados y luego divididos sobre la
cantidad (k) de nmeros.

Ing. Ronald Ponguillo Intriago

El algoritmo del funcionamiento del circuito es el siguiente:

S1
Sum 0, C k 1
Load registers
0

s
1

S2
Sum Sum + Ri

CC1

0
0

C = 0?

1
S3

S4
M Sum k

Done

En el estado S3 se realiza la operacin de divisin para determinar M.


4

Ing. Ronald Ponguillo Intriago

Del ejemplo anterior sabemos que para realizar la operacin de divisin se


requieren varios periodos de Clock pero no lo indicamos en este diagrama
de flujo.
En el circuito Procesador de Datos necesitamos un registro que
almacenar la suma de todos los nmeros. Para que el sistema sea ms
simple, asumimos que la suma puede ser representada con n bits sin
sobrecarga. La salida de este registro es a su vez una de las entradas del
sumador. Tambin necesitamos un mux2a1 en la entrada del registro. Este
mux nos permitir poner el registro en 0 en el estado inicial.
El sumador, recibe el dato del registro de suma en una de sus entradas, y en
la otra entrada recibe datos desde k registros que tienen almacenados los
nmeros.
Una de las maneras para seleccionar los datos de los registros, es utilizando
un bloque de n MUX k-a-1, cuya salida estar conectada con la entrada del
sumador. Las lneas de seleccin de ste MUX pueden ser controlados por
un contador.
Para realizar la operacin de divisin podemos utilizar el circuito Divisor
diseado en el ejemplo anterior.
Para simplificar el diseo asumimos que k = 4, pero la misma estructura
puede ser utilizada para cualquier cantidad de nmeros.
5

Ing. Ronald Ponguillo Intriago

Procesador de Datos

Ing. Ronald Ponguillo Intriago

Los nmeros que deben almacenarse en los registros (R0,.., Rk-1) entran
por la misma entrada Data y se guardan en aquel registro cuya entrada de
habilitacin En est activada por la salida de un Decodificador n a 2n .
Las entradas al decodificador se representan por las seales RAdd.
Cuando el sumador termina de sumar todos los nmeros y las salidas del
ContadorDown llegan a 0, una puerta NOR genera la salida z = 1. En
este momento, el circuito Divisor debe dividir la suma de todos los
nmeros para la cantidad de nmeros.
Por tanto, la entrada DataA del Divisor, se conecta con la salida del
registro donde se almacena la suma de los nmeros. La entrada Data B
del Divisor debe recibir la cantidad de nmeros k.
Cuando el circuito Divisor termina la operacin de divisin genera la
salida zz y el controlador debe generar la salida Done.
El Promedio M ser mostrado por las salidas Q (Cociente) y R (Resto)
del circuito Divisor.
7

Ing. Ronald Ponguillo Intriago

Diagrama ASM del controlador


S1
EC, LC, ES

Start
1

S2

Ssel, ES
EC
0

0
1

S3

Start

LA
S4

S5
Div

Div, Done

zz

Ing. Ronald Ponguillo Intriago

En el estado S1 se cargan los registros (R0,.., Rk-1) por medio de algn


control externo. Por lo tanto, en S1 solo se debe cargar el ContadorDown
con el nmero k-1 (EC, LC) y se debe habilitar el registro de suma (ES)
para cargarlo con 0s.
Cuando Start = 1 el circuito Controlador va al estado S2 donde se genera
la seal ES y Ssel=1 para que el registro Sum puede cargar la suma al
final de ste estado (S2). Aqu mismo se pregunta por el valor de z. Si z =
0, se genera la salida condicional EC para que el contador se decremente.
Si z = 1 significa que el contador llego a 0 y todos los nmeros han sido
sumados.
El circuito Controlador pasa al estado S3 donde se genera la salida LA. La
seal LA sirve para cargar el dato resultado de la suma y el nmero k en el
circuito Divisor. Luego, el Controlador pasa al estado S4 y genera la seal
Div que activa la entrada Start del Divisor.
Cuando la operacin de divisin termina y por tanto el Divisor genera la
salida zz (Done del Divisor), el Controlador pasa al estado S5. En este
momento, el valor de M aparece en las salidas Q y R.
La seal Div (Start para el circuito Divisor) debe ser mantenida en el
estado S5 para impedir que el Divisor reinicie (encere) sus registros y se
borren los resultados. Tambin en este estado se genera la salida Done del
circuito Generador del Numero Promedio.
9

Ing. Ronald Ponguillo Intriago

Cdigo VHDL para el circuito Controlador del Generador de Nmero Promedio.

10

Ing. Ronald Ponguillo Intriago

USO DE MEMORIAS RAM


Para un nmero k grande de registros, es preferible utilizar una memoria
SRAM en lugar de usar k registros.
Las herramientas CAD usualmente proporcionan mdulos predefinidos que
representan SRAM.
El editor grfico de Max+plusII proporciona algunos mdulos de SRAM.
Seleccionaremos el mdulo : lpm_ram_dq.
11

Ing. Ronald Ponguillo Intriago

La memoria SRAM a utilizar tiene una entrada/salida de datos de 8 bits, una


entrada de direcciones de 4 bits y la seal de control we. La memoria
entonces es de 24 x 8.
Al ser asincrnica, cuando We=1, el dato presente en la entrada DATA se
escribe en la direccin presente en la entrada ADDRESS.
Cuando We=0 el dato de la direccin que est en la entrada ADDRESS se
lee en la salida Q.

Los subcircuitos a utilizar son los mismos que el diseo original, esto es:
Bloque de multiplexores 2 a 1, Registro de sostenimiento, sumador,
contador down (hacia abajo), circuito divisor y circuito controlador.
El controlador debe ser modificado para soportar el proceso de escritura y
lectura de la memoria.
12

Ing. Ronald Ponguillo Intriago

Diagrama ASM modificado para el Controlador

Los estados S1, S2 y


S3 son para el ingreso
de datos a la memoria
SRAM.
Si write=1 escribimos
un dato en la direccin
n-1. Cuando write=0
nuevamente,
el
contador
se
decrementa, y luego se
pregunta si ya fue
usado el ltimo dato de
la memoria o si se
activ la seal start
para empezar el clculo
del promedio igual que
antes.

13

Ing. Ronald Ponguillo Intriago

Cdigo VHDL del Controlador

14

Ing. Ronald Ponguillo Intriago

Usaremos los diseos elaborados en los ejemplos anteriores. Se debe


agregar una bloque para el BUS de MUX 2 a 1.
En el Editor Grafico realizaremos la implementacin del circuito
Generador de Numero Promedio utilizando todos los componentes
necesarios, anteriores y nuevos.
15

Ing. Ronald Ponguillo Intriago

Particin funcional en el editor grfico

16

Ing. Ronald Ponguillo Intriago

17

Ing. Ronald Ponguillo Intriago

DISEO DE UN SISTEMA DIGITAL ORDENADOR DE


NUMEROS
Disear un circuito Ordenador de Nmeros: Dados k nmeros de n-bits
cada uno almacenados en k registros Ri (R0,, Rk-1) se desea ordenarlos
en forma ascendente.
Los datos vienen en la entrada DataIn, cuando WrInit es verdadera, el dato
presente en DataIn, se graba en el registro que tenga la direccin Radd.
Para mostrar los datos la seal Rd debe ser verdadera, en ese momento
el se muestra en la salida DaraOut el dato presente en el registro de
direccin Radd.

18

Ing. Ronald Ponguillo Intriago

La idea de solucin es comparar cada el dato de cada registro con todos


los registros siguientes. Si el nuevo dato es menor, se realiza un
intercambio de datos, sino queda igual.
Al terminar de comparar un registro se toma el siguiente, hasta que todos
se hayan comparado entre s .

19

Ing. Ronald Ponguillo Intriago

Algoritmo de control:
Podemos describir el algoritmo de
control del circuito de la siguiente
manera:
En el estado inicial S1, mientras Start
(s)= 0, los registros (R0,, Rk-1) deben
ser cargados desde la entrada externa.
Un contador Ci que representa el
nmero del registro i se pone en cero.
Al activar la entrada Start el circuito
pasa al estado S2. En S2 el registro A
es cargado con el contenido del registro
Ri (inicialmente R0). Tambin, un
contador Cj que representa el nmero
del registro j se carga con el mismo
valor de i.
Los contadores Ci y Cj se utilizan para
habilitar los registros de los cuales se
desea sacar la informacin para
compararla e intercambiarla de ser
necesario.
20

Ing. Ronald Ponguillo Intriago

El estado S3 se utiliza para inicializar el contador Cj con el valor i+1.


En el estado S4 se carga el valor del registro Rj (donde el valor j es el del
contador Cj) en el registro B. En el estado S5, A y B son comparados, y si
B < A, el circuito pasa al estado S6.
Los estados S6 y S7 se utilizan para intercambiar los contenidos de los
registros Ri y Rj solo si B fue menor que A.
En el estado S8, el contenido de Ri se carga en A. Aunque este paso es
necesario solo cuando B < A, el flujo de control es ms simple si esta
operacin se realiza en ambos casos, tanto cuando B < A, como cuando A
< B (no afecta en nada a esta otra condicin).
Si Cj k-1 (que representa el ultimo registro), el circuito regresa de S8 a
S4 y repite este lazo interno hasta que Cj = k-1.
Si Cj = k-1 y Ci k-2 (que representa el penltimo registro), entonces el
circuito habilita el siguiente registro incrementando el contador Ci y repite
el lazo externo regresando al estado S2.
21

Ing. Ronald Ponguillo Intriago

Procesador de Datos.
ABmux

n
0

Rin0

WrInit

RData

Rin1

Rin2

R0

Rin3

R1

R2
0 1 2 3

R3

Imux

ABData

Ain

Bin

Rd

E
n

Clock

DataOut
1

Bout

BltA

22

Ing. Ronald Ponguillo Intriago

Hay varias maneras de implementar el Procesador de Datos.


Para simplificar el diseo asumimos que k = 4. Por lo tanto necesitamos 4
registros. Inicialmente estos registros pueden ser cargados con datos
usando la entrada DataIn,activando la entrada de control externa WrInit e
indicando la direccin del registro al cual se desea cargar el dato por medio
de entrada externa RAdd.
Los datos desde las salidas de estos registros pueden ser cargados en
registros A y B usando bloques Mux 4 a 1 (salida ABData).
Las salidas de A y B se conectan a un comparador y, tambin, a travs de
un bloque de Mux 2 a 1 pueden de nuevo ser cargados a los registros.
Los seales de habilitacin de los registros Rin0,, Rink-1 son controlados
por medio de un Decodificador de 2 a 4. Si la entrada de control Int =1, el
decodificador es manejado por uno de los contadores Ci o Cj. Si Int=0,
entonces el decodificador es controlado por la entrada externa RAdd.
Los seales zi y zj se hacen igual a 1 cuando Ci=k-2 y Cj=k-1,
respectivamente.
El buffer de tres-estados controlado por la seal externa de control Rd,
pasa el contenido de los registros en la salida DataOut.
23

Ing. Ronald Ponguillo Intriago

2
LJ

LI

EI

E Contador UP
Q

EJ

R
E Contador UP
Q
L

Ci

Cj

Clock

2
2

Csel

Cmux
RAdd

Int

Imux 2
w0w1
WrInit
Wr

En

y0
y1

Rin0
Rin1

y2

Rin2

y3

Rin3

Decoder 2-a-4
24

Ing. Ronald Ponguillo Intriago

= k 2

zi

= k 1

zj

Diagrama ASM del Controlador.


Li, Ei

S2

Int, Ain, Lj,


Ej

S3
EJ
EI

S4
Bin, Csel, Int

S5

S6
Csel, Int, Wr

S7
BltA

EJ

Int, Wr, Bout

S8
Int, Ain

Zj
1

25

Zi

S9
1

1
Done

Ing. Ronald Ponguillo Intriago

En el Diagrama ASM no se indica la operacin que se debe hacer en cada


estado, si no la seal especifica que debe generar en este estado el circuito
Controlador.
En el estado S1 enceramos el contador Ci (Ei y Li), mientras que s=0. Si
s=1 se pasa al estado S2 donde se carga el contador Cj (Ej y Lj) con el
valor actual de Ci, se habilita el registro A (Ain) y para la direccin de los
registros se escoge las salidas del contador Ci (Int=1 y Csel=0), de esta
manera el dato Ri se almacena en A.
En el estado S3 se habilita el contador Cj para que se incremente y as se
lo pueda comparar con el dato anterior. En el estado S4, se habilita el
registro B (Bin) y como direccin se escoge el valor de Cj (Int=1 y Csel=1),
de esta manera el dato Rj se almacena en B.
En S5 se pregunta si B es menor que A. De ser as se pasa a S6 y S7
donde se intercambia el dato entre los registros A y B. Para esto el dato que
est en A se graba en el registro Rj (Csel=1, Int=1, Bout=0, Wr=1) y luego el
dato en B se graba en Ri (Csel=0, Int=1, Bout=1, Wr=1).
En S8 el dato del registro Ri se graba en A (Csel=0, Int=1, Ain=1). Aqu
tambin se pregunta si el nmero en Cj=k-1 (ltimo registro). Si es falso, el
contador Cj se incrementa. Si es verdadero se pregunta si el nmero en
Ci=k-2 (penltimo registro). Si no es as, Ci se incrementa. Si es cierto el
proceso de finalizacin en S9 arranca.
26

Ing. Ronald Ponguillo Intriago

Cdigo VHDL para el circuito Ordenador de Nmeros.


En este diseo utilizamos para el Procesador de Datos, los componentes
que estn empaquetados y guardados en la librera work.

27

Ing. Ronald Ponguillo Intriago

VHDL posee una gran versatilidad para la definicin de nuevos tipos de


datos (enteros, enumerados, arreglos, etc).
type < nombre> is <descripcin>;
Por ejemplo,
type semana is (L, M, X, J, V, S, D);
type memoria is array (0 to 31) of bit_vector (4 downto 0);
En vez de definir las seales de datos con registros separados (R0, ,
Rk-1), se puede especificar al conjunto de registros como un arreglo
(array), en forma similar a las memorias RAM.
Este mtodo permite referirse a cada uno de los cuatro registros como
R(i), dentro de la declaracin for generate que utilizaremos ms tarde
para instanciar cada registro.
El arreglo de registros es definido en dos pasos:
Primero se define un tipo (type) que llamamos RegArray.
type RegArray is array (3 downto 0) of std_logic_vector (n-1 downto0);
Luego, la seal R es definida como tipo RegArray.
28

Ing. Ronald Ponguillo Intriago

A continuacin, se describen los cambios de estados del circuito Controlador


usando la declaracin process.

Las salidas del Controlador se generan de manera un tanto diferente a lo


hecho anteriormente.
La salida Int es igual a cero (Int = 0) solo en el estado inicial S1, con el fin de
poder direccionar los registros externamente y cargarlos con los valores de
DataIn o para ver los datos ordenados. Por lo tanto, la generamos utilizando
la declaracin concurrente condicional.
29

Ing. Ronald Ponguillo Intriago

Para las dems salidas utilizamos declaracin process y luego case.

Luego se debe describir cada uno de los componentes del Procesador de


Datos.
30

Ing. Ronald Ponguillo Intriago

La declaracin for generate proporciona una manera muy conveniente de crear


instanciones mltiples, tpicamente declaraciones de descripcin de
componentes.
Tambin se puede tener la declaracin if generate, que se utiliza para
selectivamente ejecutar un conjunto de declaraciones cuando las condiciones
especificadas se hacen presentes.

31

Ing. Ronald Ponguillo Intriago

Con estas declaraciones condicionales instanciamos el comparador y los dos


Mux de 2-a-1.

En el estado S1 se debe cargar el contador Ci con 0. Pero es ilegal asociar un


valor constante 0 o 1 con una entrada (port) del componente.
Por lo tanto, en la declaracin architecture creamos la seal zero:
signal zero: integer range 3 downto 0.
Y asignamos el valor de 0 a esta seal.
Tambin describimos los Mux de 2-a-1 (Imux y Cmux) que se usaron para
seleccionar la direccin del registro a utilizar en cada paso.
32

Ing. Ronald Ponguillo Intriago

Para el Mux de 4-a-1 que selecciona el registro del dato a cargar en el


registro A o en el registro B, utilizamos la declaracin with select when.

El Decodificador de 2-a-4 es instanciado con las declaraciones secuenciales


process - if - case.

33

Ing. Ronald Ponguillo Intriago

Solo faltan los circuitos para generar las salidas zi y zj que son las salidas de
los comparadores.

Tambin falta describir los componentes buffer de tres estados.

Tanto las seales zi y zj como la seal de salida DataOut se generan


utilizando declaraciones concurrentes condicionales.

34

Ing. Ronald Ponguillo Intriago

Diagramas de Tiempo.

35

Ing. Ronald Ponguillo Intriago

También podría gustarte