You are on page 1of 5

Memoria Practica 1

En esta practica hemos creado:


Un multiplexor que nos permite elegir entre dos nmeros BCD de un dgito gracias a un switch
de seleccin.
Un multiplicador de dos nmeros de 4 bits codificados en Ca2.
Una ALU (Unidad Aritmtica Lgica) que, dados dos nmeros Ca2 de 4 bits, nos permite:
sumarlos, multiplicarlos o elevar uno de ellos al cuadrado.
En los tres circuitos nosotros elegimos los nmeros deseados mediante switchs y los nmeros
(operandos y resultado) se muestran a travs de mdulos de siete segmentos en la Protoboard.
A continuacin explicaremos el funcionamiento de los tres mdulos mencionados y de los
mdulos utilizados en su diseo.

Multiplexor dgitos BCD (P_Mux):


Como se ha avanzado anteriormente, este mdulo nos permite seleccionar entre dos dgitos
BCD, los cuales definimos nosotros mediante cuatro switchs por cada dgito, y seleccionar uno
de ellos gracias a otro switch.
El diseo de este mdulo se hizo siguiendo el tutorial de la Prctica 1a.
Sin embargo, habiendo empezado la ALU nos dimos cuenta que era ms intuitivo cambiarlo de
modo que si "sel" = 0 seleccionsemos la primera entrada y si "sel" = 1 seleccionsemos la
segunda, y no viceversa. Sin embargo mantuvimos el diseo propuesto para no crear confusin.
Adems, hicimos una pequea mejora en el MUX, a saber: como nosotros seleccionamos los
nmeros mediante cuatro switchs podramos insertar un nmero mayor que 9 (hasta el 15), en
cuyo caso el SS (Siete Segmentos) se nos apagara. Nosotros consideramos ms apropiado
modificar ligeramente el mdulo BCD7seg para hacer que salga una E (Error) si intentamos
seleccionar un nmero superior a 9, y que solo se apagasen los SS que no utilizamos.

Multiplicador AxB en Ca2 (MULT_8x8_Ca2):


Este mdulo nos permite seleccionar nos nmeros de 4 bits, desde el -8 hasta el 7, y
multiplicarlos. Ambos operandos se muestran en dos SS cada uno, el de la derecha para el
mdulo y el de la izquierda para el signo, y el resultado se muestra en tres SS, los dos de la
derecha para el mdulo y el de la izquierda para el signo.
Por tanto, debamos ser capaces de encontrar el mdulo y signo de un nmero dado.
Encontrar el mdulo de los nmeros se hace mediante un mdulo, en forma de fichero VHDL,
el cual hace el valor absoluto de dichos nmeros. Una vez tenemos dicho valor absoluto, lo
codificamos en BCD y lo enviamos al SS que se nos indica; en el caso del resultado de la
multiplicacin lo separamos en dos buses de 4 bits y enviamos cada uno al SS correspondiente.
Para encontrar el signo de los operandos y el resultado nos definimos un modulo, en VHDL, que
mira el MSB del nmero; si el MSB = 0 se apaga el SS y si el MSB = 1 se enva
el signo -.

Unidad Aritmtica Lgica (CAL_Ca2):


Todo el sistema de presentacin de nmeros mediante siete segmentos se hereda del circuito
anterior, de modo que tan solo tuvimos que crear el sistema de seleccin de operaciones.
Este sistema de seleccin lo hicimos con cuatro multiplexores MUX_2B_TO_1B, tres
multiplicadores MULT_8x8 y un sumador SUM_8B. De manera que creamos tres lneas: en la
primera se hace A x B, en la segunda se hace A2 o B2 gracias a un MUX 2:1 controlado por
SW[1] y en la tercera se hace A + B. Ms tarde, mediante los tres MUX 2:1 mencionados
anteriormente conseguimos hacer un MUX 4:1 controlado por SW[1..0], el cual selecciona la
operacin deseada.

Resto de Mdulos:
Mdulo MUX_2_TO_1
Este mdulo, a partir de una seal de seleccin (sel), transmite al bit de
salida (z) uno de los dos bits de cuatro bits de entrada (a o b).
Si miramos el funcionamiento interno del mdulo, utilizamos 2AND2 para
seleccionar a o b dependiendo de sel, una NOT para obtener nosel y
una OR2 para unir las salidas de las ANDs, cuya salida de la OR2
corresponde a la salida z del mdulo.
Hay que destacar que la salida ser a si sel='1' y ser b si sel='0'.
a

inst

OR2

inst

OUTPUT
INPUT
VCC

a
b
sel

AND2

INPUT
VCC

sel

MUX_2_to_1

AND2

inst2

nosel
inst1

sel

INPUT
VCC

NOT

inst3

nosel

Mdulo MUX_2B4_TO_1B4
MUX_2B8_TO_1B8
x[7..0]
y[7..0]
sel

z[7..0]

inst14

Este mdulo, a partir de una seal de seleccin (sel), transmite al bus de salida (z[3..0]) uno
de los dos buses de cuatro bits de entrada (x[3..0] o y[3..0]).
Si miramos el funcionamiento interno del mdulo, observamos cuatro multiplexores
MUX_2_TO_1 en paralelo.

Mdulo P_1B
P_1B
num[3..0]

out[7..0]

inst11

