FACULTAD DE INGENIERA
DISEO DIGITAL
PROYECTO FINAL
CALCULADORA BINARIA PRESENTAN GARCA JIMNEZ REN AHEDO VELA MIGUEL NGEL
GRUPO: 04
CALCULADORA BINARIA Diseo de un sumador / restador completo de 4 bits 1- Circuito Sumador Para el diseo de este dispositivo, debemos recordar el algoritmo de la suma:
A3 B3 S4 S3
A2 B2 S2
A1 B1 S1
A0 B0 S0
La tabla de verdad de esta funcin tiene 28 = 256 combinaciones posibles, por lo que antes de hacerla es conveniente analizar la funcin en busca de algn patrn. Observemos la situacin del primer bit del resultado S0. Tenemos que:
0 S0 1
Si A=B=0 o si A=B=1 Si A B
A B
Asimismo, recordemos que una vez que al excederse la magnitud de la base se debe llevar un acarreo a la siguiente suma. Este acarreo est definido como:
1 Ci 0
Si A=B=1 C.O.C.
AB
Para el siguiente paso del algoritmo tenemos la suma de dos dgitos binarios y un carry:
Ci 0 0 0 0 1 1 1 1
A 0 0 1 1 0 0 1 1
B 0 1 0 1 0 1 0 1
F 0 1 1 0 1 0 0 1
C(i+1) 0 0 0 1 0 1 1 1
F A B C0 C1 C0 (A B) AB
Podemos observar que las siguientes sumas sucesivas tienen la misma funcin que esta. A su vez, Si hacemos Ci = 0 la funcin se vuelve idntica a la primera tanto para S como para Ci. La implementacin de la funcin arriba planteada se conoce como Full Adder o sumador completo y es como sigue:
Como hemos visto, el sucesivo desarrollo del algoritmo de la suma implica una sucesin de sumadores completos, esquematizada de la siguiente forma:
2- Circuito Restador El diseo del circuito restador es bastante sencillo tomando como base el llamado Complemento a la Base disminuida. Para una resta binaria, simplemente tomamos el sustraendo y cambiamos los ceros por unos y viceversa y lo sumamos al minuendo. De este modo podemos usar el mismo circuito del sumador, sin embargo ser necesario introducir algunos elementos extra. Debemos de poder elegir entre las operaciones de suma y resta, y a partir de esto, nuestro circuito debe decidir si sumar los nmeros tal como entran o bien Complementar el segundo antes de operarlos. Creamos una variable M, que ser la que decida la operacin: 0 para la suma y 1 para la resta. Para implementar el circuito de decisin, observemos la tabla de verdad de la funcin OR exclusivo:
A 0 0 1 1
B 0 1 0 1
F 0 1 1 0
0X X
1 X X
Apreciamos que podemos usar la funcin XOR como un circuito negador, manejando M con un switch que defina su valor. De modo que la implementacin del circuito negador ser el siguiente:
3- Diseo de un multiplicador de 4 bits El diseo de este circuito mediante tablas de verdad es poco prctico ya que se tienen 8 entradas y por consiguiente 28 combinaciones posibles para 8 funciones de salida correspondientes a los dgitos del resultado. En lugar de esto, es preferible usar dispositivos de mayor integracin que las compuertas, como puede ser el sumador previamente diseado. Analizando el algoritmo de la multiplicacin para 2 nmeros de 4 bits:
A3 B3 B0A3 B1A3 B2A3 B3A3 S7 S6 B3A2 S5 B2A2 B3A1 S4 B1A2 B2A1 B3A0 S3 S2 S1 S0 A2 B2 B0A2 B1A1 B2A0 A1 B1 B0A1 B1A0 A0 B0 B0A0
Se requiere realizar sumas sucesivas de los distintos productos BiAj. Para los primeros 2 bits de la salida la funcin es bastante simple y anloga a la de la suma normal:
sucesivos se complica. Podemos simplificar esto usando 3 sumadores paralelos de 4 bits, para sumar las siguientes cantidades:
0 0 C1 C2 B2A3 B3A2
Podemos ver que el resultado de la primera suma no arroja un Carry, puesto que el resultado nunca exceder la siguiente potencia de la base (24). Los Carries siguientes se arrojan para sumarse con el ltimo bit de la suma sucesiva, a travs de un Full Adder:
La implementacin completa requiere de 16 multiplicaciones entre todos los bits de los nmeros y un Full Adder para el resultado final. Los sumadores que escogimos son los 74LS83, que son sumadores completos con Carry de entrada. La implementacin completa es la siguiente:
4.- Diseo de un divisor de 4 bits. Para el diseo del divisor, puesto que no hay un algoritmo combinacional sencillo para esta operacin optamos por usar una memoria EPROM regrabable. Recordamos que tenemos 8 bits de entrada, por lo que la memoria deber tener al menos 256 (28) localidades de memoria. Escogimos una memoria EPROM 27C512, que es una memoria CMOS de 64K x 8, esto es, con 64Kb (216) de capacidad y ocho bits de salida. La razn por la cual usamos esta memoria es que implementaremos una salida de 8 bits en BCD, para representar la parte entera de la divisin y un decimal. La capacidad de la memoria usada excede nuestras necesidades sin embargo es perfectamente utilizable, pues solo requeriremos de sus primeras 256 localidades de memoria. Para saber que datos grabar en la memoria, analicemos algunas partes de la tabla de verdad de esta operacin: A3 0 0 A2 0 0 A1 0 0 A0 1 1 B3 0 0 B2 0 0 B1 0 1 B0 1 0 E3 0 0 E2 0 0 E1 0 0 E0 1 0 D3 0 0 D2 0 1 D1 0 0 D0 0 1
1 1
1 1
1 1
1 1
0 0
0 0
0 0
0 1
1 0
1 0
1 0
1 1
1 0
1 1
1 0
1 1
En este ejemplo, para el 1er caso tenemos la divisin de los nmeros A=1 y B=1. El resultado es una parte entera E=1 y una parte decimal D=0. Para el segundo caso tenemos que A=1 y B=2, por lo que el resultado es una parte entera E=0 y una parte decimal D=5. El tercer caso involucra una restriccin para la operacin de la divisin que es una divisin entre cero. El resultado que enviaremos es E=15 y D=15. Puesto que E y D solo pueden representar 1 digito en base 10, se entender que hay un error cuando todas las salidas se habiliten en alto. El ltimo caso mostrado es la divisin de un numero A=15 y B=1. El resultado requiere de mas de un dgito en su parte entera as que se usara la parte decimal para representar el 2 digito: E=1 y D=5. Para grabar nuestros datos en la memoria veamos primero la organizacin de esta. Sus direcciones de memoria estn numeradas como la primera parte de la tabla de verdad. De modo que primero grabamos el dato para la combinacin 00000000, luego para 00000001 y as sucesivamente. Como nuestra memoria tiene 16 bits de entrada enviaremos los 8 bits restantes a cero, as nos aseguramos de usar las primeras 256 localidades de la memoria. Para introducir los datos se debe llenar una matriz de 4096X16 en la cual el primer rengln representa las primeras 16 localidades de memoria, el siguiente de la 17 a la 32 y as sucesivamente. El llenado de esta tabla debe hacerse con el resultado BCD expresado en hexadecimal, lo cual simplifica el proceso. Para los ejemplos anteriores, por ejemplo, tendramos:
A3 0 0 1 1
A2 0 0 1 1
A1 0 0 1 1
A0 1 1 1 1
B3 0 0 0 0
B2 0 0 0 0
B1 0 1 0 0
B0 1 0 0 1
S 10 05 FF 15
Se aprecia que nuestro llenado incluso se vuelve ms ilustrativo de los que hacemos con la memoria. Puesto que solo usaremos las primeras 256 localidades de memoria, dejaremos el resto con la salida default que es FF. La tabla completa es la siguiente: 0000 0001 0010 0011 0100 0101 FF FF FF FF FF FF 00 10 20 30 40 50 00 05 10 15 20 25 00 03 06 10 13 16 00 02 05 07 10 12 00 02 03 06 08 10 00 02 03 05 07 08 00 01 02 04 06 07 00 01 02 04 05 06 00 01 02 03 04 05 00 01 02 03 04 05 00 00 02 03 03 04 00 00 01 02 03 04 00 00 01 02 03 04 00 00 01 02 03 03 00 00 01 02 03 03
0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
FF FF FF FF FF FF FF FF FF FF
60 70 80 90 10 11 12 13 14 15
30 35 40 45 50 55 60 65 70 75
20 23 26 30 33 36 40 43 46 50
15 17 20 22 25 27 30 32 35 37
12 14 16 18 20 22 24 26 28 30
10 12 13 15 16 18 20 21 23 25
08 10 11 13 14 16 17 18 20 21
07 09 10 11 12 14 15 16 17 19
07 08 09 10 11 12 13 14 15 18
06 07 08 09 10 11 12 13 14 15
05 06 07 08 09 10 11 12 13 14
05 06 07 07 08 09 10 11 12 12
04 05 06 07 08 08 09 10 11 11
04 05 06 06 07 08 08 09 10 11
04 05 05 06 07 07 08 09 09 10
CA
U3
A B C D E F G
VCC
5V
U2
7 1 2 6 3 5 4 A B C D ~LT ~RBI ~BI/RBO OA OB OC OD OE OF OG 13 12 11 10 9 15 14
B U1
10 9 8 7 6 5 4 3 25 24 21 23 2 26 27 1 20 22 A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14 A15 ~CE/PGM ~OE/VPP O0 O1 O2 O3 O4 O5 O6 O7 11 12 13 15 16 17 18 19
74LS48N
CA
U5
A B C D E F G
U4
7 1 2 6 3 5 4 A B C D ~LT ~RBI ~BI/RBO OA OB OC OD OE OF OG 13 12 11 10 9 15 14
27C512Q90
74LS48N