informe final trabajo de investigacion

Anuncio
UNIVERSIDAD NACIONAL DE PIURA
FACULTAD DE INGENIERIA INDUSTRIAL
INFORME FINAL
TRABAJO DE INVESTIGACION
“MODULO DE APOYO PARA EL CURSO ARQUITECTURA DE
COMPUTADORAS”
EJECUTORES
:
INGº JORGE L. SANDOVAL RIVERA
INGº PEDRO A. CRIOLLO GONZALES
PIURA, febrero del 2009
INDICE
pág
Resumen ............................................................................................................. i
Introducción ........................................................................................................ ii
Esquema del contenido
1. REPRESENTACION DE DATOS
1
1.1. Sistemas numéricos ................................................................................ 1
1.1.1. Decimal ........................................................................................ 2
1.1.2. Binario.......................................................................................... 2
1.1.3. Hexadecimal ................................................................................ 3
1.2. Representación de enteros ...................................................................... 4
1.2.1. Sin signo ...................................................................................... 4
1.2.2. Con signo ..................................................................................... 4
1.3. Representación de reales ....................................................................... 6
1.3.1. Con punto fijo ............................................................................... 6
1.3.2. Con punto flotante ........................................................................ 7
1.4. Otros códigos.......................................................................................... 9
Ejercicios resueltos ...................................................................................... 11
Ejercicios propuestos ................................................................................... 13
2. CIRCUITOS DE LOGICA DIGITAL ............................................................. 14
2.1. Compuertas lógicas ............................................................................... 14
2.2. Álgebra booleana .................................................................................. 14
2.3. Minterminos y Maxterminos .................................................................. 16
2.4. Simplificación por álgebra booleana ..................................................... 17
2.5. Simplificación por mapa de Karnaugh ................................................... 20
2.6. Circuitos lógicos combinacionales ........................................................ 23
2.6.1. Semisumador ............................................................................. 24
2.6.2. Sumador completo ..................................................................... 24
2.6.3. Sumador restador ...................................................................... 25
2.7. Flip-Flops .............................................................................................. 27
2.7.1. Flip-Flop básico con compuertas NAND y NOR ......................... 27
2.7.2. Flip-Flop SR sincronizado por reloj ............................................ 29
2.7.3. Flip-Flop D sincronizado por reloj ............................................... 29
2.7.4. Flip-Flop JK sincronizado por reloj ............................................. 29
2.7.5. Flip-Flop T sincronizado por reloj ............................................... 29
2.8. Circuitos lógicos secuenciales .............................................................. 30
2.8.1. Ecuaciones de entrada de los Flip-flops ..................................... 30
2.9. Solución de ejercicios con Boole........................................................... 34
2.9.1. Circuitos combinacionales.......................................................... 34
2.9.2. circuitos secuenciales ................................................................ 37
2.10. Simulación de circuitos con Electronics WorkBench .......................... 40
Ejercicios resueltos ...................................................................................... 45
Ejercicios propuestos ................................................................................... 50
3. COMPONENTES DIGITALES .................................................................... 51
3.1. Registros ............................................................................................... 51
3.1.1. Registro simple .......................................................................... 51
3.1.2. Registro de carga paralela ......................................................... 52
3.1.3. Registro de corrimiento .............................................................. 53
3.1.4. Registro de corrimiento con carga paralela ................................ 53
3.2. Contadores ............................................................................................ 54
3.2.1. Contadores asíncronos o de propagación .................................. 54
3.2.2. Contadores sincrónicos .............................................................. 55
3.3. Decodificadores - Codificadores ............................................................ 56
3.3.1. Decodificadores ......................................................................... 56
3.3.2. Codificadores ............................................................................. 57
3.4. Multiplexores y Demultiplexores ............................................................ 59
3.4.1. Multiplexores .............................................................................. 59
3.4.2. Demultiplexores ......................................................................... 61
Ejercicios resueltos ..................................................................................... 62
Ejercicios propuestos .................................................................................. 69
4. ORGANIZACIÓN Y DISEÑO BASICO DE COMPUTADORAS ................... 70
4.1. ¿Qué es una computadora? ............................................................... 70
4.1.1. Organización básica................................................................... 70
4.1.2. Funcionamiento ......................................................................... 70
4.2. Los registros ....................................................................................... 71
4.2.1. Los registros de la computadora básica ..................................... 71
4.3. El BUS común .................................................................................... 75
4.4. Transferencia entre el BUS, los registros y la memoria....................... 76
4.5. El código de instrucción ...................................................................... 78
4.5.1. Instrucciones que hacen referencia a memoria .......................... 78
4.5.2. Instrucciones que hacen referencia a registro ............................ 80
4.5.3. Instrucciones de entrada y salida ............................................... 81
4.6. La unidad de control ........................................................................... 82
4.7. Ciclo de instrucción ............................................................................. 83
4.7.1. Búsqueda ................................................................................... 83
4.7.2. Decodificación............................................................................ 84
4.7.3. Tipo de instrucción ..................................................................... 85
4.7.4. Ejecutar instrucción .................................................................... 85
4.7.5. Interrupciones ............................................................................ 90
4.8. La ALU ............................................................................................... 93
4.9. Diseño lógico de la computadora básica ............................................. 95
4.10. Diseño físico de la computadora básica .............................................. 98
4.10.1. Los flip-flops de apoyo ..............................................................100
4.10.2. El acumulador ...........................................................................103
Ejercicios resueltos ....................................................................................105
Ejercicios propuestos .................................................................................109
Bibliografía .......................................................................................................110
RESUMEN
Es común en los docentes universitarios, al preparar sus clases, tomar 2 o más libros
texto y hacer un resumen con cada uno de ellos que luego usará para impartir su
clase. Justamente es lo que pretende realizar el presente trabajo, tomando como base
el libro “Arquitectura de Computadoras” de MORRIS MANO M. y otros textos como por
ejemplo “Sistemas Digitales, Principios y Aplicaciones” de TOCCI, Ronald y “Diseño
Digital Principios y Practicas” de WAKERLY, John F. seleccionar lo mejor de cada uno
de ellos y hacer un resumen, explicando con mayor detalle las áreas que lo requieran
o se consideren necesarias, resolviendo algunos ejercicios y planteando otros.
El módulo se divide en cuatro capitulos:
El primer capitulo “Representación de datos” trata de la forma como se almacenan y
representa los datos numérico (reales, enteros: positivos y negativos) en un sistema
digital. Además se estudian los 3 sistemas de numeración más importantes: el binario,
el decimal y el hexadecimal
El segundo capitulo “Circuitos de lógica digital” estudia los circuitos diseñados a partir
de compuertas lógicas y su representación por medio de expresiones lógicas, estos
son: Circuitos combinatorios y circuitos secuenciales. Haciendo uso del álgebra
booleana y de mapas de Karnaugh se realiza la simplificación de estos circuitos de
forma manual, pero también se explica como usar herramientas de software como el
“WorkBench” para el diseño y simulación de circuitos y “Boole” para el análisis y
simplificación de circuitos combinatorios y secuenciales
El tercer capitulo “Componentes digitales” estudia el diseño de los componentes que
se pueden construir a partir de los circuitos combinatorios y secuenciales estudiados
en el capitulo anterior tales como: sumadores, contadores, registros, multiplexores,
codificadores, etc.
El cuarto capitulo “Organización y diseño básico de computadoras” describe la
estructura de la computadora básica como por ejemplo el tamaño de la memoria,
cantidad y longitud de los registros, instrucciones que serán reconocidas, etc. También
se estudia el diseño de circuitos que permitan generar las señales apropiadas entre los
componentes digitales mencionados para que éstos realicen las tareas para lo que
fueron diseñados
INTRODUCCION
En la ciencia, la tecnología, la administración y, de hecho, muchos otros campos de la
actividad humana, constantemente se manejan cantidades. Estas se miden, registran,
manipulan aritméticamente, observan o se utilizan en muchos sistemas físicos. Existen
básicamente dos maneras de representar el valor numérico de las cantidades: la
analógica y la digital.
Las cantidades analógicas tienen la característica de poder variar gradualmente sobre
un intervalo continuo de valores como en el caso de un velocímetro. La posición
angular de la aguja representa el valor de la velocidad del automóvil y sigue cualquier
cambio que ocurra conforme el automóvil acelere o frene. Mientras que las cantidades
digitales varían en etapas discretas (paso a paso), como por ejemplo un reloj digital, el
cual no cambia continuamente sino por etapas (uno por minuto o por segundo) a pesar
que el tiempo transcurre en forma continúa.
Para manipular la información representada en forma digital se utilizan los sistemas
digitales. Un sistema digital es una combinación de dispositivos diseñado para
manipular información representada en forma digital, es decir, que sólo puede tomar
valores discretos. Esta información digital por lo general se representa en forma
binaria y ésta, a su vez, por medio de cualquier dispositivo que solamente tenga dos
estados de operación como por ejemplo un interruptor: abierto y cerrado.
Esta característica de los circuitos digitales (lógicos) permite utilizar el álgebra
booleana como herramienta para el análisis y diseño de sistemas digitales. El álgebra
booleana tiene tres operaciones básicas AND, OR y NOT llamadas también
operaciones lógicas. Mediante diodos, transistores y resistencias, conectados entre sí,
se puede construir compuertas lógicas cuyas salidas son el resultado de una
operación lógica básica.
Partiendo de las compuertas lógicas AND, OR y NOT, se pueden diseñar circuitos
cuyas salidas depende sólo de sus entradas (circuitos combinatorios) y circuitos cuyas
salidas dependen tanto de las entradas como del estado (conjunto de entradas
pasadas) que se encuentre el circuito (circuitos secuenciales).
Ejemplo de circuitos combinatorios tenemos los sumadores completos de un bit, los
cuales agrupados en 8, 16 o 32 elementos se obtienen sumadores de 8, 16 o 32 bits.
De igual manera se puede diseñar restadores, multiplicadores, divisores, etc. Todos
estos circuitos unidos apropiadamente permitirán diseñar, por ejemplo, una Unidad
Aritmética Lógica (ALU), que es una de las partes básicas de un procesador. Así
también el diseño de codificadores, decodificadores y multiplexores que permiten
conmutar las señales digitales entre los diferentes componentes de una computadora
con el procesador.
Por otro lado, uniendo adecuadamente compuertas NAND o NOR se puede formar un
FLIP-FLOP que es la unidad básica de almacenamiento. Uniendo Flip-Flops y circuitos
combinatorios se puede diseñar registros, contadores, unidad de memoria y otros
componentes de apoyo del procesador.
Para finalizar, todos los componentes mencionados unidos mediante circuitos lógicos,
los cuales les proveeran de las señlales de control apropiadas para que éstos
tranfieran y procesen la información, ya sea un codigo de instrucción o un dato.
I REPRESENTACION DE DATOS
1.1. Sistemas numéricos
Si bien es cierto que una computadora puede realizar una serie de tareas
complejas, la verdad es que lo único que “comprende” es 0 y 1. Estos 0 y 1
agrupados adecuadamente (bajo un formato) pueden representar diferentes tipos
de información binaria para el procesador tales como datos, código ejecutable,
caracteres, señales de control, etc. Como resulta obvio pensar, el sistema de
numeración que puede traducir directamente la computadora es el BINARIO, pero
éste resulta muy difícil de comprender y manipular por los seres humanos ya que
la mayoría estamos acostumbrados a usar el sistema de numeración DECIMAL.
Otro de los inconvenientes de trabajar con el sistema binario es la documentación,
ya que para expresar cualquier número en binario se necesitará mucho más
espacio que si se utilizara, por ejemplo, el sistema decimal o, mejor aun, el sistema
HEXADECIMAL.
Estos tres tipos de sistemas de numeración pertenecen a los sistemas numéricos de
base o raíz r (r=2 para binario, r=10 para decimal y r=16 para hexadecimal),
también se les conoce como sistemas posicionales debido a que cada digito tiene
un valor basado en su posición relativo al digito menos significativo (el que se
encuentra más a la derecha).
Para determinar el valor que representa un número de base r en el sistema decimal
se puede utilizar la siguiente formula:
N=
e -1
åd *r
i= - f
Donde:
i
i
r es la base o raíz del número
di es un dígito de la posición i del número
f es la cantidad de dígitos de la parte fraccionaria
e es la cantidad de dígitos de la parte entera
En términos generales, cualquier número es simplemente la suma de los productos
de cada digito y su valor posicional.
Ejemplo: Cuál es el valor de 31.2041(5 en el sistema decimal?
Como se aprecia r=5, f=4 y e=2. El número sería: d1 d0 . d-1 d-2 d-3 d-4
y el valor en decimal:
N = 3*51 + 1*50 + 2*5-1 + 0*5-2 + 4*5-3 + 1*5-4
N = 3*5 + 1*1 + 2/5 + 0/25 + 4/125 + 1/625
N = 15 + 1 + 0.4 + 0 + 0.032 + 0,0016
N = 16.4336
Ahora, para convertir un numero del sistema decimal al sistema de base r, primero
se toma la parte entera y se divide entre la raíz r, el residuo de esta división se
convertirá en el digito menos significativo de la parte entera. Luego se divide el
cociente resultado de la división anterior entre la raíz r, el residuo será el siguiente
digito, se vuelve a dividir el último cociente entre la raíz r y así sucesivamente se
repite esta operación hasta que el cociente sea 0. El número se formará tomando el
1
último residuo como el digito más significativo y el primer residuo obtenido como
el digito menos significativo.
Para convertir la parte fraccionaria, se coge sólo la parte fraccionaria (tomando
cero como parte entera) y se multiplica por la raíz r. La parte entera del resultado
de la multiplicación será el primer digito de la nueva parte fraccionaria. Luego se
elimina la parte entera (se hace 0) y se repite la operación anterior tantas veces
como dígitos se desea obtener. Si en algún momento el resultado de la
multiplicación es 1 significará que se ha obtenido el valor exacto en el sistema de
base r, en caso contrario, todos los dígitos obtenidos hasta ese instante sólo son
una aproximación al valor real.
Ejemplo: Convertir 82.573 al sistema de base 7
Tomamos la parte entera 82 y la dividimos entre la raíz r=7
82/7
cociente 11, residuo 5 (digito menos significativo)
Dividimos el ultimo cociente entre la raíz
11/7
cociente 1, residuo 4
1/7
cociente 0, residuo 1 (digito más significativo)
Por lo tanto la parte entera será: 145
Ahora tomamos la parte fraccionaria 0.573 y la multiplicamos por la raíz
0.573*7 = 4.011
4 será el 1er digito, luego eliminamos la parte entera.
0.011*7 = 0.077
0 será el 2do digito.
0.077*7 = 0.539
0 será el 3er digito.
0.539*7 = 3.773
3 será el 4to digito, eliminar la parte entera.
0.773*7 = 5.411
5 será el 5to digito y así sucesivamente…
Una aproximación a 82.573 es 145.40035(7
1.1.1. Decimal
La base 10 es importante debido a que se usa en la vida diaria. Este sistema
se compone de 10 numerales o símbolos: 0, 1, 2, 3, 4, 5, 6, 7, 8 y 9; al
utilizar estos símbolos como dígitos de un numero podemos expresar
cualquier cantidad. El sistema decimal evolucionó en forma natural a partir
del hecho de que el ser humano tiene 10 dedos. Incluso, la palabra “digito”
significa “dedo” en latín.
En el sistema digital se comienza a contar con el 0 en la posición de las
unidades y se toma cada símbolo (digito) en progresión hasta llegar al 9,
luego se incrementa en 1 la segunda posición (decenas) y volvemos a
empezar con 0 en las unidades. Este proceso continúa hasta llegar a 99 y se
suma 1 en la tercera posición (centenas) y se empieza con 0 en las 2
posiciones anteriores. Se repite este proceso mientras se desee.
1.1.2. Binario
En el sistema binario sólo hay 2 símbolos o valores de dígitos: 0 y 1. Sin
embargo, con un conjunto de estos símbolos se puede representar cualquier
cantidad denotada en cualquier sistema de numeración.
Al trabajar con números binarios, generalmente se está restringido a
utilizar una cantidad específica de dígitos (bits). Esta restricción se basa en
los circuitos utilizados para representar estos números binarios.
2
Al tener, este sistema sólo los dígitos 0 y 1, cualquier número que se desee
representar se debe de hacer con una combinación de éstos.
El conteo en binario inicia con 0, al sumarle 1 (0+1) nos dará 1. Si luego le
sumamos 1 (1 + 1) nos dará 0 (porque no existe el digito 2) más 1 de
acarreo es decir 10 en total, que es la representación de 2. Nuevamente
sumamos 1 (10 + 1) resultará 11 (representación de 3) y al sumarle 1
(11+1) nos dará 100 (4 en binario) y así sucesivamente.
Numeración del 0 al 15 en decimal, binario y binario con 4 bits
Dec
0
1
2
3
4
5
6
7
Bin
0
1
10
11
100
101
110
111
Bin 4 bits
0000
0001
0010
0011
0100
0101
0110
0111
Dec
8
9
10
11
12
13
14
15
Bin
1000
1001
1010
1011
1100
1101
1110
1111
Bin 4 bits
1000
1001
1010
1011
1100
1101
1110
1111
Como se aprecia, el conteo empieza con 0 en las unidades luego se
incrementa en 1 y después en 1 más, pero como no existe el digito 2 en
binario, para representar éste, se suma en 1 el siguiente digito obteniendo 2
en binario (10). Se incrementa en uno las unidades y se repite esto hasta
que todos los dígitos son 1s.
Las cantidades binarias pueden representarse por medio de cualquier
dispositivo que solamente tenga dos estados de operación o posibles
condiciones. Por ejemplo, un interruptor sólo tiene dos estados: abierto o
cerrado. Arbitrariamente podemos hacer que un interruptor abierto
represente el 0 binario y que uno cerrado represente el 1 binario. Una hoja
con perforaciones sería otro ejemplo, donde una perforación será un 1
binario y la ausencia de ella es un 0 binario. Así, podemos seguir
mencionando otros ejemplos como un foco eléctrico (encendido-apagado),
una fotocelda (iluminada u oscura), el transistor (cortado o saturado), una
cinta magnética (magnetizada o desmagnetizada), etc.
En los sistemas electrónicos digitales, la representación binaria se hace por
medio de voltajes (o corrientes) que están presentes en las entradas o
salidas de los diversos circuitos. Por lo general, el 0 y el 1 binarios se
representan con dos niveles de voltaje nominal, 0V para representar el 0
binario y +5V para el 1 binario, aunque para ser más exactos esta
representación se hace por medio de intervalos de voltaje: el intervalo entre
0 y 0.8V representa un 0 y cualquiera entre 2 y 5V representa un 1
1.1.3. Hexadecimal
Este sistema de numeración está conformado por los 10 dígitos del sistema
decimal (0-9) y 6 dígitos más, como por ejemplo el DIGITO DIEZ (10) o
el DIGITO TRECE (13), pero para evitar confusiones cuando se
3
presenten los dígitos 1 y 0 o 3 juntos, se ha convenido representarlos por
las letra A y D respectivamente. Entonces, A=10, B=11, C=12, D=13,
E=14 y F=15. Este sistema proporciona representaciones breves que son
convenientes para números con múltiples bits en un sistema digital.
Ejemplo: La representación del entero 23830 en binario de 16 bits es
0101110100010110, es decir que se necesitan 16 dígitos,
mientras que en hexadecimal es 5D16 (5D16h) siendo
necesario sólo 4 dígitos. Debido a que su base es potencia de 2
(16=24) 4 dígitos binarios pueden representarse con un solo
digito hexadecimal, tal como se aprecia a continuación.
0101 1101 0001 0110 Dígitos Binarios
5
D
1
6
Dígitos Hexadecimales
1.2. Representación de enteros
Un detalle muy importante en la representación de enteros es la cantidad de bits
que se van a emplear, ya que de ello va a depender el rango de valores que se
pueden representar.
Ejemplo: Un número de 4 bits implicará que se tiene 4 dígitos binarios y como
cada uno de ellos puede tomar el valor de 0 o 1 significará que se
pueden formar 24 combinaciones diferentes y que cada una de ellas
puede representar un valor. Por lo tanto, con 4 bits se puede representar
16 valores diferentes que podrían estar comprendidos (rango) entre 0 y
15 o entre -8 y 7 o cualquier convención que se establezca.
1.2.1. Sin signo
En este tipo de notación sólo se van a representar enteros positivos (sin
signo). El menor valor a representar será el 0 y el mayor valor dependerá
de la cantidad de bits a emplear. Si N es la cantidad de bits a emplear, 2N-1
será el mayor valor que se podrá denotar, así por ejemplo, con 4 bits el
mayor valor será 15 (24=16); con 8 bits, 255 (28=256) y con 16 bits hasta
65535 (216=65536). En todos los casos, el valor es uno menos debido a que
se tiene en cuenta el 0 como primer valor a representar.
Ejemplo: Para representar el entero 1837 se necesitan por lo menos 11
bits, ya que este entero en binario es 11100101101. La
representación de este valor en un formato de 16 bits será
0000011100101101 y en forma abreviada (hexadecimal) será
072Dh.
1.2.2. Con signo
Aquí se tiene en cuenta los valores negativos y por ende, que la cantidad a
representar de valores positivos sea igual a la cantidad de valores
negativos.
Los dos sistemas más usados para representar un número con signo son:
4
a) Bit de signo.- Se utiliza el bit más significativo (el que se encuentra
más a la izquierda) para representar el signo del número: 0 para indicar
que el número es positivo y 1 para indicar que es negativo. Esto trae
como consecuencia que, si se utiliza N bits para representar el número
sólo se podrán emplear N-1 bits (2N-1 valores diferentes) ya que 1 bit se
usará para el signo y por lo tanto el rango de valores a representar
disminuirá a la mitad: una mitad será para representar valores positivos
y la otra mitad los valores negativos.
Ejemplo: El entero -1837 en 16 bits será igual que +1837 pero
estableciendo en 1 el bit más significativo es decir:
1000011100101101 y en forma abreviada 872Dh.
Con 16 bits se podrá denotar desde -32767 a +32767 (216-11) es decir desde 1111111111111111 = FFFFh a
0111111111111111 = 7FFFh.
Una de las desventajas de este sistema es la doble representación del 0,
ya que se puede denotar como 000...0 (+0) y como 100…0 (-0).
Además, no permite realizar las operaciones aritméticas directamente.
Ejemplo: Restar 86 y 24 en 8 bits
86 = 01010110 y 24=00011000 → -24=10011000, luego
86+
=
01010110+
-24
=
10011000
-------------------------------62
≠
11101110
=
-110
Como se aprecia el resultado es -110 cuando debió ser 62.
En la actualidad este sistema se emplea únicamente para la
codificación de números con punto flotante.
b) Complemento a 2.- El complemento a r de un numero N de un sistema
de base r es rn-N, donde n es la cantidad de dígitos de N y el
complemento a (r-1) es (rn-1)-N.
Ejemplo: Hallar el complemento a 10 de 392
103-392=608
Ejemplo: Hallar el complemento a 9 de 392
103-1-392=607
Es decir, que el complemento a r de N es igual al complemento a (r-1)
de N, más 1.
Ahora si a un número X le restamos Y entonces:
X-Y = X-Y+rn-rn = X+(rn–Y)-rn = X+CY(r)-rn
Donde CY(r) es el complemento a r de Y.
5
Ejemplo: Hallar 627-392 (en el sistema decimal)
Como se observa, r=10 y n=3, entonces:
627-392= 627+608-103 = 1235-1000 = 235.
El restarle 103 es equivalente a simplemente eliminar el
digito más significativo al resultado (por desbordamiento)
En el sistema binario, X-Y = X+CY(2)-2n y como CN(r)= CN(r-1)+1,
entonces: X-Y = X+(CY(1)+1)-2n. Donde CY(1) es el complemento a 1
de Y, pero el complemento a 1 de un numero en binario es
simplemente el cambio de 0s por 1s y 1s por 0s. Por lo tanto, en
binario, la diferencia de X y Y se puede resumir en: Sumar a X, Y
complementado, es decir, convertir los 1s en 0s y los 0s en 1s, luego
sumarle 1 y finalmente eliminar el digito más significativo.
Ejemplo: Restar 179-62 (r=2 , n=8 bits)
179=10110011
62=00111110
-62=11000001+1=11000010
Luego: 179 = 10110011 +
-62 = 11000010
----------------------117 101110101 pero al eliminar el bits más
significativo queda 01110101 = 117
1.3. Representación de reales
Para poder representar números con parte fraccionaria se deben tener en cuenta
tres cosas: como representar la parte entera, la parte decimal y el punto decimal.
Existen dos notaciones:
1.3.1. Con punto fijo
En esta notación se establece una determinada cantidad de bits para la
parte entera y otra para la parte fraccionaria. El punto quedará
arbitrariamente fijado entre estos bits. Por ejemplo el número 3.641 en
binario es aproximadamente 11.101001000001, si el formato que se va a
usar es de 8 bits y el punto se fija en la mitad, entonces la representación
sería: 00111010 (3Ah), donde los dígitos en negrita son la parte entera. Si
para representar este mismo número se fijara el punto decimal después de
los 2 bits más significativos la representación sería: 11101001 (E9h).
Como se comprenderá, al observar los números 3Ah y E9h (o en binario)
no hay forma de determinar la posición del punto decimal a no ser que
previamente se haya establecido o acordado esta. Por lo general la posición
del punto se establece durante el diseño del hardware y queda fijo a ella. El
inconveniente de esta notación es que la precisión queda fija, por ejemplo
en el primer caso solo se tienen 4 bits para representar la parte fraccionaria,
mientras que en el segundo caso se tienen 6 bits, con lo que se obtiene
mayor precisión (3Ah=0011.1010=3.625 ; E9h=11.101001=3.640625). Por
otro lado, si la parte entera en el número a representar fuera mayor o igual
que 4 este no podría ser denotado usando la fijación del punto decimal del
segundo caso porque se necesitaría más de 2 bits para representar estos
6
valores. Por lo tanto, al permanecer el punto fijo, en algunos casos se
necesitaran más bits en la parte fraccionaria (correr el punto hacia la
izquierda) y en otros en la parte entera (correr el punto hacia la derecha).
1.3.2. Con punto flotante
El inconveniente del punto fijo es resuelto con un punto flotante, es decir,
un punto que pueda ser corrido hacia la izquierda o hacia la derecha según
sea necesario.
El proceso se inicia convirtiendo el número al sistema de numeración
binario y luego se normaliza. La normalización consiste en correr el punto
hacia la izquierda o hacia la derecha de tal forma que el 1 que se encuentre
más hacia la izquierda quede posicionado a la izquierda del punto. El valor
resultante se multiplica por 2N donde N es la cantidad de posiciones que se
ha corrido el punto. N es positivo si el punto se corre hacia la derecha y
negativo en caso contrario.
Ejemplo: Convertir 37.4592 al formato de punto flotante de 32 bits.
Primero hay que convertirlo a binario. Utilizar el método de
multiplicaciones sucesivas por 2, para convertir la parte
decimal, es muy largo y tedioso, así que usaremos
multiplicaciones por 16 y lo que obtendremos son los dígitos en
hexadecimal, los cuales son sencillos de pasar a binario.
37 en binario es 100101, ahora vamos a la parte decimal
0.4592*16 = 7.3472
0.3472*16 = 5.5552
0.5552*16 = 8.8832
0.8832*16 = 14.1312
0.1312*16 = 2.0992
0.0992*16 = 1.5872
0.5872*16 = 9.3952
0.3952*16 = 6.3232
0.3232*16 = 5,1712
0.1712*16 = 2.7392
0.7392*16 = 11.8272
0.8272*16 = 13.2352
0.2352*16 = 3,7632
è
è
è
è
è
è
è
è
è
è
è
è
è
7
5
8
E
2
1
9
6
5
2
B
D
3
è
è
è
è
è
è
è
è
è
è
è
è
è
0111
0101
1000
1110
0010
0001
1001
0110
0101
0010
1011
1101
0011
El número en binario será:
100101.0111010110001110001000011001011001010010101111010011
y normalizado:
1.00101011101011000111000100001100101100101001010111101 x 25
El formato para representar números con parte fraccionaria esta
conformado por 1 bit S para el signo y el resto de bits se distribuye entre
la característica C y la mantisa M. La característica es la representación del
exponente E en exceso a 2N-1-1, donde N es la cantidad de bits que tiene la
característica.
NUM = (-1)S * 1.M * 2E
donde E = C-2N-1+1
7
Existen dos formatos básicos:
a) Formato de precisión simple (32 bits), que consta de:
· 1 bit para el signo (S)
· 8 bits para la característica (C) y
· 23 bits para la mantisa (M)
La secuencia de bits del número será la siguiente:
S = 0, debido a que el número es positivo.
C = E+2N-1-1 = 5+28-1-1 = 5+128-1 = 132 = 10000100(2
M = 00101011101011000111000 que son los 23 dígitos que se
encuentran a la derecha del punto del numero normalizado.
Por lo tanto, la representación del valor más próximo a 37.4592 en 32
bits es: 0100 0010 0001 0101 1101 0110 0011 1000 = 4215D638h.
Para hallar su valor en decimal, se toma el número normalizado pero
sólo con los 23 dígitos a la derecha del punto (mantisa) y se corre el
punto hacia la derecha para convertirlo en entero, esto significa que el
punto tendrá que desplazarse 23 posiciones a la derecha y por ende
tendrá que restarse esta cantidad al exponente. Luego el entero se pasa
a decimal y se divide entre 2 elevado al nuevo exponente:
1.00101011101011000111000 x 25 , convertido a entero queda:
1001 0101 1101 0110 0011 1000 x 25-23
95D638h x 2-18= 9819704 x 2-18 = 9819704 / 218
9819704 / 262144 = 37,459197998046875
b) Formato de precisión doble (64 bits)
· 1 bit para signo (S)
· 11 bits para la característica (C)
· 52 bits para la mantisa (M)
La secuencia de bits del número será el siguiente:
S = 0, debido a que el número es positivo.
C = E+2N-1-1 = 5+211-1-1 = 5+1024-1 = 1028 = 10000000100(b
M = 1010101110101100011100010000110010110001010111101001
que son los 52 dígitos a la derecha del punto
La representación del valor más próximo a 37.4592 en 64 bits es:
404ABAC710CB295Eh (muy extenso para representarlo en binario)
Su valor en decimal es:
1.0010101110101100011100010000110010110010100101011110 x 25
10010101110101100011100010000110010110010100101011110 x 2-47
12BAC710CB295Eh x 2-47 = 5271913723799902 x 2-47
5271913723799902 / 247 = 5271913723799902 / 140737488355328
37.459199999999995611688063945621 (mayor precisión)
8
Una vez obtenida las respectivas representaciones de los valores con parte
fraccionaria, hay que evaluar el ERROR de precisión. Hay 2 tipos de error:
por DEFECTO y por EXCESO. El primero se da cuando la representación
obtenida es menor que el valor real y la segunda cuando es mayor,
obviamente se deberá elegir aquella que tenga menor error.
En el caso del formato de 32 bits, podemos apreciar que el digito 24 del
numero normalizado (después del punto) es 1 por lo que procedemos a
redondear (aumentar en 1 la mantisa) lo cual nos dará 95D639h x 2-18 =
37,459201812744140625. Esta representación, aunque genera un error por
exceso, es la más cercana al valor real.
Con el formato de 64 bits ocurre algo semejante. El bit 53 del numero
normalizado también es 1, por lo que se procede a redondear con lo que se
obtiene 12BAC710CB295Fh x 2-47 = 37,45920000000000271711 que
como se aprecia es bastante próximo a 34.4592.
1.4. Otros códigos
En ocasiones, se utilizan otros códigos binarios para números decimales y
caracteres alfanuméricos. Las computadoras digitales también emplean otros
códigos binarios para aplicaciones especiales. Veamos algunos de ellos:
1.5.1. Código Gray
Es la representación de un conjunto de valores de tal manera que los
dígitos que lo conforman (binario) cambia sólo uno de ellos conforme
avanza de un valor al siguiente. Por ejemplo, 3 en binario de cuatro bits es
0011 y 4 es 0100 como se aprecia, para pasar de 3 a 4, tres bits cambian su
estado, lo cual podría producir uno o más estados intermedios, si los tres
bits no cambiasen simultáneamente, esto no ocurre en código Gray.
Para formar una tabla de números en código Gray de N bits se debe seguir
las siguientes reglas:
a) Un código Gray de 1 bit tiene dos palabras código: 0 y 1.
b) Las primeros 2N palabras de N+1 bits son iguales a las palabras de N
bits precedidas por un 0.
c) Las ultimas 2N palabras de N+1 bits son iguales a las palabras de N bits
escritas en orden inverso y precedidas por un 1.
Ejemplo:
N=1
0
1
N=2
00
01
--11
10
N=3
000
001
011
010
----110
111
101
100
9
Para convertir binario a Gray se deben seguir los siguientes pasos:
a) Los bits de un código Gray de N bits se numeran de derecha a
izquierda de 0 a N-1.
b) El bit i es 0 si el bit i e i+1 de la palabra en binario son iguales y 1 en
caso contrario.
Ejemplo: Convertir 1011 a código Gray
Como el bit 0 y 1 son iguales, el bit 0 será: 0
Como el bit 1 y 2 son diferentes, el bit 1 será: 1
Como el bit 2 y 3 son diferentes, el bit 2 será: 1
Como el bit 3 y 4 (se asume 0) son diferentes, el bit 3 será: 1
Por lo tanto 1011 en código Gray es 1110
1.5.2. BCD
Decimal codificado en binario, pertenece a los sistemas de numeración no
posicionales y utiliza una asignación directa del equivalente binario del
digito decimal. Cada digito decimal se codifica por 4 dígitos binarios, pero
como con 4 bits se pueden representar hasta 16 valores, las 6 últimas
combinaciones (después del 9) que no se usan no tienen ningún valor
cuando se utiliza BCD.
Ejemplo: Codificar 5 en BCD = 0101 (igual que en binario)
Ejemplo: Codificar 173 en BCD
1 = 0001, 7=0111 y 3=0011
Por lo tanto 175 en BCD será: 000101110101
1.5.3. ASCII
Muchas aplicaciones requieren el manejo de datos que no solo están
formados por números sino también por letras del alfabeto y por ciertos
caracteres especiales. Un conjunto de caracteres alfanuméricos incluye los
10 dígitos decimales, las 26 letras del alfabeto y otros caracteres como $,
+, -, etc. Por lo que se necesitan 6 bits para codificarlos. Pero si además se
incluyen letras mayúsculas o minúsculas entonces se necesitarían 7 bits,
con lo que se puede codificar hasta 128 caracteres. Este conjunto de
códigos ha sido estandarizado y tiene el nombre de ASCII (Código
estándar americano para intercambio de información) y en la actualidad ha
sido extendido a 8 bits, es decir, 256 caracteres.
10
1.5. Ejercicios
1.5.1. Resueltos
a) Cual es el menor entero negativo y el mayor entero positivo que se
puede almacenar en un formato de 10 bits donde también se
representarán números negativos usando complemento a 2
El menor entero positivo será: -210-1 = -29 = -512
El mayor entero positivo será: 210-1-1 = 29-1 = 511
b) Convertir 8503 a base 13
8503/13
cociente 654, residuo 1 (digito menos significativo)
654/13
cociente 50, residuo 4
50/13
cociente 3, residuo 11
3/13
cociente 0, residuo 3 (digito más significativo)
Por lo tanto 8503 en base 13 será: 3B41
c) Convertir 46.483 a base 16
Primero la parte entera
46/16
cociente 2, residuo 14 = E
2/16
cociente 0, residuo 2 = 2
46 en base 16 es 2E
Ahora la parte fraccionaria
0.483*16 = 7.728
è
7
è
0.728*16 = 11.648
è
11
è
0.648*16 = 10.368
è
10
è
0.368*16 = 5.888
è
5
è
0.888*16 = 14.208
è
14
è
Una aproximación a 46.483 es 2E.7BA5E(16
7
B
A
5
E
d) Si el resultado anterior se almacena en una variable del tipo real de
precisión simple (32 bits) ¿Cuál es la secuencia de bits en este
formato?
46.483=2E.7BA5(16=101110.01111011101001011110
Normalizado: 1.0111001111011101001011110 x 25
Por lo tanto:
S = 0 (por ser positivo)
C = E+2N-1-1 = 5+27-1 = 132 = 10000100(2 (N= bits de la caracter.=8)
M = 01110011110111010010111 (sólo 23 bits), pero como el bit 24 es
1, hay que redondear a 01110011110111010011000 (+1)
Uniendo todos los bits: 01000010001110011110111010011000
Abreviado: 4239E98h
e) ¿Cual es el valor real almacenado en la variable del ejercicio anterior?
El número anterior normalizado a 23 bits y redondeado es:
1.01110011110111010011000 x 25
Convertido a entero:
101110011110111010011000 x 25-23
Convertido a hexadecimal
B9EE98 x 2-18
Convertido a decimal
12185240 x 2-18 = 46,483001708984375
11
f) Si A, B y C son variables enteras sin signo de 8 bits que contienen los
valores 203, 151 y 0 respectivamente. Determine el valor de C luego de
hacer la siguiente operación C=A+B
A = 203 = 11001011 +
B = 151 = 10010111
---------------------354 = 101100010
Como se observa el resultado es 354, pero se necesitan 9 bits para
poder representarlo y la variable C solo tiene 8 bits, por lo que sólo se
tomarán los 8 bits menos significativos (el bits más significativo se
desborda). Por lo tanto C = 01100010 = 98
g) Si A, B y C son variables enteras con signo de 16 bits que contienen
los valores 28391, 15016 y 0 respectivamente. Determine el valor de C
luego de hacer la siguiente operación C=A+B
A = 28391 = 0110111011100111 +
B = 15016 = 0011101010101000
-------------------------------------43407 = 1010100110001111
Aparentemente el resultado es 43407 (incluso no hay desbordamiento),
pero al ser C una variable entera con signo y como el bit más
significativo del resultado es 1 inmediatamente nos lleva a pensar que
el resultado es negativo, por lo que procedemos a hallar su
complemento a 2 para determinar su verdadero valor.
C = 1010100110001111
0101011001110000 (0s a 1s y 1s a 0s)
1 (sumamos 1)
-------------------------0101011001110001 = 22129
Pero como se ha complementado, entonces: C = -22129. Aunque
parezca increíble, el sumar dos números positivos puede dar como
resultado un número negativo.
h) Convertir a código Gray 158 (8 bits)
Primero convertimos 158 a binario de 8 bits esto es: 10011110
Analizando los bits de derecha a izquierda tenemos:
0 1 0 0 1 1 1 1 0
1 1 0 1 0 0 0 1
158 en codigo Gray es 11010001 = 209
i) Codifique en binario 2837 (BCD)
2=0010, 8=1000, 3=0011 y 7=0111
2837 en BCD es 0010100000110111
12
1.5.2. Propuestos
a) Cual es el menor entero negativo y el mayor entero positivo que se
puede almacenar en un formato de enteros con signo de 8 bits.
b) Se desea representar sólo enteros positivos con 12 bits, ¿Cuál es el
mayor entero que se puede representar?
c) Convertir 97058 a base 7.
d) Convertir 23.81 a base 12
e) Determine la secuencia de bits para la representación de -7903.37 en
un formato de 32 bits.
f) Determine el verdadero valor (en decimal) almacenado en el ejercicio
anterior.
g) Determine la secuencia de bits para la representación de 0.00517 en un
formato de 32 bits.
h) Determine el verdadero valor (en decimal) almacenado en el ejercicio
anterior.
i) Si A, B y C son variables enteras con signo de 16 bits que contienen
los valores -10732, 6932 y 0 respectivamente. Determine el valor de C
luego de hacer la siguiente operación C=A-B.
j) Si A, B y C son variables enteras sin signo de 10 bits que contienen los
valores 372, 998 y 0 respectivamente. Determine el valor de C luego de
hacer la siguiente operación C=A+B.
k) Convertir a código Gray 826 (10 bits).
l) Codifique en binario 8037 (BCD)
13
II CIRCUITOS DE LOGICA DIGITAL
2.1. Compuertas lógicas.
Las compuertas lógicas son bloques de hardware que producen señales de 0 o 1
cuando los requerimientos lógicos de entrada son satisfechos. Esta característica
permite utilizar el álgebra booleana como herramienta para el análisis y diseño de
circuitos lógicos digitales.
Cada compuerta tiene un símbolo gráfico distinto y su funcionamiento puede
describirse por medio de una expresión algebraica. La relación de entrada/salida
de las variables binarias para cada compuerta puede representarse en forma tabular
por una tabla de verdad. Los nombres, símbolos, tablas de verdad y funciones
algebraicas de las siete compuertas lógicas se listan en la figura 2.1
C=A∙B
A B C
0 0 0
0 1 0
1 0 0
1 1 1
C=A+B
A B C
0 0 0
0 1 1
1 0 1
1 1 1
C=A´
A C
0 1
1 0
C=(A∙B)´
A B C
0 0 1
0 1 1
1 0 1
1 1 0
C=AÅB
A B C
0 0 0
0 1 1
1 0 1
1 1 0
C=(AÅB)´
A B C
0 0 1
0 1 0
1 0 0
1 1 1
C=(A+B)´
A B C
0 0 1
0 1 0
1 0 0
1 1 0
Figura 2.1 Compuertas lógicas digitales
Las compuertas lógicas pueden combinarse para producir circuitos lógicos.
2.2. Álgebra booleana
El álgebra booleana difiere de forma significativa del álgebra en que las constantes
y variables booleanas sólo pueden tener, en diferentes ocasiones, dos valores
posibles: 0 o 1.
Las tres operaciones lógicas básicas son AND, OR y complemento.
Una función booleana puede expresarse algebraicamente con variables binarias,
símbolos de operadores lógicos, paréntesis y signos de igualdad. Para un valor
dado de las variables, la función sólo puede ser 0 o 1.
La relación entre una función y sus variables binarias se pueden representar en una
tabla de verdad, donde se lista las 2N combinaciones de las N variables binarias y,
también, mediante un diagrama lógico.
14
Ejemplo: F = A∙(B+C)´
A, B, C y F, por ser variables booleanas sólo
puede ser 0 o 1.
En la figura 2.2 se muestra la tabla de verdad con todas las posibles
combinaciones de A, B y C, así como el diagrama lógico para la función F
A
0
0
0
0
1
1
1
1
B
0
0
1
1
0
0
1
1
C
0
1
0
1
0
1
0
1
F
0
0
0
0
1
0
0
0
Figura 2.2 Tabla de verdad y diagrama lógico para F = A∙(B+C)´
La tabla de verdad la podemos interpretar de la siguiente manera: Cuando
las entradas A, B y C son 0, la salida F es 0 que es lo que se obtiene al
reemplazar A, B y C en la función.
F= A∙(B+C)´ = 0∙(0+0)´ = 0∙0´ = 0∙1 = 0
Ahora si A=1, B=0 y C=0, F tomará el valor de:
F= A∙(B+C)´ = 1∙(0+0)´ = 1∙0´ = 1∙1 = 1
Así, se va probando con todas las posibles combinaciones de las entradas
A, B y C (23=8 combinaciones) y se van obteniendo los valores de la salida
F.
Existen un conjunto de reglas que se pueden usar para simplificar
expresiones lógicas, es decir, para reducir el número de términos de una
expresión. Al hacer esto, la expresión reducida generará un circuito lógico
menos complejo que el de la expresión original. Las identidades se listan a
continuación:
1)
2)
3)
4)
5)
6)
7)
8)
A+0=A
A+1=1
A+A=A
A+A´=1
A+B=B+A
A+(B+C)=(A+B)+C
A∙(B+C)=AB+AC
(A+B)´=A´B´
9)
10)
11)
12)
13)
14)
15)
16)
17)
A∙0=0
A∙1=A
A∙A=A
A∙A´=0
A∙B=B∙A
A∙(B∙C)=(A∙B)∙C
A+B∙C=(A+B)∙(A+C)
(A∙B)´=A´+ B´
(A´)´=A
15
Las identidades 8) y 16) se conocen como los teoremas de DeMorgan y se
pueden generalizar de la siguiente manera:
(A+B+C+D+E+…)´ = A´B´C´D´E´…
(ABCDE…)´ = A´+B´+C´+D´+E´…
2.3. Mintérminos y Maxtérminos
La representación más básica de una función lógica es la tabla de verdad, pero la
información contenida en ella puede también expresarse en forma algebraica
mediante una suma canónica o un producto canónico.
La suma canónica de una función lógica es la suma de los productos lógicos de
las variables correspondientes a las líneas de la tabla de verdad para las que la
función produce una salida de 1. Cuando en la columna de la variable hay un 1 se
toma la variable y cuando hay un 0 se toma su complemento.
El producto canónico de una función lógica es un producto de las sumas lógicas
de las variables correspondientes a las combinaciones de entradas para las que la
función produce una salida de 0. En este caso, cuando en la columna de la variable
hay un 0 se toma la variable y cuando hay un 1 se toma su complemento.
Por ejemplo, dada la función lógica de la tabla siguiente:
Línea
0
1
2
3
4
5
6
7
X
0
0
0
0
1
1
1
1
Y
0
0
1
1
0
0
1
1
Z
0
1
0
1
0
1
0
1
F
1
0
0
1
1
0
1
1
Las líneas donde F es 1 son: 0, 3, 4 6 y 7 y el producto lógico de la fila:
0 es X´Y´Z´
en la columna X es 0, en Y es 0 y en Z es 0
3 es X´YZ
en la columna X es 0, en Y es 1 y en Z es 1
4 es XY´Z´
en la columna X es 1, en Y es 0 y en Z es 0
6 es XYZ´
en la columna X es 1, en Y es 1 y en Z es 0
7 es XYZ
en la columna X es 1, en Y es 1 y en Z es 1
Por consiguiente la suma canónica de la función es:
F = ∑xyz(0,3,4,6,7) = X´Y´Z´ + X´YZ + XY´Z´ + XYZ´ + XYZ
Para el producto canónico se tiene que:
Las líneas donde F es 0 son: 1, 2 y 5 y la suma lógica de la fila:
1 es X+Y+Z´ en la columna X es 0, en Y es 0 y en Z es 1
2 es X+Y´+Z en la columna X es 0, en Y es 1 y en Z es 0
5 es X´+Y+Z´ en la columna X es 1, en Y es 0 y en Z es 1
F = ∏ xyz(1,2,5) = (X+Y+Z´)(X+Y´+Z)(X´+Y+Z´)
16
2.4. Simplificación por Álgebra Booleana
Manipulando una expresión booleana, de acuerdo con las reglas del álgebra
booleana, se puede obtener una expresión más simple, una expresión que requiera
menos compuertas lógicas.
Ejemplo: Simplificar F = XY´Z + XY´Z´
Figura 2.3 Diagrama lógico de F = XY´Z + XY´Z´
Si hacemos que: A = XY´
F = AZ + AZ´
F = A(Z + Z´)
F=A1
F=A
F = XY´
entonces tenemos:
si aplicamos la identidad 7) queda:
aplicando la identidad 4) Z + Z´ = 1
por la identidad 10)
regresando el valor original
La tabla de verdad (del diagrama original y el simplificado) y el diagrama
lógico simplificado se muestran en la figura 2.4
X
0
0
0
0
1
1
1
1
Y
0
0
1
1
0
0
1
1
Z
0
1
0
1
0
1
0
1
F
0
0
0
0
1
0
1
0
Figura 2.4 Tabla de verdad y Diagrama lógico y para F = XY´
Por lo tanto las expresiones booleanas: XY´Z + XY´Z´ y XY´ son
equivalentes, esto implica que ambas expresiones tienen la misma tabla de
verdad a pesar que sus diagramas lógicos son diferentes.
Nótese que mientras en el diagrama lógico original se requieren 7
compuertas lógicas (2 NOT, 4 AND y 1 OR) en el diagrama simplificado
solo se necesitan 2 compuertas (1 NOT y 1 AND). Pero lo que debe quedar
bien claro es que ambos diagramas tienen la misma tabla de verdad, es decir,
que si a ambos diagramas se les aplica las mismas entradas, éstos generarán
las mismas salidas.
17
Ejemplo: Simplificar F = (A´ + B)(A + B)
Figura 2.5 Diagrama lógico F = (A´+B)(A +B)´
F = (A´ + B)(A + B)
F = (A´ + B)A + (A´ + B)B
F = A´A + BA + A´B + BB
por la identidad 7) o como,
simplemente, el producto
de 2 binomios
Aplicando la 12) A´A=0 y por la 11) BB=B queda
F = 0 + BA + A´B + B
F = 0 + AB + A´B + B
F = 0 + (A + A´)B + B
F = 0 + 1B + B
F=0+B+B
F=0+B
F=B
por la 13) BA=AB
por la 7)
por la 4)
por la 10)
por la 3)
por la 1)
Con esto queda demostrado que (A´ + B)(A + B) puede ser reemplazado por
simplemente B, es decir, que la salida F sólo y únicamente depende de la
variable de entrada B y no se toma en cuenta, para nada, el valor que pueda
tomar la variable A, esto también se puede apreciar en la tabla de verdad y el
diagrama simplificado de la expresión original de la figura 2.6
A
0
0
1
1
B
0
1
0
1
F
0
1
0
1
Figura 2.6 Tabla de verdad y Diagrama lógico y para F = B
En este caso se puede ver como queda simplificada una expresión booleana
al máximo.
Cabe recalcar, una vez más, que la tabla de verdad que se muestra en la
figura 2.6 satisface las condiciones de salida para ambos diagramas lógicos
(el original y el simplificado)
18
Ejemplo: Simplificar F = ((A´ + C)(B + D´))’
Figura 2.7 Diagrama lógico de F = ((A´+C)(B+D´))´
Hacemos que X=A´+C y Y=B+D´ y sustituimos en F
F = (XY)´
por la 16)
F = X´ + Y´
restableciendo valores
F = (A´ + C)´ + (B + D´)´
por la 8)
F = AC´ + B´D
Figura 2.8 Diagrama lógico de F = AC´ + B´D
La tabla de verdad que satisface las condiciones de salida de los dos
diagramas lógicos es la siguiente:
A
0
0
0
0
0
0
0
0
B
0
0
0
0
1
1
1
1
C
0
0
1
1
0
0
1
1
D
0
1
0
1
0
1
0
1
F
0
1
0
1
0
0
0
0
A
1
1
1
1
1
1
1
1
B
0
0
0
0
1
1
1
1
C
0
0
1
1
0
0
1
1
D
0
1
0
1
0
1
0
1
F
1
1
0
1
1
1
0
0
Figura 2.9 Tabla de verdad de F = AC´ + B´D
En este caso, como se observará en los diagramas, no se ha simplificado
mucho la expresión, pero se ha obtenido un equivalente con mayor presencia
de compuertas AND.
19
2.5. Simplificación por mapa de Karnaugh.
Si bien es cierto que una expresión booleana se puede simplificar mediante las
relaciones básicas del álgebra booleana, en algunas ocasiones esto se puede
complicar debido a que no esta definido una serie de pasos sucesivos a realizar en
el proceso de simplificación.
Existe un método grafico que proporciona un procedimiento sencillo y directo
para simplificar las expresiones booleanas y se denomina Mapa de Karnaugh.
El Mapa de Karnaugh se puede utilizar para resolver problemas con cualquier
número de variables de entrada, su utilidad práctica se limita a seis variables, con
una cantidad mayor será necesario el empleo de una computadora.
El método consiste en agrupar 2 o más términos de una suma canónica en los
cuales exista un cambio mínimo de bits (código Gray) entre las variables que los
conforman. Por ejemplo la suma canónica ABC + ABC´ (111 y 110,
respectivamente), puede simplificarse a AB(C+C´) = AB
La idea es hacer un mapa colocando juntas las líneas cuyos valores en binario
tengan un cambio mínimo de sus bits. Por ejemplo la línea 0 (0000) con las líneas
1, 2, 4 y 8 (0001, 0010, 0100 y 1000, respectivamente).
La línea 2 (0010) con las líneas 0, 3, 6 y 10 (0000, 0011, 0110 y 1010)
La línea 5 (0101) con las líneas 1, 4, 7 y 13 (0001, 0100, 0111 y 1101)
La línea 15 (1111) con las líneas 7, 11, 13 y 14 (0001, 0100, 0111 y 1101)
Siguiendo esta regla un mapa de 16 líneas (4 variables) seria el siguiente:
0
(0000)
4
(0100)
12
(1100)
8
(1000)
1
(0001)
5
(0101)
13
(1101)
9
(1001)
3
(0011)
7
(0111)
15
(1111)
11
(1011)
2
(0010)
6
(0110)
14
(1110)
10
(1010)
10
2
6
14
10
2
8
0
4
12
8
0
9
1
5
13
9
1
11
3
7
15
11
3
10
2
6
14
10
2
8
0
4
12
8
0
Figura 2.10 Mapa de Karnaugh para 4 variables
Como se observa la línea 0 tiene adyacentes a las líneas 1 y 4 pero no a las líneas
2 y 8. Igual ocurre con la línea 2 que tiene adyacentes a las líneas 3 y 6 pero no a
las líneas 0 y 10. Este inconveniente se resuelve copiando la tabla alrededor de la
tabla original como se muestra en la figura 2.10
Una vez que se tiene el mapa se forman grupos de 2, 4, 8, 16, etc. líneas
adyacentes cuya función de salida es 1. Esto significa que se pueden agrupar de:
2 términos: Las líneas (0,1), (0,4), (0,2), (0,8); (5,1), (5,7), (5,4), (5,13); (11,9),
(11,3), (11,10), (11,15), etc.
4 términos: Las líneas (0,1,3,2), (0,4,12,8), (0,1,4,5), (0,2,8,10); (1,5,13,9),
(1,3,9,11), (1,3,5,7); (6,4,14,12), (6,2,14,10), (6,7,15,14), etc.
8 términos: Las líneas (0,1,3,2,4,5,7,6), (0,4,12,8,1,5,13,9), (0,4,12,8,2,6,14,10),
(0,1,3,2,8,9,11,10), etc.
No hay que olvidar que solo se agruparán las líneas cuya función de salida es 1
20
Por ejemplo para la siguiente suma canónica ∑ABC(0,1,2,3,4,5,9,10) que se
corresponde con la siguiente tabla:
0
1
2
3
4
5
6
7
A
0
0
0
0
0
0
0
0
B
0
0
0
0
1
1
1
1
C
0
0
1
1
0
0
1
1
D
0
1
0
1
0
1
0
1
F
1
1
1
1
1
1
0
0
A
1
1
1
1
1
1
1
1
8
9
10
11
12
13
14
15
B
0
0
0
0
1
1
1
1
C
0
0
1
1
0
0
1
1
D
0
1
0
1
0
1
0
1
F
0
1
1
0
0
0
0
0
Figura 2.11 Tabla de verdad de ∑ABC(0,1,2,3,4,5,9,10)
La expresión sin simplificar será:
F = A´B´C´D´ + A´B´C´D + A´B´CD´ + A´B´CD + A´BC´D´ + A´BC´D + AB´C´D+ AB´CD´
El mapa de karnaugh, quedará así:
C´D´
00
A´B´
00
A´B
01
AB
11
AB´
10
C´D
01
0
1
1
1
4
1
12
5
13
1
7
15
0
9
8
0
2
1
0
0
CD´
10
3
1
1
0
CD
11
11
0
6
0
14
0
10
1
Figura 2.12 Mapa de Karnauhg de ∑ABC(0,1,2,3,4,5,9,10)
Los números en la esquina superior derecha de las celdas se corresponden con los
números de línea y los números en el centro son los valores que toma la función
de salida en esa línea.
En los bordes superior e izquierdo, aparecen los valores que pueden tomar las
variables lógicas. Por ejemplo, la intersección de la fila A´B y la columna C´D
definen el término A´BC´D (0101, línea 5). Otro detalle a tener en cuenta es el
orden o secuencia que tienen los elementos de los bordes, así, A´B´, A´B, AB y
AB´ se corresponden con 00, 01, 11 y 10 (código Gray para 0, 1, 2 y 3), de igual
manera ocurre con el borde superior.
A continuación se procederá a agrupar. Cuanto mayor número de elementos
tenga el grupo, mayor será la simplificación
Las líneas 0, 1, 3 y 2 forman el grupo 1.
Las líneas 0, 1, 4 y 5 forman el grupo 2.
Las líneas 1 y 9 forman el grupo 3 y, finalmente,
Las líneas 2 y 10 el grupo de 4.
21
No importa que se tomen líneas que pertenecen a algún grupo para formar otro
grupo.
Ahora pasaremos a simplificar. La regla de simplificación es sencilla:
“QUEDARÁN SOLO AQUELLAS VARIABLES LÓGICAS PARA LAS
QUE NO APARECE SU COMPLEMENTO EN EL GRUPO”
En el grupo 1 (A´B´C´D´ + A´B´C´D + A´B´CD + A´B´CD´) quedará: A´B´
En el grupo 2 (A´B´C´D´ + A´B´C´D + A´BC´D´ + A´BC´D) quedará: A´C´
En el grupo 3 (A´B´C´D + AB´C´D) quedará: B´C´D
En el grupo 4 (A´B´CD´ + AB´CD´) quedará: B´CD´
Por ultimo, se unen las reducciones mediante un operador OR (+) quedando:
F = A´B´ + A´C´ + B´C´D + B´CD´
Condición no importa
En algunos casos se va a dar que, ciertas entradas nunca van a ocurrir, por lo que
no estarán definidos los correspondientes valores para la función de salida. Esto se
conoce como condición NO IMPORTA, es decir, que no importa si la función de
salida toma el valor de 0 o 1, por lo que se puede establecer un valor arbitrario
para la función de salida de tal manera que permita simplificar aún más la
expresión.
Ejemplo: Diseñar un detector de dígitos BCD primos.
Como sabemos, los dígitos BCD son del 0 al 9 (0000 a 1001) y están
conformados por 4 bits. Por consiguiente, los dígitos BCD primos son: 1, 2,
3, 5 y 7.
La tabla de verdad para esta función será:
0
1
2
3
4
5
6
7
A
0
0
0
0
0
0
0
0
B
0
0
0
0
1
1
1
1
C
0
0
1
1
0
0
1
1
D
0
1
0
1
0
1
0
1
F
0
1
1
1
0
1
0
1
8
9
10
11
12
13
14
15
A
1
1
1
1
1
1
1
1
B
0
0
0
0
1
1
1
1
C
0
0
1
1
0
0
1
1
D
0
1
0
1
0
1
0
1
F
0
0
?
?
?
?
?
?
Figura 2.13 Tabla de verdad para detector de números primos
En la tabla, ABCD representan los 4 dígitos del código BCD. Nótese que
desde la línea 10 hasta la 15, la función de salida tiene el valor “?” debido a
que esos valores no están definidos para el código BCD, en otras palabras, si
las entradas es un código BCD, estas entradas (10-15) nunca ocurrirán.
22
Ahora construiremos el mapa de Karnaugh tal como se muestra en la figura
2.14. Nótese las líneas del 10 al 15, los ? significa que pueden tomar el valor
de 0 o 1 según nos convenga.
C´D´
00
A´B´
00
A´B
01
AB
11
AB´
10
C´D
01
0
0
1
1
4
0
12
5
13
8
0
7
15
?
9
0
2
1
1
?
CD´
10
3
1
1
?
CD
11
11
?
6
0
14
?
10
?
Figura 2.14 Mapa de Karnauhg de números primos BCD
Hay un grupo que está completamente definido, que es el grupo conformado
por las líneas 1, 3, 5 y 7, el problema es, con qué líneas agrupar la línea 2.
Un primer intento sería agrupar la línea 2 con la línea 3, con lo que se forma
un grupo de 2 líneas.
Un segundo intento es hacer 1 la línea 10 y agruparla con la línea 2, también
sería un grupo de 2 líneas.
Un tercer intento, es hacer 1 las líneas 11 y 10 y agruparlas con las líneas 3 y
2 (grupo de 4) con lo que obtendríamos una mayor simplificación. Al
parecer esto sería lo óptimo, por lo que la función quedará:
F = A´D + B´C
Esto también significa que la función de salida del resto de líneas (12, 13, 14
y 15) debemos asignarle el valor de 0.
2.6. Circuitos lógicos combinacionales.
Es un grupo de compuertas lógicas conectadas de una manera específica,
definiendo de esta forma un circuito con un conjunto de entradas y salidas
binarias. La característica principal de un circuito combinacional es que los
valores binarios de las salidas dependen o están en función, sólo y únicamente, de
una combinación binaria de entradas.
N variables
de entrada
A
B
Circuito
Combinacional
F1
F2
M variables
de salida
FM
Figura 2.15 Diagrama de bloque de un circuito combinacional
Un circuito combinacional puede describirse mediante una tabla de verdad que
muestre la relación binaria entre las N variables de entrada y las M variables de
salida.
23
2.6.1. Semisumador.
Es el circuito combinacional más simple y realiza la suma aritmética de
dos dígitos binarios. Se denomina semisumador porque las entradas están
conformadas por sólo los dos dígitos binarios a sumar y como salidas,
tiene el resultado de la suma y el acarreo generado.
A
0
0
1
1
B
0
1
0
1
S
0
1
1
0
C
0
0
0
1
Figura 2.16 Tabla de verdad y circuito combinacional de un semisumador
De la tabla podemos obtener las siguientes funciones lógicas S = A´B+AB´
y C = AB, pero A´B+AB´ = AÅB por lo que el circuito quedaría:
Figura 2.17 Circuito combinacional simplificado de un semisumador
2.6.2. Sumador completo.
Este circuito combinatorio tiene como entradas los dos dígitos binarios a
sumar (A, B) y además un acarreo inicial (K), es decir, tres entradas. Como
salidas, el resultado de la suma (S) y el acarreo generado o de salida (C).
A
0
0
0
0
1
1
1
1
B
0
0
1
1
0
0
1
1
K
0
1
0
1
0
1
0
1
S
0
1
1
0
1
0
0
1
C
0
0
0
1
0
1
1
1
Figura 2.18 Tabla de verdad y circuito combinacional de un sumador completo
De la tabla de la figura 2.18 se obtienen las funciones:
S = A´B´K+ABK +A´BK´+AB´K´ = (A´B´+AB)K+(A´B+AB´)K´
S = (AÅB)´K+(AÅB)K´ = (AÅB)ÅK
C = A´BK+AB´K+ABK´+ABK = (A´B+AB´)K+AB(K´+K)
C = (AÅB)K+AB
24
2.6.3. Sumador restador.
Los circuitos anteriores pueden tratarse como cajas negras, donde solo
sepamos las salidas que se van a obtener al ingresar entradas determinadas,
por ejemplo el diagrama de bloque para el sumador completo seria el
siguiente:
Figura 2.19 Diagrama de bloque de un sumador completo
Donde A y B son las entradas de los dígitos binarios a sumar, Ci es el
acarreo de entrada, Σ es la salida de la suma de los bits de entrada y Co el
acarreo de salida.
Se pueden usar estos circuitos simples para diseñar circuitos
cambinacionales más complejos como por ejemplo un sumador de 4 bits
tal como se muestra en la figura siguiente:
Figura 2.20 Diagrama de un Sumador de 4 bits
En el diagrama de la figura 2.20 hay 4 sumadores completos. K es el
acarreo de entrada, A3, A2, A1 y A0 son los 4 bits del numero A, al igual
que B3, B2, B1 y B0 del numero B.
El acarreo de salida Co de cada sumador se conecta al acarreo de entrada Ci
del siguiente bloque sumador. S3, S2, S1 y S0 es un número de 4 bits
resultado de la suma de A y B. Finalmente C contiene el acarreo de salida
resultado de la suma de los números de 4 bits A y B.
De igual forma su puede diseñar un sumador de 8, 16 o 32 bits o, en todo
caso, usando 2 sumadores de 4 bits se puede construir un sumador de 8
bits, con 4 uno de 16 y así sucesivamente.
Figura 2.21 Diagrama de un Sumador de 8 bits usando sumadores de 4 bits
25
La figura 2.21 muestra un sumador de 8 bits diseñado con 2 sumadores de
4 bits y estos a su vez se han diseñado usando sumadores completos de un
bit.
Usando la misma lógica se puede diseñar un restador, pero mejor aun,
pasemos a hablar de un circuito que realice ambas operaciones: un
sumador-restador.
Primero recordemos que una resta binaria (A-B) es igual que una suma
pero complementando a 2 el segundo operando (A+C2(B)), es decir que:
10 – 2 = 10 + C2(2)
En binario con 4 bits sería:
1010 – 0010 = 1010 + C2(0010) = 1010 + (1101 + 1)
Por consiguiente necesitamos diseñar un circuito tal, que cuando la
operación sea una suma el segundo operando B se mantenga igual pero, si
la operación es una resta se complemente (cambiar 1s por 0s y 0s por 1s y
sumarle 1). Una vez tratado el segundo operando se realiza una simple
suma.
Una entrada adicional (M) nos puede indicar si la operación a realizar es
una suma (0) o una resta (1). Si M=0, entonces el digito Bi debe quedar
igual (sumar), caso contrario el digito Bi debe ser complementado (restar).
Si miramos la tabla de verdad generada, donde B es la entrada al sumador,
(figura 2.22) lo que obtenemos es una operación XOR.
M
0
0
1
1
Bi
0
1
0
1
B
0
1
1
0
Figura 2.22 Tabla de verdad de la operación
Por lo tanto, mediante una operación XOR podemos, si fuera una resta,
complementar los 0s y los 1s del segundo operando; pero al hacer esto sólo
estamos hallando el complemento a 1, falta sumarle 1 para que se convierta
en el complemento a 2. Esto se logra conectando la entrada M al acarreo de
entrada (sumar 1), tal como se aprecia en la figura 2.23.
26
Figura 2.23 Diagrama de un Sumador-Restador de 4 bits
2.7. Flip-flops
Es una celda binaria capaz de almacenar un bit de información. Tiene 2 salidas,
una para el valor normal y una para el valor complementado del bit almacenado en
él. La diferencia entre los diversos tipos de flip-flops está en el número de entradas
que posean y la manera en la cual las entradas afectan el estado binario.
Comúnmente los flip-flops reciben el nombre de registros.
2.7.1. Flip Flop Básico con compuertas NAND y NOR
El circuito Flip-Flop más elemental que se puede construir es con 2
compuertas NAND como muestra la figura 2.24
R
0
0
1
1
S
0
1
0
1
Q
Q=Q’=1
1
0
Sin Cambio
Figura 2.24 Flip-flop básico NAND y su tabla d verdad
Resumen del flip-flop básico con compuertas NAND
1. R=S=1: Esta condición no tiene efecto alguno sobre el estado de salida.
Las salidas Q y Q’ permanecerán en el estado en el que se encontraban
antes de presentarse esta condición de entrada.
2. R=0, S=1: Este estado siempre ocasionará que la salida pase al estado
Q=1, donde permanecerá aun después de que R=1.
3. R=1, S=0: Esto siempre producirá el estado Q=0, donde la salida
permanecerá aun después de que S=1.
4. R=S=0: Esta condición intenta iniciar y borrar el registro básico en
forma simultanea y produce Q=Q’=1. No debe utilizarse.
La figura 2.25 muestra el diagrama de estados del flip-flop, donde los
círculos son los estados del flip-flop (salida Q) y las flechas las
transiciones que permiten pasar de un estado a otro.
Los valores 00, 01, 10 y 11 son los valores que pueden tomar las entradas
RS cuando el flip-flop se encuentre en alguno de sus 2 estados (0 o 1).
Como se aprecia la salida Q o estado al que pasaría, esta en función de las
entradas R, S y del estado actual en el que se encuentre el flip-flop. Por
ejemplo, si el flip-flop se encuentra en el estado 0 y RS=11 la salida Q es
0, pero si se encontrara en el estado 1, la salida Q sería 1.
10
10
0
11
00
01
1
00
01
11
Figura 2.25 Diagrama de estados del flip-flop NAND
27
Otra alternativa de flip-flop básico es la mostrada en la figura 2.26,
construido con 2 compuertas NOR
R
0
0
1
1
S
0
1
0
1
Q
Sin cambio
1
0
Q=Q’=0
Figura 2.26 Registro básico NOR y su tabla d verdad
Resumen del flip-flop básico con compuertas NOR
1. R=S=0: Esta condición no tiene efecto alguno sobre el estado de salida.
Las salidas Q y Q’ permanecerán en el estado en el que se encontraban
antes de presentarse esta condición de entrada.
2. R=0, S=1: Este estado siempre ocasionará que la salida pase al estado
Q=1, donde permanecerá aun después de que R=1.
3. R=1, S=0: Esto siempre producirá el estado Q=0, donde la salida
permanecerá aun después de que S=1.
4. R=S=1: Esta condición intenta iniciar y borrar el registro básico en
forma simultanea y produce Q=Q’=0. No debe utilizarse.
00
10
0
11
10
01
00
1
01
11
Figura 2.25 Diagrama de estados del flip-flop NOR
Al modificar el valor de una de las entradas del fli-flop, la salida Q cambia
inmediatamente, por lo que podemos considerar estas entradas como
asíncronas. Pero por lo general es necesario que las salidas se sincronicen
con una señal maestra conocida como señal del Reloj. Esto se logra
agregando un par de compuertas AND, con lo que ahora obtenemos un
flip-flop con entradas síncronas, lo que implica que las salidas no se
actualizaran mientras la señal de reloj no sea 1.
28
Figura 2.25 Diagrama de un flip-flop con entradas síncronas
2.7.2. Flip-flop SR sincronizado por reloj
S
0
0
1
1
R
0
1
0
1
CLK
↑
↑
↑
↑
Q
Q anterior
0
1
1
Q0
0
0
1
1
Q1
0
1
0
1
S
0
1
0
¿
R
¿
0
1
0
Figura 2.26 Símbolo grafico, Tabla característica y excitación de un FF RS
Ecuación característica: Q = S + R´Q
2.7.3. Flip-flop D sincronizado por reloj
D
0
1
CLK
↑
↑
Q
0
1
Q0
0
0
1
1
Q1
0
1
0
1
D
0
1
0
1
Figura 2.27 Símbolo grafico, Tabla característica y excitación de un FF D
Ecuación característica: Q = D
2.7.4. Flip-flop JK sincronizado por reloj
J
0
0
1
1
K
0
1
0
1
CLK
↑
↑
↑
↑
Q
Q anterior
0
1
Q´
Q0
0
0
1
1
Q1
0
1
0
1
J
0
1
¿
¿
K
¿
¿
1
0
Figura 2.28 Símbolo grafico, Tabla característica y excitación de un FF JK
Ecuación característica: Q = JQ´ + K´Q
2.7.5. Flip-flop T sincronizado por reloj
T
T
0
1
CLK
↑
↑
Q
Q anterior
Q´
Q0
0
0
1
1
Q1
0
1
0
1
T
0
1
1
0
Figura 2.29 Símbolo grafico, Tabla característica y excitación de un FF T
Ecuación característica: Q = Q Å T
29
2.8. Circuitos lógicos secuenciales.
Es un conjunto de compuertas lógicas (circuito combinacional) y flip-flops
interconectados entre si. La característica principal de un circuito secuencial es
que los valores binarios de las salidas no sólo dependen de sus entradas actuales
sino también de la secuencia de entradas previas.
2.8.1. Ecuaciones de entrada de los flip-flops
La figura 2.30 muestra un circuito secuencial conformado por 2 flip-flops
D y algunas compuertas lógicas.
Figura 2.30 Diagrama de un circuito secuencial con FF D
En un flip-flop tipo D la ecuación característica es Q=D (nótese que Q será
A en el primer flip-flop y B en el segundo), es decir A=DA y B=DB. Por lo
tanto DA será igual a la salida del circuito conformado por las compuertas
1, 2 y 3, es decir: A=DA=Ax+xB y DB a la salida de la compuerta 4,
B=DB=A´x. La salida “y” será igual al resultado de las compuertas 5, 6, 7
y 8; entonces: y=Ax´+Bx´.
Esto significa que el nuevo valor de A dependerá del actual valor de A, B y
x, mientras que el valor de B estará en función de B y A´. Lo siguiente será
construir la tabla de estados del circuito usando las expresiones halladas.
Estado actual
A
B
0
0
0
0
0
1
0
1
1
0
1
0
1
1
1
1
Entrada
x
0
1
0
1
0
1
0
1
Estado nuevo
A
B
0
0
0
1
0
0
1
1
0
0
1
0
0
0
1
0
Salida
y
0
0
1
0
1
0
1
0
30
Figura 2.31 Tabla de estados
Por ejemplo si los valores actuales de las variables A, B y x son 0, 1 y 1
respectivamente y los reemplazamos en las expresiones halladas,
obtendremos los nuevos valores de A y B:
A = Ax+xB
= 0∙1 + 1∙1 = 0 + 1 = 1
B = A´x
= 1∙1 = 1
y = Ax´+Bx´
= 0∙0 + 1∙0 = 0 + 0 = 0
Ahora, a partir de la tabla de estados, construiremos el diagrama de estados
Como tenemos 2 (N) Flip-flops y cada uno de ellos puede tener 2 estados
posibles, esto significa que el circuito secuencial tendrá 4 (2N) estados
(AB) en total 00, 01, 10 y 11.
Cuando el estado actual (AB) es 00 y x es 0, el estado siguiente es 00 y la
salida y=0, pero si x=1 el siguiente estado es 01 y la salida y=0.
Si el estado actual es 11 y x=0 el siguiente estado es 00 y la salida y=1,
pero si x=1 el estado siguiente es 10 y la salida y=0. Si continuamos con
este razonamiento, obtendremos el siguiente diagrama:
0/0
1/0
0/1
00
0/1
10
0/1
1/0
01
1/0
11
1/0
Figura 2.31 Diagrama de estados
Los números que aparecen en el numerador son las entradas, mientras los
denominadores son las salidas.
Ahora analicemos un circuito secuencial con flip-flops tipo JK.
Figura 2.32 Diagrama de circuito secuencial con FF JK
Las ecuaciones de entrada son: JA=x, KA=x, JB=z, KB=z, z=(x+A)B´ y la
ecuación característica para estos flip-flops es Q=JQ´+K´Q que para este
caso sería: A=JAA´+KA´A y B=JBB´+KB´B
31
Estado actual
A
0
0
0
0
1
1
1
1
Entrada
=x
=x
x
0
1
0
1
0
1
0
1
JA
0
1
0
1
0
1
0
1
KA
0
1
0
1
0
1
0
1
B
0
0
1
1
0
0
1
1
Salida
(x+A)B´
z
0
1
0
0
1
1
0
0
=z
=z
JB
0
1
0
0
1
1
0
0
KB
0
1
0
0
1
1
0
0
Estado nuevo
= JQ´+K´Q
A
B
0
0
1
1
0
1
1
1
1
1
0
1
1
1
0
1
Figura 2.33 Tabla de estados
Por ejemplo si A, B y x valen 1, 0 y 0, respectivamente, entonces:
JA= x = 0
KA = x = 0
z = (x+A)B´ = (0+1)1 = 1
JB = z = 1
KB = z = 1
A = JAA´+KA´A = 0∙0+1∙1 = 1
B = JBB´+KB´B = 1∙1+0∙0 = 1
Todo esto queda resumido en el diagrama de estados siguiente
0/0
0/0
00
01
1/0
1/1
1/1
1/0
11
10
0/0
0/1
Figura 2.34 Diagrama de estados
Hasta ahora hemos partido del diagrama de un circuito secuencial para
determinar el comportamiento de éste, pero también se puede dar el caso
contrario, es decir, que a partir del comportamiento del circuito secuencial
determinar o diseñar dicho circuito.
Por ejemplo: Dado el diagrama de estados de la figura 2.35 diseñar un
circuito secuencial haciendo uso de flip-flops tipo JK
0/0
0/1
1/0
00
11
1/1
1/1
01
10
0/1
0/0
1/0
32
Figura 2.35 Diagrama de estados
En este tipo de problemas conocemos el estado actual (Q0) y el estado
nuevo (Q1) al que pasaría el circuito secuencial al generarse una entrada x.
En este caso haremos uso de la tabla de excitación del FF JK, la cual nos
permite saber que valores deben tener las entradas J y K para poder pasar
de Q0 a Q1
Estado actual
Q0
A
B
0
0
0
0
0
1
0
1
1
0
1
0
1
1
1
1
Entrada
x
0
1
0
1
0
1
0
1
Estado nuevo
Q1
A
B
0
0
0
1
0
1
1
0
1
0
1
1
1
1
0
0
FF-A
JA
0
0
0
1
¿
¿
¿
¿
FF-B
KA
¿
¿
¿
¿
0
0
0
1
JB
0
1
¿
¿
0
1
¿
¿
KB
¿
¿
0
1
¿
¿
0
1
Salida
z
0
1
1
0
0
1
1
0
Figura 2.35 Tabla de estados
Por ejemplo, si el estado actual del FF A es 0, para que pueda pasar al
estado 0 (se queda en el mismo estado), la entrada J (JA) debe ser 0 y K
(KA) debe ser ¿ (entrada no importa), según la tabla de excitación.
Para el caso del FF B, si su estado actual es 1, para que pueda pasar al
estado 1 (se queda en el mismo estado), la entrada J (JB) debe ser ¿
(entrada no importa) y K (KB) debe ser 0.
Continuando con este razonamiento se completa la tabla y luego se
procede a determinar JA, KA, JB y KB en función de A, B y x, es decir, que
se toma a A, B (estado actual), x como entradas y a JA, KA, JB y KB como
funciones de salida. Obviamente el método más práctico para todos estos
casos es: El mapa de Karnaugh.
JA
X´
X
0
1
A´B´
0
A´B
0
AB
¿
AB´
¿
2
6
4
0
3
1
7
¿
5
¿
KA
X´
X
0
1
A´B´
¿
A´B
¿
AB
0
AB´
0
2
6
4
¿
3
¿
7
1
5
0
JB
X´
X
0
1
A´B´
0
A´B
¿
AB
¿
AB´
0
2
6
4
1
3
¿
7
¿
5
1
KB
X´
0
A´B´
¿
A´B
0
AB
0
AB´
¿
2
6
4
X
1
¿
3
1
7
1
5
¿
Figura 2.36 Mapas de Karnaugh para JA, KA, JB y KB
De los mapas de Karnaugh podemos determinar que:
JA = Bx
KA = Bx
JB = x
KB = x
33
Del mismo modo se puede determinar z = Bx´ + B´x = BÅx
Con todas estas expresiones procedemos a diseñar el circuito secuencial tal
como se muestra en la figura 2.37
Figura 2.37 Diagrama del circuito secuencial
2.9. Solución de ejercicios con Boole
Boole es un programa que permite diseñar y analizar circuitos combinacionales y
secuenciales. Este software es de libre uso y puede ser descargado de la siguiente
página: http://paginaspersonales.deusto.es/zubia/BOOLE_SP.zip
Una vez descargado y descomprimido se ejecuta Boole.exe y aparece una ventana
con 2 botones: “Sistema combinacional” y “Sistema secuencial. Autómatas”
2.9.1. Circuitos combinacionales.
Seleccionado el botón “Sistema combinacional” aparecerá la ventana
mostrada en la figura 2.38
34
Figura 2.38 Ventana de Sistema combinacional de Boole
Primero debemos darle un nombre al sistema (Ejercicio1) y luego
establecer la cantidad de variables de entrada (3) y salida (1). Se puede
establecer un nombre para las variables de entrada (X, Y, Z) y de salida o
dejarlos con sus valores por defecto A, B, C y F respectivamente.
Ahora elegimos el botón “Tabla de verdad manual” para ingresar los
valores de la tabla de verdad del circuito. La ventana que aparecerá es la
mostrada en la figura 2.39.
Figura 2.39 Ventana para el llenado de la tabla de verdad
El botón “Condiciones libres” llenara de X la función de salida F, mientras
que el botón “Ceros” de ceros y “Unos” de unos. Obvio!
Bastara con hacer clic, una o varias veces, en cualquiera de las celdas de la
función F para que cambie a 0, 1 o X
Una vez llenada la tabla hacemos clic en “Evaluar” y luego en “Salir”, para
regresar a la ventana anterior en donde haremos clic en el botón “Expr.
SOP simplificada” donde aparecerá la siguiente ventana:
35
Figura 2.40 Ventana de Expresión SOP simplificada
En ella se observa las expresiones lógicas simplificadas de las funciones
(F:1, F:2, …) y 4 botones:
Veitch-Karnough, que permite ver el mapa de Karnaugh de la función
con las agrupaciones de líneas que se han empleado para la simplificación
Figura 2.41 Ventana de mapa de Karnaugh
Nand/Nor que muestra una ventana con expresiones lógicas de F, pero
empleando solo operadores Nand o Nor
Visualizar circuito que muestra una ventana con el diagrama del circuito
simplificado, como se muestra en la figura 2.42
Figura 2.42 Ventana de diagrama del circuito
36
2.9.2. Circuitos secuenciales.
Al seleccionar el botón “Sistema secuencial. Autómatas” aparecerá la
ventana de la figura 2.43
Figura 2.43 Ventana de Sistema Secuencial
Al seleccionar la opción “Nuevo” del menú “Archivo” aparecerá la
ventana de la figura 2.44 que nos permitirá elegir el tipo de autómata con
el que se desea trabajar: Moore y Mealy (en el tipo Mealy tenemos que
ingresar el valor de la transición y el valor de la salida por cada flecha,
mientras que en el Moore ingresamos la transición en cada flecha y la
salida en cada círculo). Así también, se establece la cantidad de entradas y
salidas y sus nombres respectivos.
Figura 2.44 Ventana de Sistema Secuencial
El ejemplo a desarrollar es el autómata de la figura 2.31 y el tipo de
autómata, Mealy. Una vez establecido la cantidad de variables y sus
nombres se hace clic en “Aceptar” para que aparezca la ventana de la
figura 2.44 donde se procederá a dibujar el autómata.
Hay que reconocer que la interfaz grafica para dibujar el autómata es un
poco dura, pero con un poco de práctica se logrará dominarla.
Primero dibujaremos los estados, 4 en este caso. Para ello se hace clic en el
botón círculo de la ventana “Barra” (barra de herramientas) y luego
hacemos clic en el fondo blanco tantas veces como estados deseemos.
Para dibujar las transiciones, seleccionamos el botón flecha derecha de la
ventana “Barra” y luego hacemos clic en el estado inicial y luego en el
37
estado final los cuales quedarán unidos mediante una flecha. Esta
operación deberá repetirse tantas veces como transiciones tenga el
autómata.
Figura 2.45 Ventana donde se dibuja el Autómata
Para hacer cualquier modificación respecto a la posición de los estados, se
debe seleccionar primero la flecha tipo puntero de mouse y luego arrastrar
el elemento a mover (círculo o flecha). Así mismo se puede también
establecer los valores de las entradas y salidas; haciendo doble clic sobre
cualquier flecha, aparecerá una ventana donde se ingresará la entrada y
salida respectivamente
Para visualizar el circuito abrimos el menú “Ver circuito” y podemos elegir
la opción “Con flip-flops D”
Figura 2.46 Circuito secuencial con Flip-Flop tipo D
38
O la opción “Con flip-flops JK”
Figura 2.47 Circuito secuencial con Flip-Flop tipo JK
Otra opción interesante es “Simulación interactiva” del menú “Resultados”
donde se podrá simular las transiciones de los estados al tomar un valor
determinado la entrada “x” cada vez que se haga clic en el botón “CLK”
Figura 2.48 Ventana de simulación interactiva
39
2.10. Simulación de circuitos con Electronics WorkBench
Electronics Workbench (EWB) o Banco de Trabajo de Electrónica, es un
programa para diseñar y simular circuitos electrónicos y lógicos, desarrollado por
INTERACTIVE IMAGE TECHNOLOGIES LTD. El programa tiene una interfaz
gráfica con el usuario que lo hace muy intuitivo, cómodo de usar y rápido de
trabajar, razón por la cual no vamos a describir, con detalle, como hacer los
circuitos sino, mas bien, las herramientas a usar para simular nuestros circuitos.
Activar
simulación
Figura 2.50 Ventana principalde WorkBench
La figura 2.50 muestra la ventana principal del WorkBench v5.12, junto con
algunas cajas de herramientas que se van a emplear en el diseño y simulación de
circuitos digitales.
Para iniciar el diseño de un circuito, se hace clic en el botón respectivo de la barra
de herramientas, para que aparezca la caja de herramientas con la que deseamos
trabajar (Logic Gates - Compuertas Lógicas, por ejemplo). A continuación
seleccionamos el elemento de la caja de herramientas que queremos agregar y lo
arrastramos hacia el área de trabajo (ventana de fondo blanco), esta operación la
repetimos tantas veces como elementos deseemos.
Todos los elementos tienen una o más salidas, las cuales al señalarlas con el
puntero del mouse aparece un círculo negro sobre ellas, lo cual indica que
podemos iniciar la operación de conexión con otros componentes. Al arrastrar y
llegar a la salida (entrada) de otro componente, también aparecerá un círculo
negro, con lo cual podemos finalizar la conexión.
Al finalizar este proceso veremos una línea que conecta ambos componentes y así
sucesivamente se puede repetir esta operación con el resto de elementos.
La figura 2.51 muestra un circuito terminado. Como se aprecia es el diagrama de
un sumador completo de un bit (figura 2.18) al cual se le han agregado una batería
40
de 5v, 3 switch (A, B y C), 2 probadores (rojo y azul) para poder hacer la
simulación.
Figura 2.51 Circuito de un sumador completo de un bit
La batería se usa para simular los 0s y 1s digitales (0V. y 5V.) y los switch para
conmutar las entradas a 0V. o 5V. (0 o 1). Para establecer las propiedades de los
componentes basta con hacer doble clic sobre ellos y elegir la ficha respectiva
donde se establecerán los valores deseados. Por ejemplo, hacer doble clic sobre
batería, elegir la ficha “Value” y establecemos el valor de 5V, para los switch,
también, elegimos la ficha Value y establecemos la tecla (A, B y C
respectivamente) con la cual conmutará el switch.
Para iniciar la simulación hacer clic en el botón 0/1 que se encuentra en la esquina
superior derecha de la ventana. Bastará con presionar A, B o C para conmutar las
entradas para las compuertas. Cada vez que la salida sea 1, los probadores se
encenderán con el color respectivo.
El ejemplo anterior es sólo para iniciarnos en el proceso de simulación pero lo mas
apropiado es utilizar el Generador de Palabras (Word Generador) tal como se
muestra en la figura siguiente:
Figura 2.52 Circuito del sumador completo con el generador de palabras
Un Generador de Palabras es un instrumento que permite generar palabras de 16
bits y hacer que sus salidas contengan estos valores. Al conectar las salidas del
Generador de Palabras a las entradas de los diferentes componentes podemos
estudiar el comportamiento del circuito, o mejor dicho las salidas de éste, frente a
un conjunto de valores de entrada.
El Generador de Palabras es el 5to botón (Word Generador) de la caja de
herramientas Instruments (Instrumentos) y al hacer doble clic sobre él aparecerá
la ventana de la figura 2.53, con la cual podemos configurarlo.
41
Figura 2.53 Ventana de configuración del Generador de Palabras
En la parte izquierda hay una lista donde se puede ingresar las palabras en
hexadecimal (4 dígitos) que deseamos generar. Esto también lo podemos hacer
ubicándonos primero en la posición dentro de la lista donde deseamos insertar la
palabra y luego en la parte inferior derecha (Binary) escribir el valor en binario
(16 dígitos).
En el área Address se puede ver:
· Edit.- Muestra el valor de la palabra a generar, ingresada o editada.
· Current.- Cuando se esta simulando, muestra el valor actual que se está
generando o que esta presente en las salidas del generador.
· Initial.- Muestra o establece la dirección de la primera palabra a generar.
· Final.- Muestra o establece la dirección de la última palabra a generar.
En Frecuency se establece la frecuencia con la que se generaran las palabras. Para
la simulación es recomendable 1 Hz, pero se puede cambiar a kHz o MHz
Finalmente en la parte superior derecha se encuentran 4 botones que permiten
establecer el ciclo de generación de las palabras
· Cycle.- Permite generar las palabras en forma cíclica, es decir que una vez
que se genero la última, continúa con la primera y así sucesivamente.
· Burst.- Una vez generada la última palabra se detiene.
· Step.- En esta modalidad, cada vez que se desee generar una palabra se tiene
que hacer clic en este botón.
· Breakpoint.- Sirve para crear puntos de parada, es decir que, cuando se vaya
a generar cierta palabra establecida como Breakpoint el simulador se detiene.
Para ello sólo basta seleccionar la palabra y hacer clic en este botón
· Pattern.- Muestra una ventana que permite establecer la forma como se
llenará la lista de palabras:
v Clear buffer: Limpia la lista de palabras (la llena de ceros).
v Open: Carga la lista de palabras desde un archivo texto.
v Save: Graba en un archivo texto la lista de palabras.
v Up counter: Carga la lista de palabras desde el 0000 hasta el 03FF.
v Down counter: Carga la lista de palabras desde el 03FF hasta el 0000.
v Shift right: Carga la lista de palabras con potencias de 2 (decrecientes).
v Shift left: Carga la lista de palabras con potencias de 2 (crecientes).
42
Otro instrumento interesante es el Convertidor Lógico (Logic Converter). Es el
7mo botón de la caja de herramientas Instruments. Este instrumento permite
generar la tabla de verdad, la expresión booleana original y simplificada a partir de
un circuito. También permite crear una tabla de verdad y a partir de ella las
expresiones booleanas correspondientes así como el circuito respectivo.
La figura 2.54 muestra las conexiones que se deben realizar para evaluar la salida
F del circuito de la figura 2.3.
Figura 2.54 Conexión del Convertidor Lógico
Igual que el caso anterior, hacer doble clic sobre el Convertidor Lógico para que
aparezca la ventana de la figura 2.55 que es donde se visualizan los resultados
Figura 2.54 Ventana del Convertidor Lógico
·
·
·
Con el primer botón, se generará la tabla de verdad con los respectivos valores
de la función de salida
Con el segundo botón se obtiene la expresión booleana tomada directamente
de la tabla, sin simplificar (maxtérminos).
Con el tercer botón se obtiene la expresión booleana simplificada
También se puede trabajar sin tener un circuito, generando una tabla de verdad o
ingresando una expresión booleana.
En el primer caso, se hace clic sobre las variables que se van a usar (A, B, C,…H)
y en forma automática se va generando la tabla de verdad. Luego hay que ubicarse
sobre los valores que aparecen a la derecha (función de salida) y establecer los
nuevos. Ahora ya podemos hacer uso del segundo, tercero, quinto y sexto botón.
43
En el segundo caso se ingresa una expresión booleana en el rectángulo blanco de
la parte inferior de la ventana, con lo que luego se podrá hacer uso de los botones
cuarto, quinto y sexto
·
·
·
Con el cuarto botón, dada una expresión booleana, se obtiene la tabla de
verdad a partir de dicha expresión.
Con el quinto botón, a partir de una expresión booleana, se obtiene el circuito
o diagrama.
Con el sexto botón se obtiene el diagrama pero compuesto por sólo
compuertas NAND
Ahora veamos un circuito secuencial.
Al diagrama de la figura 2.37 se le ha agregado una batería y witch, para simular
los valores de la entrada X. Algo semejante se pudo haber usado para generar la
señal de reloj (CLK) que se encarga de sincronizar los flip-flops, pero en su lugar
es mejor usar un Generador de Señales (Function Generator) tal como se puede
ver en la figura 2.55
Figura 2.55 Circuito con Generador de Señales
El Generador de Señales, es un instrumento que se usa para generar 3 tipos de
señales u ondas: Sinusoidal, triangular y cuadrada
Haciendo doble clic en el Generador de Señales aparecerá una ventana que
permitirá establecer la configuración de éste. Aquí se puede seleccionar el tipo de
señal, frecuencia, amplitud, ciclo útil y desplazamiento. Ver figura 2.56
Figura 2.56 Generador de Señales
44
2.11. Ejercicios resueltos y propuestos
2.11.1. Resueltos
a) Simplificar AB+A(CD+CD´)
AB+A(C(D+D´)
AB+A(C(1))
AB+AC
A(B+C)
b) Simplificar (BC´+A´D)(AB´+CD´)
BC´AB´+BC´CD´+A´DAB´+A´DCD´
ABB´C´+BC´CD´+A´AB´D+A´CDD´
AC´ + BD´ + B´D + A´C
AC´+A´C+ BD´+ B´D
AÅC+BÅD
c) Dada la función boaleana: F=XY´Z+X´Y´Z+XYZ
i.
Listar la tabla de verdad
Los términos que conforman la expresión booleana son los
valores de las variables para las cuales F es 1, por consiguiente:
Para XY´Z=101, X´Y´Z=001, XYZ=111 F=1 entonces:
X
0
0
0
0
1
1
1
1
Y
0
0
1
1
0
0
1
1
Z
0
1
0
1
0
1
0
1
F
0
1
0
0
0
1
0
1
ii.
Simplificar la expresión booleana
XY´Z+X´Y´Z+XYZ
(X+X´)Y´Z+XYZ
(1)Y´Z+XYZ
Y´Z+XYZ
(Y´+XY)Z
((Y´+X)(Y´+Y))Z
((Y´+X)(1))Z
(Y´+X)Z
Y´Z+XZ
iii.
Dibujar el diagrama lógico original y el simplificado
45
d) Simplificar la siguiente función usando mapas de Karnaugh
F(x,y,z)= ∑(1,2,3,6,7)
La función original es: F=X´Y´Z+X´YZ´+X´YZ+XYZ´+XYZ
Z´
Z
X´Y´
0
0
1
1
X´Y
2
1
3
1
XY
6
1
7
1
XY´
4
0
5
0
La función simplificada quedará: F=X´Z+Y
e) Simplificar la siguiente función usando mapas de Karnaugh
F(x,y,z)= ∑(0,2,3,4,6)
La función original es: F=X´Y´Z´+X´YZ´+X´YZ+XY´Z´+XYZ´
Z´
Z
0
X´Y´
1
1
0
2
X´Y
1
6
XY
F=Z´+X´Y
7
1
0
4
XY´
La función simplificada quedará:
3
1
5
1
0
f) En una cierta empresa los cuatro directivos se distribuyen las acciones
según A=45%, B=30%, C=15% y D=10%. Diseñar una máquina de
escrutinio sabiendo que cada miembro tiene un porcentaje de voto
igual a su número de acciones y que para aprobar una moción los votos
afirmativos deben superar el 50 %
Cada vez que A=1 se deberá sumar 45% al resto de los votos, si B=1
se debe adicionar un 30% más, si C=1 un 15% más y si D=1 un 10%
más. Si al final la suma de los porcentajes es mayor que 50% entonces
F=1. Con lo anterior se construye la tabla siguiente:
0
1
2
3
4
5
6
7
A
0
0
0
0
0
0
0
0
B
0
0
0
0
1
1
1
1
C
0
0
1
1
0
0
1
1
D
0
1
0
1
0
1
0
1
F
0
0
0
0
0
0
0
1
8
9
10
11
12
13
14
15
A
1
1
1
1
1
1
1
1
B
0
0
0
0
1
1
1
1
C
0
0
1
1
0
0
1
1
D
0
1
0
1
0
1
0
1
F
0
1
1
1
1
1
1
1
La expresión booleana resultante es:
F=A´BCD+AB´C´D+AB´CD´+AB´CD+ABC´D´+ABC´D+ABCD´+ABCD
Simplificándola ya sea por álgebra booleana o por mapas de karnaugh
quedara:
F=AB+AC+AD+BCD=A(B+C+D)+BCD
46
El diagrama lógico del dispositivo es:
g) Se desea gobernar un motor desde 4 interruptores: A,B,C y D de forma
que entre en funcionamiento si están cerrados 3 y sólo 3 de ellos.
1, 2, 4 y 8 son números con 3 bits igual a 0, por lo tanto:
F(A,B,C,D)= ∑(1,2,4,8)
Luego: F=A´B´C´D+A´B´CD´+A´BC´D´+AB´C´D´
Al no poderse simplificar el diagrama lógico queda:
h) Un circuito secuencial tiene 2 flip-flops D: A y B; 2 entradas X y Y, y
una salida Z. Las ecuaciones de entrada de los flip-flops y la salida del
circuito son como sigue: DA=X´Y+XA, DB=X´B+XA y Z=B
i. Tabular la tabla de estadosDibujar el diagrama lógico del circuito
Estado actual
A
B
0
0
0
0
0
0
0
0
0
1
0
1
0
1
0
1
Entradas
x
y
0
0
0
1
1
0
1
1
0
0
0
1
1
0
1
1
Estado nuevo
A
B
0
0
1
0
0
0
0
0
0
1
1
1
0
0
0
0
Salida
z
0
0
0
0
1
1
0
0
47
Estado actual
A
B
1
0
1
0
1
0
1
0
1
1
1
1
1
1
1
1
Entradas
x
y
0
0
0
1
1
0
1
1
0
0
0
1
1
0
1
1
Estado nuevo
A
B
0
0
1
0
1
1
1
1
0
1
1
1
1
1
1
1
Salida
z
0
0
1
1
1
1
1
1
Con las ecuaciones de entrada se llena la tabla anterior, recordando
que DA es el nuevo estado del flip-flop A y DB del flip-flop B es
decir que: A=DA=X´Y+XA y B=DB=X´B+XA
ii. Dibujar el diagrama lógico del circuito.
iii. Dibujar el diagrama de transición de estados.
00/0
00/1
10/0
(10|11)/0
00
01
11/0
01/0
00/0
01/1
10
01/0
00/1
11
(10|11)/1
01/1
10/1
11/1
Donde el rotulado de las flechas significa: xy/z
i) Diseñe un contador binario de 2 bits usando flip-flop JK. El contador
debe tener una entrada X la cual cuando es 0 el contador es ascendente
y cuando X=1, descendente.
Como el contador es de 2 bits significa que se va a requerir de 2 flipflop y por consiguiente existirán 4 estados 00, 01, 10 y 11 que su vez
se corresponderán con las salidas deseadas 0, 1, 2 y 3, es decir que no
se requiere de salida alguna ya que el estado o salida del flip-flop será
la salida del contador
48
Primero diseñaremos el diagrama de estados de transición
0
00
01
1
1
0
0
1
1
11
10
0
Luego, haciendo uso de la tabla de excitación para flip-flop JK, la tabla
de estados
Estado actual
Q0
A
B
0
0
0
0
0
1
0
1
1
0
1
0
1
1
1
1
Entrada
X
0
1
0
1
0
1
0
1
Estado nuevo
Q1
A
B
0
1
1
1
1
0
0
0
1
1
0
1
0
0
1
0
FF-A
JA
0
1
1
0
?
?
?
?
FF-B
KA
?
?
?
?
0
1
1
0
JB
1
1
?
?
1
1
?
?
KB
?
?
1
1
?
?
1
1
Y mediante mapas de Karnaugh hallar JA, KA, JB y KB en función de A,
ByX
JA
X´
X
0
1
A´B´
0
A´B
1
AB
?
AB´
?
2
6
4
1
3
0
7
?
5
?
JA=BX´+B´X
KA
X´
X
0
1
A´B´
?
A´B
?
AB
1
AB´
0
2
6
4
?
3
?
7
0
5
1
KA=BX´+B´X
JB
X´
X
0
1
A´B´
1
A´B
?
AB
?
AB´
1
2
6
4
JB=1
1
3
?
7
?
5
1
KB
X´
X
0
A´B´
?
A´B
1
AB
1
AB´
?
1
?
2
3
1
6
7
1
4
5
?
KB=1
Finalmente usando las ecuaciones booleanas diseñamos el diagrama
lógico
49
2.11.2. Propuestos
a) Simplificar X´Z´ + Y´Z´ + YZ´ + XY
b) Simplificar (A+B)(A´+C)(B´+C´)
c) Dada la función boaleana: AC´ + B´D + A´CD + ABCD
i.
Listar la tabla de verdad
ii.
Simplificar la expresión booleana
iii.
Dibujar el diagrama lógico original y simplificado
d) Indicar, explicando su respuesta, cual de las siguientes igualdades es
correcta.
i.
a b + a c + c b = (a + b) ( a + c ) ( c + b )
ii.
(a + b + c )( a + b + c ) + a b = ( a b c + a b c) ( a + b )
iii.
a (a Å c) = a b Å a c
e) Simplificar la siguiente función usando mapas de Karnaugh
F=A´B´C´+A´BC+ABC+AB´C´+AB´C
f) Se desea controlar dos motores M1 y M2 por medio de los contactos de
tres interruptores A, B y C, de forma que se cumplan las siguientes
condiciones:
i.
Si A está cerrado y los otros dos no, se activa M1.
ii.
Si C está cerrado y los otros dos no, se activa M2.
iii.
Si los tres interruptores están cerrados se activan M1 y M2.
Para el resto de condiciones los motores estarán parados.
g) Diseñe un circuito lógico que tenga 4 entradas y una salida. Las 4
entradas son para ingresar un número de 4 bits y la salida debe ser 1
cuando el número sea mayor que 2 y menor que 8.
h) Diseñe un contador módulo 8 (diagrama lógico y diagrama de estados)
con flip-flop tipo D.
i) Dado el siguiente diagrama de estados diseñe el diagrama lógico
usando flip-flops tipo JK
0
0
1
1
1
1
0
0
50
III COMPONENTES DIGITALES
3.1. Registros.
El uso más común de los flip-flops es para el almacenamiento de datos o
información. Los datos generalmente se almacenan en grupos de flip-flops
llamados registros, donde cada flip-flop es capaz de almacenar un bit de
información. Un registro de N bits es un grupo de N flip-flops y puede almacenar
cualquier información binaria de N bits.
En realidad, un registro está conformado por un conjunto de flip-flops, que se
encargan de almacenar o retener la información y un conjunto de compuertas que
controlan cuándo y cómo se transfiere la información.
Antes de ver algunos tipos de registros, hablemos primero de las entradas
asíncronas de los flip-flops. Estas entradas aparecen en la parte superior (Preset) e
inferior (Reset) de cada flip-flop y permiten establecer a 0 o 1 la salida,
independientemente de la entrada o de la señal del reloj. El comportamiento del
flip-flop se puede apreciar en la siguiente tabla
PRESET
0
0
1
RESET
0
1
0
1
1
SALIDA
1 (No se utiliza)
1
0
Se sincroniza con
la entrada
3.1.1. Registro simple (de 4bits).
Es un registro que está compuesto por sólo flip-flops.
Según la tabla anterior, si PRESET=1, RESET=1 y llega a los flip-flops un
flanco positivo del reloj, entonces S0=E0, S1=E1, S2=E2 y S3=E3, es decir
que, la salida estará sincronizada con la entrada. Cuando PRESET=1,
RESET=0, entonces S0=S1=S2=S3=0 que es equivalente a limpiar el
registro o hacerlo cero. Nótese que PRESET siempre será 1, ver figura 3.1
Figura 3.1 Registro simple de 4 bits sin compuertas
51
3.1.2. Registro de carga paralela.
Se trata de un registro cuyas entradas E no son transferidas a las salidas S
mientras no se aplique una señal de carga L. Cuando L=0, D deberá
permanecer sin cambios (D=Q) y cuando L=1, D deberá ser igual a la
entrada (D=E), ya que en el siguiente pulso de reloj D será transferido a Q
o sea S. Con esta información se puede construir la siguiente tabla de
verdad, para flip-flop tipo D:
L
0
0
0
0
1
1
1
1
E
0
0
1
1
0
0
1
1
Q
0
1
0
1
0
1
0
1
D
0
1
0
1
0
0
1
1
De la tabla, se obtiene la siguiente función lógica:
D = L´E´Q + L´EQ + LEQ´ + LEQ
la cual al simplificarla quedará:
D = L´Q + LE
Con la expresión anterior se puede diseñar un registro de un bit, bastará
con replicar éste, tantas veces como bits se desea que tenga el registro. Ver
el diagrama del registro de 4 bits de la figura 3.2
Figura 3.2 Registro 4 bits de carga paralela
52
3.1.3. Registro de corrimiento
Es un registro con la característica de desplazar sus bits almacenados, una
posición con cada pulso de reloj.
En la figura 3.3 muestra un registro de 4 bits con entrada serial E y salida
serial S. Como se puede observar la salida Q del primer flip-flop está
conectado con la entrada D del segundo flip-flop, la salida Q del segundo
con la entrada del tercero y así sucesivamente, con esto se logra que en
cada pulso de reloj, la salida de un flip-flop pase a ser la entrada del
siguiente, lo cual genera un corrimiento de bits.
En este caso es un registro de 4 bits, el bit que entra por la entrada E
aparecerá en la salida S después de 4 pulsos de reloj.
Figura 3.3 Registro de corrimiento de 4 bits
3.1.4. Registro de corrimiento con carga paralela
Si analizamos el diagrama de la figura 3.2 las salidas de las compuertas
OR (que luego serán las entradas D) serás 1: si L=1 y E=1 o si L=0 y Q=1.
En otras palabras, si L=1, la entrada D del flip-flop será igual al valor de la
entrada E, en caso contrario (L=0) será igual a la entrada de la primera
compuerta AND que en este caso es la salida del mismo flip-flop, logrando
mantener sin cambios la salida. Ahora, si queremos generar un corrimiento
cuando L=0 (ya no mantener sin cambios), entonces la salida Q de un flipflop tiene que estar conectada a la compuerta AND del siguiente flip-flop
para transferirla a la entrada D (en el siguiente pulso de reloj) del flip-flop
que se encuentra a continuación, tal como se muestra en la figura 3.4
Figura 3.4 Registro de corrimiento con carga paralela
53
De la figura 3.4 se obtienen las siguientes ecuaciones lógicas:
D0=S0=ESerL´+ E0L
D1=S1=S0L´+E1L
D2=S2=S1L´+E2L
D3=S3=SSer=S2L´+E3L
Cuando L=0, el registro realiza una carga serial a través de la entrada ESER. En cada pulso de reloj el valor de esta entrada es transferida a la
salida S0, lo que había en S0 es transferido a S1 y así sucesivamente hasta
llegar a S2 que es transferido a S3 (S-SER) que es la salida serial.
Cuando L=1, en cada pulso de reloj, los valores de las entradas E0, E1, E2 y
E3 son transferidas a S0, S1, S2 y S3 respectivamente.
3.2. Contadores.
Es un circuito secuencial sincronizado cuyo diagrama de estados contiene un solo
ciclo, es decir que en cada pulso de entrada, el circuito pasa por una secuencia de
estados predeterminados. Estos circuitos se usan para contar el número de
ocurrencias de un evento y son útiles para generar señales de tiempo.
3.2.1. Contadores asíncronos o de propagación.
Es un contador que está conformado por sólo flip-flops y ningún otro
componente. En este tipo de contador no todos los flip-flops cambian de
estado simultáneamente debido a que la señal de reloj se aplica solamente
al primer flip-flop el cual al tener sus entradas J y K en 1 (al igual que el
resto de flip-flops) complementará su salida Q en cada pulso. Esta salida Q
a su vez será la señal de reloj del siguiente flip-flop y así sucesivamente.
La salida Q del primer flip-flop es el bit menos significativo del contador,
ver figura 3.5.
Este tipo de contador es el más lento de todos.
Figura 3.5 Contador asíncrono
Ver diagrama de tiempos
S0
S1
S2
S3
54
3.2.2. Contadores sincrónicos.
Todos los flip-flops de este tipo de contador están conectados a la misma
señal de reloj, por lo tanto, las salidas de los flip-flops se actualizan al
mismo tiempo.
El contador que se va a estudiar es un contador de 4 bits con entrada de
activación, es decir, que cuando la entrada E sea 1 inicie o continué el
conteo y cuando sea 0 se detenga y mantenga sin cambios las salidas de los
flip-flops.
Observar la tabla de estados siguiente:
E
0
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
Estado inicial
Q3 Q2 Q1 Q0
Cualquier valor
0
0
0
0
0
0
0
1
0
0
1
0
0
0
1
1
0
1
0
0
0
1
0
1
0
1
1
0
0
1
1
1
1
0
0
0
1
0
0
1
1
0
1
0
1
0
1
1
1
1
0
0
1
1
0
1
1
1
1
0
1
1
1
1
Estado siguiente
Q3 Q2 Q1 Q0
Sin cambios
0
0
0
1
0
0
1
0
0
0
1
1
0
1
0
0
0
1
0
1
0
1
1
0
0
1
1
1
1
0
0
0
1
0
0
1
1
0
1
0
1
0
1
1
1
1
0
0
1
1
0
1
1
1
1
0
1
1
1
1
0
0
0
0
3
JK
00
0X
0X
0X
0X
0X
0X
0X
1X
X0
X0
X0
X0
X0
X0
X0
X1
2
JK
00
0X
0X
0X
1X
X0
X0
X0
X1
0X
0X
0X
1X
X0
X0
X0
X1
1
JK
00
0X
1X
X0
X1
0X
1X
X0
X1
0X
1X
X0
X1
0X
1X
X0
X1
0
JK
00
1X
X1
1X
X1
1X
X1
1X
X1
1X
X1
1X
X1
1X
X1
1X
X1
Resolviendo el sistema de ecuaciones lógicas se obtiene:
J0 = K0 = E
J1 = K1 = EQ0
J2 = K2 = EQ0Q1
J3 = K3 = EQ0Q1Q2
Ver figura 3.6
Figura 3.6 Contador síncrono
55
3.3. Decodificadores – Codificadores.
3.3.1. Decodificadores
Es un circuito lógico que acepta un conjunto de N entradas que representan
números binarios y que activa solamente 1 de las M salidas, que
corresponde a dicho dato de entrada. Donde 2N≥M.
Por ejemplo un decodificador de 2 a 4 con entradas I1 e I0, por donde se
puede ingresar números de 2 bits (de 0 a 3). Cuando el valor ingresado es 0
(00) se activará sólo la salida S0, cuando sea 1(01) sólo S1, cuando sea 2
(10) sólo S2 y cuando sea 3 (11) sólo se activará S3. Si además se desea
contar con una entrada de activación E, la tabla de este circuito quedará
como se muestra a continuación:
E
0
1
1
1
1
I1
x
0
0
1
1
I0
x
0
1
0
1
S3
0
0
0
0
1
S2
0
0
0
1
0
S1
0
0
1
0
0
S0
0
1
0
0
0
Figura 3.7 Tabla de verdad de un decodificador de 2 a 4
Cuando la entrada de activación E es 0, no importa que valor tengan las
entradas I, las salidas Si serán todas 0.
De la tabla anterior se puede fácilmente obtener el diagrama lógico del
decodificador de 2 a 4, como se muestra en la figura 3.7.
Figura 3.8 Diagrama lógico del decodificador de 2 a 4
Se puede combinar 2 o más decodificadores con entradas de activación
para formar un decodificador con mayor número de salidas. Así por
ejemplo, con 5 decodificadores de 2 a 4 con entrada de activación se puede
obtener un decodificador de 4 a 16. La idea básica es que un decodificador
controle a los otros 4 mediante sus entradas de activación. Las entradas de
este decodificador serán los 2 bits más significativos (I3 e I2) del número
binario a ingresar y sus salidas se conectaran a las entradas de activación
de los otros 4 decodificadores, de esta forma cuando los bits I3 e I2 sean 00
56
se activará el primer decodificador; cuando sea 01, el segundo; 10 el
tercero y 11 el cuarto.
Los bits menos significativos (I1 e I0) se conectan a las entradas de cada
uno de los cuatro decodificadores y son los que establecerán la salida a
activar del decodificador activo.
Por ejemplo, si los bits menos significativos (I1 e I0) son 1 y 0, se deberán
activar las salidas S2, S6, S10 y S14, pero son los bits más significativos los
que definirán el decodificador a activar. Si estos son 0 y 1 (el valor binario
será 0110) se activará sólo el segundo decodificador y por lo tanto la única
salida que se activará será S6. Pero si éstos hubieran sido 1 y 0 (el valor
binario sería 1010) se activará sólo el tercer decodificador y entonces la
salida que se activará será S10.
Esto se puede observar en la figura 3.9
S0
S1
S2
S3
I0
I1
S4
S5
S6
S7
I2
S8
S9
S10
S11
I3
E
S12
S13
S14
S15
Figura 3.9 Decodificador de 4 a 16 con decodificadores de 2 a 4
3.3.2. Codificadores
Este circuito hace la función inversa al Decodificador, es decir, que acepta
una sola entrada (de las M posibles) y activa 0 o varias salidas de las N
posibles codificando un número binario. Aquí también se cumple que
M≤2N.
Por ejemplo un codificador de 4 a 2 tiene 4 entradas I, de las cuales sólo
una puede estar activa a la vez, y 2 salidas S que forman un número binario
de 2 bits, por lo tanto si se activara la entrada I2 en las salidas S1 y S0
debería formarse el número binario 10 y si se activara la entrada I0 la salida
binaria será 00. Si seguimos con este análisis se podrá construir la tabla de
la figura 3.10
I3
0
0
0
1
I2 I1
0 0
0 1
1 0
0 0
Resto
I0
1
0
0
0
S1
0
0
1
1
x
S0
0
1
0
1
x
Figura 3.10 Tabla de verdad de un codificador de 4 a 2
57
De la tabla anterior se puede obtener una expresión de suma de productos
y otra de producto de sumas:
S1=I´1I´0
S1=I3+I2
S0=I´2I´0
S0=I3+I1
(suma de productos)
(producto de sumas)
Con las que se puede diseñar dos diagramas lógicos. Ver figura 3.11
Figura 3.11 Diagramas lógicos de un codificador de 4 a 2
Pero qué pasa cuando se activa más de una entrada a la vez?
En estos casos sólo se debe tener en cuenta la entrada (bit) más
significativa o la entrada menos significativa.
En el ejemplo siguiente se va a considerar el bit menos significativo para
un codificador de 4 a 2. No importa cuantas entradas se activen a la vez
sólo se tomará en cuenta la entrada menos significativa. La tabla de verdad
y el diagrama de este codificador se pueden apreciar en las figuras 3.12 y
3.13 respectivamente.
I3
x
x
x
1
I2 I1
x x
x 1
1 0
0 0
Resto
I0
1
0
0
0
S1
0
0
1
1
x
S0
0
1
0
1
x
Figura 3.12 Tabla de verdad de un codificador de 4 a 2
con prioridad de bit menos significativo
Figura 3.13 Diagrama lógico de un codificador de 4 a 2
con bit menos significativo de prioridad
58
3.4. Multiplexores y Demultiplexores.
3.4.1. Multiplexores.
También llamado selector de datos. Es un circuito combinatorio que acepta
2N entradas de datos y permite sólo a una de ellas alcanzar la salida. La
selección de una de esas 2N entradas se hace a través de N entradas,
llamadas entradas de selección.
Por ejemplo un multiplexor de 2 a 1, implica 2 entradas de datos I y 1
entrada de selección S, además de una entrada de activación E. cuando la
entrada E=0 no importa que valores tengan las entradas, las salida Z será 0.
Cuando E=1, si S=0 entonces Z=I0 en caso contrario (S=1) Z=I1. Mirar la
tabla de verdad y tabla de funciones de la figura 3.14
E
0
1
1
1
1
1
1
1
1
I1
x
0
0
0
0
1
1
1
1
I0
x
0
0
1
1
0
0
1
1
S
x
0
1
0
1
0
1
0
1
Z
0
0
0
1
0
0
1
1
1
E
0
1
1
S
X
0
1
Z
0
I0
I1
Figura 3.14 Tabla de verdad y de funciones de un
multiplexor de 2x1
De la tabla de verdad, fácilmente se puede diseñar el diagrama lógico
mostrado en la figura 3.15
Figura 3.15 Diagrama lógico de un multiplexor de 2x1
Para un multiplexor de 4 a 1, se necesitarán 4 entradas I, 2 entradas de
selección S y una entrada de activación E, lo cual suma en total 7 entradas.
Para poder mostrar la tabla de verdad se necesitaría 128 filas (7 variables),
por eso es más práctico usar una tabla de funciones para representar el
comportamiento de un multiplexor.
59
En la figura 3.16 se puede observar la tabla de funciones que muestra
como la salida Z depende de las entradas Ii y de las entradas de selección
Si. Así también se muestra el respectivo diagrama lógico.
E
0
1
1
1
1
S1
x
0
0
1
1
S0
x
0
1
0
1
Z
0
I0
I1
I2
I3
Figura 3.16 Tabla de función y diagrama lógico de un multiplexor de 4x1
Al igual que los decodificadores, también se puede obtener multiplexores
con un número mayor de entradas a partir de multiplexores menores. Por
ejemplo, se puede formar un multiplexor de 8 a 1 con 2 multiplexores de 4
a 1.
Las entradas de selección S1 y S0 se conectan a las respectivas entradas de
selección de los multiplexores. Estas serán las que seleccionen las parejas
I0-I4, I1-I5, I2-I6 o I3-I7 para que pasen a la salida Z. Pero será finalmente S2,
que está conectado a las entradas E de los multiplexores, el que determine
cual de los 2 multiplexores se activará, entonces si S1 y S0 es, por ejemplo,
10 las entradas I que podrán salir son I2 e I6. Si S2=0 entonces Z=I2 y sino
(S2=1) Z=I6. Ver figura 3.17
Figura 3.17 Multiplexor de 8x1 con multiplexores de 4x1
60
3.4.2. Demultiplexores.
Es un circuito que hace la operación inversa de un multiplexor, es decir,
toma una sola entrada de datos y la distribuye en una de 2N salidas,
utilizando para ello N entradas de selección.
El ejemplo que se va a estudiar es un demultiplexor de 1 a 4 con entrada E
de activación. Este demultiplexor tiene una entrada I, dos entradas S de
selección una entrada E y cuatro salidas Q con lo que se puede diseñar la
siguiente tabla de verdad y su tabla resumen, figura 3.18.
E
0
1
1
1
1
1
1
1
1
I
x
0
0
0
0
1
1
1
1
S1
x
0
0
1
1
0
0
1
1
S0
x
0
1
0
1
0
1
0
1
Q3
0
0
0
0
0
0
0
0
1
Q2
0
0
0
0
0
0
0
1
0
Q1
0
0
0
0
0
0
1
0
0
Q0
0
0
0
0
0
1
0
0
0
E
0
1
1
1
1
S1
x
0
0
1
1
S0
x
0
1
0
1
Q3
0
0
0
0
I
Q2
0
0
0
I
0
Q1
0
0
I
0
0
Q0
0
I
0
0
0
Figura 3.18 Tabla de verdad y tabla resumen de un demultiplexores de 1 a 4
De la tabla de verdad se obtienen las expresiones lógicas:
Q0=E I S´1 S´0
Q2=E I S1 S´0
Q1=E I S´1 S0
Q3=E I S1 S0
Y con ellas se puede diseñar el diagrama lógico de la figura 3.19
Figura 3.19 Diagrama lógico de un demultiplexores de 1 a 4
61
3.5. Ejercicios resueltos y propuestos
3.5.1. Resueltos.
a) Diseñe un contador módulo 6 (que cuente desde 0 hasta 5) usando flipflops tipo JK.
Como son 6 estados debe haber por lo menos 3 flip-flops (23=8) A, B y
C (flip-flops JK en este caso). Las 3 salidas Q de los flip-flops
constituirán los dígitos binarios. Por ejemplo, cuando los flip-flops A,
B y C tengan los valores 010 (2), respectivamente, al llegar el siguiente
pulso de reloj deberán pasar a 011 (3) y luego a 100 (4) y así
sucesivamente. Cuando el contador llegue a 101 (5) deberá pasar luego
a 000 (0) ya que es modulo 6. En la tabla siguiente se muestra la tabla
de estados de este contador.
Estado actual
Q0
A B C
0
0
0
0
0
1
0
1
0
0
1
1
1
0
0
1
0
1
1
1
0
1
1
1
Estado nuevo
Q1
A
B
C
0
0
1
0
1
0
0
1
1
1
0
0
1
0
1
1
1
0
x
x
x
x
x
x
FF-A
JA
0
0
0
1
x
x
x
x
KA
x
x
x
x
0
1
x
x
FF-B
JB
0
1
x
x
0
0
x
x
KB
x
x
0
1
x
x
x
x
FF-C
JC
1
x
1
x
1
x
x
x
KC
x
1
x
1
x
1
x
x
De la tabla anterior y usando Mapas de Karnaugh se obtienen las
siguientes expresiones:
JA = AC = QA.QC
JB = A´C = QA'.QC
JC = 1
KA = C = QC
KB = C = QC
KC = 1
Y con ellas el diagrama respectivo
Donde el bit más significativo es QA y el menos significativo QC
62
b) Analice el siguiente contador de 4 bits, el cual ha sido diseñado para no
seguir la secuencia completa de los 16 estados. Determine su
secuencia.
Analizando el diagrama podemos obtener las siguientes expresiones:
JA = KA = 1
JB = KB = QAQD
JC = KC = QAQB
JD = QAQBQC KD = QA
Aplicando Q1 = JQ´0 + K´Q0 Se completa la tabla siguiente:
Estado actual
Q0
A B
C
0
0
0
0
0
0
0
0
1
0
0
1
0
1
0
0
1
0
0
1
1
0
1
1
1
0
0
1
0
0
1
0
1
1
0
1
1
1
0
1
1
0
1
1
1
1
1
1
FF-A
D
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
JA
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
KA
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
FF-B
JB
0
0
0
0
0
0
0
0
0
1
0
1
0
1
0
1
KB
0
0
0
0
0
0
0
0
0
1
0
1
0
1
0
1
FF-C
JC
0
0
0
0
0
0
0
0
0
0
0
0
1
1
1
1
KC
0
0
0
0
0
0
0
0
0
0
0
0
1
1
1
1
FF-D
JD
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
KD
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
Estado nuevo
Q1
A B C D
1
0 0 0
1
0 0 1
1
0 1 0
1
0 1 1
1
1 0 0
1
1 0 1
1
1 1 0
1
1 1 1
0
0 0 0
0
1 0 0
0
0 1 0
0
1 1 0
0
1 1 0
0
0 1 0
0
1 0 1
0
0 0 0
Asumiendo que A es el bit más significativo y D el menos significativo
podemos concluir lo siguiente:
Si los flip-flops se inicializan con 0000 (0), con el siguiente pulso de
reloj pasaran a 1000 (8) y si vamos a la tabla veremos que de este
estado se pasará, luego, a 0000. Esto significa que sólo habrá 2 estados.
Pero si se inicializa con 0001 (1), la secuencia será la siguiente: 0001,
1001, 0100, 1100, 0110, 1110, 0101, 1101, 0010, 1010, 0010, 1010, …
Es decir que cuando entra al estado 1010 pasará a 0010, luego a 1010 y
así sucesivamente.
63
c) Construir un decodificador de 5 a 32 líneas, con cuatro decodificadores
de 3 a 8 líneas, con habilitación y un decodificador de 2 a 4 líneas.
Se debe tener en cuenta en el diagrama que la entrada inferior de cada
decodificador de 3x8 es la entrada de activación E. Las salidas S0,
S1,…, S7, para simplificar el diagrama, son representadas con un solo
conector cuando en realidad son 8, igual ocurre con el resto de salidas.
d) Diseñe el diagrama lógico de un decodificador de 2 a 4 líneas con
entrada de activación E, sólo usando compuertas NOR
Observando la tabla de verdad de la figura 3.7, se obtiene que:
S0 = EI´1I´0 = (E´+I1+I0)´ =(E´+(I1+I0)´´)´ = (E´+(I1+I0)´´)´
= E´ NOR (I1 NOR I0)´
S1 = EI´1I0 = (E´+I1+I´0)´ =(E´+(I1+I´0)´´)´ = (E´+(I1+I´0)´´)´
= E´ NOR (I1 NOR I´0)´
S2 = EI1I´0 = (E´+I´1+I0)´ =(E´+(I´1+I0)´´)´ = (E´+(I´1+I0)´´)´
= E´ NOR (I´1 NOR I0)´
S3 = EI1I0 = (E´+I´1+I´0)´ =(E´+(I´1+I´0)´´)´ = (E´+(I´1+I´0)´´)´
= E´ NOR (I´1 NOR I´0)´
No olvidar que: A´ = A NOR A
Con las expresiones anteriores se puede diseñar el diagrama del
decodificador de 2x4 tal como lo muestra la figura siguiente:
64
e) Los habitantes del planeta Xinus emplean el sistema de numeración
base 5 y usan un display de tres segmentos, tal como se muestra en la
figura, diseñe un decodificador (de binario) para controlar dicho
display.
0
1
2
3
4
Asumamos que el segmento: | es A, / es B, \ es C y N2N1N0 es un
número de 3 bits, con esto construimos la siguiente tabla de verdad:
N2
0
0
0
0
1
1
1
1
N1
0
0
1
1
0
0
1
1
N0
0
1
0
1
0
1
0
1
A
1
0
1
1
1
x
x
x
B
1
1
1
0
0
x
x
x
C
1
1
0
1
0
x
x
x
De la tabla de verdad obtenemos las siguientes expresiones lógicas
simplificadas:
A=N1 + N´0
B=N´1 N0 + N´2N´0
C=N´2 N´1 + N0
Y con las expresiones lógicas, el diagrama correspondiente:
f) Diseñar un circuito que eleve al cuadrado un número de 2 bits usando
un decodificador y compuertas NOR.
Como ya sabemos las salidas S3, S2, S1 y
S0 sólo una de ellas va a estar activa a la
vez y dependerá de las entradas I1 e I0 que
conformaran el número N de 2 bits.
Entonces lo que hay que hacer es diseñar un circuito con compuertas
NOR que tome como entradas S3, S2, S1, S0 y genere una nueva salida
D3, D2, D1, D0 que sea el cuadrado de N (I1I0)
65
Por consiguiente se tiene 4 variables S de entrada y 4 funciones D de
salida tal como se muestra en la siguiente tabla:
I1
0
0
1
1
I0
0
1
0
1
S3
0
0
0
1
S2 S1
0 0
0 1
1 0
0 0
Resto
S0
1
0
0
0
D3
0
0
0
1
x
D2
0
0
1
0
x
D1
0
0
0
0
x
D0
0
1
0
1
x
Usando mapas de Karnaugh fácilmente podemos determinar las
siguientes expresiones:
D0 = S2´S0 ´ = (S2+S0)´
D1 = 0
D2 = S2
D3 = S3
g) Construir un multiplexor de 16 a 1 línea con dos multiplexores de 8 a 1
líneas y uno de 2 a 1 línea.
I0
I1
.
.
.
I7
I8
I9
.
.
.
I15
S3 S2 S1 S0
Las 3 entradas de selección (S2, S1 y S0) de los MUX8x1 se conectan
entre si, de esta manera se selecciona la misma entrada en cada MUX,
por ejemplo la entrada I0 del primer MUX con la entrada I0 (I8) del
segundo MUX, la entrada I5 del primero con la entrada I5 (I13) del
segundo y así sucesivamente.
Las salidas de los 2 MUX8x1 se convierten en las 2 entradas del
MUX2x1 las cuales son seleccionadas con la cuarta entrada de
selección S3, finalmente lo que se obtiene es un MUX16x1 con 16
entradas I y 4 entradas de selección S.
66
h) Realizar la función F(A, B, C) = ∑ (1,3,5,6) utilizando un multiplexor
y una cantidad mínima de compuertas.
Usando solamente compuertas la solución sería:
F = ABC´ + B´C + A´C
Por lo tanto la solución a obtener debe ser más simple.
Al tener la función 3 entradas (A, B y C) será necesario como mínimo
un MUX de 2x1 por tener 3 entradas: dos I y una S.
Hay varias formas de plantear una solución, una de ellas es conectar la
entrada C a la entrada S de selección del MUX y las otras dos (A y B)
conectarlas mediante un circuito a las entradas I del MUX.
Por lo tanto, cuando C=0=S la salida Z=I0 y cuando C=1 la salida Z=I1,
tal como se muestra en las siguientes tablas.
A
0
0
1
1
B
0
1
0
1
C=0
0
0
0
0
Z=I0
0
0
0
1 (6)
A
0
0
1
1
B
0
1
0
1
C=1
1
1
1
1
Z=I1
1 (1)
1 (3)
1 (5)
0
De las tablas se obtiene que:
Cuando C=0 è I0(A,B) = AB
Cuando C=1 è I1(A,B) = A´B´ + A´B + AB´ = A´ + B´ = (AB)´
Ahora pasamos y dibujar el diagrama respectivo
i) Resolver el ejercicio anterior usando un MUX4x1.
En este caso se conectará las entradas B y C a las entradas de selección
S1 y S0 del MUX y la entrada A, mediante un circuito, a las entradas I.
Ver las siguientes tablas
A
0
1
B
0
0
C
0
0
Z=I0
0
0
Cuando BC=00 è I0(A) = 0
A
0
1
B
0
0
C
1
1
Z=I1
1 (1)
1 (5)
Cuando BC=01 è I1(A) = 1
67
A
0
1
B
1
1
C
0
0
Z=I2
0
1 (6)
Cuando BC=10 è I2(A) = A
A
0
1
B
1
1
C
1
1
Z=I3
1 (3)
0
Cuando BC=11 è I3(A)= A´
j) Diseñe un circuito que acepte como entrada un número de 4 bits (4
entradas) y tenga como salida el mismo número pero en forma serial
(Sugerencia utilice un MUX4x1 y uno o más flip-flop tipo JK).como
muestra el diagrama de bloques siguiente
1
0
1
1
CLK
1,1,0,1
Sea ABCD el número de 4 bits conectados a las entradas I0, I1, I2 e I3
del MUX4x1. Se tiene que diseñar un circuito que en forma
“secuencial” selecciones dichas entradas, es decir, que las entradas S
tomen los valores 00, 01, 10 y 11, en ese orden y como es obvio esto es
trabajo para un contador de 2 bits. Por consiguiente el diagrama
respectivo será el que se muestra en la siguiente figura:
68
3.5.2. Propuestos
a) Diseñe un contador módulo 5.
b) Analice el siguiente contador de 3 bits, el cual ha sido diseñado para no
seguir la secuencia completa de los 8 estados. Determine su secuencia.
Se debe tener en cuenta que las entradas inferiores de los flip-flops son
para resetear (poner a 0) cuando a éstas llegue un 0. Otro detalle a tener
en cuenta es que, la entrada de reloj de los flip-flops es de pendiente
negativa, es decir que la salida de flip-flops se actualizaran sólo cuando
la señal de reloj pase de 1 a 0.
c) Construir un decodificador de 3 a 8 líneas con entrada de activación,
con dos decodificadores de 2 a 4 líneas, con habilitación y un
decodificador de 1 a 2 líneas.
d) Diseñe el diagrama lógico de un decodificador de 2 a 4 líneas con
entrada de activación E, usando sólo compuertas NAND.
e) Diseñe un codificador de 8 a 3 con prioridad de bit más significativo.
f) Diseñe un circuito que sume 7 a un número de 3 bits usando un
multiplexor.
g) Resuelva el ejercicio anterior usando decodificadores
h) Realizar la función F(A, B, C) = ∑ (0,1,2,7) utilizando un MUX2x1 y
una cantidad mínima de compuertas.
i) Realizar el ejercicio anterior usando un multiplexor de 4x1.
j) Resuelva el ejercicio e) de los ejercicios resueltos pero para el sistema
base 7.
69
IV ORGANIZACIÓN Y DISEÑO BASICO DE COMPUTADORAS
4.1. ¿Qué es una computadora?
Es una combinación de dispositivos y circuitos digitales que pueden realizar una
secuencia programada de operaciones con un mínimo de intervención humana. A
la secuencia de operaciones se le denomina programa. El programa es un
conjunto de instrucciones codificadas que se almacena en la memoria interna de
la computadora con todos los datos que el programa requiere. Cuando a la
computadora se le ordena ejecutar el programa, ésta lleva a cabo las instrucciones
en el orden en que están almacenadas.
4.1.1. Organización básica
Cada computadora contiene 5 elementos o unidades esenciales:
a) Unidad aritmética lógica.- Realiza las operaciones aritmética y lógicas
como sumas, restas, multiplicaciones, Y, O y NO.
b) Unidad de memoria.- Almacena instrucciones y datos, así como los
resultados parciales y finales de un programa.
c) Unidad de control.- Interpreta las instrucciones tomadas de la memoria
una por una, luego envía las señales apropiadas a cada una de las
unidades para que la instrucción sea ejecutada.
d) Unidad de entrada.- Transmite instrucciones y datos del exterior a la
memoria.
e) Unidad de salida.- Transmite datos de la computadora al mundo
exterior.
4.1.2. Funcionamiento
Consideremos un casillero numerado desde el 0 hasta el 4095 (memoria)
en donde en cada casilla se ha puesto un sobre, el cual puede contener
instrucciones (código) o información (datos). La idea es ir abriendo los
sobres de las casillas en forma consecutiva (0, 1, 2, 3,..) y seguir las
instrucciones (programa) que se encuentran en ellos. Se empieza tomando
el sobre de la casilla 0 (pudo ser a partir de otra posición), se abre el sobre
y se lee la instrucción. Esta instrucción puede ser:
a) Una operación como sumar, restar, multiplicar, etc. y como toda
operación debe tener operandos. Dentro de la instrucción debe
indicarse donde se encuentras dichos operandos. Estos pueden estar
dentro de unas cajas especiales de fácil y rápida ubicación (Registros) o
dentro de alguna casilla. En todo caso la instrucción debe indicar el
número de la casilla (0,1,..4096) o el nombre de la caja (A, B, C o D
por ejemplo) donde se encuentran los operandos.
b) Una operación de saltar y dirigirse a otra casilla. Como se mencionó,
por defecto, la ejecución de las instrucciones se hace en forma
consecutiva, partiendo de la casilla donde se abrió el primer sobre,
pasando a la siguiente casilla, luego a la siguiente y así sucesivamente
hasta llegar a la última instrucción. Pero puede darse el caso que una
instrucción indique que debe saltarse a una determinada casilla, con lo
cual, el próximo sobre a abrir no será el de la siguiente casilla sino el
indicado en la instrucción.
Una vez leída la instrucción se procede a ejecutarla y luego se pasa a la
siguiente instrucción.
70
4.2. Los Registros
Durante la ejecución de un programa la computadora debe saber siempre en que
parte de la memoria (dirección) se encuentra la siguiente instrucción a ejecutar,
así como también cuál es la instrucción (código) que va a ejecutar o está
ejecutando.
Muchas de las instrucciones no se ejecutan en un sólo paso (ciclos de reloj) sino
que requieren de varios pasos o microinstrucciones las cuales necesitan almacenar
en algún medio los datos u operandos con los que están trabajando.
Para todos estos casos ese dispositivo de almacenamiento es el registro
4.2.1. Los registros de la computadora básica
Dada las características simples de la computadora, se requieren de sólo 8
registros cuyas funciones son las siguientes:
Registro de datos (DR).- Es un registro de 16 bits que puede contener un
operando de alguna operación aritmética - lógica.
Registro de dirección (AR).- Es un registro de 12 bits que contiene la
dirección de memoria a leer o escribir. Cada vez que la
computadora requiera leer o escribir en la memoria, este registro
debe contener la dirección a la cual se va a acceder. Como la
capacidad de la memoria de la computadora es de 4096 palabras,
bastará sólo un registro de 12 bits (212 = 4096).
Registro Acumulador (AC).- Es un registro de 16 bits que almacena los
resultados temporales y que está conectado directamente con la
unidad aritmética lógica. En otras palabras es el registro de
trabajo de la computadora.
Registro de instrucción (IR).- Es un registro de 16 bits que contiene la
instrucción en curso a ser decodificada y ejecutada.
Registro contador de programa (PC).- Es un registro de 12 bits que
contiene la dirección de memoria de la siguiente instrucción a
ejecutar.
Registro temporal (TR).- Es un registro de 16 bits que se utiliza para
almacenar datos temporales.
Registro de entrada (INPR).- Una vez realizada una entrada, este registro
de 8 bits contiene el byte que ha ingresado.
Registro de salida (OUTR).- Este registro de 8 bits contiene el byte que va
ser enviado hacia fuera.
Estos registros forman 3 grupos:
Registros de 16 bits (DR, AC, IR, TR)
Registros de 12 bits (AR, PC)
Registros de 8 bits (INPR, OUTR)
Los registros de 16 y 12 bits tienen características comunes. Sus entradas y
salidas de datos, están conectadas al bus y sus entradas de control son las
mismas:
Carga de datos (C).- Carga el registro con los datos de entrada.
Incremento (I).- Incrementa en 1 el contenido del registro.
Limpiado (L).- Borra o pone a 0 las salidas del registro
71
El diseño se hará para los registros de 16 bits siendo prácticamente lo
mismo para los de 12 bits. El registro deberá tener entradas de control que
le permitan realizar las operaciones mostradas en la tabla de la figura 4.1
L
0
0
0
1
C
0
0
1
X
I
0
1
X
X
Operación
Sin cambios
Incrementar contenido en 1
Cargar entrada de datos E
Establecer salidas S a 0
Figura 4.1 Tabla de funciones del registro
Para realizar el diseño de forma analítica, se necesitaría una tabla de 16
entradas de datos E, 3 entradas de control (L, C e I), 16 entradas de estados
inicial Q y 16 funciones de salida para J y K. Imposible de hacer!
Una alternativa es diseñar un registro de 4 bits y luego generalizarlo para
16, 32 o 64 bits. Pero aun así, se requiere 11 entradas (tabla de 2048 filas)
y 4 funciones de salida para J y K.
Una tercera opción es diseñar un registro de 4 bits con entrada L de
limpieza y entrada C de carga paralela, luego unirlo mediante otro circuito
a un contador de 4 bits con entrada de activación I (para poder incrementar
en 1).
El registro de 4 bits con carga paralela y limpieza
Según la tabla de la figura 4.1, L tiene prioridad sobre C, es decir, que si
L=1 la salida S será 0. Cuando L=0 y C=1, el dato E pasará a S y cuando
L=C=0 no habrá cambios en la salida. Por lo tanto, J y K deberán tener los
valores siguientes:
L
0
0
0
0
1
1
1
1
C
0
0
1
1
0
0
1
1
E
0
1
0
1
0
1
0
1
S=Q
Sin cambios
Sin cambios
0
1
0
0
0
0
J
0
0
0
1
0
0
0
0
K
0
0
1
0
1
1
1
1
Figura 4.2 Tabla de estados para un registro de 1 bit
La tabla muestra los valores que deben tomar J y K para obtener la salida S
(Q) correspondiente. Pero sólo es para un registro de 1 bit, hay replicar
tantas veces como bits se desea que tenga el registro. De la tabla se
obtienen las siguientes expresiones lógicas:
J = L´CE
K = CE´ + L
En términos generales par el i-ésimo bit: Ji = L´CEi Ki = CE´i + L
Más adelante a la salida J se le llamará X y a K, Y.
72
El contador de 4 bits con entrada de activación
El contador, es el diseñado en el capitulo 3, figura 3.6 (contador síncrono).
Sólo hay que cambiar el nombre de la entrada E por I, las expresiones
lógicas quedarán:
J0 = K0 = I
J1 = K1 = IQ0
J2 = K2 = IQ0Q1
J3 = K3 = IQ0Q1Q2 ; Ji = Ki pasaran a llamarse Zi
El circuito de unión
Para simplificar, sólo se va a diseñar el modulo para el i-ésimo bit.
Se supone que las entradas L y C, del registro de carga paralela y limpieza,
va a generar las salida X y Y (Circ1), que se conectarán, respectivamente,
a las entrada J y K del flip-flop. Pero la entrada I, del contador, generará la
salida Z que también se debe conectar a las entradas J y K (J=K).
Esto nos hace pensar en la necesidad de un MUX2x1 que seleccione la
entrada X o Z para dirigirla a J y otro MUX que seleccione entre Y y Z
para dirigirla hacia K. La idea es, que cuando la entrada de selección W de
los MUX sea 0, a J debe llegar X y a K, Y. Cuando W=1, a J y K debe
llegar Z. También se va a requerir un circuito (Circ2) que controle la
entrada de selección W la cual debe estar en función de las entradas L, C e
I. Ver figura 4.3
Figura 4.3 Diagrama de bloques para el registro de 1 bit
Circ1 contiene las compuertas del registro de carga paralela y limpieza y
sus salidas X (X = L´CE) y Y (Y = CE´ + L). Así también, contiene las
compuertas del contador y la salida Z (Zi = IQ0Q1…Qi-1).
Circ2 genera la señal W, la cual debe ser 0 para que los MUX seleccionen
X y Y. W=1 para seleccionar Z (incrementar en 1). Pero W debe ser 1, sólo
y únicamente cuando L=0, C=0 e I=1 (ver figura 4.1), por lo tanto:
W = L´C´I
Las expresiones lógicas equivalentes a los MUX de 2x1 son:
J = XW´ + ZW
K = YW´ + ZW
Donde J y K son las entradas del flip-flop.
73
Por consiguiente:
J = L´CE(L´C´I)´ + ZW
J = L´CE(L+C+I´) + ZW
J = L´CE + ZW
J = X + ZW
K = (CE+L)(L´C´I)´ + ZW
K = (CE+L)(L+C+I´) + ZW
K = (CE+L) + ZW
K = Y + ZW
Estas expresiones lógicas son para cualquier bit del registro, pero
recordemos que Z varía según sea el bit, entonces:
J0 = L´CE0 + L´C´I
J1 = L´CE1 + L´C´IQ0
J2 = L´CE2 + L´C´IQ0Q1
J3 = L´CE3 + L´C´IQ0Q1Q2
K0 = (CE´0+L) + L´C´I
K1 = (CE´1+L) + L´C´I Q0
K2 = (CE´2+L) + L´C´I Q0Q1
K3 = (CE´3+L) + L´C´I Q0Q1Q2
Figura 4.4 Diagrama de un registro de 4 bits con carga paralela, incremento y
limpieza
Figura 4.5 Diagramas de bloque de un registro de 4 y 16 bits con carga paralela,
incremento y limpieza
74
4.2.2. El BUS común
Para poder hacer la transferencia de datos de registro a registro o de
registro a memoria, se necesita un conjunto de trayectorias o líneas,
denominado BUS. La cantidad de líneas será excesiva si se conectan las
salidas de cada registro con las entradas de los otros registros. Un sistema
más eficiente para transferir información es usar un BUS común y una de
las maneras de construirlo es mediante multiplexores, los cuales permitirán
seleccionar el registro cuyas salidas pasaran al BUS.
Para simplificar el diseño se hará con 2 registros de 4 bits, esto quiere decir
que el bus tendrá 4 líneas.
Figura 4.6 Diagrama de un bus común de 4 bits
La figura 4.6 muestra 2 registros de 4 bits conectados a un bus común.
Cuando la entrada de selección S toma el valor de 0, las 4 salidas del
registro A pasarán a las salidas Z (líneas del bus) y cuando sea 1, será el
registro B el que pase al bus. Del diagrama se puede concluir que son
necesarios tantos MUX como bits tenga el registro y la cantidad de
entradas de los MUX dependerá de la cantidad de registros a controlar. Por
consiguiente, en el caso de la computadora básica que tiene 8 registros de
16 bits, como máximo (porque hay registros de 12 y 8 bits), se requerirá de
16 MUX de 8 entradas. La selección de un registro en particular se hará a
través de las entradas S de selección de los MUX, 3 en este caso (23=8).
Se puede convenir que para un determinado valor de S, el contenido de
uno de los registros sea transferido al bus, tal como se muestra en la figura
siguiente:
S2
S1
S0
0
0
0
1
1
1
1
0
1
1
0
0
1
1
1
0
1
0
1
0
1
Registro que
pasa al BUS
AR
PC
DR
AC
IR
TR
MEMORIA
Figura 4.7 Tabla de transferencia de registros
4.3. La memoria
75
Es un conjunto de celdas de almacenamiento junto con los circuitos asociados que
se utilizan para escribir y leer información en ellas. La memoria almacena
información binaria en grupo de bits que se denominan palabras. Esta información
puede ser números, caracteres alfanuméricos, código de una instrucción o
cualquier otra información codificada en binario.
La estructura interna de la memoria está especificada por el número de palabras
que contiene y la cantidad de bits que la conforman. A cada palabra se le asigna
un número de identificación o posición llamado dirección, que comienza de 0
hasta N (N es una potencia de 2). Dependiendo de la cantidad de palabras de la
memoria, será necesario K líneas de dirección, donde 2K=N. Si en este caso
N=4096 palabras entonces K=12, esto quiere decir que se requiere de 12 líneas
para especificar la dirección de memoria a la cual se va a acceder.
El tipo de acceso queda establecido por medio de 2 entradas, W para escribir y R
para leer. Ver figura 4.8
Figura 4.8 Diagrama de bloque de la memoria
La barra inclinada en las líneas es para indicar que no se trata de una sola línea
sino de más. El valor que aparece al costado, indica la cantidad de líneas que
representa. En el diagrama se aprecia 16 líneas de entrada (izquierda) y 16 de
salida (derecha), las 12 líneas de abajo es por donde ingresa, en binario, la
dirección o número de palabra a acceder, mientras que W y R indica si se va a leer
o escribir.
4.4. Transferencia entre el BUS, los registros y la memoria
A continuación vamos a analizar como se realiza la transferencia entre los
registros y la memoria. Primero debemos indicar que se cuenta con un BUS de 16
líneas las cuales se conectan una a una con las entradas de los registros DR, AC,
IR, TR y la memoria. En el caso de los registros AR, PC que sólo tienen 12
entradas-salidas y los registros INPR, OUTR de 8 entradas-salidas se conectaran
con las líneas de los bits menos significativos del BUS, dejando libres las otras
líneas.
Al estar conectados los registros de esta manera con el BUS, siempre estarán
presente en las entradas, de todos los registros, lo que en ese instante haya en las
líneas del BUS, pero estos valores no pasaran al registro mientras no llegue la
señal de carga C y luego la señal de reloj al registro correspondiente.
De igual manera, los valores de salida de todos los registros llegaran a los
multiplexores de selección del BUS (ver figura 4.6) pero sólo las salidas de uno de
los registros pasarán a las líneas del BUS dependiendo de las entradas de selección
S activadas (ver figura 4.7)
76
La figura siguiente muestra los registros de la computadora básica conectados a un
BUS común.
Figura 4.9 Conexión de la memoria y los registros al BUS
Supongamos que las entradas S=3 (S2S1S0=011) esto significa que las 16 salidas
del registro DR pasaran al BUS. Este valor del registro DR, llegará a cada una de
las entradas de los registros, pero no pasará a ninguno de ellos mientras no llegue
la señal C y se genere la siguiente señal de reloj CLK.
En el caso de la memoria, antes de leer o escribir en ella, el registro AR debe
contener la dirección efectiva a la cual se desea acceder. Cuando llegue a la
memoria la señal W, lo que hay en el BUS pasará a escribirse en la dirección de
memoria indicada por el registro AR. Pero si la señal fuera R, de la memoria
pasará a los multiplexores del BUS el valor respectivo. Recién al hacerse las
entradas de selección S=7 (111) la palabra de memoria pasará al BUS.
Las entradas del acumulador AC provienen de las salidas de la ALU, la cual, a su
vez, tiene como entradas las salidas del mismo acumulador y del registro DR. La
ALU tiene también como entradas, señales de control que le indican la operación
que debe realizar con las entradas de los registros AC y DR. Nótese el registro de
un bit E anexo a la ALU, como ya se menciono éste se puede considerar como el
bit número 17 del registro AC.
77
4.5. El código de instrucción
Una instrucción de computadora es un código binario que especifica una secuencia
de microinstrucciones para la computadora. Los códigos de instrucción se
almacenan en la memoria, la computadora los lee y los coloca en un registro de
control. La unidad de control interpreta el código binario y procede a ejecutarlo
mediante una secuencia de microinstrucciones. Cada computadora tiene un
conjunto de instrucciones único.
Una computadora debe tener un conjunto de instrucciones que permitan al usuario
construir programas de lenguaje de computadora con el fin de evaluar cualquier
función que se sepa que pueda computarse. Se dice que el conjunto de
instrucciones está completo si la computadora incluye la suficiente cantidad de
instrucciones en cada una de las siguientes categorías:
a)
b)
c)
d)
Aritméticas, lógicas y de corrimiento.
Mover datos hacia y desde la memoria y los registros.
Control del programa y verificación del estado del procesador.
Entrada y salida.
En la computadora básica, el código de cada instrucción tiene una longitud de 16
bits, que es la longitud de una palabra de memoria. Se define 3 tipos de
instrucciones: Las que hacen referencia a memoria, las que hacen referencia a los
registros y las de entrada y salida.
4.5.1. Instrucciones que hacen referencia a memoria
Utilizan 12 bits (de los 16) para especificar una dirección de memoria
(212=4096). De los 4 bits restantes, 1 bit se emplea para indicar el tipo de
direccionamiento, es decir, si en la dirección de memoria que aparece en el
código de instrucción es donde se encuentra el operando (direccionamiento
directo) o si ahí hay otra dirección de memoria (direccionamiento
indirecto) donde finalmente se encuentre éste (el operando). Los 3 bits
restantes se usan para codificar la operación a realizar, por ello se les
denomina código de operación. Con 3 bits (23=8) se puede codificar hasta
8 operaciones diferentes.
Se establece los 12 primeros bits del código (0-11) para especificar la
dirección de memoria, los 3 bits siguientes (12-14) para el código de
operación y el bit más significativo I (15) para el modo de
direccionamiento: I=0 directo, I=1 indirecto.
15
I
14 13 12
Código de
operación
11
0
Dirección de memoria
Las instrucciones que hacen referencia a memoria son las siguientes:
AND.- Su codop (código de operación) es 000. Realiza la operación lógica
AND entre la palabra que se encuentra en la dirección efectiva de
memoria y el acumulador AC, el resultado se almacena en AC.
Ejemplo: 03C7 es una instrucción codificada en hexadecimal de
una operación AND. Los 12 bits menos significativos 3C7
especifican la dirección de memoria donde se encuentra la palabra
78
(porque el bit I es 0, direccionamiento directo) con la que se hará la
operación AND con AC. La operación sería AC←AC ▲ M[3C7]
Ejemplo: 83C7 (I es 1, direccionamiento indirecto) entonces la
palabra que se encuentra en la dirección 3C7 es otra dirección de
memoria (no el operando) donde se encuentra la palabra a operar.
Esto se resume como AC←AC ▲ M[M[3C7]]
ADD.- Su codop es 001. Realiza una suma entre el contenido de la
dirección efectiva de memoria y el acumulador AC, el resultado se
almacena en AC. Ejemplo: 13C7, como I es 0, se trata de un
direccionamiento directo la operación es: AC←AC + M[3C7]
Ejemplo: 93C7, se trata de un direccionamiento indirecto por lo
tanto la operación es: AC←AC + M[M[3C7]]
LDA.- Su codop es 010. Carga en el registro AC la palabra que se
encuentra en la dirección efectiva de memoria.
Ejemplo: 23C7 (direccionamiento directo) entonces: AC←M[3C7]
Ejemplo:
A3C7
(direccionamiento indirecto) entonces:
AC←M[M[3C7]]
STA.- Su codop es 011. Almacena el contenido del registro AC en la
dirección efectiva de memoria.
Ejemplo: 33C7 (I=0) entonces: M[3C7]←AC
Ejemplo: B3C7 (I=1) entonces: M[M[3C7]]←AC
BUN.- Su codop es 100. Hace un salto incondicional a la dirección
efectiva de memoria, para ello modifica el valor del registro
contador de programa PC que es el que contiene la dirección de la
siguiente instrucción a ejecutar.
Ejemplo: 43C7 (I=0) entonces: PC←3C7
Ejemplo: C3C7 (I=1) entonces: PC←M[3C7]
BSA.- Su codop es 101. Salva la dirección de la siguiente instrucción a
ejecutar en la palabra de la dirección efectiva de memoria y salta a
la siguiente posición de la dirección efectiva especificada.
Ejemplo: 53C7 (I=0). En el momento que se está ejecutando una
instrucción cualquiera, el registro PC ya contiene la dirección de la
siguiente instrucción a ejecutar. En función a eso las operaciones
internas son: M[3C7]←PC, PC←3C8
Ejemplo: D3C7 (I=1). En este caso las instrucciones son:
M[M[3C7]]←PC, PC←M[M[3C7]+1]
ISZ.- Su codop es 110. Incrementa en 1 la palabra de la dirección efectiva
especificada y si el resultado es 0 se ignora la siguiente instrucción
y se pasa a ejecutar la subsiguiente.
Ejemplo: 63C7 (I=0). M[3C7]←M[3C7]+1
Si M[3C7] = 0 entonces PC←PC+1
Ejemplo: E3C7 (I=1). M[M[3C7]]←M[M[3C7]]+1
Si M[M[3C7]] = 0 entonces PC←PC+1
79
Nótese que no hay una instrucción con codop 111, esto significa que
ninguna instrucción que hace referencia a memoria su código empezará
con 7 o F.
4.5.2. Instrucciones que hacen referencia a registro
Utilizan los 12 bits menos significativos (0-11) para especificar la
operación o prueba que se va a ejecutar sobre un registro, en este caso,
únicamente sobre el registro de trabajo, o sea AC. En teoría esto significa
que se puede codificar hasta 4096 operaciones sobre el registro AC pero,
una vez más, para simplificar el diseño del decodificador sólo se codificará
potencias de 2 (12 operaciones). Los 4 bits restantes se les asigna el valor
de 0111 (7) que es lo que identifica una instrucción de referencia a
registro.
15
14 13 12
0
1
1
1
11
0
Operación de registro
Estas instrucciones son:
CLA.- Su código de instrucción es 7800. Borra el registro acumulador:
AC←0
CLE.- Su código de instrucción es 7400. Borra el registro E: E←0. E es un
registro de un bit y es una extensión del acumulador, en otras
palabras se puede considerar como un bit más del registro
acumulador. E puede ser usado, por ejemplo, para almacenar el
acarreo de salida de una operación ADD.
CMA.- Su código de instrucción es 7200. Complementa los bits del
registro acumulador: AC←AC´
CME.- Su código de instrucción es 7100. Complementa el registro E:
E←E´
CIR.- Su código de instrucción es 7080. Realiza una rotación de bits hacia
la derecha del acumulador AC, pasando el bit menos significativo
al registro E y lo que había en E al bit más significativo de AC.
Ejemplo: Si E=1 y AC = 0110110100101000 = 6D28, después de
ejecutar esta instrucción AC quedará como 1011011010010100 =
B694 y E=0. Nótese que los bits del AC se han desplazado una
posición a la derecha, que el bit menos significativo de AC paso a
E y el valor de E ahora es el bit más significativo de AC.
Ejemplo: Si E=0 y AC = 0110110100101000 = 6D28, luego de
ejecutar CIR AC será igual que 0011011010010100 = 3694 y E=0.
CIL.- Su código de instrucción es 7040. Realiza una rotación de bits hacia
la izquierda del acumulador AC, pasando el bit más significativo al
registro E y lo que había en E al bit menos significativo de AC.
80
INC.- Su código de instrucción es 7020. Incrementa en 1 el acumulador:
AC←AC+1
SPA.- Su código de instrucción es 7010. Ignora la siguiente instrucción y
pasa a la instrucción subsiguiente, si el valor del acumulador es
positivo:
Si AC > 0 entonces PC←PC+1.
SNA.- Su código de instrucción es 7008. Ignora la siguiente instrucción y
pasa a la instrucción subsiguiente, si el valor del acumulador es
negativo:
Si AC < 0 entonces PC←PC+1.
SZA.- Su código de instrucción es 7004. Ignora la siguiente instrucción y
pasa a la instrucción subsiguiente, si el valor del acumulador es
cero:
Si AC = 0 entonces PC←PC+1.
SZE.- Su código de instrucción es 7002. Ignora la siguiente instrucción y
pasa a la instrucción subsiguiente, si el valor del registro E es cero:
Si E = 0 entonces PC←PC+1.
HLT.- Su código de instrucción es 7001. Detiene la computadora
4.5.3. Instrucciones de entrada y salida
Utilizan los 4 bits más significativos para identificarse tomando el valor de
1111 (15=Fh) y los primeros 12 bits para indicar el tipo de operación de
entrada-salida o la prueba ejecutada.
15
14 13 12
1
1
1
1
11
0
Operación de I/O
Las instrucciones de entrada y salida son:
INP.- Su código es F800. Transfiere el contenido del registro de entrada
INPR a los 8 bits menos significativos del registro acumulador AC
cada vez que el registro bandera de un bit FGI es 1. Luego de esta
operación el registro FGI debe ser puesto a 0.
Si FGI=1 entonces AC[7-0]←INPR; FGI←0
OUTP.- Su código es F400. Transfiere los 8 bits menos significativos del
registro acumulador AC al registro de salida OUTR cada vez que el
registro bandera de un bit FGO es 1. Luego de esta operación el
registro FGO debe ser puesto a 0.
Si FGO=1 entonces OUTR←AC[7-0]; FGO←0
SKI.- Su código es F200. Ignora la siguiente instrucción y ejecuta la
subsiguiente si FGI = 1.
Si FGI = 1 entonces PC←PC+1.
81
SKO.- Su código es F100. Ignora la siguiente instrucción y ejecuta la
subsiguiente si FGO = 1.
Si FGO = 1 entonces PC←PC+1.
ION.- Su código es F080. Establece a 1 el registro de interrupción de un
bit IEN, el cual activa las interrupciones de la computadora.
IOF.- Su código es F040. Desactiva las interrupciones estableciendo IEN a
0.
4.6. La unidad de control
Una vez leída de la memoria la instrucción a ejecutar, se procede a decodificarla
para luego generar las señales de control necesarias que permitan ejecutar las
microinstrucciones que, en su conjunto, conforman la instrucción.
Por ejemplo, la mayoría de instrucciones para ejecutarse necesitan hacer
transferencias entre registros y/o memoria. Entonces, la unidad de control debe
generar las señales apropiadas en las entradas de selección S del BUS que permita
transferir los datos de un registro o la memoria al BUS y las señales de carga C de
los registros o la señales de lectura/escritura R/W de la memoria. Cada una de
estas señales necesita, a su vez, de una señal de temporización T que le indiquen el
momento en el que deben generarse. Así pues, si una instrucción está conformada
por las microinstrucciones 0, 1, 2, 3, ..., N, entonces al generarse la señal T0 se
llevará a cabo la microinstrucción 0, la señal T1 ejecutará la microinstrucción 1 y
así sucesivamente. Finalmente después de ejecutarse la última microinstrucción N,
el generador de señales T debe reiniciarse para poder iniciar la ejecución de la
siguiente instrucción. Si bien es cierto las señales T indican la microinstrucción
que deben de ejecutarse, son las señales I, Di y Bi las que definen las instrucciones
a ejecutar, ver figura 4.10
Registro de instrucción IR
15
14
13
12
11 - 0
Bi
Decodificador 3x8
7 6 5 4 3 2 1 0
D0
I
Compuertas
Lógicas de
control
D7
Salidas de
control
T15
T0
15 14 13
…
2 1 0
Decodificador
4x16
Contador de
4 bits (SC)
Incrementar
Borrar
CLK
Figura 4.10 Unidad de control de la computadora básica
82
Una vez puesta el código de la instrucción en el registro IR se procede a identificar
la instrucción correspondiente. Al estar conectados los bits 14, 13 y 12 a un
decodificador de 3x8, activará sólo una de las 8 salidas Di a la vez. Por
consiguiente, cuando D0=1 significará que se trata de la instrucción AND,
cuando D1=1 de ADD, cuando D2=1 de LDA y así sucesivamente. Por su parte I
indicará si es un direccionamiento directo o indirecto. Pero cuando D7=1 (los bits
14, 13 y 12 son unos) implicará que la instrucción no es de referencia a memoria y
dependiendo de I se podrá concluir si es una instrucción de referencia a registro
(I=0) o una instrucción de entrada-salida (I=1). En estos casos serán los bits Bi los
que definan la instrucción a ejecutar.
Una vez identificada la instrucción, ésta se tiene que realizar en uno o más pasos,
ejecutando en cada uno de ellos la microinstrucción correspondiente. Un contador
de 4 bits SC (el cual aumenta en cada pulso de reloj) lleva la cuenta del número de
paso que se encuentra la unidad de control. Este valor es decodificado mediante un
decodificador de 4x16 obteniendo 16 señales de temporización llamadas Ti. Estas
señales son generadas en forma secuencial (T0, T1, T2, …T15) por eso sólo una
de ellas puede estar activada a la vez.
Finalmente, son las señales I, Di, Ti y Bi las que, unidas mediante compuertas
lógicas, producirán las salidas de control que, a su vez, llegaran a las entradas de
control de los registros, entradas de selección del BUS, entradas W/R de la
memoria y las entradas de la ALU para que éstos realicen las operaciones
correspondientes.
4.7. Ciclo de instrucción
Es la secuencia u orden que se ejecutan las microinstrucciones de una instrucción.
Un ciclo de instrucción se divide en 4 fases:
a) Buscar una instrucción en la memoria.
b) Decodificar la instrucción.
c) Leer la dirección efectiva de la memoria, si la instrucción tiene una
dirección indirecta.
d) Ejecutar la instrucción
Este ciclo de instrucción se repite tantas veces como instrucciones tenga el
programa.
4.7.1. Búsqueda
Se parte del hecho de que el registro PC contiene la dirección de la primera
instrucción a ejecutar. Por lo tanto para lograr transferir la instrucción que
se encuentra en la dirección de memoria contenida por PC, primero se debe
cargar AR con la dirección de memoria a leer, es decir transferir PC a AR;
luego transferir la instrucción al registro IR y aumentar en 1 PC para que
en el siguiente ciclo de instrucción se ejecute la siguiente instrucción. Todo
esto se puede especificar de la siguiente forma:
T0: AR←PC
T1: IR←M[AR],
PC←PC+1
Esto significa que cuando se genere la señal T0, PC se debe transferir a
AR. Para lograr ello, las entradas de selección S del BUS deben ser igual a
83
2 (010) para que el registro PC pase al BUS (ver figura 4.7) y activar, a la
vez, la entrada C del registro AR para que éste se cargue con lo que hay en
el BUS en ese instante.
Al generarse la señal T1 (con el siguiente pulso de reloj) las entradas S del
BUS deben ser igual a 7 (111) y se debe activar la entrada R (leer) de la
memoria para transferir la palabra de la dirección de memoria AR al BUS.
También se debe activar, a la vez, la entrada C del registro IR para que se
cargue con lo hay en ese instante en el BUS y, por ultimo, activar la
entrada A (aumentar en 1) del registro PC.
4.7.2. Decodificación
Una vez puesto el código de la instrucción en IR, con el siguiente pulso de
reloj (el cual generará la señal de temporización T2) se procederá a
decodificar la instrucción y a transferir los 12 bits menos significativos de
IR al registro de dirección AR como se indica a continuación:
T2: D0,…,D7←Decodificar IR[14-12], AR←IR, I←IR[15]
La decodificación la hace automáticamente el decodificador de 3x8,
generando una de las 8 salidas Di. Para transferir IR a AR, se debe hacer
igual a 5 (101) las entradas S del BUS y activar la entrada C del registro
AR. La señal I no es otra cosa que el bit más significativo del registro IR.
La figura 4.11 muestra las compuertas necesarias para que, en función de
las señales Ti, se realicen las transferencias entre los registros y la memoria
en la fase de búsqueda y decodificación.
Figura 4.11 Compuertas de la Unidad de Control para la fase búsqueda y
decodificación
84
En el diagrama se puede apreciar como la señal T0, T1 y T2 llegan a las
compuertas OR conectadas a las entradas S del BUS para establecer el
valor correspondiente que permita realizar las transferencias de los
registros al BUS. Así también, estas señales T llegan a las entradas C, A de
los registros y R de la memoria.
Al finalizar la señal de temporización T2, el registro PC contiene la
dirección de memoria de la siguiente instrucción a ejecutar, IR el código de
la instrucción que se está ejecutando y AR los 12 bits menos significativos
de IR que viene a ser la dirección de memoria a acceder en el caso de
tratarse de una instrucción de referencia a memoria. También se habrán
generado las señales Di, Bi e I.
4.7.3. El tipo de instrucción
Al iniciarse la señal de temporización T3 se debe determinar el tipo de
instrucción, si es de referencia a memoria (directa o indirecta), de
referencia a registro o de entrada-salida.
Mientras D7 no esté activa (D´7) significa que se trata de una instrucción
de referencia a memoria y la señal I será la que nos indique, si se trata de
un direccionamiento directo o indirecto. De ser un direccionamiento
directo se optará por hacer nada y de ser indirecto se cargará el registro AR
con la palabra de la dirección de memoria AR, es decir:
T3I´D´7 :
NADA
T3ID´7 :
AR←M[AR]
Será con la señal T4 que se inicie la ejecución de la instrucción de
referencia a memoria
En el caso de estar activa D7, I=0 indicará que se trata de una instrucción
de referencia a registro en caso contrario (I=1) será una instrucción de
entrada-salida. En ambos casos, es durante la señal T3 que se ejecutan.
4.7.4. Ejecutar instrucción
Hay que analizar las instrucciones por grupos:
Instrucciones de referencia a memoria
Como ya se mencionó este tipo de instrucciones se ejecutaran durante la
señal de temporización T4.
AND.- Esta instrucción realiza una operación AND entre el registro AC y
la palabra de la dirección de memoria AR. Esta instrucción no se puede
ejecutar directamente porque son los registros AC y DR los que deben
contener los valores a operar para cualquier operación aritmética o lógica,
debido a que son los únicos registros que están conectados a la ALU. Por
consiguiente se necesitará una señal de temporización adicional para
ejecutar esta instrucción. Con la señal T4 se transferirá la palabra de
memoria a DR y con la siguiente señal se ejecutará la operación en sí y se
reiniciará el contador SC.
T4D0 : DR←M[AR]
T5D0 : AC←AC▲DR;
SC←0
85
La señal T5D0 es una de las tantas señales que llegarán a las entradas de
control que tiene la ALU para indicarle la operación que debe realizar, en
este caso hacer un AND entre los bits de los registros AC y DR.
El contador de secuencia SC tiene 3 entradas de control y una de ellas es
“Borrar”. Cuando esta entrada es puesta en 1, reinicia el contador lo que
significa que vuelve a generar señales de temporización a partir de T0 y se
inicia la fase de búsqueda y decodificación. Esto se representa mediante la
microinstrucción SC←0
ADD.- Esta instrucción realiza una suma entre el registro AC y la palabra
de la dirección de memoria AR. Igual que en el caso anterior, esta
operación la realiza la ALU y se requiere 2 señales de temporización.
T4D1 : DR←M[AR]
T5D1 : AC←AC+DR;
SC←0
LDA.- Esta instrucción realiza una transferencia de la dirección de
memoria AR al registro AC. Pero si se mira la figura 4.9 se observará que
las entradas de AC no están conectadas al BUS, por consiguiente para
ejecutar esta instrucción primero hay que transferir la palabra de memoria
al registro DR y luego, mediante una operación de transferencia de la
ALU, al registro AC.
T4D2 : DR←M[AR]
T5D2 : AC←DR;
SC←0
STA.- Esta instrucción realiza la operación inversa a la anterior. Transfiere
el registro AC a la dirección de memoria AR, pero en una sola señal de
temporización.
T4D3 : M[AR]←AC; SC←0
BUN.- Esta instrucción transfiere el control del programa a la dirección
especificada por AR (AR contiene la dirección efectiva). Por ello sólo
bastará con hacer una transferencia de AR a PC.
T4D4 : PC←AR;
SC←0
BSA.- Esta instrucción se usa para ejecutar una subrutina o procedimiento.
Un procedimiento no es otra cosa que un conjunto de instrucciones
ubicadas en alguna parte de la memoria. Se debe tener en cuenta que
cuando se termine de ejecutar la subrutina la computadora debe de saber
cuál es la siguiente instrucción a ejecutar. Por ello una de las primeras
cosas a hacer es guardar la dirección de memoria de la instrucción que está
a continuación de la instrucción BSA. Ahora la pregunta es en dónde se
guarda?. En las computadoras comerciales hay un área de memoria
llamada “pila” en donde se guarda estas direcciones, en el caso de la
computadora básica se hará en la primera palabra del área de memoria
donde se encuentra la subrutina, por lo tanto es en la siguiente o segunda
palabra donde se encuentra la primera instrucción de la subrutina.
Una instrucción BUN con direccionamiento indirecto será la última
instrucción de la subrutina que le indique a la computadora que debe
retornar a la siguiente instrucción desde donde fue invocada la subrutina.
86
Las señales de temporizacion y microinstrucciones son las siguientes:
T4D5 : M[AR] ←PC;
AR←AR+1
T5D5 : PC←AR;
SC←0
Supongamos que un instante cualquiera PC=037 e IR=57F1 (ambos
valores en hexadecimal). Esto significa que el código de la instrucción que
se está ejecutando es 57F1, 5 es el codop de la instrucción BSA con
direccionamiento directo y 7F1 (12 bits menos significativos de IR y que
se encuentra también en el registro AR) la dirección del área de memoria
donde se encuentra la subrutina que se desea ejecutar. Otro detalle
importante es que la instrucción que se está ejecutando se encuentra en la
dirección 036 (y no en 037) ya que en la etapa de búsqueda PC fue
aumentado en 1 para que apunte a la siguiente instrucción. Por lo tanto, es
en la dirección 7F1 donde se almacenará la dirección de retorno (en este
caso 037) y en 7F2 la dirección donde se debe escribir la primera
instrucción de la subrutina. Finalmente es una instrucción BUN indirecta
con código C7F1 la que haga retornar la computadora a la dirección 037,
para que continué con la ejecución del resto del programa.
ISZ.- En esencia esta instrucción hace un salto condicional hacia otra
dirección de memoria. Es decir, que pasa el control del programa a otra
dirección de memoria dependiendo que se cumpla una condición. La
palabra ubicada en la posición de memoria especificada por la dirección
efectiva en el registro AR (M[AR]) será aumentada en 1 y si el resultado es
0 se saltará la palabra (instrucción) siguiente, procediendo a ejecutar la
subsiguiente instrucción, en caso contrario se ejecuta en forma normal el
programa. Esta característica permite definir en los programas estructuras
de control repetitivas con contador de salida ya que una vez que la palabra
en cuestión o contador llegue a FFFF al incrementarla en 1 pasará a ser
0000 lo que permitirá realizar la bifurcación respectiva.
Para poder incrementar en 1 el valor de M[AR], éste debe pasarse primero
al registro DR, activar su entrada de control A (para realizar el incremento)
y luego almacenar el resultado en la dirección AR.
Al encontrase el valor del contador en el registro DR, se debe inspeccionar
que todos los bits de DR sean 0, esto se puede lograr uniendo los 16 bits de
DR a una o varias compuertas lógicas OR (que forman parte de la unidad
de control), si el resultado de estas es 0 significará que DR es 0 y si es 1
entonces DR es diferente de 0.
Para ejecutar esta instrucción se necesitará 3 señales de temporización:
T4D6 : DR←M[AR]
T5D6 : DR←DR+1
T6D6 : M[AR]←DR; si DR=0 entonces PC←PC+1 ; SC←0
Por ejemplo, se desea ejecutar 5 veces el grupo de instrucciones
comprendidas entre las direcciones de memoria 7B6 y 7C4. Se va a usar la
dirección de memoria A00 como variable contador.
Para determinar el valor del contador restamos 5 a 10000 y se obtiene
FFFB, este es el valor que se debe almacenar en la dirección de memoria
87
A00 el cual será aumentado en 1 cada vez que se ejecute la instrucción
6A00 que se encuentra en la dirección de memoria 7B3. Mientras esta
palabra o contador no sea 0000 se ejecutará la instrucción 47B6 (dirección
7B4) la cual hará un salto incondicional a la dirección 7B6 (primera
instrucción del cuerpo del bucle) y continuará con la ejecución hasta llegar
a la instrucción 47B3 (dirección 7C4) la cual hará retornar a la dirección
7B3 donde nuevamente se evaluará el contador.
Dirección
de memoria
7B3
7B4
7B5
7B6
…
7C4
7C5
Código
Instrucción
6A00
47B6
47BA
…
…
47B3
…
0 ISZ A00
0 BUN 7B6
0 BUN 7C5
…
…
0 BUN 7B3
…
Figura 4.12 Código para una estructura repetitiva
Pero cuando el contador tome el valor de 0000, la computadora saltará la
instrucción 47B6 (dirección 7B4) y ejecutará la 47BA (dirección 7B5) que
a su vez hará un salto incondicional a la dirección 7C5 que se encuentra
fuera de la estructura repetitiva con lo que se da fin al lazo.
Instrucciones de referencia a registro
Este tipo de instrucciones se ejecutaran durante la señal de temporización
T3. Además debe estar activa la señal D7 e I debe ser igual a 0, por lo que
será Bi la que identifique la instrucción.
CLA.- Para ejecutar esta instrucción se debe activar la entrada L (limpieza
o borrado) del registro AC.
T3D7I´B11 : AC←0;
SC←0
CLE.- Para ejecutar esta instrucción se debe activar la entrada L (limpieza)
del flip-flop E.
T3D7I´B10 : E←0;
SC←0
CMA.- Esta instrucción la ejecuta la ALU, para ello se debe activar las
entradas de control que realizan la complementación del registro AC.
T3D7I´B9 :
AC←(AC)´; SC←0
CME.- Para ejecutar esta instrucción se debe activar la entrada K
(complementar) del flip-flop E.
T3D7I´B8 :
E←E´;
SC←0
CIR.- Esta instrucción la ejecuta la ALU para ello se debe activar las
entradas de control que realizan el desplazamiento hacia la derecha del
registro AC.
T3D7I´B7 :
AC←DesDer(AC); AC[15]←E;
E←AC[0];
SC←0
88
CIL.- Esta instrucción la ejecuta la ALU para ello se debe activar las
señales de control que realizan el desplazamiento hacia la izquierda del
registro AC.
T3D7I´B6 :
AC←DesIzq(AC); AC[0]←E;
E←AC[15];
SC←0
INC.- Para ejecutar esta instrucción se debe activar la entrada A (aumentar
en 1) del registro AC.
T3D7I´B5 :
AC←AC+1;
SC←0
SPA.- Como AC contiene números de 16 bits pueden representarse 65536
valores diferentes. Si sólo se trabaja con números positivos estos valores
pueden variar desde 0 (0000) hasta 65535 (FFFF). Pero, si también se van
a representar números negativos con complemento a 2, el rango de valores
será desde 0 (0000) a 32767 (7FFF) para los positivos y desde -32768
(8000) a -1 (FFFF) para los negativos. Como se puede observar todas las
representaciones binarias para los números negativos con complemento a 2
tiene el bit más significativo igual a 1.
Entonces, para comprobar si AC contiene un valor negativo o positivo sólo
bastara evaluar el bit 15 del registro AC.
T3D7I´B4 :
si AC[15]=0 entonces PC←PC+1; SC←0
SNA.- Igual que el caso anterior con la diferencia que AC debe ser
negativo.
T3D7I´B3 :
si AC[15]=1 entonces PC←PC+1; SC←0
SZA.- Para ejecutar esta instrucción se debe evaluar el valor de AC y
determinar si es cero. Igual que para la instrucción ISZ, que comprueba el
valor de DR, se hace para el registro AC.
T3D7I´B2 :
si AC=0;
PC←PC+1; SC←0
SZE.- En este caso se evalúa el valor del flip-flop E.
T3D7I´B1 :
si E=0 entonces PC←PC+1; SC←0
HLT.- Si observamos la figura 4.10, el contador SC tiene una entrada
“Incrementar”. Mientras esta entrada esté activa el contador incrementará
en 1 en cada pulso del reloj pero si se desactiva el contador se detendrá.
Esta entrada está conectada a un flip-flop H que proporcionará a SC la
señal respectiva. Una vez desactivado SC, solo se podrá activar de manera
manual a través del flip-flop H.
T3D7I´B0 :
H←0;
SC←0
Instrucciones de entrada-salida
La computadora básica ha sido diseñada para poderse comunicar con el
mundo exterior a través de un teclado (entrada) y una impresora (salida).
Utiliza un flip-flop FGI para indicar el estado del registro de entrada INPR
y un flip-flop FGO para el registro de salida OUTR.
Inicialmente el flip-flop FGI es puesto a 0. Cuando se presiona una tecla se
transfiere un código de 8 bits al registro INPR e inmediatamente el flip89
flop FGI es puesto a 1 y permanece así mientras no se transfiera el registro
INPR al registro acumulador AC. Esto también implica que mientras FGI
sea 1, aunque se presionen más teclas, los códigos respectivos no serán
transferidos al registro INPR. Recién cuando llegue la señal a la ALU que
ordene transferir del registro INPR al registro AC es que se pondrá el flipflop FGI a 0, con lo que quedará listo para recibir el código de la siguiente
tecla que se presione.
En el caso del flip-flop FGO, éste es inicializado en 1 para indicar que el
registro OUTR esta libre. Tan pronto se transfiera un byte a OUTR, FGO
es puesto a 1 para indicar que OUTR está ocupado y mientras este así no
se trasferirá AC a OUTR.
Las instrucciones de instrucciones de entrada-salida se ejecutaran durante
la señal de temporización T3. Además debe estar activa la señal D7 e I debe
ser igual a 1. Bi será la señal que identifique la instrucción.
INP.- Para ejecutar esta instrucción se deben generar las señales T3D7IB11
y si FGI=1 entonces se ejecutaran las siguientes microinstrucciones:
AC[7-0]←INPR;
FGI←0;
SC←0
OUT.- Para ejecutar esta instrucción se deben generar las señales T3D7IB10
y si FGO=1 entonces se ejecutaran las siguientes microinstrucciones:
OUTR←AC[7-0];
FGO←0;
SC←0
SKI.- Esta instrucción se utiliza para comprobar si hay un carácter
disponible en el registro INPR y, de ser así, realizar una bifurcación para
proceder a leerlo mediante la instrucción INP.
T3D7IB9 :
si FGI=1 entonces PC←PC+1;
SC←0
SKO.- Esta instrucción comprueba si esta libre el registro OUTR, es decir,
si la impresora ya leyó el carácter enviado y así, mediante una bifurcación
poder, enviar otro con la instrucción OUT.
T3D7IB8 :
si FGO=1 entonces PC←PC+1;
SC←0
ION.- Al generarse las señales T3D7IB7 se establece el flip_flop IEN a 1.
Este flip-flop es el que controla las interrupciones.
IOF.- Al generarse las señales T3D7IB6 se establece el flip_flop IEN a 0
4.7.5. Interrupciones
Cada vez que se desee enviar un caracter a la impresora, se debe
comprobar primero si el registro OUPR está libre o no. Si se tiene que
enviar un conjunto de caracteres, esta prueba se debe de hacer para cada
uno de ellos. Esto implica que la computadora tiene que esperar que la
impresora lea el carácter enviado para poder enviar el siguiente carácter.
Por lo general la velocidad de procesamiento de la impresora es mucho
menor que el de la computadora lo que implica que cada vez que la
computadora compruebe que aun esta ocupado el registro OUTR, entre en
90
un bucle esperando que éste se desocupe lo cual genera un tiempo muerto
para la computadora que puede ser empleado en otras tareas.
La rutina que imprime un conjunto de caracteres se representa en la
siguiente figura:
Dirección
de memoria
7B3
7B4
7B5
7B6
…
7C4
7C5
Código
Instrucción
6A00
47B3
F400
…
…
47B3
…
SKO
0 BUN 7B3
OUT
…
…
0 BUN 7B3
…
Figura 4.13 Código para imprimir una cadena
La instrucción SKO comprueba si está libre el registro OUTR (FGO=1) de
ser así, salta a la dirección de memoria 7B5 donde se encuentra la
instrucción OUT que transfiere los 8 bits menos significativos de AC al
registro OUTR. Pero si FGO=0, entonces se ejecuta la siguiente
instrucción (dirección 7B4) la cual hace un salto incondicional a 7B3 y
estará así (ejecutando las instrucciones 7B3 y 7B4) hasta que OUTR esté
libre. Se asume que entre las direcciones 7B6 y 7C3 se encuentran las
instrucciones que se requieren para obtener y transferir el siguiente
carácter a imprimir al registro AC. Finalmente la instrucción 47B3
(dirección 7C4) hace un salto incondicional hacia la dirección 7B3 para
imprimir el siguiente carácter.
Existe una forma más eficiente de realizar la tarea anterior eliminando el
tiempo muerto que genera: interrupciones. Una interrupción es una señal
que detiene la ejecución de una tarea o rutina para pasar a ejecutar otra y
luego de terminada ésta última continuar con la tarea inicial.
La computadora básica tiene la instrucción ION que permite activar las
interrupciones y la instrucción IOF para desactivarlas. Cuando las
interrupciones están activadas IEN=1, en forma paralela a la fase de
ejecución de instrucciones (es decir en cualquier transición del reloj
excepto cuando las señales de temporización T0, T1 y T2 estén activas), se
verifica si los flip-flops FGI o FGO son 1 de ser así, se pone en 1 un flipflop llamado R, el cual es chequeado constantemente antes de iniciar la
fase de búsqueda. Cuando R es 0, se ejecuta un ciclo de instrucción
(búsqueda, decodificación y ejecución de instrucciones) y cuando es 1, se
ejecutan las microinstrucciones que luego van a permitir ejecutar las
instrucciones que conforman la rutina que procesará la interrupción. A esto
se le denomina ciclo de interrupción.
Por lo tanto si se han activado las interrupciones y se ha enviado un
caracter al registro OUTR, ya no será necesario estar constantemente
comprobando mediante código si el registro OUTR está libre, en vez de
ello, la computadora puede realizar cualquier otra tarea y esperar que R sea
1 para bifurcar a un ciclo de interrupción.
91
La condición para activar R puede expresarse de la siguiente manera:
T0´T1 ´T2(IEN)(FGI+FGO) :
R←1
En el ciclo de interrupción se tiene que cambiar el control del programa
para que en el siguiente ciclo de instrucción se ejecuten las instrucciones
que conforman la rutina de la interrupción, así como salvar la dirección de
la siguiente instrucción que se debe ejecutar cuando se termine de ejecutar
la rutina de la interrupción.
En la dirección de memoria 000 se almacenará la dirección de la siguiente
instrucción a ejecutar y en la dirección 001 una instrucción BUN para que
realice un salto incondicional a la rutina de la interrupción. De esta forma
sólo se tiene que modificar el valor del registro PC a 001 para que ejecute
esta instrucción y se inicie la ejecución de la interrupción. Esto se consigue
con la siguiente secuencia de microinstrucciones:
RT0 : AR←0;
TR←PC
RT1 : M[AR]←TR; PC←0
RT2 : PC←PC+1;
IEN←0 ; R← 0; SC←0
Durante el ciclo de interrupción se desactiva las señales IEN para que no se
genere otra interrupción mientras se esta ejecutando la actual y R se hace 0
para pasar a ejecutar las instrucciones de la interrupción como cualquier
instrucción. Al finalizar la interrupción, PC apunta a la dirección 001
donde se encuentra un salto incondicional a la rutina de la interrupción.
La rutina de la interrupción de entrada-salida hace las comprobaciones
necesarias sobre los flip-flops FGI y FGO para saber que fue lo genero la
interrupción: la llegada de un nuevo carácter a INPR o que la impresora ya
leyó e imprimió el carácter que se encontraba en el registro OUTR.
La rutina de interrupción debe volver a establecer a 1 el registro IEN (que
fue desactivado durante el ciclo de interrupción) para habilitar
interrupciones posteriores. La última instrucción que debe contener la
rutina de la interrupción es una instrucción BUN indirecta a 000, donde se
encuentra la dirección a retornar. Ver figura 4.14
Dirección
de memoria
000
001
…
7B3
7B4
7B5
…
F49
F4A
…
F57
F58
Código
Instrucción
07B5 (dirección a retornar)
4F49
0 BUN F49
…
…
Programa en ejecución
Instrucción en ejecución
…
…
…
…
Rutina de la interrupción
de entrada-salida
..
…
C000 1 BUN 000
…
…
Figura 4.14 ciclo de interrupción
92
4.8. La ALU
En el item 4.7.4 se listan las secuencias de microinstrucciones requeridas para
ejecutar una instrucción. Se observará que varias de ellas mencionan que la
operación en sí, la realiza la ALU. Además se podrá apreciar las señales necesarias
para su ejecución. Estas instrucciones son:
Instrucción
AND
ADD
LDA
CMA
Señales
T5D0
T5D1
T5D2
T3D7I´B9
CIR
T3D7I´B7
CIL
T3D7I´B5
INP
T3D7IB11
Microinstrucción
AC←AC▲DR
AC←AC+DR
AC←DR
AC←AC´
AC←DesDer(AC)
AC[15]←E
AC←DesIzq(AC)
AC[0]←E
AC[7-0]←INPR
Figura 4.15 Microinstrucciones ejecutadas por la ALU
Esto significa que el diseño de la ALU debe ser de tal manera que ésta realice las
operaciones cuando se activen las señales de control respectivas. El diagrama de
bloque de la ALU es el siguiente:
Figura 4.16 diagrama de bloque de la ALU
Como se observa, el circuito de la ALU tiene 16 entradas que provienen de las
salidas del registro DR, 16 entradas que provienen de las salidas del registro AC, 8
entradas que provienen de las salidas del registro INPR y 7 entradas de control
para indicarle cual de las 7 operaciones debe de realizar. Además de 16 salidas que
se convierten en las entradas del registro AC y una salida que va al flip-flop E.
Mostrar todo el circuito de la ALU sería demasiado confuso de explicar, por ello
sólo se va a mostrar una etapa (figura 4.17) junto con las compuertas de la unidad
de control necesarias para generar las señales de control de la ALU.
Debido que las señales de control tales como T5D0, T5D1, T3D7I´B9, etc. Son
mutuamente excluyentes (sólo una de ellas puede ser 1 a la vez) bastará con filtrar
mediante compuertas AND de dos entradas, el resultado que desea pasar a la
salida S[i] y este a su vez serán el iésimo bit (AC[i]) del registro AC.
Por ejemplo, la etapa 5 tiene como entradas el bit 5 del registro DR (DR[5]) y el bit
5 del registro AC (AC[5]). Así como también los bits 4 y 6 de AC. Cualquier
operación que se realice generará la salida S[5] que luego se convertirá (cuando se
genere la señal de carga C de AC) en el bit 5 del registro AC
93
Si llegara la señal T5D1 a la ALU (T5D1=1, sumar) sólo la compuerta ADD dejará
pasar hacia la compuerta OR el valor de su otra entrada que, en este caso, es la
suma de los bits AC[5] y DR[5]. El resto de compuertas AND están prácticamente
desactivadas porque las señales de control que llegan a la ALU son 0.
Figura 4.17 Circuito de una etapa de la ALU
Ahora, si la señal que llegara a la ALU fuera T3D7I´B5, entonces la única
compuerta que se activaría es la CIL y por consiguiente su otra entrada (AC[4]) es
la que pasaría a la compuerta OR, luego a la salida S[5] y finalmente a AC[5]. Es
decir AC[5] pasara a ser AC[4] y si esto se aplica al resto de las 16 etapas lo que se
logrará es un desplazamiento de bits hacia la izquierda. Para la etapa 0 (i=0), el bit
AC[-1] es la salida del flip-flop E y para la etapa 15, AC[15] pasa a la entrada del
flip-flop E.
Así también se observa que cada etapa tiene una entrada C[i-1] que es el acarreo de
salida de la etapa (i-1) y una salida C[i] que es el acarreo de salida de la etapa i. En
la etapa 0 C[-1] es igual a E y en la etapa 15, C[15] pasa a E.
En la parte izquierda de la figura 4.17 se encuentran las compuertas lógicas que en
función de las señales Bi, Di y de temporización generan las señales de control que
llega a cada una de las 16 etapas de la ALU. Estas compuertas son parte de la
unidad de control.
94
4.9. Diseño Lógico de la computadora básica
La figura 4.18 muestra el diagrama de flujo del ciclo de instrucción, incluyendo un
ciclo de interrupción para la computadora básica.
Se parte con la puesta a 0 del contador SC para que las señales de temporización
inicien con T0, también se inicializa a 0 el flip-flop IEN para inhibir la
interrupciones, es decir, aunque llegue un carácter de teclado al registro INPR o se
ponga un carácter en el registro OUTR para enviarlo a la impresora, el flip-flop R
permanecerá con el valor que fue inicializado, en este caso 0.
SC←0; IEN←0; R←0
0 = Ciclo de instrucción
1 = Ciclo de interrupción
R
R´T0
RT0
AR←PC
AR←0; TR←PC
R´T1
RT1
M[AR] ←TR; PC←0
IR←M[AR]; PC←PC+1
R´T2
RT2
AR←IR[11-0]; I←IR[15]
D7…D0←Decodificar IR[14-12]
PC←PC+1; IEN←0
R←0; SC←0
0 = Referencia a memoria
1 = Registro oE/S
D7
0 = Directo
1 = Indirecto
0 = Registro
I
1 = E/S
I
D´7I´T3
D´7IT3
AR←M[AR]
D´7IT4
D7I´T3
Ejecutar
instrucción de
referencia a
registro
D7IT3
Ejecutar
instrucción de
entrada-salida
Ejecutar
instrucción de
referencia a
memoria
Figura 4.18 Diagrama de flujo para la operación de una computadora
Cuando el flip-flop de interrupción R es 0, la computadora procede a buscar,
decodificar y ejecutar una instrucción y cuando es 1 inicia un ciclo de interrupción
95
cuya función es salvar la dirección de retorno de la interrupción y dar el control a
la rutina que se encargará de procesar la interrupción.
El flip-flop R puede establecerse a 1 en cualquier momento durante las fases
posteriores a la fase de búsqueda y decodificación, es decir después de la señal de
temporización T2. Por ello, para que se active deben estar desactivadas T0, T1 y T2
(T´0T´1T´2)
El análisis y diseño de este flip-flop se verá más adelante en el item 4.10.2 flipflops de apoyo.
Las microinstrucción que se muestran en el diseño lógico deben ser
implementadas con compuertas lógicas que generen las señales respectivas que
controlen los diferentes dispositivos. Por ejemplo la instrucción DR←M[AR]
implica que primero se debe generar la señal lectura de memoria y las señales S de
selección del BUS para que la palabra de dirección AR sea transferida al BUS. En
forma simultánea también debe de activarse la señal de carga C del registro DR,
con ello se logra que en el siguiente pulso del Reloj, lo que está en memoria pase
al BUS y luego al registro DR.
T0
T3
AND
T4D0
ADD
T4D1
DR←M[AR]
T5D0
T4D4
M[AR] ← AC
SC←0
AC←DR
SC←0
BSA
T4D5
PC←AR
SC←0
T4D3
DR←M[AR]
T5D2
AC←AC+AC
E←C15
SC←0
BUN
STA
T4D2
DR←M[AR]
T5D1
AC←AC▲AC
SC←0
LDA
M[AR] ← PC
AR←AR+1
ISZ
T4D6
DR←M[AR]
T5D6
T5D5
PC ← AR
SC←0
DR←DR+1
T6D6
M[AR] ← DR
Si DR=0 → PC ← PC+1
SC←0
Figura 4.19 Diagrama de flujo para instrucciones de referencia a memoria
96
La figura 4.20 muestra el diagrama de flujo de las instrucciones de referencia a
registro. Todas las instrucciones necesitan de sólo una señal de temporización y se
inician con la señal de temporización T3.
T0
T2
CLA
CLE
T3D7I´B11
AC←0
SC←0
CMA
T3D7I´B10
E←0
SC←0
INC
CME
T3D7I´B9
SPA
T3D7I´B5
AC←AC+1
SC←0
T3D7I´B8
E ← E´
SC←0
AC←AC´
SC←0
CIR
Si AC[15]=0
PC←PC+1
SC←0
T3D7I´B7
AC←DesDer AC
AC[15]←E
E← AC[0]
SC←0
SNA
T3D7I´B4
CIL
T3D7I´B6
AC←DesIzq AC
AC[0]←E
E← AC[15]
SC←0
SZA
T3D7I´B3
Si AC[15]=1
PC←PC+1
SC←0
SZE
T3D7I´B2
Si AC=0
PC←PC+1
SC←0
HLT
T3D7I´B1
H←0
Si E=0
PC←PC+1
SC←0
Figura 4.20 Diagrama de flujo para instrucciones de referencia a registro
La figura 4.21 muestra el diagrama de flujo de las instrucciones de entrada-salida.
Algunas de estas instrucciones necesitan de una señal de control adicional. Por
ejemplo la instrucción SKI requiere de las señales T3D7IB9, pero para que se
ejecute la microinstrucción PC←PC+1, la señal de salida del flip-flop FGI debe
ser 1 por consiguiente PC←PC+1 se ejecutará sólo si T3D7IB9(FGI) es 1. La
microinstrucción SC←0 se ejecutará independientemente de FGI.
T0
T2
INP
T3D7IB11
AC[7-0]←INPR
FGI←0
SC←0
OUT
T3D7IB10
OUTR←AC[7-0]
FGO←0
SC←0
SKI
T3D7IB9
Si FGI=1
PC←PC+1
SC←0
SKO
T3D7IB8
Si FGO=1
PC←PC+1
SC←0
ION
T3D7IB7
IEN←1
SC←0
IOF
T3D7IB6
IEN←0
SC←0
Figura 4.21 Diagrama de flujo para instrucciones de entrada-salida
Todas las instrucciones contienen como microinstrucción final SC←0 que resetea
el contador SC haciendo que la computadora básica pase a un nuevo ciclo de
instrucción si R=0 o interrupción en el caso de que R=1.
97
4.10. Diseño Físico de la computadora básica
La tabla siguiente muestra las señales de control y las microinstrucciones de la
computadora básica.
Instrucción
Lee carácter la impresora
o llega caracter del teclado
Interrupción
Recuperar
Decodificar
AND
ADD
LDA
STA
BUN
BSA
Señales
Microinstrucción
T´0T´1T´2(IEN)(FGI+FGO)
R←1
RT0
RT1
RT2
R´T0
R´T1
AR←0; TR←PC
M[AR] ←TR; PC←0
PC←PC+1; IEN←0; R←0; SC←0
AR←PC
IR←M[AR]; PC←PC+1
D7…D0←Decodificar IR[14-12]
AR←IR[11-0]; I←IR[15]
DR←M[AR]
AC←AC▲DR; SC←0
DR←M[AR]
AC←AC+DR; SC←0
DR←M[AR]
AC←DR; SC←0
M[AR]←AC; SC←0
PC←AR; SC←0
M[AR]←PC; AR←AR+1
PC←AR; SC←0
DR←M[AR]
DR←DR+1
M[AR]←DR
Si DR=0 →PC←PC+1; SC←0
AC←0; SC←0
E←0; SC←0
AC←AC´; SC←0
E←E´; SC←0
AC←DesDer(AC); AC[15]←E
E←AC[0]; SC←0
AC←DesIzq(AC); AC[0]←E
E←AC[15]; SC←0
AC←AC+1; SC←0
Si AC[15]=0 → PC←PC+1; SC←0
Si AC[15]=1 → PC←PC+1; SC←0
Si AC=0 → PC←PC+1; SC←0
Si E=1 → PC←PC+1; SC←0
H←0; SC←0
AC[7-0]←INPR; FGI←0; SC←0
OUTR←AC[7-0]; FGO←0; SC←0
Si FGI=1 → PC←PC+1; SC←0
Si FGO=1 → PC←PC+1; SC←0
IEN←1; SC←0
IEN←0; SC←0
R´T2
T4D0
T5D0
T4D1
T5D1
T4D2
T5D2
T4D3
T4D4
T4D5
T5D5
ISZ
T4D6
T5D6
T5D6
CLA
CLE
CMA
CME
D7I´T3B11
D7I´T3B10
D7I´T3B9
D7I´T3B8
CIR
D7I´T3B7
CIL
D7I´T3B6
INC
SPA
SNA
SZA
SZE
HLT
INP
OUT
SKI
SKO
ION
IOF
D7I´T3B5
D7I´T3B4
D7I´T3B3
D7I´T3B2
D7I´T3B1
D7I´T3B0
D7IT3B11
D7IT3B10
D7IT3B9
D7IT3B8
D7IT3B7
D7IT3B6
Figura 4.22 Tabla con las funciones de control y microinstrucciones
A partir de estas señales y microinstrucciones se hace el diseño de los circuitos
que permiten controlar los registros, memoria, bus y los flip-flops de apoyo. Por
ejemplo, si se desea diseñar el circuito que controla el registro AR (carga, limpieza
e incremento), primero se hace un listado de todas las microinstrucciones donde
aparece el registro AR a lado izquierdo, luego se forman tres grupos: uno que
contenga todas aquellas microinstrucciones donde AR es incrementado en 1 (señal
98
A), otro donde AR es puesto a 0 (señal L) y un tercero donde a AR se le transfiere
algún valor (señal C). Si revisamos la tabla anterior estas instrucciones son:
Entrada A
T4D5: AR←AR+1
Entrada L
T0R: AR←0
Entrada C
T0R´: AR←PC
T2R´: AR←IR[11-0]
T3ID´7 : AR←M[AR]
Entonces para que el registro AR incremente en 1, las señales T4 y D5 deben ser 1
y llegar a la entrada de control A de AR. De igual manera ocurre para las entradas
L y C de AR. Ver figura 4.19
Figura 4.23 Compuertas de control del registro AR
A continuación se verá la lógica que hace la transferencia de los registros al BUS.
Se asume que cuando se genere la señal x1 se debe transferir el contenido de AR al
BUS, eso implica que las entradas de selección S (S2S1S0) del BUS (según la
figura 4.7) deben ser 001. Cuando se genere la señal x2 se transferirá PC y por
tanto las entradas de selección del BUS serán 010, cuando se genere x3 DR y así
sucesivamente. Al completar la tabla con las características mencionadas, se tiene:
x7
0
0
0
0
0
0
0
1
x6
0
0
0
0
0
0
1
0
Entradas
x5 x4 x3
0 0 0
0 0 0
0 0 0
0 0 1
0 1 0
1 0 0
0 0 0
0 0 0
x2
0
0
1
0
0
0
0
0
x1
0
1
0
0
0
0
0
0
S2
0
0
0
0
1
1
1
1
Salidas
S1 S0
0 0
0 1
1 0
1 1
0 0
0 1
1 0
1 1
Registro que
pasará al BUS
Ninguno
AR
PC
DR
AC
IR
TR
M
Figura 4.24 Codificador para entradas de selección del BUS
Si se observa con detenimiento la tabla de la figura anterior se concluirá que se
trata de un codificador
99
De la tabla anterior se obtiene:
S0 = x1 + x3 + x5 + x7
S1 = x2 + x3 + x6 + x7
S2 = x4 + x5 + x6 + x7
Para determinar la función lógica de x1, se busca en la tabla de la figura 4.22 todas
las microinstrucciones que requieren que el contenido de AR sea transferido al
BUS. Estas microinstrucciones son:
T4D4: PC←AR
T5D5: PC←AR
Por lo tanto: x1 = T4D4 + T5D5
De igual forma se hace para x2, x3, x4, x5, x6 y x7 obteniéndose lo siguiente:
x2 = T0R´ + T0R + T5D4
x3 = T5D2 + T6D6
x4 = T4D3 + T3D7I
x5 = T2R´
x6 = T1R
x7 = T1R´ + T3D´7I + T4D0 + T4D1 + T4D2 + T4D6
Sustituyendo éstos valores en S0, S1 y S2 se obtienen las funciones lógicas con las
que se puede realizar el diseño del codificador para las entradas de selección S del
BUS común.
4.10.1. Los flip-flops de apoyo.
Son registros de un bit que se utilizan para almacenar uno de los estados en
los que se puede encontrar la computadora básica, como por ejemplo si la
instrucción de referencia a memoria en curso es directa o indirecta (flipflop I); si se ha producido acarreo luego de haber realizado una suma
aritmetica (flip-flop E); si se han activado las interrupciones (flip-flop
IEN), se ha llegado un carácter de teclado (flip-flop FGI); si se ha cargado
el registro OUTR con un carácter para la impresora (flip-flop FGO); si hay
una interrupción pendiente (flip-flop R) o si se ha detenido la computadora
(flip-flop H).
Estos flip-flops deben poderse iniciar (establecer a 1) o resetear (establecer
a 0) y en algunos casos, como el flip-flop E, poder complementar. Las
salidas de los flip-flops de apoyo unidas, mediante compuertas lógicas, a
otras señales sirven para generar las entradas de control de registros y otros
dispositivos.
Igual como se analizó para los registros, se seleccionan todas las
microinstrucciones donde se modifique el valor del flip-flop en cuestión.
Por ejemplo para el flip-flop IEN, las microinstrucciones son:
(A) T3D7IB6 :
IEN←0
(B) T2R
:
IEN←0
(C) T3D7IB7 :
IEN←1
100
Asumiendo que el flip-flop a usar es del tipo JK se tiene la tabla siguiente:
A
0
0
0
1
B
0
0
1
0
Resto
C
0
1
0
0
Q
Sin cambio
1
0
0
X
J
0
1
0
0
X
K
0
0
1
1
X
En el caso que A=B=C=0 (las tres señales desactivadas) el estado del flipflop debe permanecer sin cambios. El resto de casos nunca se van a dar
debido a que las señales son mutuamente excluyentes.
Simplificando las funciones lógicas J y K se tiene:
J = C = T3D7IB7
K = A + B = T3D7IB6 + T2R
Con las funciones lógicas J y K se procede a diseñar el diagrama siguiente:
Figura 4.25 Señales de control para el flip-flop IEN
Para el flip-flop R, las microinstrucciones son:
(A) T´2T´1T´0(IEN)(FGI+FGO) :
R←1
(B) T2R
:
R←0
Como A y B son mutuamente excluyentes nunca se dará que A=B=1
entonces para ese caso J y K pueden tomar cualquier valor. Así también
cuando A=B=0 el slip-flop R debe permanecer sin cambios.
Simplificando las funciones lógicas se tiene que:
J = A = T´2T´1T´0(IEN)(FGI+FGO) = (T2+T1+T0)´(IEN)(FGI+FGO)
K = B = T2R
Figura 4.26 Señales de control para el flip-flop R
101
Al unir los flip-flops IEN y R se tiene el diagrama de la figura 4.27 que es
prácticamente la implementación del hardware necesario para activar y
generar las interrupciones
Figura 4.27 Señales de control para el flip-flops IEN y R
Finalmente se analizará el flip-flop E. Este flip-flop es modificado con las
siguientes microinstrucciones:
(A) T3D7I´B10 :
E←0
(B) T3D7I´B8 :
E←E´
(C) T3D7I´B7 :
E←AC[0]
(D) T3D7I´B6 :
E←AC[15]
(E) T5D1
:
E←C[15]
En este caso también se da que las entradas son mutuamente excluyentes
Con la entrada A, J y K deben ser 0 y 1 respectivamente para que E=0;
Con la entrada B, J y K deben ser 1 y 1 para que E sea complementado.
Pero las entradas C, D y E van a necesitar los valores de AC[0], AC[15] y
C[15] respectivamente para establecer los valores J y K apropiados y
obtener la salida Q deseada. Por ello se tomara AC[0] (F), AC[15] (G) y C[15]
(H) como entradas adicionales. Teniendo en cuenta que A, B, C, D y E son
mutuamente excluyentes se construye la siguiente tabla:
A
0
0
0
0
0
0
0
0
1
B
0
0
0
0
0
0
0
1
0
C
0
0
0
0
0
1
1
0
0
D E
0 0
0 1
0 1
1 0
1 0
0 0
0 0
0 0
0 0
RESTO
F
X
X
X
X
X
0
1
X
X
G
X
X
X
0
1
X
X
X
X
H
X
0
1
X
X
X
X
X
X
Q
S-C
0
1
0
1
0
1
Q´
0
X
J
0
0
1
0
1
0
1
1
0
X
K
0
1
0
1
0
1
0
1
1
X
102
Donde: AC[0] es el bit 0 de AC, AC[15] es el bit 15 de AC y C[15] es el bit 15
de acarreo que se genera en la ALU.
Simplificando las funciones lógicas J y K se obtiene:
J = EH + DG + CF + B
J = T5D1C[15] + T3D7I´B6AC[15] + T3D7I´B7AC[0] + T3D7I´B8
K = EH´ + DG´ + CF´ + A + B
K = T5D1C´[15] + T3D7I´B6AC´[15] + T3D7I´B7AC´[0] + T3D7I´B10 + T3D7I´B8
Con lo que se diseña el diagrama siguiente:
Figura 4.28 Señales de control para el flip-flop E
4.10.2. El Acumulador.
Igual como se hizo con el registro AR se hace con el registro AC. Se
recopila todas las microinstrucciones de la tabla de la figura 4.22 donde
AC aparezca a la izquierda de la microinstrucción para luego formar 3
grupos:
Entrada A
T3D7I´B5:
AC←AC+1
Entrada L
T3D7I´B11:
AC←0
Entrada C
T5D0:
T5D1:
T5D2:
T3D7IB11 :
T3D7I´B9:
T3D7I´B7:
T3D7I´B6:
AC←AC▲DR
AC← AC+DR
AC←DR
AC[7-0]←INPR
AC←AC´
AC←DesDer AC,
AC←DesIzq AC,
AC[15]←E
AC[0]←E
103
Con las señales obtenidas se diseña el diagrama siguiente:
Figura 4.29 Compuertas de control del registro AC
Las instrucciones CIR y CIL realizan transferencias entre los bits 0 y 15
del acumulador con el flip-flop E. En el caso de las transferencias
E←AC[0] y E←AC[15] ya se vieron cuando se analizó el flip-flop E (ver
figura 2.28) sólo queda evaluar las transferencias AC[0] ← E y AC[15] ← E
las cuales se realizan únicamente cuando T3D7I´B6 y T3D7I´B7,
respectivamente son 1. En cualquier otro caso las señales de entrada del
acumulador deben ser las que provienen de la ALU.
La figura 4.30 muestra como interactúan el registro acumulador AC, el
flip-flop E y las señales de control.
Figura 4.30 El registro AC y el flip-flop E
104
4.11. Ejercicios resueltos y propuestos
4.11.1. Resueltos.
a) Una computadora utiliza una unidad de memoria de 256K palabras
de 32 bits cada una. Un código de instrucción binario se almacena en
una palabra de memoria. La instrucción tiene cuatro partes: un bit
indirecto, un código de operación, una parte de código de registro
para especificar uno de 64 registros y una parte de dirección. Dibuje
y represente el formato del código de instrucción binario
Como el código de instrucción se almacena en una palabra de
memoria y cada palabra es de 32 bits, entonces el código es de 32
bits.
Para poder representar 64 valores diferentes (un valor por cada
registro) será necesario 6 bits (26 = 64)
Para referenciar una de las 256K palabras será necesario 18 bits (218=
262144 = 256K)
Por lo que quedará: 32-1-6-18 = 7 bits para el código de operación.
El formato será el siguiente:
31
30
I
24
CodOp
23
18
CodReg
17
0
Dirección
b) Las siguientes entradas de control están activas en el sistema de BUS
común. Para cada caso, especifique la transferencia de registro que se
ejecutará durante la siguiente transición de reloj.
i)
ii)
iii)
iv)
S2
1
1
1
0
S1
1
1
0
0
S0
1
0
0
0
C de registro
IR
PC
DR
AC
Memoria
Leer
-Escribir
--
ALU
---Sumar
i) Si S = 111(2 = 7 (memoria) y se activa la entrada Leer de la
memoria, el contenido de memoria M[AR] pasa al BUS. Como
simultáneamente se activa la entrada C del registro IR entonces lo
del BUS pasa a IR. La transferencia será: IR←M[AR]
ii) Si S = 110(2 = 6 (TR) , el contenido de TR pasa al BUS y como
simultáneamente se activa la entrada C del registro PC entonces
lo del BUS pasa a PC. La transferencia será: PC←TR
iii) Si S = 100(2 = 4 (AC) , el contenido de AC pasa al BUS. Como
simultáneamente se activa la entrada C del registro DR y la
entrada escribir de la memoria, entonces lo del BUS pasa a DR y
también la palabra de dirección AR de la memoria. La instrucción
será: DR←AC; M[AR]←AC
iv) Si S = 000(2 = 0 (ningún registro), Al activarse la señal sumar de
la ALU se efectúa la suma de AC y DR. Al activarse tambiénn la
entrada C de AC, el resultado de la aLU es transferido a AC. La
transferencia será: AC←AC+DR.
105
c) Las siguientes transferencias se van a ejecutar en el sistema de BUS
común.
i.
AR←PC
ii.
IR←M[AR]
iii.
M[AR]←TR
iv.
AC←DR; DR←AC (en forma simultánea)
Para cada transferencia especifique: 1) el valor binario que debe
aplicarse a las entradas de selección del BUS; 2) el registro cuyas
entradas C debe estar activa (si es que hay alguna); 3) una operación
de lectura escritura (si se necesita) y 4) la operación en la ALU (si
hay alguna)
i)
ii)
iii)
iv)
S2
0
1
1
1
S1
1
1
1
0
S0
0
1
0
0
C de registro
AR
IR
DR-AC
Memoria
-Leer
Escribir
--
ALU
---Transf DR
d) Explique por qué no puede ejecutarse cada una de las siguientes
microinstrucciones durante un sólo pulso de reloj. Especifique una
secuencia de microinstrucciones que ejecuten la operación.
i.
IR←M[PC]
ii.
AC←AC+TR
iii.
DR←DR+AC
i.
ii.
iii.
Porque cuando se lee de memoria, es el registro AR el que
contiene la dirección a acceder. La secuencia sería:
AR←PC; IR←M[AR]
Porque para cualquier operación aritmética o lógica los
operandos deben ser colocados en los registros AC y DR. La
secuencia sería:
DR←TR; AC←AC+DR
Porque los resultados de una operación suma se almacena en
el registro acumulador AC. La secuencia sería:
AC←AC+DR; DR←AC
e) Para cada una de las siguientes instrucciones proporcione el código
hexadecimal y explique cual instrucción representa.
i.
0001 0000 0010 0100
ii.
1011 0001 0010 0100
iii.
0111 0000 0010 0000
i.
ii.
iii.
1024 (0 ADD 024) Suma el registro AC con la palabra que se
encuentra en la dirección memoria 024, el resultado se
almacena en AC.
B124 (1 STA 124 ) Toma la palabra de la dirección de
memoria 124 y en ese valor (dirección) almacena el contenido
de AC.
7020 (INC) Suma 1 al registro acumulador AC
106
f) El contenido de AC es A937 y el de PC 021. Determine el contenido
de AC, PC, AR e IR después de ejecutar la instrucción CLA.
Se supone que PC apunta a la instrucción en curso (CLA = 7800).
Siguiendo el flujo de la figura 4.18 se completa la tabla siguiente:
T
T0
T1
T2
T3
AC
A937
A937
A937
A937
0000
PC
021
021
022
022
022
AR
?
021
021
800
800
IR
?
?
7800
7800
7800
Es con la señal de temporización T3 que se ejecuta CLA y los valores
que aparecen en la última fila son los valores finales de AC, PC, AR
e IR
g) Escriba un programa que multiplique dos valores enteros ubicados en
la memoria y el resultado lo almacene en memoria. (utilizar el
método de sumas sucesivas)
Se asume que el programa empieza en la dirección de memoria 100 y
los valores a multiplicar se encuentran en las direcciones de memoria
200 y 201 respectivamente. El resultado se almacenará en 202.
DIR
COD
ASM
SEUDOCODIGO
100
2200
LDA 200
AC←M[200]
101
102
103
104
105
7200
7020
3203
7800
1201
CMA
INC
STA 203
CLA
ADD 201
AC←AC´
AC←AC+1
M[203] ←AC
AC←0
AC←AC+M[201]
106
6203
ISZ
M[203]←M[203]+1
107
4105
BUN 105
IR a 105
108
3202
STA 202
M[202]←AC
109
7001
HTL
203
DESCRIPCION
Carga el acumulador con el
primer factor
Complementa e incrementa en
1 (complemento a 2)
Salva AC en la dirección 203
Inicializa AC con 0
Suma a AC el segundo factor
Incrementa en 1 la palabra de
la dirección 203. Si esta
palabra es 0 salta a la
dirección 108 en caso
contrario continua con la
instrucción 107
Salta a la dirección 105
Salva en la dirección 202 el
resultado
Detiene la computadora
h) Las operaciones que van a ejecutarse con un flip-flop F se
especifican mediante los siguientes enunciados de transferencia de
registro:
XT3:
YT1:
ZT2:
WT5:
F←1
F←0
F←F´
F←G
Activar F a 1
Borrar F a 0
Complementar F
Transferir el valor de G a F
107
De otra manera, el contenido de F no debe cambiar. Dibujar el
diagrama lógico que muestre las conexiones de las compuertas que
forman las funciones de control y las entradas del flip-flop F.
La señal de temporización T hace que las señales sean mutuamente
excluyentes y por consiguiente nunca van estar activas más de una a
la vez, pero lo que si puede ocurrir es que las 4 señales estén
desactivadas a la vez. Ahí F no debe cambiar
Reemplazar XT3 por A, YT1 por B, ZT2 por C y WT5 por D. Pero la
transferencia del valor de G a F depende del valor de G. Con esto se
completa la tabla siguiente:
A
0
0
0
0
0
1
B
0
0
0
0
1
0
C D
0 0
0 1
0 1
1 0
0 0
0 0
Resto
G
X
0
1
X
X
X
J
0
0
1
1
0
1
X
K
0
1
0
1
1
0
X
Usando mapas de Karnaugh para simplificar las funciones lógicas se
tiene:
A´B´
A´B
AB
AB´
C´D´G´
0
0
X
1
C´D´G
0
0
X
1
C´DG
1
X
X
X
C´DG´
0
X
X
X
CDG´
X
X
X
X
CDG
X
X
X
X
CD´G
1
X
X
X
CD´G´
1
X
X
X
J=A + C + DG = XT3 + ZT2 + WT5G
A´B´
A´B
AB
AB´
C´D´G´
0
1
X
0
C´D´G
0
1
X
0
C´DG
0
X
X
X
C´DG´
1
X
X
X
CDG´
X
X
X
X
CDG
X
X
X
X
CD´G
1
X
X
X
CD´G´
1
X
X
X
K = B + C +DG´ = YT1 + ZT2 + WT5G´
El diagrama lógico con las conexiones de las compuertas que forman
las funciones es el siguiente:
108
i) Un programa de salida reside en la memoria comenzando en la
dirección 8FC. se ejecuta después de que la compuerta reconoce una
interrupción cuando FGO se convierte en 1 (mientras IEN=1).
i. ¿Qué instrucción debe colocarse en la dirección 1?
ii. ¿Cuáles deben ser las dos últimas instrucciones del programa de
salida?
i. Debe colocarse un salto incondicional con direccionamiento
directo a la dirección de memoria 8FC (0 BUN 8FC) cuyo código
de instrucción sería 48FC.
ii. La penúltima instrucción debe ser ION (F080) para activar
nuevamente las interrupciones ya que éstas fueron desactivadas
durante el ciclo de interrupción. La última instrucción es un salto
incondicional a la dirección de la instrucción que se iba a ejecutar
cuando se produjo la interrupción. Esta dirección es almacenada
en la dirección 000 de la memoria, por ello para retornar de la
interrupción se debe hacer un salto incondicional indirecto (1
BUN 000) cuyo código de instrucción sería C000.
j) Derive las puertas de control para la entrada de lectura-escritura de la
memoria.
Seleccionar todas las microinstrucciones de la tabla de la figura 4.22
y formar 2 grupos: las que aparece M[AR] a la izquierda (escritura) y
las que aparece a la derecha (lectura) de la microinstrucción.
Escritura
T1R:
M[AR]←TR
T4D3: M[AR]←AC
T4D5: M[AR]←PC
T6D6: M[AR]←DR
Lectura
T1R´:
T3D´7I:
T4D0:
T4D1:
T4D2:
T4D6:
IR←M[AR]
AR←M[AR]
DR←M[AR]
DR←M[AR]
DR←M[AR]
DR←M[AR]
R=T1R + T4(D3+D4) + T6D6 y W=T1R´ + T3D´7I + T4(D0+D1+D2+D6)
El diagrama sería el siguiente:
109
4.11.2. Propuestos
a) ¿Cuántos bits debe tener el registro AR si la memoria de la
computadora básica fuera de 65536 palabras de 16 bits?
b) Especifique la transferencia de registro que se ejecutarán si las
siguientes entradas de control están activas.
i)
ii)
iii)
S2
1
1
0
S1
1
1
1
S0
1
1
1
C de registro
AC
AC
TR
Memoria
Leer
Escribir
--
ALU
----
c) Las siguientes transferencias se van a ejecutar en el sistema de BUS
común:
i.
DR←TR
ii.
AC←M[AR]
iii.
M[AR]←DR.
Indique las señales control de los registros, memoria y ALU que se
requieren en cada una de ellas.
d) Para cada una de las siguientes instrucciones proporcione el código
hexadecimal y explique cual instrucción representa.
i.
1110 0100 1010 0111
ii.
0011 0001 0110 0101
iii.
0111 0000 0000 0100
e) El contenido de AC es 70C9 y el de PC 0A9. Determine el contenido
de AC, PC, AR e IR después de ejecutar la instrucción SNA
f) Si AC es el registro acumulador, P=M[160], S=M[161] y T=M[162],
C=M[163], determine los valores finales de AC, P, S, T, C después
de ejecutar el siguiente código de máquina que se encuentra en la
dirección de memoria 155h
215F, 1160, 3161, 2160, 315F, 2161, 3160, 6162, 4155, 7001, 0001,
0000, 7020, FFF8
g) Escriba un programa que divida dos valores enteros ubicados en la
memoria y el resultado lo almacene en memoria. (utilizar el método
de restas sucesivas)
h) Los enunciados de transferencia de un registro CS son los siguientes:
T1X3:
CS←DR
T2X5:
CS←M[AR]
T3X0:
TR←CS
Derive las puertas de control asociadas con el registro CS
i) Diseñe el circuito lógico que permita determinar si AC=0 (tome
como entradas del circuito las 16 salidas –bits- de AC)
j) Derive las puertas de control asociadas con el registro DR
110
BIBLIOGRAFIA
MORRIS MANO M.
“Arquitectura de Computadoras” – 3ra Edición Prentice
Hall - 1994.
Mc CALLA, T.R
“Lógica Digital y Diseño de Computadoras” –
Megabyte/ Noriega Editores - 1994.
STALLING, William
“Organización y Arquitectura de Computadoras” – 4ta
Edición Prentice Hall - 1998.
TANENBAUM, A.
“Organización de Computadoras, un enfoque
estructurado” – 3ra Edición Prentice Hall - 1992.
TOCCI, Ronald
“Sistemas Digitales, Principios y Aplicaciones” – 8va
Edición.
WAKERLY, John F.
“Diseño Digital Principios y Practicas” - 1ra Edición
Prentice Hall - 1990
INTERNET
http://pdf.rincondelvago.com/arquitectura-de-computadoras_2.html
http://akimpech.izt.uam.mx/Web_jr/ami1.htm
http://medusa.unimet.edu.ve/sistemas/bpis03/lab0.htm
http://iteso.mx/~miguelbaz/cursos/arqcomp-2005-01/index.html
111
Descargar