El mdulo presentado en la figura nos permite ampliar un nmero codificado en Ca2 de 4 bits
(num[3..0]) a 8 bits (out[7..0]).
El funcionamiento del mdulo se describe de la siguiente forma: debemos fijarnos en el bit de
mayor peso del nmero de entrada (MSB), ya que de esta forma podemos averiguar si se trata
de un nmero positivo o de un negativo. Si es negativo le concatenamos cuatro unos a la
izquierda, y si es positivo cuatro ceros. Esta concatenacin se hace mediante buffers "LCELL" y
se selecciona entre "1111" (un bus de 4 bits conectado a VCC) y "0000" (un bus de 4 bits
conectado a GND) gracias a un multiplexor " MUX_2B4_TO_1B4" controlado por el MSB del
nmero "num[3..0]".
MUX_2B4_to_1B4

VCC

num[7..4]

x[3..0]
y[3..0]
sel
GND

LCELL

z[3..0]

out[7..4]

OUTPUT

out[7..0]

inst3

inst
num[3]

num[3..0]

INPUT
VCC

num[3..0]

LCELL

out[3..0]

inst4

Mdulo MUX_2B8_TO_1B8
MUX_2B8_TO_1B8
x[7..0]
y[7..0]
sel

z[7..0]

inst14

Este mdulo, a partir de una seal de seleccin (sel), transmite al bus de salida (z[7..0]) uno
de los dos buses de cuatro bits de entrada (x[7..0] o y[7..0]).
Si miramos el funcionamiento interno del mdulo, observamos ocho multiplexores
MUX_2_TO_1 en paralelo.

co

ci
s

Mdulo SUM_1B

SUM_1B

inst5

El mdulo presentado en la figura suma dos bits de entrada ("a" y "b") teniendo en cuenta el
acarreao de entrada ("CI") dando lugar al resultado de 8 bits de la suma ("s") y un acarreo de
salida ("CO").
Mdulo SUM_8B
SUM_8B
A[7..0]
B[7..0]
CI

S[7..0]
CO

inst8

El mdulo presentado en la figura suma dos buses 8 bits de entrada ("A[7..0]" y "B[7..0]")
teniendo en cuenta el acarreao de entrada ("CI") dando lugar al resultado de 8 bits de la suma
("S[7..0]") y un acarreo de salida ("CO").
Si miramos el funcionamiento interno del mdulo, observamos que est compuesto por ocho
mdulos "SUM_1B" en serie.
Mdulo MULT_8X1
MULT_8X1
multiplicando[7..0]
multiplicador

Res[7..0]

inst

El mdulo presentado en la figura multiplica un bus de 8 bits ("multiplicando[7..0]") por un bit


("multiplicador").
Si miramos el funcionamiento interno del mdulo, observamos que est compuesto por una
puerta AND2 dnde una entrada es un bus de 8 bits y la otra es un solo bit.
Esto es debido a que Quartus permite, para unidades primitivas, simplificar una estructura
paralela. Es decir, en realidad este modulo est formado por 8AND2 donde cada bit del bus
"multiplicando[7..0]" entra en una AND con "multiplicador", y la salida es el bus de salidas de
dichas ANDs.
multiplicando[7..0]
multiplicador

INPUT
VCC
INPUT
VCC

AND2
OUTPUT

inst

Res[7..0]

Mdulo MULT_ACC
MULT_ACC
M[7..0]
Nk
INk[7..0]

OUT1[8..1]
OUT2

inst

El mdulo presentado en la figura multiplica un bus de entrada ("M[7..0]2) por un bit ("Nk") y l
resultado de la multiplicacin le suma un bus de entrada ("INk[7..0]"); esto nos proporciona un
bit ("OUT2") que es LSB del resultado de la operacin mencionada anteriormente, y un bus de
8 bits ("OUT1[8..1]") que son los otros bits del resultado.
Si miramos el funcionamiento interno del mdulo, observamos que est formado por: un
mdulo "MULT_8X1" que se encarga de multiplicar "M[7..0]" por "Nk"; y por un mdulo
"SUM_8B" que le suma un bus de entrada "INk[7..0]" al resultado anterior. Una vez hecho esto,
por un lado tenemos el bus de ocho bits "RES[7..0]", del cual separamos el LSB y lo enviamos a
la salida "OUT2"; y por otro lado "CO" de la suma, el cual lo concatenaremos delante del bus
"OUT[7..1]", y el bus resultante ser la salida "OUT[8..1]".
RES[7..1]

LCELL

OUT1[7..1]

inst7
RES[0]

LCELL

OUT2

inst8

MULT_8X1
M[7..0]
Nk

INPUT
VCC
INPUT
VCC

SUM_8B
RES[7..0]

multiplicando[7..0]
multiplicador

Res[7..0]

A[7..0]
B[7..0]
CI

inst
INk[7..0]

S[7..0]
CO

LCELL

RES[8]

OUT1[8]

OUTPUT

OUT1[8..1]

OUTPUT

OUT2

inst6

inst1

INPUT
VCC
GND

Mdulo MULT_8X8
MULT_8x8
M[7..0]
N[7..0]

OUT[7..0]

inst5

El mdulo presentado en la figura multiplica dos buses de entrada de 8 bits ("M[7..0]" y


"N[7..0]"), y nos da una salida de 8 bits OUT[7..0]. Dicha salida son los 8 bits de menos peso
resultado de la multiplicacin binaria de ambos nmeros, el resto de bits no se utilizan.
Si miramos el funcionamiento interno del mdulo, observamos que est compuesto por ocho
"MULT_ACC" en serie.
Este mdulo ha sido creado a partir de la explicacin que se da en el manual de la prctica,
en la cual se propone una multiplicacin 4x4 a partir de un algoritmo.

You might also like