Está en la página 1de 97

ARQUITECTURA DE COMPUTADORAS

Ingeniería en Sistemas de Información


Universidad Tecnológica Nacional
Facultad Regional Santa Fe

1. SISTEMAS NUMÉRICOS
(edición 2010)

Introducción:
Los sistemas de numeración se emplean para representar cantidades. La base del sistema es el
número de estados discernibles.
Así:
10 estados para el Sistema Numérico Decimal (SND)
2 estados para el Sistema Numérico Binario (SNB)
8 estados para el Sistema Numérico Octal (SNO)
12 estados para el Sistema Numérico Duodécimal
16 estados para el Sistema Numérico Hexadecimal (SNH)

La complejidad de un sistema crece con la magnitud de la base, es decir con el número de símbolos
elementales utilizados.
La formación de los números.
El número de símbolos elementales permite distinguir un primer grupo de N objetos. Por encima del
enésimo objeto se recomienza a distinguir los objetos mediante cada uno de los símbolos básicos, pero
indicándose que se está por encima del enésimo objeto por agregado de uno de los símbolos.
Se obtiene así un número constituido por dos símbolos. Luego por tres, cuatro, etc.
El valor de un número es igual a la suma de los valores asignados a cada una de sus cifras.
Se llama peso de una cifra al valor afectado a la unidad del mismo rango o posición.
Ejemplo en el SND:
1.103 + 1.102 + 1.101 + 1.100
cifra de peso: 1000 + 100 + 10 + 1
Ejemplo: Determinar los pesos de las cinco primeras cifras del sistema duodecimal (en SND)
1.124 + 1.123 + 1.122 + 1.121 + 1.120
20736 + 1728 + 144 + 12 + 1
El empleo de un sistema u otro está ligado a las diferentes propiedades de los mismos.
Por ejemplo, para el sistema duodecimal es la divisibilidad de la base por 2, 3, 4 y 6, lo que facilita la
utilización de las fracciones 1/2, 1/3, 1/4, 1/6; para el sistema decimal lo es la divisibilidad de la base por 2 y
5, con las fracciones 1/2 y 1/5.
En electrónica digital, los dígitos se representan mediante niveles de distinto potencial. Si se
empleara el sistema numérico decimal, los circuitos deberían estar capacitados para distinguir en forma
segura entre 10 niveles.
Por supuesto que esto es posible, pero mediante el empleo de circuitos muy complejos y con
grandes posibilidades de error y por eso se emplea en forma casi exclusiva el Sistema Numérico Binario,
debido fundamentalmente a su simplicidad dado que sólo posee dos dígitos.
Definiciones:
Cantidad (C): Conjunto físico (homogéneo) de unidades.
Número: Símbolo usado para representar una cantidad.
Sistema Numérico: Conjunto de números utilizados para representar cantidades. En todo Sistema
Numérico una cantidad es representada por una o más cifras. El valor de cada
cifra depende de su posición relativa (peso) y del símbolo numérico.
Cero (0): Símbolo que indica ausencia de cantidad.
Base (b): Cantidad de símbolos de un sistema numérico, incluyendo el cero. Número de estados
discernibles.

Sistema Numérico Decimal (SND).


El SND es el más común de los sistemas numéricos empleados, debido probablemente al hecho de
que el ser humano posee diez dedos ("dígitos").
Por ejemplo, si escribimos 1972, lo que se quiere significar es lo siguiente:
1.103 + 9.102+ 7.101 + 2.100
Es decir que 1972 no es más que una manera convencional de escribir el polinomio indicado, en
forma abreviada.
Si en cambio escribimos 19,72, queremos significar:
1.101 + 9.100 + 7.10-1 + 2.10-2
La ventaja del SND comparado con el Sistema Numérico Romano, por ejemplo, se debe a que
posee una notación posicional basada en potencias de 10. Esto simplifica considerablemente las
operaciones aritméticas. Por ejemplo, un desplazamiento a la izquierda multiplica por 10, mientras que uno
a la derecha divide por 10.

1972 con un desplazamiento a la izquierda = 19720


1972 con un desplazamiento a la derecha = 197,2
ARQUITECTURA DE COMPUTADORAS - 1. SISTEMAS NÚMERICOS ed.2010.-

Distintos Sistemas Numéricos de Notación Posicional.


En general, una cantidad puede expresarse mediante el siguiente polinomio:
[1] C = sn . bn + sn-1 . bn-1 + ..... + s1 . b1 + s0 . b0 + s-1 . b-1 + s-2 . b-2 + ....... + s-m . b-m
Esta expresión se denomina "Ecuación Generalizada de Representación de Cantidades", en la que:
C = cantidad
s = símbolo numérico
b = base
n = orden de la parte entera de la ecuación
m = orden de la parte fraccionaria de la ecuación
La expresión [1] se reduce por convención a ser escrita como sigue:
C = sn , ... , s1 , s0 , s-1 , ... , s-m
Número de cifras.
Obsérvese que si n es el orden de la parte entera de la ecuación, el número de cifras enteras es
n+1, mientras que para la parte fraccionaria, el número de cifras coincide con el orden m.
El coeficiente s adopta un valor comprendido entre 0 y b - 1.
Por lo tanto, en el Sistema Numérico Binario (b = 2), s abarca sólo dos valores: 0 y 1. En el
Sistema Numérico Octal (b = 8), los 8 valores posibles van desde 0 a 7. En el Sistema Numérico Decimal (b
= 10), desde 0 a 9. Y en el Sistema Numérico Hexadecimal (b = 16), desde 0 a F, utilizándose las seis
primeras letras del alfabeto para lograr los 16 símbolos necesarios.
Veamos la siguiente tabla comparativa:

Decimal (base = 10) Binario (base = 2) Octal ( base = 8) hexadec. al (b. = 16)
102 101 100 27 26 2524 23 22 21 20 82 81 80 161 160
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 1 0 0 1 0 1
0 0 2 0 0 0 0 0 0 1 0 0 0 2 0 2
0 0 3 0 0 0 0 0 0 1 1 0 0 3 0 3
0 0 4 0 0 0 0 0 1 0 0 0 0 4 0 4
0 0 5 0 0 0 0 0 1 0 1 0 0 5 0 5
0 0 6 0 0 0 0 0 1 1 0 0 0 6 0 6
0 0 7 0 0 0 0 0 1 1 1 0 0 7 0 7
0 0 8 0 0 0 0 1 0 0 0 0 1 0 0 8
0 0 9 0 0 0 0 1 0 0 1 0 1 1 0 9
0 1 0 0 0 0 0 1 0 1 0 0 1 2 0 A
0 1 1 0 0 0 0 1 0 1 1 0 1 3 0 B
0 1 2 0 0 0 0 1 1 0 0 0 1 4 0 C
0 1 3 0 0 0 0 1 1 0 1 0 1 5 0 D
0 1 4 0 0 0 0 1 1 1 0 0 1 6 0 E
0 1 5 0 0 0 0 1 1 1 1 0 1 7 0 F
0 1 6 0 0 0 1 0 0 0 0 0 2 0 1 0
0 1 7 0 0 0 1 0 0 0 1 0 2 1 1 1
.............. ............. ............. ............
1 0 0 0 1 1 0 0 1 0 0 1 4 4 6 4
1 2 7 0 1 1 1 1 1 1 1 1 7 7 7 F
2 5 5 1 1 1 1 1 1 1 1 3 7 7 F F
Tabla 1-1.

Capacidad de Representación.
En todo Sistema Numérico, la cantidad máxima entera que puede representarse con una ecuación
de orden n es:
CM = bn+1 - 1
donde n+1 es el número de cifras enteras y que denominaremos N. Así, si N = 4:
en SNH, CM = FFFF = 164 - 1 = 65535110
en SND, CM = 9999 = 104 - 1 = 999910
en SNO, CM = 7777 = 84 - 1 = 409510
en SNB, CM = 1111 = 24 - 1 = 1510

Debe apreciarse la pérdida de representatividad que se produce con la disminución de la base.

Si CM10 para D cifras decimales es igual a CM2 para B cifras binarias, tenemos:

CM10 = 10D -1 = CM2 = 2B -1


despreciando el -1 en ambos miembros queda: 10D = 2B
aplicamos log a ambos miembros log ( 10D ) = log ( 2B )
para bajar las variables del exponente D log10 10 = B log10 2
y como log10 10 = 1, nos queda D = B log10 2
siendo log10 2 = 0,3 , resulta D = B . 0,3
entonces B = 1/0,3 D
quedando finalmente B = 3,3 D

1-2
ARQUITECTURA DE COMPUTADORAS - 1. SISTEMAS NÚMERICOS ed.2010.-

Por lo tanto, la expresión indica que en binario se requieren 3,3 veces más cifras que en decimal
para representar una cantidad.
Sistema Numérico Binario (SNB).
A fin de simplificar el diseño de los circuitos electrónicos y aumentar su seguridad, en los equipos
digitales se efectúan los cálculos en binario, es decir se emplea el SNB. Así por ejemplo, las calculadoras
electrónicas convierten los operandos decimales provenientes del teclado al SNB, hacen el cálculo solicitado
en éste último sistema y convierten el resultado al SND para visualizarlo.
El SNB se basa en potencias de 2 y por lo tanto posee solamente dos dígitos que llamaremos 0 y 1.
El equipo digital debe entonces conocer o distinguir dos estados que pueden ser:
- ausencia de pulso = 0
- presencia de pulso = 1
- voltaje bajo = 0
- voltaje alto = 1
- contacto abierto = 0
- contacto cerrado = 1
- ausencia de corriente = 0
- presencia de corriente = 1
Los ceros y unos de la notación binaria son denominados bits (en singular bit), palabra que surge de
la contracción de la expresión inglesa binary digit (dígito binario).

Conversión de cantidades entre diferentes sistemas numéricos.


La conversión de valores de un sistema numérico a otro implica realizar ciertas operaciones, pero
además se debe hacer una conversión de los símbolos correspondientes.
Con relación a las operaciones, estas pueden realizarse en el sistema de partida o en el sistema de
llegada. Indudablemente por la práctica que se tiene en el SND, normalmente optaremos por métodos que
operen en sistema de partida cuando convertimos de decimal a otro sistema y en sistema de llegada cuando
lo hagamos desde cualquier otro sistema decimal. Pero todos los métodos nos pueden servir para
convertir desde cualquier sistema a otro.

Conversión de cantidades enteras de Decimal a Binario y Binario a decimal.


Sea por ejemplo la cantidad 5910 :
59 = 29 . 2 + 1
= 29 . 21 + 1 . 20
= (14 . 2 + 1) . 21 + 1 . 20
= 14 . 22 + 1 . 21 + 1 . 20
= (7 . 2 + 0) . 22 + 1 . 21 + 1 . 20
= 7 . 23 + 0 . 22 + 1 . 21 + 1 . 20
= (3 . 2 + 1) . 23 + 0 . 22 + 1 . 21 + 1 . 20
= 3 . 24 + 1 . 23 + 0 . 22 + 1 . 21 + 1 . 20
= (1 . 21 + 1) . 24 + 1 . 23 + 0 . 22 + 1 . 21 + 1 . 20
5910 = 1 . 25 + 1 . 24 + 1 . 23 + 0 . 22 + 1 . 21 + 1 . 20
Si observamos la descomposición de la cantidad se detecta que la misma, tranquilamente puede ser
la representación de una cantidad binaria mediante la ecuación generalizada de representación de
cantidades con la sola diferencia que la base y el orden de la misma están expresados en decimal.
Tomaremos la costumbre de usar valores decimales para representarlos solo por comodidad. Por lo tanto
podemos decir que por convención básica de la numeración binaria resulta:
5910 = 1 1 1 0 1 12
Obsérvese que los dígitos de este número binario (salvo el primero de la izquierda) son, de derecha
a izquierda, los restos sucesivos que se van obteniendo al dividir repetidamente el número 59 por 2.

El primer dígito de la izquierda es el último cociente que se obtiene:


59 2
19 29 2 Este es el método clásico que se emplea para convertir
1 09 14 2 una cantidad entera decimal en binaria. El paso de binario
1 0 7 2 a decimal se realiza mediante la ecuación generalizada.
1 3 2
1 1

Por el contrario si lo que deseamos hacer es convertir de binario a decimal sólo tendremos que
representar el valor binario mediante la ecuación general y resolver la misma en decimal.
1 1 1 0 1 12 = 1 . 25 + 1 . 24 + 1 . 23 + 0 . 22 + 1 . 21 + 1 . 20 = 32 + 16 + 8 + 0 + 2 + 1 = 5910
Hemos visto dos métodos de conversión entre sistemas. El primero (dividir sucesivamente) opera
en el sistema numérico de partida, siendo útil para pasar un valor de decimal a otro sistema numérico y el
segundo (expresar la ecuación y resolverla) opera en el sistema numérico de llegada y por lo tanto será
muy útil para llegar desde cualquier sistema al decimal. Notemos que aquí no se realizaron conversiones de
símbolos debido a que estamos pasando de un sistema mayor a uno menor y por lo tanto los símbolos del

1-3
ARQUITECTURA DE COMPUTADORAS - 1. SISTEMAS NÚMERICOS ed.2010.-

segundo están incluidos en el primero y además porque a la base y el valor de orden convinimos en
expresarlos siempre en decimal.

La utilidad de los sistemas Octal y Hexadecimal.


Si bien el sistema binario es útil para el manejo interno de la máquina, no es práctico en su manejo
externo y da lugar a errores en su utilización por parte del ser humano. Tanto el sistema octal que se
asemeja mucho al decimal, como el hexadecimal que supera a este en capacidad de representación son
sistemas numéricos fuertemente ligados al binario dado que sus respectivas bases son la tercer y cuarta
potencia de dos.
En puntos anteriores resaltábamos por ejemplo que uno de los métodos para convertir cantidades
de un sistema numérico a otro era el de dividir sucesivamente la cantidad por la base a la que deseamos
llegar. En este método se operaba en el sistema numérico de salida. Supongamos entonces que deseamos
convertir una cantidad binaria a octal, tendremos que dividir por ocho operando en binario. Pero ocho es 2
(102), base del sistema binario, al cubo, o sea 10002. En cualquier sistema numérico, dividir o multiplicar por
la unidad seguida de ceros, significa correr la coma tantas posiciones como ceros se tengan.
Por lo tanto para convertir una cantidad binaria a octal simplemente agrupamos de a tres los dígitos
binarios de derecha a izquierda, marcando así los restos de sucesivas divisiones, y luego convertimos cada
uno de estos grupos a octal.
Ej.: 100 010 001 1112
4 2 1 78
Dado que 16 (100002) es la cuarta potencia de dos, lo mismo se puede realizar para convertir a
hexadecimal, pero agrupando de a cuatro dígitos.
Para convertir de octal-binario o hexadecimal-binario se realiza el camino inverso, cada dígito octal
o hexadecimal se reemplaza por los tres o cuatro dígitos binarios correspondientes.

Conversión Decimal a Octal/Hexadecimal.


En el caso del octal se efectúan divisiones por ocho. En primer término de la cantidad en decimal y
luego a partir de los cocientes resultantes, hasta que el cociente quede reducido a cero. Los restos de las
sucesivas divisiones conforman la cantidad en octal.
Ej.: 137610 = ? octal
Coc. Resto
1376/8 = 172 0
172/8 = 21 4
21/8 = 2 5
2/8 = 0 2

137610 = 2 5 4 08

Para el hexadecimal la metodología es la misma (dividir por 16), con el agregado de se deben
convertir aquellos restos que estén en el rango 10 a 15 por el correspondiente símbolo hexadecimal (A - F).

Conversión Octal-hexadecimal/Decimal.
3058 = 3 . 82 + 0 . 81 + 5 . 80 =
= 3 . 64 + 0 . 8 + 5 . 1 =
= 192 + 0 + 5 =
= 19710

FC916 = F . 162 + C . 161 + 9 . 160


= 15 . 256 + 12 . 16 + 9 . 1
= 3840 + 192 + 9
= 404110

Por lo tanto, para convertir una cantidad expresada en SNO o SNH en SND, se la representa
mediante la ecuación general de representación de cantidades, con los pesos escritos en decimal,
efectuándose las operaciones en decimal. Nótese que en el caso del hexadecimal debemos hacer una
conversión de los símbolos superiores a 9.

Fracciones: (Ecuación generalizada de representación de fracciones).


Una fracción es una cantidad comprendida entre 0 y 1, teniendo la ecuación generalizada que la
representa la forma siguiente:

s1 s2 sm
F = --- + --- + .... + ---
b1 b2 bm

en donde s1, s2, ..., sm : símbolos


b1, b2, ..., bm : coeficientes de posición o peso
b : base del sistema numérico

o bien s1 . b1 + s0 . b0 + s-1 . b-1 + s-2 . b-2 + ... + s-m . b-m


( , )
La coma ( , ) es el símbolo utilizado convencionalmente para separar la parte entera de la
fraccionaria.

1-4
ARQUITECTURA DE COMPUTADORAS - 1. SISTEMAS NÚMERICOS ed.2010.-

Esta última forma es similar a la vista para la representación de cantidades enteras, sólo que las
potencias a la derecha de la coma son negativas. Entonces la coma es una línea divisoria, en una cantidad
con parte fraccionaria, entre potencias positivas y negativas.
A título de ejemplo representemos una cantidad fraccionaria en decimal:

,63710 = , 6 . 10-1 + 3 . 10-2 + 7 . 10-3


6 / 10 + 3 / 100 + 7 / 1000

Conversión Decimal a otras bases.


Se multiplica siempre por la base del sistema al cual se convierte.
Ejemplos: , 062510 a binario y octal

a binario a octal
Como puede observarse, se descarta en cada
,0625 ,0625
resultado su parte entera y solamente se vuelve
x 2 x 8
a multiplicar la parte fraccionaria.
0,1250 0,5000
x 2 x 8
0,2500 4,0000
x 2
0,5000
x 2 , 0 48
1,0000

, 0 0 0 12

Para el hexadecimal la metodología es la misma, debiendo multiplicarse por 16.

Conversión de fracciones en otras bases a Decimal.


Por empleo de la ecuación generalizada con las bases (2 u 8) escritas en decimal.
Ej.: , 1012 = ? decimal
, 1012 = , 1. 2-1 + 0 . 2-2 + 1 . 2-3
= 1/2 + 0 + 1/8
= 0,5 + 0 + 0,125
= 0,625
, 1012 = , 62510
Ej.: , 518 = ? decimal
, 518 = 5 . 8-1 + 1 . 8-2
= 5 .1/ 8 + 1 . 1/ 64
= 0,625 + 0,015625
= 0,64062510

De la misma forma operamos en decimal.

Método breve para convertir fracciones a decimal.


Se considera la fracción a convertir, binaria u octal, como entero y se procede de la forma que
muestra el ejemplo siguiente:
,100012 = ? decimal
,1 0 0 0 1
24 23 22 21 20
16 + 0 + 0 + 0 + 1 = 17
El resultado se divide por un común denominador que es la potencia inmediata superior a la más
grande. En este caso, 25 = 32.
Entonces:
,10001 = 17 / 32 = ,5312510

1-5
ARQUITECTURA DE COMPUTADORAS - 1. SISTEMAS NÚMERICOS ed.2010.-

ANEXO I
TABLA DE POTENCIAS
Potencias de 2.

2n n 2-n

1 0 1,0
2 1 0,5
4 2 0,25
8 3 0,125

16 4 0,062 5
32 5 0,031 25
64 6 0,015 625
128 7 0,007 812 5

256 8 0,003 906 25


512 9 0,001 953 125
1 024 10 0,000 976 562 5
2 048 11 0,000 488 281 25

4 096 12 0,000 244 140 625


8 192 13 0,000 122 070 312 5
16 384 14 0,000 061 035 156 25
32 768 15 0,000 030 517 578 125

Potencias de 8

8n n 8-n

1 0 1,0
8 1 0,125
64 2 0,015 625
512 3 0,001 953 125

4 096 4 0,000 244 140 625


32 768 5 0,000 030 517 578 125
262 144 6 0,000 003 814 697 265 625
2 097 152 7 0,000 000 476 837 158 203 125

Potencias de 16

16n n 16-n

1 0 1,0
16 1 0,062 5
256 2 0,003 906 25
4 096 3 0,000 244 140 625

65 536 4 0,000 015 258 789 062 5


1 048 576 5 0,000 000 953 674 316 406 25
16 777 216 6 0,000 000 059 604 644 775 390 625
268 435 456 7 0,000 000 003 725 290 298 461 914 062 5

1-6
ARQUITECTURA DE COMPUTADORAS
Ingeniería en Sistemas de Información
Universidad Tecnológica Nacional
Facultad Regional Santa Fe

2. CÓDIGOS
(edición 2010)

Transmisión y codificación de la información

Línea de comunicación
Fuente Destino
de Transmisor Receptor de la
información señal señal información
Transmitida Recibida
Mensaje Mensaje
Emitido Recibido
Figura 2-1.

Definiciones:
Mensaje: Cualquier dato sobre algún suceso ocurrido.
Canales de comunicación: Enlaces informativos que sirven para transmitir mensajes.
Señales: Portadores físicos de la información en los canales de información.
Codificación: Conversión de una señal de una forma a otra.
Por ejemplo en la transmisión de un telegrama. El mensaje se escribe en un formulario
telegráfico que se convierte a la forma del código Morse que consta de puntos y rayas
transmitidos mediante impulsos de corriente, largos y cortos por la línea de comunicación.
En la recepción, por los impulsos captados se regenera el texto inicial del mensaje.
Se observa la presencia del mensaje en calidad de señales de diferentes formas:
- de texto literal
- puntos y rayas del código Morse
- impulsos de corriente en la línea de comunicación
De una forma a la siguiente, hay una codificación.

Alfabeto: Grupo de símbolos (letras, palabras, puntos, rayas, etcétera) que tengan un sentido conocido
tanto por el remitente como por el destinatario del mensaje. Los propios símbolos se determinan
por convenio de las partes.
Para la transmisión, el remitente elige del alfabeto, un símbolo tras otro, los convierte en las
señales correspondientes y los transmite por el canal de comunicación. En éste, las señales se
someten a la influencia de las interferencias, lo que provoca su distorsión. Así, las señales en la
parte de recepción van a diferir de las señales enviadas al canal de comunicación.
El proceso de recepción consiste en que el destinatario al recibir cualquier señal debe identificarla
con uno de los símbolos existentes del alfabeto, excluyendo los demás. Si hay grandes
distorsiones en el canal, esta tarea de decodificación puede presentar grandes dificultades. Los
métodos para superar estas dificultades constituyen la esencia de la Teoría de la Comunicación.
En los sistemas técnicos se emplean alfabetos de varios tipos. Pero por diversos motivos tiene
gran empleo el alfabeto Binario, que sólo utiliza dos tipos de símbolos asignados
convencionalmente por 0 y 1. Mediante el alfabeto binario un mensaje está constituido por una
secuencia de ceros y unos, como por ejemplo en 1001001. El número total de mensajes que
constan de m letras del alfabeto binario es igual a 2 m.

Códigos binarios.
Toda información de tipo discreta puede ser directamente codificada en binario.
Los códigos binarios se generan en función de las necesidades. Así, si por ejemplo tenemos que
discernir entre 4 objetos O1, O2, O3, O4 y podemos asignarles las combinaciones de 2 dígitos binarios 00,
01, 10 y 11 respectivamente.
N
En general, con N cifras binarias se pueden obtener 2 combinaciones. Cada una de estas se
N
puede asignar a un objeto distinto. Por ello el número total de asignaciones es el de permutaciones de las 2
N
combinaciones, vale decir 2 !, que constituyen otros tantos códigos binarios.
1
Si N=1, 2 = 2 1 x 2 = 2 = 2!
2
Si N=2, 2 =4 1 x 2 x 3 x 4 = 24 = 4!
En éste último, entonces, para representar 4 objetos podemos escoger entre 24 códigos de dos
dígitos binarios.
Ejemplo: Asignación de códigos para cuatro colores

Código asignaciones posibles de colores

00 AAAAAARRRRRRVVVVVVNNNNNN A = Azul
01 RRVVNNAAVVNNAARRNNAARRVV R = Rojo
10 VNRNRVVNANAVRNANARRVAVAR V = Verde
11 NVNRVRNVNAVANRNARAVRVARA N = Negro
Tabla 2-1.

Códigos binarios específicos.


Estudiaremos a continuación aquellos cuyo uso es más frecuente debido a que poseen alguna
propiedad particular.
ARQUITECTURA DE COMPUTADORAS - 2 CODIGOS (ed.2010)

Códigos binarios continuos y cíclicos.


Combinaciones binarias adyacentes: son aquellas que difieren en un solo bit.
Un código binario es continuo si las combinaciones correspondientes a números decimales
consecutivos son adyacentes.
Además, un código binario continuo es cíclico si la última combinación es adyacente a la primera.

Código reflejado de Gray.


A partir del código binario natural de dos bits, crearemos el código de Gray de dos dígitos. Y
reflejando sucesivamente los resultados se generará el código para n cantidad de dígitos.

1) Código natural de dos bits 00 0 2) Asignamos la combinación 00 0


01 1 10 al 3 y 11 al 2 para obtener el 01 1
10 2 código continuo y cíclico de dos 11 2
11 3 bits. 10 3

3) Reflejemos el código anterior 00 4) Para lograr el reflejado de 000 0


01 tres bits basta agregar una 001 1
11 tercera columna a la izquierda 011 2
10 con ceros para las primeras 4 010 3
filas y con unos para las 4 filas
10 restantes. 110 4
11 111 5
01 101 6
00 100 7
5) Tomando el de tres bits, Gray dec.
reflejándolo y agregando la 0000 0
columna siguiente con la mitad 0001 1
superior de las filas 0011 2
conteniendo ceros y la mitad 0010 3
El código Gray se
inferior unos, se logra el 0110 4
emplea principalmente para
reflejado de cuatro bits. 0111 5
la conversión de información
0101 6
0100 7 analógica a digital.
Una gran ventaja de
1100 8 este código es su facilidad de
1101 9 conversión al código binario
1111 10 natural (que veremos en una
1110 11 unidad subsiguiente).
1010 12
1011 13
1001 14 Tabla 2-3. Código Reflejado de
1000 15 Gray

Código progresivo Johnson.


Es otro código continuo y cíclico. Su capacidad de codificación es 2.n, siendo n el número de
posiciones binarias. Es muy práctico para sistemas electrónicos de conteo.
Así para n=5, 2x5=10, lo que tan solo permite codificar los diez símbolos decimales.
Dec. Johnson
0 00000
1 00001
2 00011
3 00111
4 01111
5 11111
6 11110
7 11100
8 11000
9 10000 Tabla 2-4. Código Johnson

Códigos decimales codificados en binario (BCD).


En éstos, cada cifra decimal se codifica directamente en un código binario. Para representar los diez
3
símbolos de una cifra, se requieren cuatro bits, porque con tres, sólo podríamos codificar 2 = 8 símbolos.
4
Por lo tanto, de las 2 = 16 combinaciones de cuatro bits, sólo se ocupan diez.
Ésta sobreabundancia hace que se restrinja el empleo de éstos códigos BCD al diseño de sistemas
de control digitales y calculadoras digitales de pequeña capacidad, como las de bolsillo.

Códigos BCD ponderados.


Son aquellos en los que a cada posición o cifra binaria se le asigna un peso y por lo tanto, el número
decimal equivalente surge de sumar los pesos de las posiciones que posean el valor 1.
De los BCD ponderados, los más importantes son el BCD natural (1 2 4 8), el BCD Aiken (1 2 4 2) y
el BCD 1 2 4 5.

2-2
ARQUITECTURA DE COMPUTADORAS - 2 CODIGOS (ed.2010)

Por otra parte, el código Aiken, además de ser BCD ponderado es autocomplementario: la
combinación correspondiente al complemento a nueve de n, es decir 9 - n, se obtiene invirtiendo la
combinación correspondiente a n, es decir cambiando los ceros por unos y viceversa. Ej.: si n = 4, entonces
tenemos que 9 – 4 = 5, luego como la combinación para 4 es 0 1 0 0, su complemento es 1 0 1 1 que
corresponde a la combinación para 5.

DÍGITO BCD BCD AIKEN


DECIMAL NATURAL
8 4 2 1 2 4 2 1 5 4 2 1
0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 0 0 1 0 0 0 1 0 0 0 1
2 0 0 1 0 0 0 1 0 0 0 1 0
3 0 0 1 1 0 0 1 1 0 0 1 1
4 0 1 0 0 0 1 0 0 0 1 0 0
5 0 1 0 1 1 0 1 1 1 0 0 0
6 0 1 1 0 1 1 0 0 1 0 0 1
7 0 1 1 1 1 1 0 1 1 0 1 0
8 1 0 0 0 1 1 1 0 1 0 1 1
9 1 0 0 1 1 1 1 1 1 1 0 0

Tabla 2-5 : códigos BCD ponderados

Códigos BCD no-ponderados.


No tienen asignación de peso. De éstos el más utilizado es el denominado exceso de 3. Es
autocomplementario como el Aiken y se obtiene adicionando 3 a cada combinación del BCD natural.

Dígito B C D ex-3
Decimal
0 0011
1 0100
2 0101
3 0110
4 0111
5 1000
6 1001
7 1010
8 1011 Tabla 2-6.
9 1100 Codigo BCD ex-3

La codificación de una cantidad decimal de dos o más cifras mediante un código BCD se realiza cifra
por cifra. Así por ejemplo, la cantidad decimal 748 se representa:

BCD 7 4 8
Natural 0111 0100 1000
Exc. 3 1010 0111 1011
Aiken 1101 0100 1110 Ejemplo 2-1.

Códigos alfanuméricos.
Un código alfanumérico es un código binario que permite representar los 10 símbolos decimales y los
26 símbolos alfabéticos (letras) más un cierto número de símbolos especiales, tales como: ; . , $ " etcétera.
5
El mínimo número de bits para codificar es seis, ya que 2 = 32 no es suficiente.
Los códigos alfanuméricos más comunes son el ASCII (American Standard Code for Interchange of
Information) que puede ser de 7 u 8 dígitos, y el EBCDIC (Extended Binary Coded Decimal Interchange
Code) que tiene 8 dígitos. Existen otros como el interno de máquina y el código Hollerich para tarjeta
perforada que ya perdió casi totalmente su utilidad.
Un ejemplo de codificación en el código interno "6 bits":

J U A N
100001 110100 010001 100101

Códigos Detectores de Errores.


En el manejo, y especialmente en la transmisión de una información numérica, es posible que se
produzcan errores debido a la presencia de ruido en el proceso o por avería de alguno de los componentes.
n
Cuando en un código binario se utilizan todas las combinaciones posibles (2 ) de sus n posiciones,
es imposible la detección de un error, porque una combinación del código se transformará en otra que
también pertenece a él. Por consiguiente la detección de errores en un código binario se logra no utilizando
todas las combinaciones posibles. Pero esta condición, aunque es necesaria no es suficiente para que el
código permita detectar errores. Por ejemplo, el código BCD ex 3 no utiliza más que diez combinaciones de
las dieciséis posibles de los cuatro bits, pero, si por un error en un bit, la combinación 0011 se convierte en
0111, no es posible detectarlo, porque ambas combinaciones pertenecen al código.
Para establecer la condición necesaria y suficiente para que un código binario permita detectar
errores, definiremos el concepto de distancia mínima de un código.

Distancia mínima de un código.

2-3
ARQUITECTURA DE COMPUTADORAS - 2 CODIGOS (ed.2010)

En un código se define a la distancia mínima, como la menor de las distancias entre dos
combinaciones binarias pertenecientes al mismo. El valor de la distancia mínima de los códigos estudiados
hasta ahora, es la unidad, y, por lo tanto, un error en uno solo de los bits de una combinación binaria
perteneciente a cualquiera de ellos, puede convertirlo en otra combinación valida para dicho código, haciendo
que el error no sea detectable.
De todo lo dicho se deduce que, para que un código pueda detectar errores, su distancia
mínima ha de ser superior a la unidad.
Existen diversos tipos de códigos detectores de errores, entre los cuales se encuentran los códigos
de control de paridad y los códigos de peso constante (entendiendo por peso de una combinación binaria al
número de unos lógicos de la misma).

Códigos de control de paridad.


Los códigos de control de paridad se obtienen añadiendo a las combinaciones de los códigos de
distancia unidad anteriormente estudiados, un bit llamado de paridad. Si el código que se desea obtener es
de paridad par, dicho bit será tal que el número de unos en cada combinación del nuevo código se par. Si,
por el contrario, se desea un código de paridad impar, el bit añadido a cada combinación ha de ser tal que la
combinacion resultante tenga un número impar de unos.
La detección de errores en estos códigos consiste en comprobar al recibir la información, si el
número de unos de cada combinación es par (códigos de paridad par) o impar (códigos de paridad impar).
La principal ventaja de estos códigos es que se forman a partir de cualquier otro código o
combinación binaria.

dígito BCD bit paridad código


decimal ex de 3 impar resultante
0 0011 1 00111
1 0100 0 01000
2 0101 1 01011
3 0110 1 01101
4 0111 0 01110
5 1000 0 10000
6 1001 1 10011
7 1010 1 10101
8 1011 0 10110
9 1100 1 11001

Ejemplo 2-2. Cálculo del bit de paridad

Códigos de peso constante.


Entre los códigos de peso constante se encuentran el 2 entre 5 y el biquinario que es un código de 7
bits. Ambas combinaciones poseen solamente dos unos lógicos.

dígito código cód.biquinario


decimal 2 entre 5 5043210 (pesos)
0 01100 0100001
1 11000 0100010
2 10100 0100100
3 10010 0101000
4 01010 0110000
5 00110 1000001
6 10001 1000010
7 01001 1000100
8 00101 1001000 Tabla 2-7. Códigos
9 00011 1010000 de peso constante
Los códigos estudiados son de distancia mínima de dos y permiten, pues la detección de errores de
un bit. Para poder detectar errores de más de un bit es necesario utilizar códigos de distancia mínima
superior a dos. En general el número de bits erróneos que se pueden detectar es igual al número en que la
distancia mínima es superior a la unidad.

Códigos Correctores de Errores.


Los códigos correctores de errores, no sólo indican la existencia de un error como los que hemos
estudiado en el apartado anterior, sino que proporcionan información de cual es la cifra o cifras binarias
erróneas y, por consiguiente permiten su corrección invirtiendo simplemente el bit correspondiente.
Estos códigos se utilizan cuando no es posible o se hace muy difícil pedir la retransmisión de una
información frente a la detección de un error.
De producirse un error en un código detector de errores, la combinación errónea obtenida posee
como mínimo dos adyacentes pertenecientes al código, y no es posible discernir de cual de estos procede.
Por ejemplo, en el código BCD ex 3 con paridad impar la distancia mínima es dos, si se detecta la
combinación errónea '10001' es imposible conocer si el error se ha producido en el primer bit y la
combinación correcta es '10000',en el segundo y es correcto '10011', tercero y es '10101' o el cuarto y es
'11001'.
Por lo tanto, para poder corregir errores, la distancia mínima del código ha de ser superior a dos. Si
la distancia mínima de un código es tres, la combinación obtenida por error en un bit, es adyacente a una
sola combinación del código y es posible conocer cuál es el bit erróneo. Así, un código de distancia mínima
tres, permite detectar errores de 2 bits o corregir errores de 1 bit. En general, la distancia mínima de un
código para que permita corregir errores de n bits ha de ser dm = 2n + 1.

2-4
ARQUITECTURA DE COMPUTADORAS - 2 CODIGOS (ed.2010)

Nos limitaremos a estudiar los códigos correctores de errores de un bit, cuya distancia mínima es tres y
entre ellos los de mayor difusión, que son los códigos de HAMMING.

Código corrector de HAMMING.


Estos códigos están basados en la adición de un código de distancia unidad para n bits, de p bits,
obteniéndose un nuevo código de n + p bits. En este nuevo código se realizan p detecciones de paridad en
bits preseleccionados del mismo, obteniéndose un bit de paridad PAR. El conjunto de las ecuaciones de
control de paridad forman un número del sistema binario que indica la posición del bit erróneo. En caso que
no exista error, el número binario logrado debe ser igual a cero. El número de p bits añadidos ha de ser
suficiente para permitir la detección de error en alguna de las n + p posiciones o la ausencia del mismo.
p p
Dado que con p bits se obtienen 2 combinaciones, se ha de cumplir la relación 2 ≥ n + p + 1.
Como ejemplo realizaremos el código de Hamming obtenido a partir del código BCDN. En este
3
código n = 4 y, por lo tanto el número de bits que se han de añadir es 3, dado que 2 = 4 + 3 + 1. Para
detectar los siete posibles errores de un bit en cada una de las posiciones y la ausencia de error son
necesarias ocho combinaciones binarias que denominaremos correctoras de error. Dichas combinaciones
se obtienen mediante 3 bits, c3, c2, c1 , y el número decimal equivalente al binario formado por ellos ha de
indicar la posición errónea.
Veremos ahora la forma de generar cada uno de los bits de la combinación correctora de errores.
En la tabla, se presentan todas las combinaciones de los bits c3, c2, c1.

numero c3 c2 c1
decimal
correcto 0 0 0 0
(b1) 1 0 0 1
(b2) 2 0 1 0
(b3) 3 0 1 1
(b4) 4 1 0 0
(b5) 5 1 0 1
(b6) 6 1 1 0
(b7) 7 1 1 1

Tabla 2-8. Asignación binaria para cada bit del código

El bit c1 ha de tomar el valor 1 si se produce un error en los bits b1, b3, b5, b7, de la combinación del
código. Si el número de unos existentes en esas cuatro posiciones es siempre par, un error en uno
cualquiera de esos cuatro bits lo convierte en impar. Por lo tanto c1 ha de valer 1 si el número de unos en las
posiciones b1, b3, b5, b7, es impar y cero en caso contrario. Esto se expresa algebraicamente de la siguiente
forma:
c1 = b1 ⊕ b3 ⊕ b5 ⊕ b7
Donde ⊕ es el símbolo de la función reunión excluyente que se estudiará más adelante.
De igual forma se deduce que c2 y c3 han de obtenerse por medio de las expresiones:
c2 = b2 ⊕ b3 ⊕ b6 ⊕ b7
c3 = b4 ⊕ b5 ⊕ b6 ⊕ b7
para lo cual ha de cumplirse la condición de que el número de unos ha de ser par en las
combinaciones b2, b3, b6, b7 y b4, b5, b6, b7 .
Para lograr estas condiciones se han de generar adecuadamente los tres bits que se añaden a los
cuatro de la combinación BCDN.
Dado que b1, b2, b4, por ser potencias de 2 (tienen un solo 1 en su combinación binaria) aparecen en
una sola expresión cada uno, los elegiremos como bits de control y lo añadimos a la combinación de entrada
que será volcada en b3, b5, b6, b7. El bit b1 ha de valer uno si el número de unos de b3, b5 y b7, es impar y
cero en caso contrario, por lo tanto.
b1 = b3 ⊕ b5 ⊕ b7
De igual forma b2 y b4; se han de obtener respectivamente:
b2 = b3 ⊕ b6 ⊕ b7
b4 = b5 ⊕ b6 ⊕ b7
De todo lo anterior se deduce el código de Hamming siguiente:

número b7 b6 b5 b4 b3 b2 b1
decimal
0 0 0 0 0 0 0 0
1 0 0 0 0 1 1 1
2 0 0 1 1 0 0 1
3 0 0 1 1 1 1 0
4 0 1 0 1 0 1 0
5 0 1 0 1 1 0 1
6 0 1 1 0 0 1 1
7 0 1 1 0 1 0 0
8 1 0 0 1 0 1 1
9 1 0 0 1 1 0 0

Ejemplo 2-3.

2-5
ARQUITECTURA DE COMPUTADORAS - 2 CODIGOS (ed.2010)

Como ejemplo comprobaremos la detección de un error en el b6; de la combinación 0011001


correspondiente al número decimal 2, la combinación errónea es 0111001.
Para detectarlo comprobaremos el valor lógico de c3, c2, c1.

c3 = b4 ⊕ b5 ⊕ b6 ⊕ b7 = 1 ⊕ 1 ⊕ 1 ⊕ 0 = 1
c2 = b2 ⊕ b3 ⊕ b6 ⊕ b7 = 0 ⊕ 0 ⊕ 1 ⊕ 0 = 1
c1 = b1 ⊕ b3 ⊕ b5 ⊕ b7 = 1 ⊕ 0 ⊕ 1 ⊕ 0 = 0

En efecto, la combinación c3, c2, c1, es 1102, equivalente al número decimal 6.

Ejercicio:
Obtener un código corrector de Hamming a partir del código Johnson para los números del 0 al 9.

ANEXO I
Códigos de caracteres alfanuméricos.

Carácter ASCII EBCDIC Carácter ASCII EBCDIC


7-8 bits 8 bits 7-8 bits 8 bits
A 0100 0001 1100 0001 0 0011 0000 1111 0000
B 0100 0010 1100 0010 1 0011 0001 1111 0001
C 0100 0011 1100 0011 2 0011 0010 1111 0010
D 0100 0100 1100 0100 3 0011 0011 1111 0011
E 0100 0101 1100 0101 4 0011 0100 1111 0100
F 0100 0110 1100 0110 5 0011 0101 1111 0101
G 0100 0111 1100 0111 6 0011 0110 1111 0110
H 0100 1000 1100 1000 7 0011 0111 1111 0111
I 0100 1001 1100 1001 8 0011 1000 1111 1000
J 0100 1010 1101 0001 9 0011 1001 1111 1001
K 0100 1011 1101 0010 espacio 0010 0000 0100 0000
L 0100 1100 1101 0011 . 0010 1000 0100 1011
M 0100 1101 1101 0100 + 0010 1011 0100 1110
N 0100 1110 1101 0101 $ 0010 0100 0101 1011
O 0100 1111 1101 0110 * 0010 1010 0101 1100
P 0101 0000 1101 0111 ) 0010 1001 0101 1101
Q 0101 0001 1101 1000 - 0010 1101 0110 0000
R 0101 0010 1101 1001 / 0010 1111 0110 0001
S 0101 0011 1110 0010 , 0010 1100 0110 1011
T 0101 0100 1110 0011 = 0011 1101 0111 1110
U 0101 0101 1110 0100
V 0101 0110 1110 0101
W 0101 0111 1110 0110
X 0101 1000 1110 0111
Y 0101 1001 1110 1000
Z 0101 1010 1110 1001

Tabla 2A-1.

2-6
ARQUITECTURA DE COMPUTADORAS
Ingeniería en Sistemas de Información
Universidad Tecnológica Nacional
Facultad Regional Santa Fe

3. ARITMÉTICA BINARIA.
(edición 2010)

Suma en binario.

Las reglas aritméticas para números binarios son sencillas. Las de suma son:

0+0= 0
0+1= 1
1+0= 1
1+1= 10

A esto mismo lo podemos ver sobre una matriz.

+ 0 1
0 0 1
1 1 10

Buscamos los operando en las coordenadas, y en la intersección de las mismas se encuentra el


resultado.
Ej.: 1 + 1 = 10

+ 0 1
0 0 1
→ 1 1 10
Al igual que en el sistema decimal cuando el resultado de la suma es de dos dígitos, se coloca el de
menor peso (derecha) y el restante (acarreo) se suma a la columna siguiente.
Ej.:
1 1 1 1 (línea de acarreo)
11 1 0 1 12
+ 13 + 1 1 0 12
24 1 1 0 0 02 (resultado final).

Resta en binario.
Esta operación la podemos realizar por el método convencional, o sea operar en binario de la misma
forma que lo hacemos en decimal.
Pero también la podemos resolver expresando la resta a - b, como una suma algebraica a + (-b),
convirtiendo de esta forma la resta en una suma. Para poder resolver la resta de esta forma, tendremos que
definir antes los números negativos.

Representación binaria con signo.


Cuando un número binario es positivo, el signo se representa como 0 y la magnitud por el valor
absoluto (que es el valor positivo). Cuando el número es negativo, el signo se representa por un 1 y el resto
del número puede ser representado por cualquiera de las tres maneras siguientes:

1. Signo-magnitud
2. Signo-complemento de 1
3. Signo-complemento de 2.

En al representación signo-magnitud, esta última se representa con el valor absoluto (valor positivo).
En las otras dos se representa con el complemento de 2 ó de 1.
Como ejemplo representamos el número binario 9 con signo, de las tres formas positivas y
negativas sobre un registro de 8 bits.
+ 9 - 9

Signo-magnitud 0 0001001 1 0001001

Signo-complemento de 1 0 0001001 1 1110110

Signo-complemento de 2 0 0001001 1 1110111

Un número positivo en cualquier representación tiene un 0 en el bit de la extrema izquierda


(codificando un +), seguido del número en valor absoluto (valor positivo). Un número negativo en la
representación de signo-magnitud se obtiene complementando solamente el bit de signo. La representación
complemento de 1 se obtiene complementando todos los bits a 1, (o sea reemplazar los 1 por 0 y 0 por 1)
incluyendo el bit de signo. El complemento de 2 se obtiene sumándole 1 al complemento de 1 obtenido
anteriormente.
Otra forma de hallar el complemento de 2 es restar el número al que queremos hallarle el complemento
de la base elevada a la n, siendo n la cantidad de dígitos que tiene el número. Ej.: para 000010012 (8
8
dígitos), n = 8, 2 - 000010012 = 1000000002 - 000010012 = 111101112.
Si manejamos números con parte fraccionaria, lo mejor es tomar todo el número como entero
(eliminamos la coma), operamos como anteriormente y luego proyectamos la coma al campo resultado. Ej.:
ARQUITECTURA DE COMPUTADORAS - 3 ARITMÉTICA BINARIA (ed. 2010)

8
para 000010,012 (8 dígitos), n = 8, 2 - 000010012 = 1000000002 - 000010012 = 111101112, ahora en el
campo resultado reponemos la coma y nos queda 111101,112. A partir del complemento de 2, se puede
obtener el complemento de 1, restándole 1 al complemento de 2. En este caso también, si el número tiene
parte fraccionaria, para hacer la resta debemos tomar toda la expresión como entera y luego de restarle 1,
reubicar la coma. Ej.: Si el valor obtenido por complemento de 2 es 111101,112, tomamos 111101112, le
restamos 1 y nos queda 111101102, ahora reubicamos la coma y obtenemos 111101,102.

Suma aritmética (suma o resta).


La representación de signo-magnitud es la que más se usa en los cálculos cotidianos. Por ejemplo,
+23 y -35 son representados en un signo seguido por la magnitud del número. Para sumar estas dos
funciones, es necesario restar la magnitud menor de la magnitud mayor y usar el signo del número mayor
como signo del resultado, es decir (+23) + (-35) = -(35 - 23) es igual a -12. El proceso de sumar dos
números con signo, cuando los números negativos están representados en la forma de signo-magnitud,
requiere que se comparen estos signos. Si los dos signos no son iguales, se comparan las magnitudes
relativas de los números y luego se resta el menor del mayor. Es necesario determinar también el signo del
resultado. Esto una secuencia de controles que se hace compleja de resolver mediante un circuito digital.
Veamos ahora como se puede resolver estas operaciones sin necesidad de control alguno, cuando
los números negativos están en función del complemento de 1 ó 2.

Suma representada por signo-complemento de 2.


La suma de dos números binarios con signo y los números negativos representados por sus
complemento de 2 se obtienen de la suma de dos números con su bits de signo incluidos. Se descarta el
arrastre en el bit más significativo. En el siguiente ejemplo se muestran las distintas posibilidades de suma,
en donde los números negativos están expresados en complemento de 2 y por supuesto, si el resultado es
negativo, también queda expresado en complemento de 2 y deberá ser complementado nuevamente a 2
para obtener el valor absoluto (valor positivo).

+6 0 0001102 -6 1 1110102
+ +9 0 0010012 + +9 0 0010012
+15 0 0011112 10 0000112

+6 0 0001102 -6 1 1110102
+ -9 1 1101112 + -9 1 1101112
-3 01 1111012 -15 1 1 1100012

Los dos números de los cuatro ejemplos se suman, con sus bits de signo incluidos. Cualquier
arrastre de bit de signo se descarta y los resultados negativos se producen automáticamente en la forma de
complemento de 2.

Suma representada por signo-complemento de 1.


La suma de dos números binarios negativos representados por sus complementos de 1, se obtienen
de la suma de los números, con sus bits de signo incluidos. Si hay arrastre del bit más significativo (signo),
el resultado se incrementa en 1 y el arrastre se descarta. El ejemplo anterior se repite, ahora resuelto con los
números negativos representados por su complemento de 1. El arrastre del bit de signo se regresa y agrega
al bit menos significativo.

+6 0 0001102 -6 1 1110012
+ +9 0 0010012 + +9 0 0010012
+15 0 0011112 10 0000102
1
+3 0 0000112

+6 0 0001102 -6 1 1110012
+ -9 1 1101102 + -9 1 1101102
-3 01 1111002 1 1 1011112
1
-15 1 1100002

Una de las ventajas de la representación en la forma signo-complemento de 2 sobre la forma


signo-complemento de 1 y la forma signo-magnitud, es que la primera contiene un solo tipo de cero. Las
otras dos representaciones tienen un cero negativo y otro positivo.

+ 0 - 0
Signo-magnitud 0 0000000 1 0000000
Signo-complemento de 1 0 0000000 1 1111111
Signo-complemento de 2 0 0000000 ninguna

Esto ocurre debido a que el complemento de 2 de 0 0000000 (cero positivo) es 0 0000000 ya que el
complemento a 1 es 1 1111111 y si le sumamos 1 y despreciamos el desborde 1 0 0000000, nos queda el
mismo número.

3-2
ARQUITECTURA DE COMPUTADORAS - 3 ARITMÉTICA BINARIA (ed. 2010)

Sobrecapacidad.
Si especificamos un número en complemento de 2, debemos tener en cuenta que el signo queda
incluido dentro del mismo y que este se proyecta hasta el último dígito significativo del mismo.
Veámoslo con un ejemplo:
+3 en binario complemento de 2 es 00112 = 000112 = 00000112
y -3 en binario complemento de 2 es 11012 = 111012 = 11111012
Notamos que los ceros no significativos en los números positivos se convierten en unos (no
significativos) en los números negativos.
Cuando dos números con n dígitos cada uno se suman y la suma ocupa n + 1 dígitos, se dice que
hay un desbordamiento por sobrecapacidad.
El algoritmo para sumar dos números expresados en complemento de 2 como se ha establecido
antes, produce un resultado incorrecto cuando se produce una sobrecapacidad. Esto es debido a que una
sobrecapacidad de los bits del número cambian siempre el signo del resultado y se causa una respuesta
errónea de n bits. La condición de sobrecapacidad se puede dar únicamente cuando ambos números son
positivos o ambos negativos.
arrastre: 1 arrastre: 1 1 1
+35 0 1000112 -35 1 0111012
+40 0 1010002 -40 1 0110002
+75 1 0010112 -75 0 1101012
En ambos casos, se observa que el resultado, que debería ser positivo, es negativo o viceversa.
Obviamente la respuesta es incorrecta y por lo tanto el algoritmo para sumar números binarios expresados
en complemento de 2, falla cuando se produce una sobrecapacidad.
Una condición de sobrecapacidad puede ser detectada observando el arrastre a la posición del bit
de signo y el arrastre de la posición del bit de signo. Si estos no son iguales se ha producido
sobrecapacidad.
Para evitar los casos de sobrecapacidad debemos tener cuidado en trabajar con una cantidad de
dígitos que sea capaz de albergar el campo resultado con signo incluido.
Los ordenadores digitales, detectan la sobrecapacidad y encienden una señal para indicar que el
resultado no es correcto.

Multiplicación binaria.
La multiplicación en binario es muy simple, debemos operar de la misma forma que en decimal, con
la ventaja que solo tendremos que operar multiplicando por uno o cero.
10112 (11)
x 1102 (6)
10110
1011--
10000102 (66)

División Binaria.
Al igual que la multiplicación, para la división tenemos que proceder de la misma forma que
conocemos para operar en decimal.
Veámoslo con un ejemplo: 100102 / 112, paso por paso:
1) 1 0 0 1 0 11 2) 1 0 0 1 0 11 3) 1 0 0 1 0 11
-11 1 -11 11 - 11 110
1 11 11
- 11 - 11
0 00
0
Operaciones en otras bases.
La suma, resta, multiplicación y división en cualquier base dependen de la suma y la multiplicación.
Por los tanto para facilitar el manejo de las mismas, veremos cómo construir una tabla de sumar y de
multiplicar en cualquier base.

suma en base 5 multiplicación en base 5


+ 0 1 2 3 4 x 0 1 2 3 4
0 0 1 2 3 4 0 0 0 0 0 0
1 1 2 3 4 10 1 0 1 2 3 4
2 2 3 4 10 11 2 0 2 4 11 13
3 3 4 10 11 12 3 0 3 11 14 22
4 4 10 11 12 13 4 0 4 13 22 31

Tabla 3-1. Suma y multiplicación en base 5


Se construye una matriz en cuyas coordenadas se colocan todos los números del sistema, y en la
intersección de las mismas se coloca el resultado. Debemos tener en cuenta que cuando en una casilla hay
un número de dos dígitos, se debe tomar el dígito de la derecha como resultado de la columna y el de la
izquierda como acarreo.
Ejemplo de suma y multiplicación en base 5:

3-3
ARQUITECTURA DE COMPUTADORAS - 3 ARITMÉTICA BINARIA (ed. 2010)

1 1 acarreos 1
3 1 45 1 4 25
+ 3 2 15 x 3 25 Se debe tomar como acarreo el dígito de
mayor peso expresado en la tabla de
= 1 1 4 05 1 multiplicar y debe ser sumado al valor de
3 3 4 tabla en la operación siguiente.
1 2 1
+ 1 0 3 1
= 1 1 1 4 45

En todos los sistemas numéricos, inclusive el decimal, la resta se puede realizar aplicando el
complemento a la base del sistema para convertir un número en negativo y realizar luego la suma
algebraica.
La división en otras bases se realiza de la misma forma que en decimal, esto es; se toma del
dividendo el menor número de dígitos que sean mayor o igual al divisor, luego mediante multiplicaciones
sucesivas, se busca la mayor cantidad de veces que el divisor entra en el dividendo, una vez logrado este
valor, multiplica por el divisor y el resultado se resta del dividendo. Luego se anexan de a un dígito,
operando de la misma forma hasta finalizar.
Ejemplo de división en base 5.

1) 4 2 1 35 3 25 2) 4 2 1 35 3 25 3) 4 2 1 35 3 25
-32 1 -32 11 -32 1 1 25
10 10 1 101
32 - 32
14 143
-114
24

Construir las tablas de suma y multiplicación para los sistemas octal y hexadecimal.

Operaciones aritméticas en BCDN.


Considerese la suma aritmética de dos dígitos decimales en BCDN con un arrastre posible de un
estado anterior. Como cada dígito no puede ser mayor que nueve, la salida no puede superar 9 + 9 + 1 =
19, siendo el 1 en la suma, un posible arrastre anterior. Si sumamos dos dígitos, el resultado entonces
puede variar entre 0 y 19. Si se analiza el resultado veremos que si este es menor o igual a 10012 (9) es
correcto en BCDN, pero, si es mayor, no coincide con el valor real. Esto se debe a que en BCDN los
números binarios de 1010 al 1111 no existen, ya que de la combinación correspondiente al (9) 0000 1001
pasamos al (10) 0001 0000. Por lo tanto luego de operar con un dígito BCDN, si el resultado es mayor que
1001 (9), tendremos que realizar un reajuste de 0110 (6) unidades para lograr el resultado correcto. En este
caso siempre tendremos acarreo.
1 1
Ejemplo: a) 40 0100 0000 b) 174 0001 0111 0100
+ 21 0010 0001 + 398 0011 1001 1000
1
61 0110 0001 0101 0001 1100
0110 0110
1
= 572 0101 0111 0010

Resta en BCDN.
La resta en el sistema decimal se puede realizar de una forma similar al sistema de base dos,
sumando al minuendo el complemento a diez (base de sistema) o a nueve (complemento a la base - 1) del
sustraendo. En los sistemas BCD se utiliza normalmente el complemento a nueve porque permite reducir la
complejidad del sistema.
Realizando la operación de esta forma debemos tener en cuenta que si el resultado es negativo, no
se produce acarreo y el número obtenido queda representado mediante su complemento a nueve. Si por el
contrario el resultado es positivo, se produce un acarreo que ha de sumarse al
resultado para obtener el resultado correcto.
Como ejemplo realizaremos la resta 24 - 17:

en decimal: 2 4 en decimal por 2 4


- 17 complemento de 9 + 8 2
= 07 1 0 6
1
= 0 7

en código BCDN tendremos:


1
0010 0100 (24)
- 1000 0010 (82) comp. a 9 de 17
1010 0110
0110

3-4
ARQUITECTURA DE COMPUTADORAS - 3 ARITMÉTICA BINARIA (ed. 2010)

10 0 0 0 0 1 1 0
+ 1
0000 0111 (07)

Ahora realicemos 17 - 24 = -7

en decimal: 17 en decimal por 17


- 24 complemento a 9: + 75
= -07 = 92

92 es el complemento a nueve de 07.

en BCDN tendremos:
1 1 1 1 1 1 1
0001 0111 (17)
+ 0111 0101 (75)
1001 1100
0110 corrección
1
= 1001 0010 (92)

Suma en BCD ex 3.
Al igual que en BCDN, en BCD ex 3, también se deberá ajustar cada resultado en seis cada vez que
este supere el valor 9 y teniendo en cuenta que 9 en BCD ex 3 es 1100. Además, si observamos la suma de
dos números excedidos en 3, veremos que el resultado queda excedido en seis por lo tanto también
tendremos siempre que hacer un reajuste en -3 para lograr el resultado correcto.
Ahora bien, el reajuste de +6 se debe hacer en los resultados mayores que 1100 (9), si este
resultado se encuentra excedido en 3 llegaría a 1111, por lo tanto un valor mayor genera un desborde. Si
nos valemos de este indicador podemos decir que si luego de la suma, se generó un desborde el resultado
debe ser reajustado en +6 (por ser mayor que 9) y en -3 (por estar doblemente excedido en 3), o sea que
solo sumamos 3. Si no se generó desborde, el resultado no debe ser reajustado en +6, pero si en -3, en
este caso se resta 3.

Ejemplo: 1
en decimal 46 en BCD ex 3 0111 1001
+ 18 + 0100 1011
1
1100 0100
- 11 + 11
= 64 = 1001 0111

Resta en BCD ex 3.
La resta en BCD ex 3 se realiza de la misma forma que en BCDN, por complemento de 9 y recordemos
que el código BCD ex 3 tiene la característica de ser autocomplementario, por lo tanto será fácil lograr el
complemento, cambiando los unos por ceros y los ceros por unos.
Cuando se estudien los circuitos sumadores, se notara una reducción en el circuito que opera en BCD
ex 3 respecto del similar para BCDN.

3-5
ARQUITECTURA DE COMPUTADORAS
Ingeniería en Sistemas de Información
Universidad Tecnológica Nacional
Facultad Regional Santa Fe

4. ALGEBRA DE LOS SISTEMAS DIGITALES


(edición 2010)

NOTA: Los primeros temas de esta unidad fueron estudiados en Matemática Discreta, fueron dejados en el
presente apunte solo a modo de consulta ya que son fundamentales para los próximos temas a ver. El
único tema nuevo que se verá en esta unidad es el método de simplificación de Karnaugh.

EL ALGEBRA DE LOS CIRCUITOS DIGITALES.

Identidades.
Las relaciones siguientes se demuestran directamente:

Figura 4-1. Identidades.

Las relaciones x+x = x y x.x = x se extienden a n términos.

Figura 4-2.

Propiedades Principales.
Conmutativa :
1) de la reunión : x+y=y+x
2) de la intersección: x.y=y.x
Asociativa : ( 3 ó más variables )
1) de la reunión : x+(y+z)=(x+y)+z=x+y+z
2) de la intersección: x . ( y . z ) = ( x . y ) . z = x . y . z
Distributiva : ( 3 ó más variables )
1) x + y . z = ( x + y ) . ( x + z ) (Notemos que la distribución en ésta expresión, es decir en la reunión ó
adición lógica no es válida en el álgebra común.)
2) x . ( y + z ) = x . y + x . z
Propiedades de Absorción.
_
1) x+x.y=x 3) (x+y).y= x.y
_ _
2) x(x+y)=x 4) x.y+y= x+y

Estas cuatro propiedades de absorción vistas son muy útiles para simplificar expresiones.

Propiedades de dualidad entre la reunión e intersección.


Si tenemos x1,x2, ......,xn variables, se obtiene:

x1 ⋅ x 2 ⋅ .... ⋅ xn − 1 ⋅ xn = x1 + x 2 + .... + xn − 1 + xn
x1 ⋅ x 2 ⋅ .... ⋅ xn − 1 ⋅ xn = x1 + x 2 + .... + xn − 1 + xn
La relación de Shannon muestra que si una función se expresa mediante una expresión en donde
cada una de las variables interviene un número dado de veces, la función complementaria puede ser
expresada bajo una forma en la cual las variables intervienen igualmente el mismo número de dado de
veces.
La conclusión que surge es que: "De la reunión a la intersección ó viceversa se pasa cambiando los
signos y sustituyendo las variables por sus complementos". Esto se conoce como "Leyes de De Morgan".

FUNCIONES Y FORMAS CANONICAS


Definición: Una función es una variable binaria cuyo valor depende del de una expresión algebraica en la
que la se relacionan entre sí las variables binarias por medio de las operaciones básicas
(Intersección, reunión, compl.).

Su número: una propiedad característica del álgebra de la conmutación es que como las variables no
pueden tomar más que dos únicos valores, existe entonces un número finito de funciones
ARQUITECTURA DE COMPUTADORAS - 4 ALGEBRA DE LOS SISTEMAS DIGITALES (ed. 2010)

2n
para un número determinado de variables. Si "n" es el número de variables, 2 es el
número de funciones que le corresponde. Así para una variable, el número de funciones es
cuatro; para dos variables 16, etc.
Las funciones se representan por la expresión: F = F(a,b,c,........) .

Funciones de una variable.


n
2 2
n=1 2 =2 =4
Para una variable tenemos cuatro funciones:

X f0 f1 f2 f3
0 0 1 0 1
1 0 0 1 1
Tabla 4-1. Cuadro de funciones para una variable.

Observamos que:
f0 y f3 son funciones constantes, pertenecen respectivamente igual a 0 y 1, para ambos valores
de la variable, f 1 = x y f 2 = x.

Formas Canónicas.

Sea f una función de 3 variables: f(a,b,c)

a⋅b⋅c → producto canónico


a+b+c → suma canónica
n
• El número de productos ó sumas canónicas de n variables es 2 .
2n
• El número de funciones para n variables es 2 .
• Llamamos término canónico a todo producto ó suma en la que aparecen todas las variables en su forma
directa ó inversa.

Formas canónicas de una variable.

Las cuatro funciones de una variable se han desarrollado a partir de la observación del cuadro
combinatorio para una variable.
Hay dos tipos de expresiones canónicas que corresponden a una variable:
1) por suma de productos
2) por producto de sumas

Por suma de productos.

f ( x) = x ⋅ f (1) + x ⋅ f ( 0 ) (**) donde x y X son términos canónicos

Esta relación se verifica dando a x , sucesivamente los valores 0 y 1

Para x = 0 f(0) = 0 . f(1) + 1 . f(0)


= 0 + f(0)
= f(0)

Para x = 1 f(1) = 1 . f(1) + 0 . f(0)


= f(1) + 0
= f(1)

Las simplificaciones efectuadas surgen de la aplicación de las identidades.


La ecuación (**) desarrolla las 4 funciones posibles de una variable. Observando la tabla
correspondiente a funciones de una variable, podemos demostrar:
Si queremos obtener el valor de f2

f2 = x . 1 + x . 0 = x + 0 = x

y lo mismo podemos hacer con las restantes.

f3 = x . 1 + x . 1 = x + x = 1
f1 = x . 0 + x . 1 = 0 + x = x

o visto de otra forma: f(1) = 0 , f(0) = 0


f(x) = x . 0 + x . 0 = 0 + 0 = 0
f(x) = 0 → función que en la tabla de funciones hemos denominado f0 .

Funciones y formas canónicas de 2 variables.


N
El número de funciones de dos variables es 2(2 ) = 16
Escribiremos a continuación las 16 funciones en una tabla en la que las denominaciones con
subíndices de 0 a 15.

4-2
ARQUITECTURA DE COMPUTADORAS - 4 ALGEBRA DE LOS SISTEMAS DIGITALES (ed. 2010)

x y f0 f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12 f13 f14 f15


0 0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
0 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1
1 0 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1

tabla 4-2 - cuadro de funciones de dos variables -

Observaciones:
Dos funciones que ocupan posiciones simétricas con respecto al eje del cuadro (representado por la
línea doble) son complementarias: fi = f 15 − i . Por ej.: f0 = 0 es el complemento de f15 = 1, f10 = y de f5
= y , f1 = x ⋅ y de f14 = x + y, etc.

Clasificación de funciones:
Dos funciones pertenecen a la misma clase si se puede pasar de una a otra por
complementaciones ó permutaciones de variables.
Esta clasificación permite observar las distintas estructuras de las funciones consideradas:

clase constante → f0, f15


clase x → f3, f5, f10, f12
clase x.y → f1, f2, f4, f8
clase x+y → f7, f11, f13, f14
clase x⊕y → f6, f9

El símbolo ⊕ representa la reunión exclusiva o función imparidad.

Formas canónicas de "dos" variables.


Por observación del cuadro anterior hemos obtenido las formas que revisten las funciones más simples
de dos variables.
Sistemáticamente pueden ser desarrolladas todas por utilización de las formas canónicas.

1 - Por suma de productos.

f ( x, y) = x ⋅ y ⋅ f (1,1) + x ⋅ y ⋅ f (1,0 ) + x ⋅ y ⋅ f ( 0,1) + x ⋅ y ⋅ f ( 0,0 )

Un término de esta ecuación existe si el valor de la función para el mismo es unitario. Por ejemplo:
x.y existe si f(1,1) = 1 , por el contrario si f(1,1) = 0 ese término no existe.
Así, en el caso de la función que hemos denominado en el cuadro f2 su desarrollo mediante "suma
de productos" conduce a la forma f 2 = x ⋅ y , por cuanto solamente f(0,1) = 1.
De la misma manera: f 5 = x ⋅ y + x ⋅ y , que simplificado queda: f 5 = y .

2 - Por producto de sumas.

f ( x, y) = ( x + y + f ( 0,0 )) ⋅ ( x + y + f ( 0,1)) ⋅ ( x + y + f (1,0 )) ⋅ ( x + y + f (1,1))

En este caso para que un término de la intersección exista, el valor de la función en el mismo
debe ser nulo.
De este modo, para la función f13 solamente puede existir x + y .
Observación: El desarrollo de una función mediante el empleo de una forma u otra se decide, en principio
por la observación del número de "1" o "0" que existen en la misma, si hay pocos 1 , conviene la primer
forma, si hay pocos 0 , conviene la segunda forma. Por otra parte las funciones constantes solo pueden ser
representadas por una sola forma.

Generalización de las formas canónicas.


Primera forma: por "suma de productos".

f ( x0, x1, . . . , xn) = x0 ⋅ x1⋅...⋅xn ⋅ f (1,1, . . . ,1) + x0 ⋅ x1⋅.. .⋅xn ⋅ f (1,1, . . . ,0 )+.. .... ..+ x0 ⋅ x1⋅...⋅xn ⋅ f ( 0,0, . . . ,0 )

Este desarrollo hace intervenir los valores de la función para las diversas combinaciones de las
variables. Un término en esta forma existe, si el valor correspondiente de la función es unitario. Si es nulo el
término no existe. Es suficiente entonces, para desarrollar una función mediante suma de productos,
conocer las combinaciones de las variables correspondientes el valor unitario de la función.

Segunda forma: por "producto de sumas".

f ( x0, x1, . . . , xn) = ( x0 + x1+.. .+ xn + f ( 0,0, . . .0 )) ⋅ ( x0 + x1+. ..+ xn + f ( 0,0, . . . ,1))⋅.... ....⋅( x0 + x1+. ..+ xn + f (1,1, . . . ,1))

En este caso un término existe si el valor correspondiente de la función es 0. Si es 1, no existe.


Para el desarrollo de una función es necesario entonces conocer las combinaciones de las variables
para las cuales la función es nula.

4-3
ARQUITECTURA DE COMPUTADORAS - 4 ALGEBRA DE LOS SISTEMAS DIGITALES (ed. 2010)

Pasaje a la forma canónica. (completar términos canónicos).


Por motivos que veremos en "Simplificación de Funciones" es necesario saber encontrar a partir de
una forma simple o parcialmente simplificada de una función , la forma canónica correspondiente.
Supongamos la función siguiente:

f ( a, b, c, d) = a ⋅ b + a ⋅ d ⋅ (b + c) + b ⋅ c ⋅ d + a ⋅ c ⋅ d

Podemos observar que f es una función de cuatro variables denominadas a, b, c y d. El primer


paso es hacer que f se exprese en forma homogénea:

f ( a, b, c, d) = a ⋅ b + a ⋅ d ⋅ b + a ⋅ d ⋅ c + b ⋅ c ⋅ d + a ⋅ c ⋅ d

Conviene además ordenar las variables en los términos. En este caso convenimos el orden
alfabético:
f ( a, b, c, d) = a ⋅ b + a ⋅ b ⋅ d + a ⋅ c ⋅ d + b ⋅ c ⋅ d + a ⋅ c ⋅ d
Tenemos entonces una expresión del tipo suma de productos pero que no posee ningún término
canónico, pues en todos los términos de f, faltan variables.
El método para obtener la forma canónica consiste en reemplazar cada término de la última
expresión por tantos como combinaciones son factibles de realizar entre las variables faltantes. Así, si en un
n
término faltan " n " variables, el número de términos a generar en reemplazo del presente será 2 .
Teniendo en cuenta lo dicho, el primer término de f, se debe reemplazar por los cuatro términos
siguientes:

a⋅b = a⋅b⋅c⋅d+ a⋅b⋅c⋅d+ a⋅b⋅c⋅d+ a⋅b⋅c⋅d

En ellos, las variables ausentes c y d se encuentran expresadas en sus cuatro combinaciones


posibles. Aplicando este procedimiento a los demás términos y eliminando los repetidos tenemos:

f = a ⋅ b ⋅ c ⋅ d + a ⋅ b ⋅ c ⋅ d + a ⋅ b ⋅ c ⋅ d + a ⋅ b ⋅ c ⋅ d + a ⋅ b ⋅ c ⋅ d + a ⋅ b ⋅ c ⋅ d + [a ⋅ b ⋅ c ⋅ d] + a ⋅ b ⋅ c ⋅ d +
+[a ⋅ b ⋅ c ⋅ d] + a ⋅ b ⋅ c ⋅ d + [a ⋅ b ⋅ c ⋅ d] + [a ⋅ b ⋅ c ⋅ d]

Los términos entre [ ] se eliminan por estar repetidos. Se obtiene f bajo la primera forma canónica:

f = a⋅b⋅c⋅d+ a⋅b⋅c⋅d+ a⋅b⋅c⋅d+ a⋅b⋅c⋅d+ a⋅b⋅c⋅d+ a⋅b⋅c⋅d+ a⋅b⋅c⋅d+ a⋅b⋅c⋅d

Representación decimal de los términos canónicos.


Es conveniente por motivos prácticos y por ser empleado en métodos de simplificación, saber
representar en forma decimal los términos canónicos.
Así, para la función f del ejemplo anterior en que todas las variables ya han sido ordenadas en
forma alfabética, basta con asignar un peso binario a cada letra y calcular el equivalente decimal de la
combinación dada. Asignando entonces los pesos: 8, 4, 2 y 1 a las variables a, b, c y d respectivamente y
el valor binario "1" a la variable y "0" a la variable negada se obtiene:
(pesos)
8 4 2 1

a⋅b ⋅c ⋅d 0 0 0 0 0
a⋅b ⋅c ⋅d 0 0 1 0 2
a⋅b⋅c ⋅d 0 0 0 1 1
a⋅b⋅c ⋅d 0 0 1 1 3
a⋅b⋅c ⋅d 1 1 1 1 15
a⋅b⋅c ⋅d 1 1 0 1 13
a⋅b⋅c ⋅d 1 0 1 1 11
a ⋅b⋅c ⋅ d 0 1 0 1 5 Ejemplo 4-1

Reemplazando los equivalentes decimales en la expresión canónica de f se obtiene:


f = 0 + 2 + 1 + 3 + 15 + 13 + 11 + 5
Esta última puede escribirse en forma abreviada de la manera siguiente:
f(a, b, c, d) = Σ(0, 1, 2, 3, 5, 11, 13, 15)
La representación decimal de los términos canónicos de una función desarrollada bajo la segunda
forma (producto de sumas) es similar sólo que se debe asignar el valor binario "1" a la variable negada o el
valor "0" a la variable.

Veamos un ejemplo: f ( a, b, c ) = ( a + b + c) ⋅ (a + b + c) ⋅ (a + b + c) ⋅ (a + b + c) ⋅ (a + b + c)

4 2 1
a ⋅b ⋅c 0 0 0 0
a ⋅b⋅c 0 1 0 2
a ⋅b ⋅c 0 0 1 1
a ⋅b ⋅c 0 1 1 3
a ⋅b ⋅c 1 1 0 6 Ejemplo 4-2.

4-4
ARQUITECTURA DE COMPUTADORAS - 4 ALGEBRA DE LOS SISTEMAS DIGITALES (ed. 2010)

Por lo tanto reemplazando en la expresión algebraica tenemos:

f(a,b,c) = 0 . 2 . 1 . 3 . 6

que puede finalmente abreviarse: f(a,b,c) = ∏ (0, 1, 2, 3, 6).

SIMPLIFICACION
Introducción:
Mediante el empleo de las formas canónicas, se obtienen las expresiones algebraicas que permiten
representar las funciones en forma sistemática. Como hemos visto, empleando la primera forma canónica
obtenemos una expresión para la función constituida por la reunión de todos aquellos términos de tipo
intersección para los que la función vale uno.
Así, por ejemplo, para f(X,Y) correspondiente a la tabla de verdad:

x y f(x,y)
0 0 1
0 1 1
1 0 0
1 1 0

Se puede obtener por la primer forma canónica la función: f ( x, y ) = x ⋅ y + x ⋅ y . Empleando la


segunda forma, se obtiene una expresión constituida por la intersección de todos aquellos términos de tipo
reunión, definidos en los puntos en que la función vale cero, siendo la expresión para la misma
función: f ( x, y ) = (x + y ) ⋅ (x + y ) .
Si bien, como hemos visto mediante el ejemplo anterior, las formas canónicas conducen a la
obtención de las expresiones que rigurosamente permiten representar las funciones, las formas obtenidas
no son en la mayoría de los casos, las más simples, para su realización práctica. Así, para el ejemplo visto,
f(X,Y) , el circuito que se obtiene mediante módulos electrónicos, a partir de la primer forma, resulta:

Figura 4-3.

Pero simplificando esa expresión: f ( x, y ) = x ⋅ y + x ⋅ y = x ⋅ (y + y ) = x ⋅ 1 = x

La función ejemplo puede ser ejecutada por un simple negador y el circuito queda:

X X

Figura 4-4.

que hace evidente la economía de medios a emplear al deducirse esta forma más simple de la función.

Métodos Algebraicos de Simplificación.


Se debe observar que la simplificación conduce a la eliminación de términos y/o variables.
Aplicaremos en los mismos, las identidades, propiedades de absorción y las propiedades distributivas
fundamentalmente. Veamos algunos ejemplos.

Factor común: A continuación veremos casos en los que extrayendo en calidad de factor común una o
varias variables de dos o más términos, se obtienen formas en las que se bien no se han eliminado términos
y/o variables, son de todos modos más simples.

Para " suma de productos": f = a ⋅ b + a ⋅ c ⋅ d + a ⋅ e ⋅ f = a ⋅ ( b + c ⋅ d + e ⋅ f )

Aquí se aplicó: x ⋅ y + x ⋅ z = x ⋅ (y + z)

Para " producto de sumas " es similar:


f = ( a + b) ⋅ ( a + c + d) ⋅ ( a + e + f ) = a + b ⋅ ( c + d) ⋅ ( e + f )
Veamos ahora casos en los que extrayendo factor común se obtienen formas con menor cantidad
de términos y/o variables:
f = a ⋅ b ⋅ c + a ⋅ b ⋅ c + a ⋅ b ⋅ c ⋅ d = a ⋅ c ⋅ ( b + b) + a ⋅ b ⋅ c ⋅ d = a ⋅ c + a ⋅ b ⋅ c ⋅ d = a ⋅ ( c + b ⋅ c ⋅ d)
Tomando b ⋅ d como variable única y aplicando la propiedad distributiva:
f = a ⋅ (( c + c ) ⋅ ( c + b ⋅ d)) = a ⋅ ( c + b ⋅ d)

Repetición de Términos: Si se observan a + a b (que se sabe es igual a a), se ve que a ⋅ b es redundante


pues " a está repetida en a ⋅ b ", por lo tanto se puede decir que:

"La aparición de un término más corto en uno más largo implica la anulación de éste último"

4-5
ARQUITECTURA DE COMPUTADORAS - 4 ALGEBRA DE LOS SISTEMAS DIGITALES (ed. 2010)

Ej.: 1) f = a ⋅ b + a ⋅ b ⋅ c + a ⋅ b ⋅ c ⋅ ( d + e) = a ⋅ b
2) f = ( a + b + c ) ⋅ ( a + b + c + d) = a + b + c

Aparición de complemento: Observando f = a + a ⋅ b se ve que a desaparece quedando a + b. Se


puede decir entonces que:

"si un termino se encuentra incluido en otro a excepción de una y solo una variable que se encuentra en
función del complemento, se puede eliminar esta variable en el termino mas largo"

Ej.: 1) f = a ⋅ b + a ⋅ b ⋅ c = a ⋅ b + a ⋅ c = a ⋅ (b + c )
2) f = ( a + b) ⋅ ( a + b + c ) = ( a + b) ⋅ ( a + c ) = a + b ⋅ c

Combinación de los dos métodos anteriores: Hay casos en que se pueden utilizar ambos métodos en
forma combinada:
Ej.: f = a ⋅ b ⋅ c + a ⋅ b ⋅ c + a ⋅ b ⋅ d + a ⋅ b ⋅ d= a ⋅ b + a ⋅ b ⋅ d + a ⋅ b ⋅ d
= a⋅b+ a⋅d+ a⋅b⋅d
= a⋅b+ a⋅d+b⋅d

Si dos términos tienen la misma cantidad de variables y se diferencian en una que esta en
función del complemento, se debe eliminar uno cualquiera de ellos y en el que queda se elimina
la variable que generaba la diferencia.

Ej.: f = (a + b + c) ⋅ (a + b + c) = (a + b + c) ⋅ (a + c) = a + c
i ii
i) segunda propiedad de absorción. ii) primer propiedad de absorción.

Agregado de Términos Redundantes: Consiste en repetir un término existente en la expresión para


emplearlo en el factoreo:
Ej.: f = (a + b + c) ⋅ (a + b + c) ⋅ ( a + b + c)
Se repite el término central: 1) ( a + b + c ) ⋅ ( a + b + c ) = a + c
2) ( a + b + c ) ⋅ ( a + b + c ) = a + b
por tanto queda: f = ( a + c ) ⋅ ( a + b) = a + c ⋅ b

Cuando entre dos términos hay mas de una variable que se encuentra en función
del complemento, no hay redundancia y la expresión no puede reducirse

Ej.: 1) f = a ⋅ b + a ⋅ b ⋅ c
2) f = ( a + b) ⋅ ( a + b + c )

Como hay dos variables que cambian entre un término y otro las expresiones no pueden
ser simplificadas.

Métodos Sistemáticos de Simplificación.


Los métodos de simplificación que hemos empleado hasta presente hacen uso de manipulaciones
algebraicas para las que desafortunadamente no hay reglas específicas a seguir que garanticen una
correcta respuesta final.
Veremos ahora los métodos sistemáticos de simplificación que por contrario garantizan un
resultado.
Ya hemos podido percibir que la simplificación está ligada a la noción de irredundancia. Así en la
expresión: a ⋅ b ⋅ c + a ⋅ b ⋅ c , la variable c es redundante o innecesaria y su eliminación permite que los dos
términos puedan reemplazarse por a ⋅ b. Igualmente en la expresión: a ⋅ b ⋅ c + a, el término a ⋅ b ⋅ c
resulta redundante lográndose al eliminarlo que ambos términos se reemplacen por a.
Los métodos sistemáticos de simplificación conducen en primera instancia a la obtención de formas
irredundantes. Sin embargo, hay en general, muchas formas irredundantes de una función.
Por ejemplo:
a⋅b⋅c + a⋅b⋅d+b⋅c⋅d+ a⋅b⋅d = a⋅b⋅c + a⋅c⋅d+ a⋅b⋅d
Ambos lados de ésta ecuación son irredundantes pero sólo la expresión del lado derecho es
"mínima".
Por lo tanto los métodos sistemáticos de simplificación conducen en segunda instancia a facilitar la
selección entre las expresiones irredundantes de la función, una que satisfaga el criterio de mínima.

Principio de Adyacencia.
En los métodos que estudiaremos se aplicaron en forma sistemática la propiedad:

1) a⋅b⋅c + a⋅b⋅c = a⋅c


2) (a + b + c) ⋅ (a + b + c) = a + b

La primera expresión indica que "La suma de dos productos canónicos que difieren solamente por
el estado de una variable se reduce a un solo producto en el cual se ha suprimido dicha variable". Lo dicho
es válido también para la segunda expresión que corresponde al producto de dos sumas canónicas.

4-6
ARQUITECTURA DE COMPUTADORAS - 4 ALGEBRA DE LOS SISTEMAS DIGITALES (ed. 2010)

Se dice que dos términos canónicos, como los de las expresiones anteriores (1 y 2), son
"adyacentes".

Método Gráfico de Karnaugh.


Este método pone en evidencia en forma gráfica los términos canónicos que son susceptibles de
simplificarse: traduce la adyacencia lógica en adyacencia geométrica..
El método es muy útil para simplificar funciones de hasta cinco (5) variables. Para reducir funciones
de más de 5 variables se recomienda el método de Qüine y Mc Cluskey.
Supongamos una tabla de verdad de una función de dos variables f(x1,x0)

x1 x0 f(x1,x0)
0 0
0 1
1 0
1 1

Acostumbramos a escribir las cuatro combinaciones de las dos variables según el orden binario puro
de representación de las cantidades. Es decir, hacemos corresponder la primer fila a cero, la segunda a
uno, la tercera a dos y la cuarta a tres.
Si f(x ,x ) es igual, por ejemplo a: x1 .x 0 + x1 .x 0
1 0

su representación en la tabla de verdad implica la presencia del valor de verdad "1" para la combinación "1"
y para la combinación "3".

combinación x1,x0 f(x1,x0)


"0" 0 0 0
"1" 0 1 1
"2" 1 0 0
"3" 1 1 1

Como los términos x1 ⋅ x0 correspondiente a la combinación "1" y x1 ⋅ x0 a la combinación "3" solo


difieren en el estado de una variable (para el caso x1 presentan lo que llamamos "adyacencia lógica" y como
hemos visto pueden reducirse a un solo término constituido por la variable que no cambia de estado entre
esas dos combinaciones, es decir x0.
f ( x1, x0) = x1 ⋅ x0 + x1 ⋅ x0
= ( x1 + x1).x0 = x0

Pero esa "adyacencia lógica" no se manifiesta visualmente en la tabla de verdad para la función
anterior. En cambio, para la función:
f ( x1, x0) = x1 ⋅ x0 + x1 ⋅ x0

la "adyacencia lógica" se visualiza en la tabla perfectamente por cuanto los términos corresponden a las
combinaciones "0" y "1" que se suceden en la tabla:

combinación x1,x0 f(x1,x0)


"0" 0 0 1
"1" 0 1 1
"2" 1 0 0
"3" 1 1 0

Aquí entonces, a la "adyacencia lógica" le corresponde "adyacencia física o geométrica".


Si a la tabla de verdad anterior la reestructuramos permutando la combinación "2" con la "3" se logra
un código cíclico y continuo que permite equiparar todos los casos de "adyacencia lógica" con los de
"adyacencia física o geométrica":

combina x1 x0 I II III IV V VI
ción
"0" 0 0 1 1 0 0 1 0
"1" 0 1 0 1 1 0 0 1
"3" 1 1 0 0 1 1 1 0
"2" 1 0 1 0 0 1 0 1

tabla 4-3.

Las funciones I a VI muestran adyacencia geométrica que implica por lo tanto adyacencia lógica.
Las funciones V y VI no presentan adyacencia geométrica y por lo tanto no existe adyacencia
lógica, esto indica que se trata de funciones irreductibles.

Cuadro de Karnaugh para dos variables.


El cuadro de Karnaugh para dos variables mejora la presentación con relación a la tabla anterior:

4-7
ARQUITECTURA DE COMPUTADORAS - 4 ALGEBRA DE LOS SISTEMAS DIGITALES (ed. 2010)

En cada casillero debe colocarse el valor de la función cero o uno para la combinación
correspondiente de las variables. Así si por ejemplo la función vale cero cuando X1 = 0 y X0 = 1 un cero
debe emplazarse en el casillero "1":
Veamos un ejemplo de simplificación comparativo empleando en método algebraico y el de
Karnaugh:

combinación x1,x0 f(x1,x0)


"0" 0 0 1
"1" 0 1 0
"2" 1 0 1
"3" 1 1 1 F( x1, x0) = x1 ⋅ x0 + x1 ⋅ x0 + x1 ⋅ x0

Algebraicamente se hace redundante el término x1 ⋅ x0

F(x 1 , x 0 ) = x 1 ⋅ x 0 + x 1 ⋅ x 0 + x 1 ⋅ x 0 + x 1 ⋅ x 0
F(x 1 , x 0 ) = x 0 ⋅ ( x 1 + x 1 ) + x 1 ⋅ (x 0 + x 0 )
F(x 1 , x 0 ) = x 0 + x 1 = x 1 + x 0

Por el método de Karnaugh:


x1,x0

0 0 0 1 1 1 1 0
0 1 3 2

1 0 1 1
Figura 4-5.

1) Se efectúa la curva que vincula los términos con valor 1 de los casilleros "3" y "2" pues estos son
adyacentes.
Se observa que entre los mismos la variable x0 cambia de estado; en el casillero "3", x0 = 1 y en el
casillero "2", x0 = 0 . Por esta razón x0 puede eliminarse. El resultado de la curva es por lo tanto x1 pues en
ambos casilleros x1 es representada por el valor 1.
2) Igualmente se efectúa la curva que vincula "2" y "0" pues también son adyacentes. Entre estos la
variable que cambia de estado es x1 y por lo tanto puede eliminarse. Luego el resultado de esta curva es x0
pues en ambos casilleros x0 es representada por el valor 0.
3) El resultado final es la reunión de los dos resultados previos.

F(x1, x0) = x0 + x1 = x1 + x0

Cuadro de Karnaugh para tres variables.


Supongamos una tabla de verdad para una función de tres variables como la siguiente:

comb. x2 x1 x0 F(x2,x1,x0)
"0" 0 0 0
"1" 0 0 1
"2" 0 1 0
"3" 0 1 1
"4" 1 0 0
"5" 1 0 1
"6" 1 1 0
"7" 1 1 1
Tabla 4-5.

Si a la tabla anterior la reestructuramos para obtener una en donde las combinaciones se sucedan
conformando un código continuo y cíclico (Gray) se obtiene:

comb. x2 x1 x0 F(x2,x1,x0)
"0" 0 0 0
"1" 0 0 1
"3" 0 1 1
"2" 0 1 0
"6" 1 1 0
"7" 1 1 1
"5" 1 0 1
"4" 1 0 0
Tabla 4-6.

En el caso de dos variables, la tabla reestructurada como vimos, permite visualizar todos los casos
de adyacencia lógica. Pero en el de tres variables la tabla reestructurada sólo lo permite parcialmente.
Obsérvese que entre las combinaciones "5 - 1" , "7 - 3" , "4 - 6" y "2 - 0" existe adyacencia lógica pero no
geométrica.
El cuadro de Karnaugh logra en cambio traducir todas las adyacencias lógicas en geométricas:

4-8
ARQUITECTURA DE COMPUTADORAS - 4 ALGEBRA DE LOS SISTEMAS DIGITALES (ed. 2010)

x1,x0

x2 0 0 0 1 1 1 1 0
0 1 3 2

0
4 5 7 6

Figura 4-6.

En éste todos los casilleros vecinos vertical y horizontalmente (pero no diagonalmente)


corresponden a términos canónicos que difieren solamente en una variable que aparece complementada en
un término y sin complementar en el otro.
Obsérvese que el cuadro de tres variables se presenta como una extensión del de dos; en efecto, la
fila superior de casilleros corresponde al de dos variables (x1,x0) que se repite en la inferior para el caso en
que la tercera variable exista (x2 = 1).
Veamos los siguientes casos típicos:

A) Dos términos adyacentes: Supongamos la función f = x2 ⋅ x1 ⋅ x0 + x2 ⋅ x1 ⋅ x0 . La


emplazamos en el cuadro de Karnaugh:
x1,x0

x2 0 0 0 1 1 1 1 0
0 1 3 2

0 1 1 0 0
4 5 7 6

1 0 0 0 0
Figura 4-7.

Se observa que si dos términos son adyacentes, los enlazamos constituyendo lo que se denomina
un " grupo de dos ", Este representa gráficamente la posibilidad de reemplazar ambos términos por uno en
el que no existe la variable que cambia.
Para el caso es x0, quedando por lo tanto ambos términos reducidos a x2 ⋅ x1 .
B) Un término adyacente a otros dos: Veamos ahora la función:

f = x2 ⋅ x1 ⋅ x0 + x2 ⋅ x1 ⋅ x0 + x2 ⋅ x1 ⋅ x0
que ubicamos en el siguiente cuadro de Karnaugh:
x1,x0

x2 0 0 0 1 1 1 1 0
0 1 3 2

0 1 1 1 0
4 5 7 6

1 0 0 0 0
Figura 4-8.

Se observa que el término ubicado en el casillero "1" es adyacente al contenido en "0" y al contenido
en "3". Eso permite dibujar dos círculos. Uno enlaza "1" con "0" y el otro el "1" con el "3". El primero
conduce a sustituir sus dos términos por x2 ⋅ x1 y el segundo por x2 ⋅ x0 . El resultado final es la reunión de
ambos grupos: f = x2 ⋅ x1 + x2 ⋅ x0

C) Cuatro términos adyacentes: Supongamos la función siguiente:

f = x2 ⋅ x1 ⋅ x0 + x2 ⋅ x1 ⋅ x0 + x2 ⋅ x1 ⋅ x0 + x2 ⋅ x1 ⋅ x0 .
Que representamos en un cuadro de Karnaugh:
x1,x0

x2 0 0 0 1 1 1 1 0
0 1 3 2

0 1 1 1 1
4 5 7 6

1 0 0 0 0
Figura 4-9.
En éste hemos marcado dos "grupos de dos". El primero entre "0" y "1" permite obtener x2 ⋅ x1 . El
segundo entre "3" y "2" permite obtener x2 ⋅ x1 . Teniendo en cuenta estas dos simplificaciones podemos
escribir: f = x2 ⋅ x1 + x2 ⋅ x1 .
Observando este resultado vemos que aún podemos simplificar: f = x2 ⋅ ( x1 + x1) = x2 .
4-9
ARQUITECTURA DE COMPUTADORAS - 4 ALGEBRA DE LOS SISTEMAS DIGITALES (ed. 2010)

Que en Karnaugh equivale a sustituir los dos "grupos de dos" por un "grupo de cuatro".
x1,x0

x2 0 0 0 1 1 1 1 0
0 1 3 2

0 1 1 1 1
4 5 7 6

1 0 0 0 0
Figura 4-10.
y afirmar que f = x2 pues es ésta la única variable que no cambia en los cuatro términos adyacentes.
Diversos casos de grupos de dos y cuatro:
x1,x0 x1,x0

x2 0 0 0 1 1 1 1 0 x2 0 0 0 1 1 1 1 0
0 1 3 2 0 1 3 2

0 0 1 1 0 0 0 1 1 0
4 5 7 6 4 5 7 6

1 1 1 0 1 1 1 1 1 1

Figura 4-11. Figura 4-12.

NOTA IMPORTANTE: Observe que en el primer gráfico el cuadrado 5 se encuentra agrupado con el 1,
aunque también puede agruparse con el 4. De esta forma las ecuaciones resultantes son distintas, pero
equivalentes.

Cuadro de Karnaugh para cuatro variables.


Hemos analizado el cuadro de tres variables como una extensión del de dos variables. Del mismo
modo, podemos considerar el cuadro de cuatro variables como una extensión del de tres:
x1,x0

x3,x2 0 0 0 1 1 1 1 0
0 1 3 2
0 0
4 5 7 6
0 1
12 13 15 14
1 1
8 9 11 10
1 0

Figura 4-13.
En efecto al agregarse las dos filas inferiores, se contempla en estas las combinaciones de las tres
primeras variables cuando la cuarta existe. Así como en el caso de tres variables podemos agrupar de a
dos y cuatro, pero además se puede agrupar de 8.

Veamos diferentes formas de agrupar en los dos siguientes ejemplos:


x1,x0 x1,x0

x3,x2 0 0 0 1 1 1 1 0 x3,x2 0 0 0 1 1 1 1 0
0 1 3 2 0 1 3 2

0 0 0 0 1 0 0 0 1 0 1 1
4 5 7 6 4 5 7 6

0 1 1 1 0 1 0 1 0 1 1 1
12 13 15 14 12 13 15 14

1 1 1 1 1 1 1 1 0 0 1 1
8 9 11 10 8 9 11 10

1 0 0 1 0 0 1 0 1 0 1 1
Figura 4-14. Figura 4-15.
IMPORTANTE: Se puede apreciar que por ser el gráfico cíclico, (la ultima columna adyacente a la primera
y la ultima fila a la primer fila), se puede agrupar 4,6,12 y 14 como muestra la primer figura, e inclusive, los
cuatro extremos (0,2,8 y 10) como muestra la segunda.

4-10
ARQUITECTURA DE COMPUTADORAS - 4 ALGEBRA DE LOS SISTEMAS DIGITALES (ed. 2010)

Cuadro de Karnaugh para cinco variables.


Si para obtener el cuadro de Karnaugh para 5 variables continuamos con el razonamiento previo,
debemos lograr un cuadro con 32 casilleros y partir del de cuatro variables. Pero éste no demuestra la
practicidad de los anteriores para reconocer visualmente las adyacencias. Por esa causa es preferible
emplear dos cuadros de Karnaugh para cuatro variables: Uno para el caso en que la quinta variable es igual
a cero ( x4 = 0) y otro para el caso en que la quinta variable existe (x4 = 1).
En el contexto de cada cuadro se analizan las posibilidades de adyacencias tal como se lo hace
para cuatro variables. Pero además debe observarse que cada casillero del cuadro para x4 = 0, es
adyacente con el correspondiente del cuadro para x4 = 1. Por ejemplo, casillero "0" con "16", "1" con "17" y
así sucesivamente.
Teniendo en cuenta lo dicho podemos imaginar mejor las adyacencias entre ambos cuadros si
mentalmente los ubicamos en el espacio uno encima del otro. Veamos los siguientes casos de
adyacencias:
x 1 ,x 0 x 1 ,x 0

x 3 ,x 2 0 0 0 1 1 1 1 0 x 3 ,x 2 0 0 0 1 1 1 1 0
0 1 3 2 16 17 19 18

0 0 0 1 0 0 0 0 0 0 0 0
4 5 7 6 20 21 23 22

0 1 0 1 0 0 0 1 0 0 0 1
12 13 15 14 28 29 31 30

1 1 1 0 1 0 1 1 1 0 1 1
8 9 11 10 24 25 27 26

1 0 1 0 0 0 1 0 1 0 0 0
x4 = 0 x4 = 1
Figura 4-16. Figura 4-17.

Se observa en los cuadros los casos siguientes:


1) Adyacencia entre los casilleros "1" y "5", el termino resultante es x 4 ⋅ x 3 ⋅ x1 ⋅ x 0 .
2) Entre los casilleros "12" ,"8" ,"28" Y "24", el termino resultante es x3 ⋅ x1 ⋅ x0 .
3) Adyacencia entre el "15" Y "31", generando el termino x3 ⋅ x2 ⋅ x1 ⋅ x0
4) Y, entre los casilleros "22" Y "30", quedando x4 ⋅ x2 ⋅ x1 ⋅ x0 .

Procedimiento para simplificar mediante los cuadros de Karnaugh


Hasta aquí se ha presentado la herramienta. Veremos ahora como se emplea. Por lo tanto
describiremos a continuación un procedimiento que conduce a la obtención de las formas más simples:
1) Se determinan los términos que no pueden enlazarse con otros. Se los marca con un círculo de
un cuadro. Estos términos no eliminan ninguna variable.
2) Se realizan los grupos de dos a partir de los términos que no pueden incluirse en grupos más
grandes. Aquí se eliminara una variable.
3) Sucesivamente se marcan grupos mayores (cuatro, ocho, etc.),

IMPORTANTE: Fijarse que los posibles tamaños de grupos son las potencias de 2, (1,2,4,8...) y que la
0
cantidad de variables que se eliminan es igual al valor del exponente. Ej.: un grupo de un solo cuadro (2 =1)
2
no elimina variables, mientras que un grupo de 4, (2 ), elimina dos variables.

Método de Karnaugh por producto de sumas.


De la misma forma que simplificamos, agrupando unos, podemos hacerlo agrupando ceros y
extrayendo los términos resultantes con la operatoria de la segunda forma canónica.

Veámoslo con un ejemplo:


x1,x0

x3,x2 0 0 0 1 1 1 1 0
0 1 3 2

0 0 1 0 1 1
4 5 7 6

0 1 1 0 1 1
12 13 15 14

1 1 0 0 0 0
8 9 11 10

1 0 1 1 1 0
Figura 4-18.

Siendo la función resultante: f = ( x3 + x2 + x0 ) ⋅ ( x3 + x2 ) ⋅ ( x3 + x1 + x0 ) .

4-11
ARQUITECTURA DE COMPUTADORAS - 4 ALGEBRA DE LOS SISTEMAS DIGITALES (ed. 2010)

En la decisión sobre cual de las dos formas utilizar para expresar la función, ya, no solo
debemos tener en cuenta la cantidad de ceros y unos, sino también como son factibles de ser
agrupados para obtener la misma en su forma mas reducida.

4-12
ARQUITECTURA DE COMPUTADORAS
Ingeniería en Sistemas de Información
Universidad Tecnológica Nacional
Facultad Regional Santa Fe

5. SISTEMAS LÓGICOS COMBINACIONALES


(edición 2010)
Introducción: Antes de llegar a la definición, veremos algunos ejemplos de Sistemas Lógicos
Combinacionales sencillos:
Ej.1: Efectuar el diseño lógico de máquina que mediante una salida luminosa indique cuándo tres bits
que se presentan a su entrada conforman los dígitos octales 4, 5 ó 7.
Veamos el esquema básico de nuestra máquina:

b0 Sistema X
b1 Lógico
b2 Combinacional
Figura 5-1.
La solución lógica es muy sencilla y surge de la siguiente tabla de verdad:

Octal b2 b1 b0 S
0 0 0 0 0
1 0 0 1 0
2 0 1 0 0
3 0 1 1 0
4 1 0 0 1
5 1 0 1 1
6 1 1 0 0
7 1 1 1 1 Tabla 5-1

Desarrollando S por la primera forma canónica, tenemos:

S = b 2 . b 1. b 0 + b 2 . b 1. b 0 + b 2 . b 1. b o

Vemos que es factible simplificar, agregando b 2 . b 1 . b 0 como termino redundante para facilitar la
simplificación:

S = b 2 . b 1. b 0 + b 2 . b 1. b 0 + b 2 . b1. b 0 + b 2 . b 1. b 0
S = b 2 . b1 + b 2 . b 0
Efectuando el diagrama lógico:

Figura 5-2
Ej.2: Efectuar el diseño lógico de una máquina que represente en salida el doble de la cantidad que se
presente en la entrada. Suponer que en la entrada sólo puede presentarse una cantidad codificable
mediante dos bits. Se trata entonces de un sistema con dos entradas, que llamaremos b0 y b1.
Procedamos a determinar el número de salidas.
e b1 b0 s2 s1, s0 s
0 0 0 0 0 0 0
1 0 1 0 1 0 2
2 1 0 1 0 0 4
3 1 1 1 1 0 6 Ejemplo 5-1.

Esto implica que la solución de nuestro problema pasa por el desarrollo de tres funciones (s0 , s1, y
s2 ), de dos variables (b0 y b1, ), cuyas formas simplificadas resultan: s2 = b1, s1 = b0, s0 = 0 ( cero
constante)
Este resultado absolutamente sencillo, muestra que un problema puede ser resuelto evaluando los
resultados posibles mediante la tabla de verdad y luego obteniendo cada una de las funciones de salida ó
con una evaluación lógica del problema; Si la salida es la entrada multiplicada por 2 y esta expresada en
binario, estamos multiplicando por la base del sistema binario, y por lo visto en sistemas numéricos todo
número multiplicado por la base del sistema genera un resultado igual a la entrada con el agregado de un
cero en la ultima posición.
Por lo mencionado se obtiene directamente la salida produciendo un desplazamiento hacia la
izquierda de la entrada y agregando un cero en la última posición.
Ej.3: Efectuar el diseño lógico de una máquina que produzca el cuadrado de la cantidad de tres bits que
se presente en la entrada.

b0 Sistema
b1 Lógico Cuántas salidas ?
b2 Combinacional
Figura 5-3.
ARQUITECTURA DE COMPUTADORAS - 5. SISTEMAS LÓGICOS COMBINACIONALES (ed. 2010)

Como la cantidad máxima representable con tres bits es 7, el cuadrado de 7 es 49 y por ende se
necesitan 6 dígitos binarios para representar la salida.
s0
b0 Sistema s1
b1 Lógico ..........
b2 Combinacional ..........
s5
Figura 5-4.
Surge entonces la siguiente tabla de verdad:

4 2 1 32 16 8 4 2 1
2
n b2 b1 b0 s5 s4 s3 s2 s1 s0 n
0 0 0 0 0 0 0 0 0 0 0
1 0 0 1 0 0 0 0 0 1 1
2 0 1 0 0 0 0 1 0 0 4
3 0 1 1 0 0 1 0 0 1 9
4 1 0 0 0 1 0 0 0 0 16
5 1 0 1 0 1 1 0 0 1 25
6 1 1 0 1 0 0 1 0 0 36
7 1 1 1 1 1 0 0 0 1 49 Tabla 5-2.

Deduciendo las funciones mediante la primera forma canónica y simplificando:


s 5 = b 2 . b1 .b 0 + b 2 . b1 . b 0 = b 2 . b1
s 4 = b 2 .b1 .b 0 + b 2 .b1. b 0 + b 2 . b1 . b 0 = b 2 .b1 + b 2 . b 0
s 3 = b 2 . b1 . b 0 + b 2 .b1 . b 0
s 2 = b2 . b1. b0 + b 2 . b1. b 0 = b1. b 0
s1 = 0
s0 = b0

Definición de sistema lógico combinacional.


Las distintas máquinas desarrolladas pertenecen al campo de los denominados Sistemas Lógicos
Combinacionales, los que pueden ser definidos como aquellos en los que en cada instante, el estado lógico
de sus salidas depende únicamente del estado presente de sus entradas y no de la historia de sus estados
previos. Todo S.L.C. responde al siguiente esquema de bloque:

n Sistema m
variables ..... Lógico ....... variables
de entrada .... Combinacional ....... de salida
Figura 5-5.
Las n variables de entrada provienen de una fuente externa. Las m variables de salida se dirigen
hacia un destino externo.
n
Para n variables de entrada, existen 2 combinaciones posibles de valores de entrada binaria. Para
cada combinación de entrada posible hay una y sólo una combinación de salida posible. El S.L.C. puede
describirse mediante m funciones del Álgebra de Boole: una por cada variable de salida.
Cada función responde a las n variables de entrada.

Método de diseño.
Comprende los siguientes pasos:
a) Se enuncia el problema.
b) Se define el número de variables de entrada y salida requeridas.
c) Se asignan nombres a las variables de entrada y salida.
d) Se construye la tabla de verdad.
e) Se simplifican las formas canónicas obteniéndose expresiones del tipo "suma de productos" o
"producto de sumas", que tengan un número mínimo de términos con el menor número de
variables posible en cada uno de ellos.
f) Se dibuja el circuito lógico.

Definición y descripción de las compuertas lógicas de base.


Los elementos que la tecnología electrónica ha desarrollado para realizar las funciones básicas del
Álgebra de Boole, es decir reunión, intersección, negación como funciones simples, y otras más complejas,
tales como reunión excluyente, reunión negada (NO-O), intersección negada (NO-Y), constituyen los
circuitos lógicos de base con los que se construyen los Sistemas Lógicos Combinacionales y, como veremos
en la Unidad VI, los Sistemas Lógicos Secuenciales.

Circuitos lógicos.
Compuerta interseccion (Y o AND): Su salida será 1,sí y sólo sí todas las entradas son 1.

5-2
ARQUITECTURA DE COMPUTADORAS - 5. SISTEMAS LÓGICOS COMBINACIONALES (ed. 2010)

Figura 5-6.

La compuerta AND es fundamentalmente un elemento de control:


Supongamos una compuerta Y de dos entradas en la que una de ellas es una señal de control (c)
mientras que la otra (d) constituye el dato.
c c d s
0 0 0
s 0 1 0 s=0
d
1 0 0
con c = 0, compuerta cerrada 1 1 1 s=d
con c = 1, compuerta abierta
Figura 5-7.
Obsérvese en el cuadro combinacional que para que el dato alcance la salida (s = d) se requiere que
la señal de control lo autorice (c = 1).
Compuerta Reunión (O o OR): Su salida será 1, sí y sólo sí una o más de sus entradas es 1.

s = e0 + e1, + ........ + en Figura 5-8.


Compuerta NO (inversora): Su salida será 0, si y sólo si su entrada es 1,ó será 1, si su entrada es 0.

e s

s=e Figura 5-9.


Cuando la compuerta NO se emplea en conjunción con otro elemento lógico, se la representa
mediante el pequeño circulo de su salida conectado directamente al otro elemento.

S = e0 + e1 Figura 5-10.

Compuerta NO-Y (NAND): Su salida será 0 sí y sólo sí todas sus entradas son 1.

S = e0 . e1,. ..... .en Figura 5-11.

Compuerta NO-O (NOR): Su salida será 0 si y sólo si al menos una de sus entradas es 1.

S = e0 + e1,+ ...... + e n Figura 5-12.

Compuerta Reunion excluyente: Su salida será 1, sí y sólo sí un número impar de entradas es 1.

S = e 0 ⊕ e 1 ⊕. . . . . . . . . .⊕e n Figura 5-13.


Nota: Se considera al cero como número par.
Veamos el caso de una compuerta OR excluyente de dos variables:

( )( )
s = e 0 . e1 + e 0 . e 1 = e 0 + e 1 . e 0 . e 1 = e 0 ⊕ e 1
Figura 5-14.
La extensión a n variables se deduce aplicando primero a dos variables y seguidamente entre el
resultado de las dos primeras con la tercera y así sucesivamente.

Ejemplificando con tres variables, vemos:

5-3
ARQUITECTURA DE COMPUTADORAS - 5. SISTEMAS LÓGICOS COMBINACIONALES (ed. 2004)

(
s = e0 ⊕ e1 ⊕ e2 ) Figura 5-15.

Cabe acotar que la tecnología electrónica no produce compuertas OR excluyentes de más de dos
entradas. Para más que esta cantidad se resuelve de la manera indicada para tres.
e2 e1 e0 e0 ⊕ e1 s
0 0 0 0 0
0 0 1 1 1
0 1 0 1 1
0 1 1 0 0
1 0 0 0 1
1 0 1 1 0
1 1 0 1 0
1 1 1 0 1 Tabla 5-3.
La compuerta OR excluyente resuelve la función Imparidad. La función paridad se logra
complementando la salida de la compuerta OR excluyente.

e1 e0 s
0 0 1
0 1 0
1 0 0
1 1 1 Figura 5-16.
La salida de esta compuerta será 1, sí y sólo sí un número par de entradas es 1.
Para tres o mas variables, la función paridad se logra obteniendo la reunión excluyente y negando la
salida final. Aplicando lo dicho para el caso de tres variables, tenemos:

(
S = e0 ⊕ e1 ⊕ e2 ) Figura 5-17.

e2 e1 e0 s
0 0 0 1
0 0 1 0
0 1 0 0
0 1 1 1
1 0 0 0
1 0 1 1
1 1 0 1
1 1 1 0 Tabla 5-4.
La función paridad no debe confundirse con la función llamada identidad lógica. Ambas presentan la
misma tabla de verdad en el caso de dos variables, pero no así para tres ó más variables.
La identidad lógica es la función que toma el valor 1, cuando todas las variables de entrada se
encuentran en el mismo estado lógico y el valor 0 en el caso contrario.
De este modo, sus tablas de verdad para dos y tres variables son:
e1 e0 s e2 e1 e0 s
0 0 1 0 0 0 1
0 1 0 0 0 1 0
1 0 0 0 1 0 0
1 1 1 0 1 1 0
1 0 0 0
1 0 1 0
1 1 0 0
1 1 1 1
Tabla 5-5a Tabla 5-5b
La función Identidad Lógica se denomina también Equivalencia ó Comparación.

Empleo de compuertas lógicas de base en el diseño de sistemas lógicos combinacionales típicos de


los ordenadores digitales.

Comparadores.
Son circuitos combinacionales que comparan dos números binarios. El caso más simple es x = y
para números de un solo bit.

5-4
ARQUITECTURA DE COMPUTADORAS
Ingeniería en Sistemas de Información
Universidad Tecnológica Nacional
Facultad Regional Santa Fe

x y x=y
0 0 1
0 1 0
1 0 0
1 1 1
Figura 5-18.

Veamos ahora un caso más complejo de diseño. Se trata de la comparación de dos números de
dos bits cada uno, identificando si son iguales ó cuál es mayor.

x1 sist. lógico x>y


y1 combinacional x=y
x0 x>y
y0 (comparador)
Figura 5-19.

Primera manera de encarar el diseño.


A B C
x1 x0 y1 y0 x>y x=y x<y
0 0 0 0 0 1 0
0 0 0 1 0 0 1
0 0 1 0 0 0 1
0 0 1 1 0 0 1
0 1 0 0 1 0 0
0 1 0 1 0 1 0
0 1 1 0 0 0 1
0 1 1 1 0 0 1
1 0 0 0 1 0 0
1 0 0 1 1 0 0
1 0 1 0 0 1 0
1 0 1 1 0 0 1
1 1 0 0 1 0 0
1 1 0 1 1 0 0
1 1 1 0 1 0 0
1 1 1 1 0 1 0 Tabla 5-6.

A = x1. x 0 . y 1. y 0 + x1. x 0 . y 1. y 0 + x1. x 0 . y 1. y 0 + x1 . x 0 . y 1 . y 0 + x1. x 0 . y 1. y 0 +

+ x1. x 0 . y 1. y 0 = x1. y 1 + x1 . x 0 . y 0 + x 0 . y 1 . y 0
B = x1 . x 0 . y 1. y 0 + x1 . x 0 . y 1. y 0 + x1 . x 0 . y 1 . y 0 + x1. x 0 . y 1 . y 0
C = x1. x0 . y1. y0 + x1. x0 . y1. y 0 + x1. x0 . y1. y 0 + x1. x0 . y1. y 0 + x1. x0 . y1. y 0 +

+ x1. x0 . y1. y 0 = x1. y1 + x1. x0 . y 0 + x0 . y1. y 0

La implementación por esta forma resulta ardua y cara, si se la compara con la siguiente.

Segunda manera de encarar el diseño.


Se hace buscando intuitivamente una solución más eficiente. Por ejemplo, en lugar de combinar las
cuatro variables como en el caso anterior, se han tratado en esta solución los bits x1, e y1,(los de mayor
peso) en forma independiente de x0 e y0 (los de menor peso).
Surgen así las expresiones siguientes:

( x > y) = ( x 1 > y 1 ) + ( x 1 = y 1 ). ( x 0 > y 0 ) (1)


( x = y ) = ( x1 = y1). ( x0 = y 0 ) (2)
( x < y) = ( x1 < y1) + ( x1 = y1). ( x0 < y 0 ) (3)

Es necesario ahora resolver las funciones que aparecen en las expresiones anteriores para
reemplazarlas:
xn yn > = <
0 0 0 1 0
0 1 0 0 1
1 0 1 0 0
1 0 0 1 0 Tabla 5-7.
ARQUITECTURA DE COMPUTADORAS - 5. SISTEMAS LÓGICOS COMBINACIONALES (ed. 2004)

( x1 > y1) = x1. y1


( x1 = y1) = x1. y1 + x1. y1
( x1 < y1) = x1. y1
( x0 > y 0 ) = x0 . y 0
( x0 = y 0 ) = x0 . y 0 + x0 . y 0
(x 0 )
< y 0 = x0 . y 0

Reemplazando en (1) , (2) y (3)

( x > y) = x 1. y 1 + ( x 1 ≡ y 1 ). x 0 . y 0
( x = y ) = ( x 1 ≡ y 1 ). ( x 0 ≡ y 0 )
( x < y) = x 1. y 1 + ( x 1 ≡ y 1 ). x 0 . y 0

Figura 5-20
Codificadores y Decodificadores.
Se define a un codificador como un circuito combinacional que acepta cualquier número de entradas
y las convierte en un código binario. Mientras que el decodificador ejecuta la función inversa.
Primer ejemplo: Codificador Octal-Binario.
DÍGITOS OCTALES DIG. BINARIOS
d7 d6 d5 d4 d3 d2 d1 d0 b2 b1 b0
0 0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 1 0 0 0 1
0 0 0 0 0 1 0 0 0 1 0
0 0 0 0 1 0 0 0 0 1 1
0 0 0 1 0 0 0 0 1 0 0
0 0 1 0 0 0 0 0 1 0 1
0 1 0 0 0 0 0 0 1 1 0
1 0 0 0 0 0 0 0 1 1 1

b0 = d1 + d3 + d5 + d7
b1 = d2 + d3 + d6 + d7
b2 = d4 + d5 + d6 + d7

Figura 5-21.

Segundo ejemplo: Decodificador "1,de 4"


Convierte un código binario de dos variables en cuatro señales de salida (una por cada
combinación).

a b 0 1 2 3

5-6
ARQUITECTURA DE COMPUTADORAS - 5. SISTEMAS LÓGICOS COMBINACIONALES (ed. 2004)

0 0 1 0 0 0
0 1 0 1 0 0
1 0 0 0 1 0
1 1 0 0 0 1 Tabla 5-9.

También se puede representar estas funciones con módulos NOR.

0= a+b

1= a+b

2= a+b

3= a+b

Figura 5-22.

Tercer ejemplo: convertidor de binario natural (8421) a BCD Aiken (2421).

pesos → 8 4 2 1 2 4 2 1
decimal ↓ d c b a d’ c’ b’ a’
0 0 0 0 0 0 0 0 0
1 0 0 0 1 0 0 0 1
2 0 0 1 0 0 0 1 0
3 0 0 1 1 0 0 1 1
4 0 1 0 0 0 1 0 0
5 0 1 0 1 1 0 1 1
6 0 1 1 0 1 1 0 0
7 0 1 1 1 1 1 0 1
8 1 0 0 0 1 1 1 0
9 1 0 0 1 1 1 1 1
10 1 0 1 0 - - - -
11 1 0 1 1 - - - -
12 1 1 0 0 - - - -
13 1 1 0 1 - - - -
14 1 1 1 0 - - - -
15 1 1 1 1 - - - - Tabla 5-10.

Figura 5-23.

Selectores de Datos (Multiplexores y Demultiplexores).


Multiplexores (entrada en paralelo y salida en serie).
Los multiplexores son SLC formados por un cierto número m de compuertas Y , conectadas a
n
una única compuerta O, que poseen n entradas de selección S (tal que 2 = m).
Cada combinación binaria presente en las entradas de selección, produce la apertura de una sola
compuerta Y , para que la información presente en la entrada d correspondiente pueda pasar por la
salida de la compuerta O, por lo que, cambiando esa combinación se logra que el circuito se comporte como
un conmutador electrónico.
Ejemplo: Multiplexor de 4 entradas.
Tabla de verdad del selector de entradas:
s1 s0 L
0 0 0
0 1 1
1 0 2
1 1 3 Tabla 5-11.
Siendo L, el número de dígito seleccionado para dejar pasar a la salida, d3, d2 , d1,y d0 las líneas de
entrada de datos y s1 y s0 señales de control del selector de entrada de datos.

5-7
ARQUITECTURA DE COMPUTADORAS - 5. SISTEMAS LÓGICOS COMBINACIONALES (ed. 2004)

Figura 5-24.
Demultiplexores (entrada en serie, salida en paralelo).

Figura 5-25.
Los demultiplexores son SLC con un entrada de información d, y m salidas, además de n
n
entradas de selección (tal que 2 = m). La información d se puede hacer aparecer en cualquiera de las
salidas aplicando la combinación binaria adecuada a las entradas de selección.
Ejemplo: Demultiplexor digital de cuatro salidas.

SUMADORES Y RESTADORES.
Suma aritmética binaria.

Semisumadores
La suma de dos dígitos binarios da como resultado un nuevo dígito binario y eventualmente produce
un acarreo (otro dígito binario).
Un diagrama de bloques seria:
a s
semisumador
b c Figura 5-26.

Y su tabla de verdad:
Sumandos acarreo suma
b a c s
0 0 0 0
0 1 0 1
1 0 0 1
1 1 1 0 Tabla 5-12.

Para completar esta tabla, hacemos la suma de (a + b) y entonces:

(0 + 0) es igual a 0 (S) y el acarreo igual a 0 (C)


(1 + 0) o (0 + 1) es igual a 1 (S) y el acarreo igual a 0 (C)
(1 + 1) es igual a 10, o sea S = 0 y el acarreo igual a 1 (C).

Las expresiones correspondientes a las salidas son:


S= a⋅b+a⋅b= a⊕b
C=a⋅b
y el circuito lógico correspondiente:

Figura 5-27.
Con este diseño lógico se resuelve la suma binaria de dos bit y lo denominamos Semisumador.

Sumador total.
Si se desea sumar dos números binarios de varios bit cada uno, nos encontramos que además de
los dos dígitos a sumar en cada columna, tenemos que sumar el acarreo de la columna anterior, por lo tanto,
la cantidad de dígitos de entrada mínima, en este caso es tres, y tendremos que diseñar un nuevo circuito al
que llamaremos sumador total. Podemos llegar al diseño lógico por dos, o más, caminos diferentes.
Primer forma de encarar el diseño: Se construye en base a dos semisumadores. El primero para sumar los
dos primeros dígitos y el segundo suma el resultado del primero con el tercer dígito. El problema que se
presenta es que las dos semisumas producen una salida de acarreo cada una y deben ser agrupadas en

5-8
ARQUITECTURA DE COMPUTADORAS - 5. SISTEMAS LÓGICOS COMBINACIONALES (ed. 2004)

una sola. Para ello analicemos las diferentes combinaciones posibles de estas salidas de acarreo en una
tabla de verdad.
C1 C2 C
0 0 0
0 1 1
1 0 1
1 1 X Tabla 5-13.

Si los dos acarreos intermedios son igual a 0, el acarreo es = 0, si primero es 1 y el otro 0 o


viceversa, el acarreo es = 1. No se puede dar la posibilidad de que los dos acarreos sean = 1, dado que si
analizamos la tabla de la semisuma vemos que existe acarreo solo cuando los dos dígitos son = 1 y en este
caso el resultado (salida S) es = 0, por lo tanto, si hubo acarreo en la primer semisuma no puede haberlo en
la segunda y viceversa. Entonces a este estado se lo puede marcar como indiferente para la simplificación.

Figura 5-28.
Por segunda forma canónica, la expresión mas simple es: C = C1 + C0, y el circuito completo para
el sumador total será:
Segunda forma de encarar el diseño: Desarrollar la tabla de verdad para tres entradas:
Cn b a C S
0 0 0 0 0
0 0 1 0 1
0 1 0 0 1
0 1 1 1 0
1 0 0 0 1
1 0 1 1 0
1 1 0 1 0
1 1 1 1 1 Tabla 4-14.
de donde se deducen las expresiones:

S = a. b. Cn + a. b. Cn + a. b. Cn + a. b. Cn

C = a. b. Cn + a. b. Cn + a. b. Cn + a. b. Cn

que simplificado queda:


S = a ⊕ b ⊕ Cn
C = a. b + a. Cn + b. Cn
y el circuito:

Figura 5-29.
Esquema de bloques para ambas figuras:
a S
b
Cn C
Figura 5-30.
Encadenamiento de Sumadores.
El diseño creado en el punto anterior resuelve la suma de una sola posición o columna de dos
números binarios. Si queremos realizar la suma de dos números de n dígitos debemos colocar n sumadores
totales encadenados de la siguiente forma: (Ej. para 4 dígitos).

5-9
ARQUITECTURA DE COMPUTADORAS - 5. SISTEMAS LÓGICOS COMBINACIONALES (ed. 2004)

x3 y3 a2 x2 y2 a2 x1 y1 a1 x0 y0 0

+ + + +

desb. S3 S2 S1 S0
Figura 5-31.
Una forma mas simple de representarlo es unir los sumadores y asumir que la conexión de los
acarreos es interna.
x3 y3 x2 y2 x1 y1 x0 y0 0

+ + + +

desb. S3 S2 S1 S0 Figura 5-32.


Una expresión mas simple aun podría ser:
x 3 y3 x 2 y2 x 1 y1 x 0 y0 0

desb. S3 S2 S1 S0
Figura 5-33.

Restador Total.
Si bien empleando la misma metodología que para la suma, se puede desarrollar un circuito que
realice la resta, se puede construir el circuito a partir de sumadores, según el método visto en la
unidad III de resta por suma del complemento a dos del sustrayendo.
Para realizar la resta por este método se debe analizar cuales son las modificaciones a
realizar en la información para que mediante una suma se obtenga la diferencia.
a) El primer operando (minuendo) no tiene diferencias y por lo tanto ingresa igual que para la suma.
b) El segundo operando (sustrayendo) debe ser complementado a dos. Para ello primero debemos
complementarlo a uno (complemento a uno) y luego sumarle uno. El complemento a uno lo podemos lograr
aplicando complemento (modulo inversión) a cada dígito. Y luego se le debe sumar uno, para lo cual se
puede utilizar la tercer entrada del último sumador (no utilizada en la suma) donde forzamos un uno.

Ejemplificando el proceso:
1 1 0 12 (13) 1 1 0 12 (minuendo igual)
0 1 1 02 (06) 1 0 0 12 (complemento a 1)
+ 12 (complemento a 2)
----------- ---------------
0 1 1 12 (07) 1¦0 1 1 12
De esta forma queda:
x3 y3 x2 y2 x1 y1 x0 y0 1

+ + + +

desb S3 S2 S1 S0
Figura 5-34.
Sumador - Restador.
Dado que las diferencias entre el sumador y su versión de restador no son grandes, es
posible desarrollar a partir de un grupo de sumadores, un circuito que realice la suma o la resta
(dependiendo de una variable de control) de dos valores de entrada. Para ello se debe analizar
como deben comportarse cada una de las variables de entrada para las dos operaciones. Se define
una nueva variable P tal que si P = 0 se deben sumar los operandos y si, P = 1 se debe hallar la
diferencia.
a) El primer operando no varía entre la suma y la resta, por lo tanto puede ser ingresado
directamente al sumador.
b) El segundo operando debe ingresar en forma directa o complementada dependiendo del valor
de P, y se puede analizar el resultado en una tabla de verdad.
P yn yn’
0 0 0
0 1 1
1 0 1
1 1 0 Tabla 5-15.

O sea: yn' = yn ⊕ P
NOTA: esta expresión debe ser aplicada a cada uno de los dígitos del segundo operando.

5-10
ARQUITECTURA DE COMPUTADORAS - 5. SISTEMAS LÓGICOS COMBINACIONALES (ed. 2004)

c) Por último debemos analizar el tercer dígito del ultimo sumador, el que debe ser 0 para la
suma y 1 para la resta. Y como si P (en este ej.) es igual a 0 se debe sumar y si es igual a 1 se debe
restar, resolvemos el problema conectando directamente P a esta entrada.
De esta forma queda:

Figura 5-35.
Suma en BCDN.
Para obtener un circuito que realice la suma en BCDN, hay que remitirse al procedimiento usado
para realizar esta operación visto en la unidad 3. Esto es, realizar la suma normalmente tomando de a
cuatro dígitos binarios (1 dig. BCDN) y luego hacer el reajuste, si el resultado es superior a nueve.
La detección de si es mayor a nueve o no, se puede realizar mediante un sistema combinacional
(DSCN) y la salida de este sistema será una variable con la cual se administra si se debe realizar en reajuste
del resultado sumándole 6 o no.

Figura 5-36.
Resta en BCDN.
Para realizar la se puede tomar como base el diseño anterior, dado que la misma se realiza
mediante la suma del complemento a nueve del sustrayendo. Se debe agregar entonces a este
desarrollo un sistema que calcule el complemento a nueve. Recordar que en este caso no se puede
hacer invirtiendo los valores, por lo tanto habrá que hacer un diseño a partir de una tabla de verdad. El
sistema resultante será entonces:
b3 b2 b1 b0

complemento a nueve

X3 X2 X1 X0 Y3 Y2 Y1 Y0

Cuádruple Sumador Total (CST)

Figura 5-37.

Suma y resta en BCD ex 3.


En este caso la operatoria es similar a lo visto anteriormente, con las siguientes variantes:
a) Se simplifica el reajuste que se debe realizar después de la suma, dado directamente por el
acarreo sabemos si se suma o resta 3 al resultado.
b) En la resta se simplifica también el módulo de complemento a 9, ya que, por ser el código BCD ex
3 autocomplementario, se puede hallar el mismo aplicando complemento a cada dígito.
Multiplicación.
Tal como se estudio en la unidad 3 la metodología para realizar la multiplicación binaria es igual
a la método decimal, con la ventaja que aquí el dígito por el cual se multiplica es 0 o 1.
Si se colocan grupos de sumadores anidados y desfasados en una posición donde ingresa por
una entrada el resultado anterior y por la otra el multiplicando y, habilitamos el ingreso de esta última
entrada con cada uno de los dígitos del multiplicador, obtendremos en el conjunto de salidas el resultado.

5-11
ARQUITECTURA DE COMPUTADORAS - 5. SISTEMAS LÓGICOS COMBINACIONALES (ed. 2004)

El circuito general será:

Figura 5-38.

5-12
ARQUITECTURA DE COMPUTADORAS - 5. SISTEMAS LÓGICOS COMBINACIONALES (ed. 2004)

ANEXO I

CONCEPTOS BÁSICOS DE ELECTROTECNIA.


1- Corriente eléctrica:
La corriente eléctrica consiste en el movimiento de electrones (partículas físicas con carga eléctrica
elemental) en los materiales conductores de electricidad.
La carga eléctrica total que atraviesa una determinada sección del conductor por unidad de tiempo
se denomina intensidad de corriente eléctrica. La unidad de medida de la corriente eléctrica es el Amper.
2- Resistencia eléctrica:
La resistencia puede entenderse como la dificultad opuesta por los componentes del circuito a la
circulación de la corriente eléctrica. La unidad de medida de la resistencia eléctrica es el Ohm (Ω
Ω).
3- Diferencia de Potencial Eléctrica o tensión:
Una corriente eléctrica de intensidad I, que circula por un componente eléctrico de resistencia R,
genera entre los extremos del mismo una diferencia de potencial o tensión U, que se relacionan por:
U = I x R

La unidad de medida de la tensión es el Volt.

4- Potencia Eléctrica:
Una corriente eléctrica I, que circula a través de una resistencia R, transforma energía eléctrica en
energía térmica. La nueva energía transformada por unidad de tiempo se denomina Potencia. Esta
expresión se conoce como Ley de Joule.
P = (I)2 x R

La unidad de potencia eléctrica es el Watt.

EL CIRCUITO ELÉCTRICO. Sus Componentes.


El esquema de la figura es una simplificación de un circuito eléctrico real, y se analizara en las
clases de teoría para aplicar conceptos de lógica .
batería interruptor lampara

1
generador control carga
El numero 1, en el circuito representativo de la batería indica que la misma esta cargada, de lo
contrario correspondería anotar un 0.

Los Generadores.
Los generadores de corriente continua poseen dos bornes o polos: el positivo (P o + ) que se
codifica con el color rojo; y el negativo ( N o - ) que se codifica con el color negro.
Así suele decirse que los generadores de energía son componentes polarizados. Los generadores
se caracterizan por sus Fuerza Electromotriz (fem), medida en Volt, la cual origina una corriente eléctrica
que recorre todo el circuito cuando el interruptor se encuentra cerrado.
Interruptor

+
Batería Lampara
_
12 V

Los Receptores De Energía.


Los componentes eléctricos denominados receptores de energía pueden ser a) No Polarizados,
cuando su accionar es independiente del sentido de la corriente que los atraviesa, por ejemplo las lamparas
de filamento incandescente, los resistores, etc y b)Polarizados, como los transistores, los diodos, los LEDs,
etc., donde el sentido de la corriente esta estrictamente fijado. Los receptores polarizados se conectan
siempre de manera que la corriente eléctrica entre por su terminal positivo y salga por su terminal negativo.
El LED, (Light Emitter Diode, diodo emisor de luz), es una carga polarizada. Su polaridad se
identifica a través de sus dos terminales, el Catodo y el Ánodo. Este dispositivo esta construido con
elementos semiconductores de electricidad. Cuando una corriente atraviesa el LED, el dispositivo emite luz,
la cual no es producida por una temperatura elevada, sino por el paso de los electrodos por la juntura
semiconductora. Es importante tener en cuenta que tanto una corriente eléctrica directa excesiva, como una
tensión inversa elevada, pueden destruir al componente en fracciones de segundo.

LED

Convención Lógica Para Los Interruptores.

5-13
ARQUITECTURA DE COMPUTADORAS - 5. SISTEMAS LÓGICOS COMBINACIONALES (ed. 2004)

Por su construcción, los interruptores pueden clasificarse en: a) Normalmente Abiertos (NA), y b)
Normalmente Cerrados (NC). Las denominaciones anteriores hacen referencia al estado del interruptor no
actuado o en reposo. Se propone la siguiente convección lógica:

Tipo de Interruptor Estado Lógico


En reposo Actuado
NA 0 1
NC 1 0

En la siguiente figura, se muestran los diagramas unifilares para uno de los casos anteriores,
cuando se controla el encendido de una lampara.
A=0 A=1

NA L=0 L=1
en reposo actuado

Conductores y Aislantes.
Los metales son conductores y tienen muy poca resistencia eléctrica. Un alambre de cobre de 1
2
mm de sección y de una longitud de 56 m tiene una resistencia de 1 Ohm. Los aisladores ofrecen una gran
resistencia al paso de la corriente eléctrica. En la practica, no existen materiales conductores ni aisladores
perfectos, pero para el estudio podemos suponerlos ideales.

Entre los conductores podemos encontrar:


Resistores.
Son elementos que limitan el paso de la corriente eléctrica, se fabrican de distintos valores y
tolerancias. La unidad de medida es el Ohm (Ω) y se los puede clasificar en:
FIJAS: De disipación
De precisión
VARIABLES: De composición
De potencia
De alambre
La Ley de Ohm, que expresa que la Tensión o F.E.M. (V),al ser aplicada a una Resistencia (R), produce
un flujo o circulación de electrones denominado Corriente Eléctrica:

I (A) = V (V) / R (Ω)

I = Corriente que circula por el resistor en Amper.


V = Es la tensión en bornes del resistor. Su unidad de medida es el Volt.
R = Valor de la resistencia en Ohm.
Dos características importantes de un resistor son su tolerancia (1%, 5%, 10%), y la potencia que es capaz
de disipar, medida esta última en (Watts).
Sus usos son múltiples y van desde la electrónica hasta la electricidad de potencia.

Banda de tolerancia
Código de colores
Figura 5a-1.
Ejemplos de usos: Polarización de transistores.
Limitadores de corrientes.
Construcción de filtros.
Ejemplos prácticos: Un resistor variable es por ejemplo el elemento que regula el volumen de una radio.
Un resistor fijo, es por ejemplo el elemento que genera calor en una estufa eléctrica.
Se los identifica a través de un código de colores y una banda de tolerancia. No poseen polaridad.

Entre los elementos fabricados con semiconductores, encontramos:

Diodos.
Son elementos que permiten la circulación de la corriente eléctrica en un solo sentido. Se los
construye a partir de materiales semiconductores de distinta polaridad:
Material tipo “N”
Material tipo “P”
Suele denominárselos rectificadores, pues este es su uso principal y en general se los construye
utilizando principalmente germanio o silicio.
Para que el diodo conduzca, el Ánodo (A) debe ser positivo respecto del Cátodo (K), es decir el
potencial en A(VA) debe ser mayor que en K(Vk).

5-14
ARQUITECTURA DE COMPUTADORAS - 5. SISTEMAS LÓGICOS COMBINACIONALES (ed. 2004)

En los diodos comerciales, el pin correspondiente al cátodo (K) se lo identifica con una línea fina
transversal en el cuerpo del elemento.
Cuando este semiconductor conduce, entre A y K, se produce una diferencia de potencial constante
de 0,2 a 0,3 (V) en el de Germanio y de 0,6 a 0,7 (V) en el de Silicio. Los de silicio son los más usados.

A K A K
N P
CATODO semicond. tipo "P"
ANODO semicond. tipo "N"
Figura 5a-2.
Las características más importantes de un diodo son la corriente media de conducción máxima y la
tensión máxima de pico inverso.
También es importante saber hasta que frecuencia se comporta como diodo. Para lo cual existen
distintos ensayos al respecto.
Existe una gran cantidad de diodos especiales entre los que podemos mencionar:
Zener
Varicap
Tunel
Láser
L.E.D.
Este último es muy común en equipos electrónicos y emiten luz de distintos colores pertenecientes
al espectro de luz visible.
Ejemplo de uso como rectificador de media onda:

Rl = Resistencia de carga.

Ve = Tensión de entrada.

Vl = Tensión aplicada a la carga.


(en este caso Rl)

Figura 5a-3.

Transistores.
Existe una variedad casi infinita de características, usos y tipos constructivos de transistores. Son
dispositivos semiconductores, al igual que los diodos, pero en este caso de tres terminales llamadas Base
(B), Colector (C) y Emisor (E).
Tipo PNP Tipo NPN
Emisor Colector

Base Base

Colector Emisor

E C E C
P N P N P N

B B

N - Semiconductor tipo "N"


P - Semiconductor tipo "P"
Figura 5a-4.
Uno de los tipos más difundidos es el transistor Bipolar, que puede estar construido de Germanio o
Silicio y con polaridades del tipo PNP o NPN.
Esto último indica en que forma debe estar polarizada la base (B) para que el transistor cumpla su
función, la cual fundamentalmente consiste en amplificar la corriente que circula por la base (B).

5-15
ARQUITECTURA DE COMPUTADORAS - 5. SISTEMAS LÓGICOS COMBINACIONALES (ed. 2004)

En electrónica digital se los utiliza generalmente como llaves electrónicas, es decir que el transistor
conduce a su máxima capacidad o no conduce.
Los datos determinantes para la elección de un transistor son:
Corriente de Base.
Corriente de Colector.
Factor de Amplificación.

Ejemplo de uso de un transistor tipo NPN como Amplificador

Figura 5a-5.
Modo corte: El interruptor SW 1 se encuentra abierto y por lo tanto no circula corriente desde +v a través de
R1 (el LED permanece apagado). Esto implica que la base del transistor permanece a un potencial de 0
voltios o cero lógico y por lo tanto no circula corriente a través de la resistencia de carga RL, por lo tanto se
dice que el transistor esta cortado.
Modo saturación: En esta caso SW 1 esta cerrado y circula corriente desde +v a través de R1 y hacia la base
B (el LED se enciende). La base del transistor ahora esta a un potencial mayor de 0 voltios y esto provoca la
circulación de corriente a través de la resistencia de carga RL, por lo que se dice que transistor se encuentra
saturado.

Compuertas lógicas empleando Diodos Semiconductores (lógica positiva):

intersección lógica (AND) reunión lógica (OR)


Figura 5a-6.
En el ejemplo de la intersección lógica (AND). En este circuito la salida (S) vale +v si las dos
entradas, A y B valen +v. Pero basta que una de las entradas (A y/o B) valga 0 voltios para que el diodo
correspondiente conduzca y lleve el valor de S muy próximo a 0 voltios (exactamente S va a valer 0,7 voltios
en el caso de ser un diodo de silicio).
El mismo razonamiento podemos hacer en la reunión lógica (OR). La salida (S) se aproxima a +v
(existe como en el ejemplo anterior una pequeña perdida de tensión) siempre que por lo menos una entrada
valga +v.
Estos métodos permiten construir puertas AND y OR pero no puede lograrse la realización de un
operador complemento (negador) y tampoco permite la conexión de varias compuertas en serie, debido a la
caída de tensión inherente a los diodos.

Compuertas lógicas con Transistores:


Los dos problemas citados anteriormente fueron solucionados con la introducción del transistor, que
permite estabilizar las tensiones de salidas de las compuertas , a la vez que puede actuar como inversor o
no.
NOT (negación).

Figura 5a-7.

Si la entrada A se encuentra a un potencial de 0 voltios (0 lógico), entonces no circula corriente a


través de R hacia la base B del transistor y este permanece "cortado" o lo que es lo mismo, S permanece a
un potencial +v voltios (1 lógico).
Si la entrada A vale +V (1 lógico), entonces circula una corriente a través de R y de la base B
polarizando al transistor en saturación y de esta forma la salida S vale 0 voltios (0 lógico).

5-16
ARQUITECTURA DE COMPUTADORAS - 5. SISTEMAS LÓGICOS COMBINACIONALES (ed. 2004)

IDENTIDAD.

Figura 5a-8.
Este caso es similar al anterior aunque el resultado obtenido en la salida es totalmente opuesto.
Cuando la entrada A vale 0 Voltios (0 lógico), el transistor no conduce (esta cortado) y entonces S=0 (0
voltios). Cuando la entrada A está en +v (1 lógico), el transistor entra en conducción y S pasa a valer +v (1
lógico).
NAND (intersección)

Figura 5a-9.
En este caso y debido a la resistencia R, el transistor se encuentra en permanente estado de
conducción.
Es suficiente que el valor de una de las entradas A o B sea igual a cero (0) (-V Volt) para que este
cese de conducir y S pase a tomar el valor uno (1) ( +V Volé)
NOR (Reunión)

Figura 5a-10.
El transistor se encuentra en permanente estado de no conducción.
Es suficiente que el valor de una de las entradas A o B sea igual a uno (1) (+V Volt) para que cambie
el valor de S de uno (1) a cero (0).

Ejemplo De Uso
En dicho ejemplo, observamos al transistor cumpliendo la función de inversor o simplemente
amplificador, tal cual lo expresado anteriormente.
También observemos como el transistor mantiene los valores de tensión del circuito en sus valores
nominales.

Figura 5a-11.

5-17
ARQUITECTURA DE COMPUTADORAS
Ingeniería en Sistemas de Información
Universidad Tecnológica Nacional
Facultad Regional Santa Fe

6. SISTEMAS LÓGICOS SECUENCIALES


(edición 2004)

Introducción:
En las dos unidades anteriores hemos definido y diseñado desde el punto de vista lógico,
sistemas lógicos combinacionales.
Recordemos que en SLC, el estado lógico de sus salidas depende, en todo momento, del estado
presente de sus entradas y no de la historia de sus estados previos.
En la presente unidad estudiaremos los Sistemas Lógicos Secuenciales (SLS). Estos constituyen la
otra gran familia de los sistemas lógicos.
Definición:
Los Sistemas Lógicos Secuenciales son aquellos en los que el valor de las variables de salida
depende no solamente de los valores actuales de las variables de entrada, sino también de los
valores tomados anteriormente por las mismas.
Multivibradores.
Estos son circuitos secuenciales que proveen dos salidas, la salida propiamente dicha (Q), y otra, el
complemento de la anterior (Q ) .
Hay tres tipos de multivibradores: * biestables
* monoestables
* astables
En este curso veremos particularmente los biestables.
Biestables.
Son multivibradores que poseen dos estados estables. Mediante ellos pueden "recordar" el valor
cero o el valor uno. Veremos distintos tipos de biestables, pero todos ellos son derivaciones del biestable
S-R que estudiaremos en primera instancia.
Biestable S-R.
Veamos su representación esquemática:

S Q
S/R
R Q
Figura 6-1.
Obsérvese que es un sistema que posee dos entradas denominadas S y R, una salida Q y el
complemento de ésta Q . La entrada S es la abreviatura en inglés de SET que traducimos por puesta a uno
y R es la abreviatura en inglés de RESET que traducimos por puesta a cero. Para definir su funcionamiento
agreguemos botones pulsadores en sus entradas y convengamos que mientras los botones no se pulsan las
entradas se encuentran en el estado cero y cuando se pulsan la entrada correspondiente se encuentra en
estado uno.

puesta a 1 S Q
S/R
puesta a 0 R Q
Figura 6-2.
El biestable S-R es tal que: * Si se pulsa la "puesta a 1" memoriza un uno. Este hecho se manifiesta porque
la salida Q adopta el estado uno y lo conserva luego que se deja de pulsar la
"puesta a 1".
* Si se pulsa la "puesta a 0" memoriza un cero. En este caso, la salida Q adopta
el estado cero y lo conserva luego que se deja de pulsar la "puesta a 0".

Describimos gráficamente mediante un esquema temporal el comportamiento expuesto en los


párrafos anteriores:
1
S 0

1
R 0

1
Q 0

0 1 2 3 4 5 6

Figura 6-3.

Veamos especialmente lo indicado para los instantes 0 a 6:


ARQUITECTURA DE COMPUTADORAS - 6. SISTEMAS LOGICOS SECUENCIALES (ed.2004)

En 0 : suponemos un "estado inicial" cero del biestable pues Q = 0 cuando aún no han sido pulsados los
botones de comando de las entradas.
En 1: el operador "pulsa la puesta" a uno pues S pasa de cero a uno. El biestable memoriza el uno pues su
salida Q pasa de 0 a 1.
En 2: el operador deja de pulsar la "puesta a uno" pues S pasa de uno a cero. Obsérvese que el biestable
ha registrado el 1 dado que su salida Q permanece en 1 aun después que S vuelve al estado 0.
En 3: nueva pulsación de la "puesta a uno". Esto no ocasiona cambios en el estado del biestable dado que
éste ya memorizó un 1 con la orden anterior.
En 4: el operador pulsa la "puesta a cero" dado que R pasa de 0 a 1. El biestable responde memorizando el
cero puesto que su salida Q pasa de 1 a 0.
En 5: el operador deja de pulsar la "puesta a cero" pues R pasa de uno a cero. El cero ha quedado
registrado ya que la salida Q permanece en 0.
En 6 : nueva pulsación de la "puesta a cero" que no ocasiona cambios en el estado del biestable dado que
éste ya memorizó un 0 con la orden anterior.
Existe una restricción en el empleo de este biestable que es: "no puede pulsarse al mismo tiempo
la puesta a uno y la puesta a cero".
Teniendo bien en claro la descripción de funcionamiento enunciada del biestable S-R podemos
deducir la expresión algebraica de la función Q:
"Para tener Q (Q = 1) se necesita tener S (S = 1) ó tener Q y no R (es decir R = 0)".
Entonces : Q = ( Q + S) ⋅ R (1)
Esta ecuación conduce al siguiente esquema lógico:

S
Q

Figura 6-4.
Obsérvese la expresión algebraica anterior y compáresela con cualquier expresión de las vistas para
los Sistemas Lógicos Combinacionales. La particularidad de (1) es que en ella la variable de salida o función
Q se encuentra en ambos lados de la ecuación. Este hecho se traduce en el esquema lógico por la
presencia de un vínculo entre la salida del módulo intersección y la entrada del módulo reunión.
Este vínculo se denomina LAZO DE REALIMENTACION y es propio de los Sistemas Lógicos
Secuenciales.
Es en realidad lo que los caracteriza y distingue, y les permite cumplir con la función de memorizar.
Para una mejor comprensión de la función que cumplen los lazos de realimentación aconsejamos
efectuar el siguiente ejercicio:
"siguiendo los valores que adoptan las variables de entrada S y R en el esquema temporal desde el
instante(0) en que al biestable se le ha asignado arbitrariamente estado cero (es decir Q = 0),
verificar que el esquema lógico propuesto es correcto".
Realización del biestable S-R mediante módulos NO-O.
En la práctica el biestable S-R se construye mediante módulos NO-O o módulos NO-Y.
Veremos a continuación de qué manera podemos convertir el biestable S-R anterior en uno
realizado con dos módulos NO-O.
Recordemos que mediante un módulo NO-O de dos entradas e inversores podemos realizar la
reunión y la intersección de dos variables.
Para realizar la reunión se requiere:

X
S=X+Y
Y
Figura 6-5.
Y, para lograr la intersección se necesita:

X
S

Y
S=X.Y=X+Y
Figura 6-6.
Reemplazando entonces en el biestable S-R se obtiene:

S 1

2 Q

R
Figura 6-7.
Teniendo en cuenta que dos negadores que se siguen se anulan, podemos eliminarlos y
reestructurando el esquema anterior llegar a:

6-2
ARQUITECTURA DE COMPUTADORAS - 6. SISTEMAS LOGICOS SECUENCIALES (ed.2004)

S 1 P (Q)

R 2 Q

Figura 6-8.
Se puede comprobar fácilmente que la salida de 2 es Q, dado que el sistema es simétrico.
Análisis de funcionamiento del biestable S-R realizado mediante módulos NO-O.
Con tal finalidad recordamos la tabla de verdad del módulo NO-O.
X Y S
0 0 1
0 1 0
1 0 0
1 1 0
De la misma se desprende que todas la entradas deben valer 0 para que la salida alcance el valor 1.
Basta que una sola entrada se encuentre en estado 1 para que la salida sea 0.
Teniendo en cuenta estas observaciones comenzamos el análisis:
1) Supongamos que pulsamos R : El estado 1 de R , impone el estado 0 en la salida del módulo 1. Es decir,
hace que Q valga cero cualquiera sea el estado de su otra entrada. Pero estando Q en estado 0 y
teniendo en cuenta que S vale 0, la salida del módulo 2 se encuentra entonces en el estado 1, es decir
Q vale 1. Sintetizando lo dicho iniciamos la confección de una tabla de verdad en la que escribimos:
S R Q
0 1 0 (1)

2) Dejamos de pulsar R : La entrada R del módulo 1 regresa a 0. Pero como Q , que es la otra entrada del
módulo 1 se encuentra en el estado 1, la salida Q continúa en el estado 0. Por lo tanto este cambio no
provoca alteraciones en el estado del biestable. Podemos entonces escribir:
S R Q
0 0 0 (2)
3) Pulsemos ahora S. El cambio de S del estado 0 al 1 impone el valor 0 en la salida del módulo 2. Es
decir provoca que Q cambie del estado 1 al 0. Observemos entonces que en el módulo 1 la entrada Q
pasa al estado 0, con lo que el módulo 1 es obligado a adoptar el valor 1 en salida. Es decir Q alcanza el
valor 1 y podemos escribir:
S R Q
1 0 1 (3)
4) Dejemos de pulsar S. La entrada S del módulo 2 regresa a 0 , pero como Q que es la otra entrada de
este módulo, ya se encuentra en el estado 1, la salida Q debe continuar en el estado 0. Por lo tanto este
cambio no provoca alteraciones en el estado del biestable y podemos entonces escribir:
S R Q
0 0 1 (4)
5) Concretemos la tabla de verdad. Con tal finalidad resumimos los estados que para las diferentes
combinaciones de entrada ha experimentado la salida del biestable:
S R Q
0 1 0 (1)
0 0 0 (2)
1 0 1 (3)
0 0 1 (4)
De la misma se desprende que en los casos en que S y R se encuentran ambas en 0 (fila 2 y 4), Q
conserva el valor que alcanzó en las combinaciones previas (fila 1 y 3).
Por esa causa podemos escribir:

S R Q
0 1 0
1 0 1
0 0 Q
1 1 no permitido
Obsérvese que la combinación S = R = 1 no puede emplearse con este biestable. El motivo de esta
prohibición es que los dos módulos alcanzan al mismo tiempo el estado 0, o sea: invalidando el requisito
exigido a un biestable de poseer una salida y otra que sea su complemento.

Biestable S-R Síncrono.


En el biestable S-R, la información es memorizada en el momento en que la misma se presenta. Es
decir cuando S o R pasan del estado 0 al estado 1.

6-3
ARQUITECTURA DE COMPUTADORAS - 6. SISTEMAS LOGICOS SECUENCIALES (ed.2004)

En el biestable que veremos a continuación, que se denomina S-R Síncrono, sólo ingresa
información en el momento en que ésta es "autorizada" o "habilitada" por una entrada adicional de control
que denominamos Ck:
S'
S Q

Ck

R Q
R'
Figura 6-9.
Las dos compuertas intersección permiten aislar el biestable S-R de la fuente de datos.
La sigla Ck es la forma abreviada de la expresión inglesa CLOCK, es decir reloj. Por lo general la
señal de control Ck tiene su origen en un GENERADOR DE IMPULSOS o RELOJ que sincroniza el
funcionamiento de las diferentes partes que componen un sistema digital. Veamos el siguiente esquema
temporal que permite apreciar el biestable S-R Síncrono.

1
Ck 0

1
S' 0

1
R' 0

1
Q 0

0 1 2 t

Figura 6-10
En este esquema se supone entonces que la señal que recibe la entrada Ck es una señal oscilante
de período constante proveniente de un generador de impulsos. Agreguemos; y para nuestros fines es
suficiente; que consideramos IMPULSO a cada lapso de tiempo en que periódicamente la señal mencionada
se encuentra en el estado 1.
De allí que en el esquema temporal considerado podamos enumerar 4 impulsos. En los instantes
(1) y (2) se puede observar cómo el biestable cambia de estado autorizado por Ck. La forma abreviada de
representación resulta ser:

S' Q

Ck

R' Q

Figura 6-11
Siendo la tabla de verdad la siguiente:
tn t n+1
S’ R’ Q
0 1 0
1 0 1
0 0 Q
1 1 no permit.
Obsérvese que es la misma que se ha propuesto para el biestable S-R excepto que aparecen las
inscripciones tn y tn+1. Éstas tienen el siguiente significado:
** t n : es el instante previo a la aparición del impulso en la entrada Ck.
** t n+1 : es el instante posterior a la aparición del impulso en la entrada Ck.
Por lo tanto en la tabla de verdad se debe considerar los valores indicados para S' y R' como los que
estas entradas deben poseer al momento en que CK autoriza y al correspondiente valor de Q como el que
esta salida adopta luego de producirse la autorización.

Puesta a uno directa y puesta a cero directa.


En muchas situaciones, conviene que un biestable como el S-R síncrono, cuyas entradas de puesta
a uno y puesta a cero S' y R' están controladas por la señal de autorización, cuente también con entradas
directas S y R.
En tal caso un diseño como el siguiente resuelve el problema (se utiliza compuertas NO-O de 3
entradas) :

6-4
ARQUITECTURA DE COMPUTADORAS - 6. SISTEMAS LOGICOS SECUENCIALES (ed.2004)

Pa 1 (S)
S'
P (Q )
S
Ck

R
R' Q

Pa 0 (R)
Figura 6-12.
El estado permanente de S y R debe ser cero. Toda vez que, momentáneamente, S o R adopte el
valor 1, el biestable memorizará un uno o un cero. Estas entradas directas son útiles por ejemplo, para fijar
un estado inicial para el biestable.
El biestable del esquema anterior se representa en forma breve de la manera siguiente:
Pa 1
S' Q

Ck

R' Q

Pa 0
Figura 6-13.
Biestable D.
El biestable S-R o el "S-R Síncrono" poseen dos entradas de información. El biestable D que
veremos a continuación, posee una sola entrada de información, la entrada D y según el estado 1 o 0 de
ésta al momento en que aparece el impulso CK, es el valor que memoriza.
Veamos el esquema lógico siguiente:

D
C1 S Q

Ck

C2 R Q

Figura 6-14.
En él, aparece un negador que permite que:
** si D = 1 , la información ingrese por la compuerta C1.
** si D = 0 , la información ingrese por la compuerta C2.
Lo expresado puede apreciarse en el siguiente esquema temporal:

1
Ck 0

1
S' 0

1
Q 0

0 1 2 t
Figura 6-15.
Se puede apreciar que en el instante (1) el dato D vale 1 y por lo tanto la salida Q adopta el valor 1 al
ser el biestable D autorizado por Ck a memorizar. En cambio, en el instante (2) el dato D vale 0 de modo
que al producirse la autorización por parte de Ck, el biestable D memoriza este valor.
Por lo tanto, podemos decir que el biestable D "copia" el valor que se encuentra en su entrada de
datos, en el momento en que se produce la autorización.
El biestable D se representa esquemáticamente de la manera siguiente:

D Q

Ck

Figura 6-16.
Siendo su tabla de verdad:
tn t n+1
D Q
0 0
1 1

Para este biestable cabe la posibilidad de agregar puesta a uno directa y puesta a cero directa,
como las que presentamos para el biestable S-R Síncrono, si se emplean compuertas NO-O de 3 entradas.
La representación abreviada del biestable D con ese agregado, resulta:

6-5
ARQUITECTURA DE COMPUTADORAS - 6. SISTEMAS LOGICOS SECUENCIALES (ed.2004)

Pa 1
D Q

Ck

Pa 0
Figura 6-17.
Limitaciones de los biestables S-R Síncrono y D.
El biestable síncrono ( S-R o D ) es perfectamente útil en tanto sus aplicaciones se restrinjan a
aquellas en las que en un ciclo de reloj solo se escriba o se lea. Por el contrario, no puede emplearse si en
un mismo ciclo de reloj se pretende:
* primero, leer el dato previamente almacenado.
* segundo, escribir uno nuevo en él.
El por qué de estas restricciones se verán con detenimiento al estudiarse las aplicaciones de los
biestables denominados Registros de Desplazamiento.
Configuración AMO/ESCLAVO.
Esta configuración permite que un biestable admita, en un mismo ciclo de reloj, la lectura y la
escritura simultánea sin funcionamiento errático.
La constitución de un biestable AMO-ESCLAVO se logra con 2 biestables S-R Síncrono, uno
denominado AMO y el otro ESCLAVO, que se acoplan de la manera siguiente:
A m o (A ) E s c la v o (E )

S S1 Q1 S2 Q2 Q

C k1 C k2

R R1 Q1 R2 Q2 Q
Ck

Figura 6-18.
Y que en forma abreviada podemos representar:

S Q

Ck A /E

R Q

Figura 6-19.
Nótese entonces que este biestable se ha constituido combinando dos biestables S-R Síncronos e
insertando un negador entre las entradas Ck. Teniendo en cuenta que S2 = Q1 y R2 = Q1 , el ESCLAVO
"copia" el estado del AMO, pero debido a la negación de CK lo hace cuando éste vale 0.
Representamos entonces en un esquema temporal el caso en el que se pretende que el biestable
A/E memorice un 1:

1
Ck 0 1 2
1
S (S 1 ) 0

1
Q1 0

1
Q (Q 2 ) 0

Figura 6-20.
En el esquema se observa entonces que con el frente positivo del impulso "2" (pasó del nivel 0 al
nivel 1) la salida del AMO Q1 el estado 1 y que recién con el frente negativo del mismo impulso (pasó del
nivel 1 al 0) la salida del esclavo Q2 también lo alcanza.
Por lo tanto concluímos que un biestable del tipo AMO-ESCLAVO memoriza el estado solicitado ( 1
ó 0 ) cuando la entrada de control pasa del valor 0 al 1, pero sólo cuando ésta vuelve al estado 0, el valor
alcanzado aparece en la salida.
Biestable D - AMO/ESCLAVO.
El biestable anterior es entonces un biestable SR Síncrono A/E. Podemos con la configuración A/E
disponer además de tres biestables muy prácticos:
-- Biestable D A/E
-- Biestable J-K
-- Biestable T
El biestable D A/E es una derivación directa del anterior en el que se sustituye el biestable AMO S-R
Síncrono por uno D.

6-6
ARQUITECTURA DE COMPUTADORAS - 6. SISTEMAS LOGICOS SECUENCIALES (ed.2004)

A m o (A ) E s c la v o (E )

D D Q1 S2 Q2 Q

C k1 C k2

Q1 R2 Q2 Q
Ck

Figura 6-21.
Y que en forma abreviada podemos representar:

D Q

Ck A /E

Figura 6-22.
Biestable J-K.
Recuérdese que ninguno de los biestables ya estudiados (S-R, S-R Síncrono, S-R A/E ) admite la
presencia del estado 1 en ambas entradas de información al mismo tiempo. En cambio, veremos que el
biestable J-K es un biestable del tipo A/E que permite que ambas entradas de información que se
denominan J y K puedan valer 1 al mismo tiempo.
A m o (A ) E s c la v o (E )
Pa1
J
S1 Q1 S2 Q2 Q

C k1 C k2

K
R1 Q1 R2 Q2 Q

Ck
P a0
Figura 6-23.

De este modo, para que el biestable AMO alcance el estado 1 se requiere:


* J = 1 , CK = 1 y que el biestable ESCLAVO se encuentre en estado cero (Q2 = 0 ).
Igualmente, para que el biestable AMO alcance el estado 0 se necesita:
* K = 1 , CK = 1 y que el biestable ESCLAVO se encuentre en el estado uno (Q2 = 1).
Finalmente, como en los biestables A/E ya vistos, el biestable ESCLAVO copiará el valor del AMO
cuando Ck regrese al estado cero, dado que con Ck = 0, se cierran las compuertas C1 y C2 , y se
habilitan las C3 y C4. Hasta aquí el comportamiento del biestable J-K es similar al del biestable S-R
Síncrono A/E. Pero véase qué ocurre si las entradas J y K se encuentran en el estado 1 al mismo tiempo:

1
Ck 0 1 2 3 4
1
J=K =1 0

1
Q1 0

1
Q (Q 2 ) 0 1 2

Figura 6-24.
Se observa en el esquema temporal que bajo la condición J = K = 1, el biestable J-K permite que se
obtenga un impulso de salida por cada dos impulsos que ingresan en la entrada CK. Por eso, este
comportamiento se denomina DIVISOR POR DOS.
Por ese motivo puede enunciarse además que, si mientras persiste la condición mencionada ingresa
un pulso en la entrada CK, la salida cambia de estado (véanse las flechas en el esquema temporal).
En efecto, obsérvese que con el pulso 1 en Ck, la salida Q pasa del estado cero al uno; con el
impulso 2 del uno al cero y así sucesivamente mientras dura la condición J = K = 1.
Se muestra a continuación el esquema de representación global del biestable J-K y su tabla de
verdad:

Pa 1
J Q
tn t n+1
J K Qn+1
Ck A/E 0 0 Qn (1)
0 1 0 (2)
K Q 1 0 1 (3)
1 1 (4)
Qn
Pa 0
Figura 6-25.

Siendo:
t n : el instante previo al momento en que CK pasa del estado 0 al 1.
t n+1: el instante posterior al momento en que CK pasa del estado 1 al 0.
Q n+1: el valor que posee la salida en el instante t n+1.
Qn : el valor que posee la salida en el instante tn.

6-7
ARQUITECTURA DE COMPUTADORAS - 6. SISTEMAS LOGICOS SECUENCIALES (ed.2004)

Biestable T (Toggle)
Si en el biestable J-K fijamos las entradas J y K permanentemente al estado 1 se tiene el esquema
siguiente:

1 J Q

Ck

K Q

Figura 6-26.
En este caso sólo se puede obtener el comportamiento DIVISOR POR DOS, con lo que la tabla de
verdad anterior se reduce a la siguiente:
tn t n+1
J K Qn+1
__
1 1 Qn
En ésta se aprecia el comportamiento ya enunciado que toda vez que aparece un impulso en la
entrada CK, la salida cambia de estado, es decir, conmuta.
El biestable de Conmutación T surge, entonces, de especializar el biestable J-K en su
comportamiento DIVISOR POR DOS, que se logra eliminándose las entradas J y K. En este biestable la
entrada CK toma el nombre particular T (abreviatura de la expresión inglesa Toggle).
La representación breve de este biestable es la siguiente:

Figura 6-27. Biestable de Conmutación T

Biestables activados por flancos.

Un biestable activado por flanco, ignora el valor de las entradas mientras el reloj esta en un nivel
constante (0 o 1) y sólo acepta el ingreso de éstas (se dispara) en el instante de transición de 0 a 1; flanco
ascendente; o de 1 a 0; flanco descendente; de esta forma este tipo de biestables nos aseguran que la
salida cambia una sola vez por ciclo de reloj.
Podríamos decir que los biestables del tipo amo-esclavo se disparan por flanco, ya que la salida
toma el valor correspondiente en el momento en que el reloj pasa de 1 a 0 (o viceversa si complementamos
la entrada de reloj), pero en realidad a este tipo de biestable se clasifica como activados por NIVEL, ya que
lo que se trasmite al esclavo es el valor que tomo el amo durante el período activo del reloj. La diferencia no
se notará en biestables del tipo S-R ó D, pero si en los J-K y consecuentemente también los T, porque en
los primeros (S-R, D) si el valor de las entradas varia durante el período activo del reloj las mismas serán
ignoradas y solo se tomará como valida la última, o sea el valor que tengan las variables de entrada en el
instante en que el reloj pasa de 1 a 0. Mientras que en un biestable del tipo J-K el amo depende de la salida
del esclavo para actualizarse, por lo tanto una vez que lo haya hecho no podrá ser modificado (aunque
desaparezcan los valores de entrada que lo generaron) hasta que no se actualice el esclavo (próximo ciclo
de reloj).
Existen variadas formas de construir un biestable que trabaje por flanco, una de ellas es el siguiente
ejemplo.

Ck
Ck’

Figura 6-28

Si observamos la figura 6-28 vemos que el circuito responde lógicamente a la identidad:


Ck • Ck = 0
Pero si lo analizamos físicamente el complemento tendrá un pequeño retardo correspondiente al
paso por un módulo lógico, por lo tanto cuando Ck este en cero tendremos a la entrada de la intersección 1 y
0. Al pasar Ck de cero a uno, llegará antes Ck a la intersección que su complemento y por un instante
tendremos 1 y 1 lo que hará valer a Ck’ uno.

Otra forma de diseño es la siguiente:

6-8
ARQUITECTURA DE COMPUTADORAS - 6. SISTEMAS LOGICOS SECUENCIALES (ed.2004)

Almacena D

R
Q

Ck
S Q

Circuito biestable
principal
D
Almacena D
Figura 6-29

En la figura 6-29 podemos visualizar un biestable del tipo D que se activa por flanco positivo, cuando
Ck=0, S y R son igual a cero y por lo tanto no se modifica la salida Q aunque cambie la entrada D, mientras
tanto los biestables de entrada registran el ultimo valor de D y su complemento. Cuando Ck pasa a valer 1
la lógica permite el paso del ultimo valor de D para actualizar el biestable principal e inhabilita nuevos
registros de valores de entrada.

Aplicaciones de los biestables.


Veremos a continuación las aplicaciones que más nos interesan de los biestables y que dividiremos
para su estudio en:
- Registros Acumuladores
- Registros de Desplazamiento
- Registros Contadores
Una cuarta aplicación (la construcción de memorias masivas), se verá, dada su complejidad, en una
unidad temática especialmente dedicada a la misma.
Registro Acumulador. (RA).
Hemos visto que un biestable puede "recordar" o "memorizar" un bit. Igualmente decimos que
puede "REGISTRAR" un bit. Un conjunto de biestables constituyen entonces un REGISTRO. Si la función
del registro es memorizar información, éste recibe el nombre de Registro Acumulador.
Por lo general, un conjunto de bits recibe el nombre de palabra. De aquí que la memorización de una
palabra se la denomina ESCRITURA y por contraposición, a la acción que se emprende para conocer el
contenido de un registro se denomina LECTURA.
La mayor parte de las operaciones en una computadora u otros procesadores digitales son
transferencias de palabras de un registro a otro.
No es muy exagerado decir que las manipulaciones de palabras conllevan una gran cantidad de
transferencias entre registros mezcladas con muy pocas operaciones lógicas y aritméticas. Por consiguiente
es de suma importancia lograr registros acumuladores que faciliten la transferencia de palabras.
Veremos cómo con biestables D y el agregado de compuertas de tres estados se organizan
interconexiones muy complejas con relativa facilidad.
Implementación de un RA con biestables D:
Con tal finalidad empleamos el biestable D con puesta a uno directa y puesta a cero directa.
Pa 1
D S Q

Ck

Q
R
Pa 0
Figura 6-30.

Con 4 biestables de este tipo construimos a continuación un Registro Acumulador de 4 bits:

Figura 6-31.
y cuya representación esquemática es la siguiente:

6-9
ARQUITECTURA DE COMPUTADORAS - 6. SISTEMAS LOGICOS SECUENCIALES (ed.2004)

Ck D3 D2 D1 D0

R
Q3 Q2 Q1 Q0

Figura 6-32.

Pero este esquema puede simplificarse aún más reduciéndose a:


4
Ck D

R
Q
4
Figura 6-33.
Este Registro Acumulador posee 4 entradas paralelas de datos, D0 a D3 y cuatro salidas, Q0 a Q3.
La escritura o memorización de palabra se efectúa en el momento en que Ck vale uno.
Esta orden de Transferencia o de Escritura que puede ser asincrónica o bien sincrónica depende de
un generador de pulsos.
La entrada R se denomina Puesta a Cero General o Borrado pués toda vez que vale uno provoca la
puesta a cero simultánea de todos los biestables que constituyen el registro.
Obsérvese que la escritura es destructiva pués una palabra que ingresa reemplaza a la anterior.
En estos ejemplos nos referiremos a registros de 4 bits, pero lo dicho para éstos, es válido para
registros de cualquier número de bits.
Transferencia entre Registros.
Entre dos Registros:
4
D
C1 R1
Q
4
D R1 R2
C2 R2 C2
Q
4
Figura 6-34.
El ejemplo muestra el caso en el que la salida de R1 constituye la entrada a R2 . En este caso,
toda vez que C2 autoriza, R2 "copia" el contenido de R1.
De dos Registros a un tercero.
Obsérvese el siguiente esquema simplificado:
C1 C2
R1 R2

C3
R3

Figura 6-35.
Dado que los registros poseen una sola entrada por dato, para resolver este caso se necesita
agregar un sistema de selección en la entrada del registro receptor R3 .

Figura 6-36.
En este ejemplo lo que se ha agregado es un multiplexor de 2 canales de 4 datos cada uno con una
variable de selección S, la que estando en uno permite conectar la salida R1 con la entrada de R3 y
estando en cero permite conectar R2 con R3.
Simplificando la representación tenemos:

6-10
ARQUITECTURA DE COMPUTADORAS - 6. SISTEMAS LOGICOS SECUENCIALES (ed.2004)

4 4
C1 C2
R1 R2
4 4

1
S M u ltip . d e 2 c a n a l.
4
C3
R3
4
Figura 6-37.
Entre 3 Registros donde la información de uno cualquiera puede ser transferida a cualquiera de los
restantes.

Figura 6-38.
Del ejemplo anterior se podrá observar la complejidad creciente del multiplexor con el número de
registros ( con 3 registros se requiere un Multiplexor de 2 canales, para 4 registros se requiere un Multiplexor
de 3 canales, etc.).
Pero el sistema si bien es complejo, permite la transferencia simultánea entre varios canales. Por
ejemplo con C1 =1, C2 =1, S1 =0 y S2 =0, se copia el contenido de R3 en R1 y R2 .
Barra de Información (Tercer Estado).
La transferencia simultánea en muchos casos no es necesaria y en otros puede reemplazarse por
una transferencia secuenciada, con lo que disminuye la complejidad del circuito. Para esto se deben
conectar las Salidas de los Registros a una "Barra de Información" (BUS):

R1 Q R2 Q R3 Q
4 4 4
4
Figura 6-39.
y a su vez la barra debe conectarse a las entradas de todos los registros:
4
4 4 4
D D D
R1 Q R2 Q R3 Q
4 4 4
4
Figura 6-40.
La conexión directa de las salidas de los registros entre sí, sólo es posible con la tecnología actual si
se emplean Compuertas de salida de Tres Estados.
Estas compuertas (sean del tipo Inversor, NO-O, NO-Y, etc.) poseen además de las entradas
clásicas de variables, una entrada denominada de "Habilitación de Salida" y cuya función es, si está activa,
la de "conectar" la salida.
Con el agregado de esta entrada nos encontramos frente a compuertas especiales que presentan
tres estados posibles:
Estado 0 Lógico
Estado 1 Lógico
Estado "Desconectado" (D)
Así, para la compuerta Inversora de tres estados que se representa de la manera siguiente:
E Hs S
E S
0 1 1
1 1 0
Hs
Figura 6-41. X 0 D (X = 0 ó 1)

El estado desconectado lo podemos imaginar como un corte en el terminal de salida toda vez que la
entrada Hs (Habilitación de salida) está inactiva (Hs = 0)

E S=D

Hs=0
Figura 6-42.
Si "la compuerta se encuentra aislada", el estado X de la entrada E, implica "indiferente". Es decir, la
salida S se muestra indiferente al estado de entrada en el caso que Hs = 0.
He aquí a título de ejemplo la representación de una compuerta NO INVERSORA de tres estados:

6-11
ARQUITECTURA DE COMPUTADORAS
Ingeniería en Sistemas de Información
Universidad Tecnológica Nacional
Facultad Regional Santa Fe

E S E Hs S
0 1 0
Hs 1 1 1
X 0 D
Figura 6-43.

y la de una compuerta NO-Y de tres estados


E1 E2 Hs S
E1 0 0 1 1
S 0 1 1 1
E2 1 0 1 1
1 1 1 0
Hs X X 0 D
Figura 6-44.
Los registros cuyas salidas deben conectarse a una barra de Información deben poseer el "Tercer
Estado" representándose los mismos de la manera siguiente:
4

C D3 D2 D1 D0 C D
Hs Q3 Q2 Q1 Q0 Hs Q

4
Figura 6-45.
Obsérvese la presencia del triángulo que indica TRES ESTADOS.
El siguiente esquema muestra la conexión de tres registros de este tipo a una barra de Información:

Figura 6-46.
Con este sistema si, por ejemplo, se desea "copiar el contenido de R2 en R1 " se debe conectar la
salida de R2 a la barra ( Hs2 = 1 ), mantener desconectados R1 y R3 (Hs1 = Hs3 = 0 ) y habilitar las entradas
de R1 haciendo C1 = 1. Simplificando la representación:
4
4 D 4 D 4 D
C1 C2 C3
Hs 1 R1 Hs 2 R2 Hs 3 R 3

4 4 Q 4 Q 4 Q
D
Figura 6-47.
Habilitación de entradas.
A las básculas D que componen los registros se les agrega una habilitación de entradas He que,
cuando está en cero, impide que el pulso C (que por lo general proviene del Generador de Pulsos) provoque
el ingreso del dato.
Agregando entonces la Habilitación de Entradas a cada uno de los registros y uniendo las entradas
C, el esquema anterior se convierte en el siguiente:
4
C
He1 4 He2 4 He3 4

Hs 1 R1 Hs 2 R2 Hs 3 R 3

4 4 4 4
D
Figura 6-48.
Ahora si se quiere copiar R2 en R1 se debe conectar la salida de R2 con la barra (haciendo Hs2 = 1)
y al mismo tiempo autorizar el ingreso a R1 (haciendo He1 = 1 ).
Con este estado la presencia del pulso C provoca la transferencia.
Conexión Salida de los Registros a Varias Barras.
Si un registro debe conectarse a más de una barra, la solución más conveniente es emplear
compuertas de tres estados exteriores al registro. Véase el ejemplo siguiente de un registro cuyas salidas
deben conectarse a 2 barras denominadas B1 y B2 :
ARQUITECTURA DE COMPUTADORAS - 6. SISTEMAS LOGICOS SECUENCIALES (ed.2004)

C D
R
Q
n

Hs 1 (*) Hs 2 (*)
B1 n B2 n
(*) La compuerta representa n compuertas
Figura 6-49.
En el ejemplo el registro no posee salidas de 3 estados administrándose la información que llega a
las barras mediante puertas no inversoras de tres estados exteriores al mismo.
Transferencia de Información entre Barras.
Otra aplicación que ofrece la tecnología de tres estados se puede observar a continuación:

Figura 6-50.
Habilitando las compuertas [1] se transmite información desde B1 a B2 y desde B2 a B1 cuando se habilitan
las compuertas [2].

Registros de desplazamiento.
Estos registros están constituidos por biestables que se conectan entre sí de modo tal que cuando
se aplica una señal de sincronismo, que por lo general se denomina orden de desplazamiento, el estado de
cada uno debe transferirse al siguiente.
Dicho de otro modo, cada biestable "copia" el estado del que le precede. Por lo tanto, los biestables
que constituyen estos registros deben ser del tipo AMO-ESCLAVO para permitir que durante la aplicación de
una orden de desplazamiento cada uno de ellos pueda recibir el estado del que le antecede y entregar su
estado al que le sucede.
Primer Ejemplo: Registro de desplazamiento con entrada y salida serie.
Supongamos que deseemos construir registros de desplazamiento de 4 bits en los que la
información ingresa y egresa en forma seriada.
Elegimos biestables del tipo D AMO-ESCLAVO, con puesta a cero directa.
Se representa a continuación el esquema del registro propuesto:

Figura 6-51.
Ck = Orden de Desplazamiento R = Puesta a cero General
El mismo posee una puesta a cero general R para permitir la fijación de un estado inicial cero para
todos los biestables; una entrada serie Es de datos y una salida serie Ss de datos.
El esquema temporal siguiente muestra la carga seriada de los bits b0=1 , b1=1, b2=0 y b3 = 1 en
sincronismo con la orden de desplazamiento

1
Ck 0 1 2 3 4 5
1
Es 0 b0 b1 b2 b3 (*)
1
Q 3 0 b0 b 3= 1
1
Q 2 0 b0 b 2= 0
1
Q 1 0 b0 b 1= 1
1
Q 0 0 b 0= 1

Figura 6-52.
En la columna (*) del esquema temporal se aprecia que luego del cuarto pulso T la carga ha sido
completada es decir Q0 = b0, Q1 = b1, Q2 = b2 y Q3 = b3 .
Si no se desea que haya un nuevo desplazamiento con el que se provoque la salida del primer bit
que ingresó y la entrada de uno nuevo, la orden de desplazamiento debe ser detenida.
Se presenta a continuación un esquema de bloque del registro estudiado:
1 1
Es Q 3 Q 0 Ss
1
T
1
R
Figura 6-53.
Segundo Ejemplo: Registro de Desplazamiento con Entrada y Salida Serie y Habilitación de Entrada. Para la
realización de este registro usaremos biestables J-K A/E.

6-13
ARQUITECTURA DE COMPUTADORAS - 6. SISTEMAS LOGICOS SECUENCIALES (ed.2004)

Figura 6-54.
Este registro posee una señal de habilitación He que cuando vale 1 habilita la entrada Es y conecta
los biestables. Siendo ésta la única diferencia funcional con relación al primer ejemplo. La representación
esquemática es la siguiente:
1
He
1 1
Es Q3 Q0 Ss
1
T
1
R
Figura 6-55.
Registro de desplazamiento con entrada y salida serie.
Tercer Ejemplo: Registro de Desplazamiento Entrada y Salida paralela
Muy frecuentemente las aplicaciones de los registros de desplazamiento requieren que posean
entrada paralela y/o salida paralela de datos.
Veremos a continuación un ejemplo de cómo podemos construir un registro de desplazamiento que
posea además de la entrada y la salida en serie, entradas y salidas paralelas:

Figura 6-56.
Para su realización hemos empleado biestables del tipo D A/E con entradas directas de puesta a
uno (S) y puesta a cero (R).
Las compuertas intersección permiten el ingreso de los 4 bits del dato toda vez que la señal de
habilitación He vale 1.
Al registro visto podemos representarlo esquemáticamente de la siguiente manera:
4
1
He
1 D 1
Es Ss
1
T Q
4

Figura 6-57.
Con este registro pueden realizarse aplicaciones básicas tales como:
- Entradas serie / salida paralelo
- Entradas paralela / salida serie
- Rotación de un dato por conexión de Ss con Es
Cuarto Ejemplo: Registro de Desplazamiento reversible
En los ejemplos examinados, la información se desplaza en el registro sólo en un sentido. En los
casos considerados el sentido adoptado ha sido de izquierda a derecha. Existen aplicaciones para las
cuales conviene que en el registro pueda desplazarse la información en ambos sentidos. En este caso al
registro se lo denomina de desplazamiento reversible.
Supongamos que deseamos diseñar un registro de este tipo, partiendo del registro de
desplazamiento visto en el ejemplo primero. Al mismo, debemos agregar las conexiones que permitan un
desplazamiento de derecha a izquierda y las compuertas que autoricen el funcionamiento reversible.
En el esquema siguiente se presentan las conexiones que permiten el desplazamiento de derecha a
izquierda:

Figura 6-58.
Comparando este esquema con el del registro del primer ejemplo, se deduce que para lograr el
registro reversible es necesario agregar compuertas intersección controladas por una señal que podemos
denominar SENTIDO. Convengamos para la misma:
S = 1 para IZQ -----> DER

6-14
ARQUITECTURA DE COMPUTADORAS - 6. SISTEMAS LOGICOS SECUENCIALES (ed.2004)

S = 0 para DER -----> IZQ


Denominemos además:
* Ssd y Esd a la salida y entrada serie para desplazamiento de derecha a izquierda.
* Ssi y Esi a la salida y entrada serie para desplazamiento de izquierda a derecha.
Agregando las compuertas de selección de sentido se obtiene:

Figura 6-59.
Finalmente el esquema anterior puede representarse sintéticamente de la siguiente manera:
S 1

E sd Ss
1 1

S si S sd
1 1

1 1
T R
Figura 6-60.
Registros Contadores.
La tercer aplicación que nos interesa de los biestables es la de conformar con ellos REGISTROS
CONTADORES, es decir, elementos capaces de contar eventos.
Con esta formalidad los biestables deben organizarse de forma tal que el registro resultante
progrese de estado en estado, en respuesta a un impulso o evento.
Se denomina MODULO del contador al número de estados que éste atraviesa antes de volver al
estado inicial.
Como con un biestable -tal como su nombre lo indica- se puede memorizar dos estados; con "n"
n
biestables se puede disponer de 2 estados. Si se utilizan todos los estados disponibles el MODULO
n
MÁXIMO resulta ser 2 .
Primer Ejemplo: Contador de Anillo.
Consideremos el esquema siguiente constituido por biestables D A/E:

Figura 6-61.
El mismo posee dos entradas. La entrada I permite fijar un estado inicial: 1 para Q0 y cero para los
demás biestables.
En la entrada T ingresan los pulsos a contar. Dado que hemos colocado una lámpara testigo en la
salida Q de cada biestable podemos con las mismas observar el estado del contador.
Si se fija el estado inicial mediante un pulso I, se observará que con el primer pulso "T", la lámpara
"0" se apagará, encendiéndose la lámpara "1". Con el segundo se apagará la "1" y se encenderá la "2". Con
el tercero se apagará la "2" y se encenderá la "3". Hasta aquí, podemos decir que el contador que nos
ocupa permite contar tres eventos, dado que un cuarto impulso ocasiona su regreso al valor inicial "0".
El esquema siguiente representa su comportamiento temporal:

1
T 0 1 2 3 4
1
Q 0 0

1
Q 1 0

1
Q 2 0

1
Q 3 0

Figura 6-62.
Siendo éste un contador MODULO 4, la cantidad máxima que puede contar es 3.
El contador de anillo no aprovecha la máxima capacidad de los biestables. En efecto con cuatro
4
biestables el número total de estados es 2 = 16, aprovechándose de ellos con el montaje estudiado sólo
cuatro.

Segundo Ejemplo: Contador Johnson.


El montaje de éste es similar al anterior, salvo que:
1. El estado inicial provoca la puesta a cero de todos los biestables.

6-15
ARQUITECTURA DE COMPUTADORAS - 6. SISTEMAS LOGICOS SECUENCIALES (ed.2004)

2. La unión del biestable 3 con el biestable 0 se hace entre D3 y Q0

Figura 6-63.
La tabla siguiente muestra el estado que adopta el sistema de biestables y las expresiones lógicas
que se requieren para descodificar cada posición:
dec. Q3 Q2 Q1 Q0 rango
0 0 0 0 0 Q3 Q0
1 1 0 0 0 Q3 Q2
2 1 1 0 0 Q2 Q1
3 1 1 1 0 Q1 Q0
4 1 1 1 1 Q3 Q0
5 0 1 1 1 Q3 Q2
6 0 0 1 1 Q2 Q1
7 0 0 0 1 Q1 Q0
0 0 0 0 0 Q3 Q0 Tabla 6-1.

n
Tercer Ejemplo: Contador Síncrono de módulo máximo 2 .
En los ejemplos anteriores los contadores se constituyen mediante registros de desplazamiento en
los que los biestables no son empleados en forma económica. En efecto, como ya vimos el contador de
anillo es un contador de módulo n. El contador Jonhson, si bien es más eficiente, dado que su módulo es
2.n, requiere un decodificador.
Veremos ahora un contador síncrono - como los dos anteriores - pero con eficiencia máxima pues
su módulo es 2n.
El mismo permite contar en binario puro y su diseño se basa en el uso de biestables J-K AMO-
ESCLAVO con las entradas J y K unidas.
4
Ejemplifiquemos mediante el empleo de 4 biestables, por lo que el módulo resulta 2 = 16, es decir
que partiendo del estado cero se puede llegar a contar hasta 15 eventos.
Para comprender entonces el diseño de este contador repasemos primero la tabla siguiente:
Q3 Q2 Q1 Q0
3 2 1 0
2 (8) 2 (4) 2 (2) 2 (1) dec.
0 0 0 0 0
0 0 0 1 1
0 0 1 0 2
0 0 1 1 3
0 1 0 0 4
0 1 0 1 5
0 1 1 0 6
0 1 1 1 7
1 0 0 0 8
1 0 0 1 9
1 0 1 0 10
1 0 1 1 11
1 1 0 0 12
1 1 0 1 13
1 1 1 0 14
1 1 1 1 15 Tabla 6-2.
Como ya hemos visto, la misma, representa en forma ordenada los primeros 16 números binarios.
Observamos en la tabla que:
0
1 - En las columnas de menor significación, es decir la correspondiente al peso 2 , el bit cambia de
valor con cada cuenta.
1
2 - En la columna siguiente, la del peso 2 el bit cambia de valor en la cuenta que sigue a aquella en
0
la que el bit del peso 2 alcanza el valor 1.
2
3 - En la columna del peso 2 el bit cambia de valor en la cuenta que sigue a aquella en la que los bits
de las dos columnas de menor significación alcanzan simultáneamente el valor 1.
3
4 - En las columnas de peso 2 ocurre lo mismo pero con las tres columnas de menor significación.
Concluímos que el bit de una columna determinado cambia de valor en la cuenta que sigue a
aquella en la que los bits de las columnas de menor significación alcanzan simultáneamente el valor 1.
n
Teniendo en cuenta lo dicho surge el siguiente diseño del contador síncrono modulo 2 :

6-16
ARQUITECTURA DE COMPUTADORAS - 6. SISTEMAS LOGICOS SECUENCIALES (ed.2004)

Figura 6-64.
Cada biestable J-K-A/E representa al estado de una columna. Se puede corroborar fácilmente que
para que cada uno de ellos cambie de estado, los que le preceden deben encontrarse en el estado 1. La
compuerta C1, si bien no es necesaria, se la emplea para poder generalizar y normalizar el diseño.
Se presenta a continuación un gráfico temporal en el que se puede observar las conmutaciones de
los biestables para los primeros 8 impulsos o eventos.

1
T 0 1 2 3 4 5 6 7 8
1
Q0 0

1
Q1 0

1
Q2 0

1
Q3 0

Figura 6-65.
ESTRUCTURA DE LOS SISTEMAS DIGITALES.
El reloj en los sistemas digitales.
En la figura 6-66 se representa un esquema genérico de un sistema digital arbitrario, constituido por
bloques con circuitería combinacional y secuencial. Un bloque adicional -el reloj-, genera una serie de
pulsos que permiten regular la actividad del sistema. Entre dos pulsos de reloj, los biestables se mantienen
inalterados; entonces, las salidas del sistema (S) resultan funciones de las entradas (E) y de los estados de
los biestables (x), es decir: S = S (E, x). Además de generar las salidas S, el circuito combinacional también
genera nuevas entradas para controlar los biestables (xe); pero los estados x solo podrán cambiar cuando
arriben al sistema las señales de reloj (ck). De este modo, las modificaciones de los estados de los
biestables y de las salidas del sistema digital ocurrirán siempre en concordancia (sincronismo) con los
pulsos del reloj.

Entradas Salidas
E Circuito S
Combinacional

x xe
Circuito
Secuencial
ck (biestables)
Reloj

Figura 6-66: Esquema genérico de un sistema digital


Características de la onda de reloj.
Desde el punto de vista constructivo, el reloj es un circuito electrónico constituido básicamente por
dos módulos: un oscilador de frecuencia muy estable, y un circuito conformador de la onda de salida
deseada (usualmente, una serie de pulsos rectangulares y equiespaciados en el tiempo). En la figura 6-67
se representan sólo 5 pulsos correspondientes a una salida típica de reloj (ck) en función del tiempo (t). En
cada pulso se identifican dos flancos (uno ascendente y otro descendente), que evolucionan entre los dos
estados lógicos posibles adoptados por Ck (0 y 1). Se denomina periodo (T) del reloj al tiempo que
transcurre entre la aparición de dos flancos ascendentes consecutivos. Dada la regularidad de la onda Ck, la
frecuencia del reloj es la inversa del período, es decir f = 1/T.

NOTA: en ondas periódicas de periodo T, suele establecerse la siguiente equivalencia angular:


1 T ≡ 360° ≡ 2 π rad.
-6
Otras unidades: 1 µs (microsegundo) = 10 s
-9
1 ns (nanosegundo) = 10 s
-1
1 Hz (Hertz) = 1 s
6
1 Mhz (Megahertz) = 10 Hz.

6-17
ARQUITECTURA DE COMPUTADORAS - 6. SISTEMAS LOGICOS SECUENCIALES (ed.2004)

-7
Ejemplo: Si T = 0,1 µs = 10 s; entonces f = 1/T = 10 Mhz. Esto significa que hay 10 millones de pulsos en
transcurso de 1 segundo.
Ck

T
flanco ascend.
1
0
t[s]
flanco descend.
Figura 6-67: Características de la onda de reloj.
En los circuitos sincrónicos, los pulsos del reloj determinan los instantes en que pueden producirse
cambios en los estados lógicos de los biestables. En tales circuitos, dichos cambios ocurrirán siempre en
concordancia con uno de los flancos de los pulsos (por ej., con el flanco ascendente si el biestable "dispara"
por flanco ascendente).
Clasificación de los sistemas digitales.
Sistemas digitales de fase simple y de fase múltiple.
En un sistema digital (SD), el reloj permite sincronizar el funcionamiento de los biestables. Sin
embargo, no necesariamente todos los biestables del sistema deben estar sincronizados con la misma señal
de reloj. En la figura 6-68 se representan dos SDs diferentes. La 6-68a esquematiza un SD de fase simple,
en el cual todas las modificaciones de los estados lógicos de los biestables se producirán en concordancia
con la única señal de reloj C0. En la figura 6-68b, se muestra un SD de fase multiple, donde se utilizan 3
señales de reloj diferentes: C0, C1, C2. En este último caso, es importante notar que las 3 señales tienen la
misma frecuencia; pero difieren en sus fases de manera que, en cada instante de tiempo, sólo una de las
señales tiene estado lógico igual a 1. El SD contará con 3 conjuntos de biestables que podrán modificar sus
estados en concordancia con alguna de las 3 señales de reloj.

a) SD fase simple b) SD fase multiple


Figura 6-68: Sistemas digitales de fase simple y fase multiple.
Sistemas digitales sincrónicos y asincronicos.
En la Figura 6-69 se representa un SD sincrónico de fase simple, compuesto por dos subsistemas
sincrónicos. Alternativamente, dicha figura puede representar a un sistema sincrónico que forme parte de
un sistema asincrónico mas grande. Ambos subsistemas sincrónicos están regulados por la misma señal de
reloj C0; y, entonces, todos los biestables del sistema deben cambiar sus estados lógicos en el mismo
instante de tiempo. Del punto de vista del diseño de ambos subsistemas, las entradas de cualquier
biestable del subsistema A pueden ser funciones de las salidas de cualquier puerta lógica o biestable del
subsistema A y/o B. Análogamente, las entradas de cualquier biestable del subsistema B pueden se
funciones de las salidas de cualquier puerta lógica o biestable del subsistema A y/o B. Es decir, los dos
subsistemas sincrónicos forman un sistema sincrónico global; y en todo sistema sincrónico "todo elemento
puede mirar a cualquier otro".

Subsistema
Sincrónico
A
C0
Reloj

Subsistema
Sincrónico
B
Figura 6-69: Sistema digital sincrónico de fase simple

Subsistema Subsistema
Asincrónico Asincrónico
A A
C0 C0
Reloj Reloj

Subsistema Subsistema
Asincrónico Sincrónico
B B

a) ambos subsistemas asincrónicos b) un subsistema asincrónico y otro sincrónico

6-18
ARQUITECTURA DE COMPUTADORAS - 6. SISTEMAS LOGICOS SECUENCIALES (ed.2004)

Figura 6-70: Sistemas digitales asincrónicos de fase simple.

En la figura 6-70 se representan dos Sds asincrónicos de fase simple. En la 6-70.a) se considera
que el sistema asincrónico global está compuesto por dos subsistemas asincrónicos. En tal caso, ninguno
de los subsistemas puede utilizar como entradas las salidas de los biestables y/o de las puertas lógicas del
otro subsistema. Si así se hiciera, se correría el riesgo de recibir un cambio en la señal de entrada a los
biestables anticipado a la transición de las entrada de reloj, lo que podria conducir a un estado ambiguo de la
salida. En la 6.70.b) se muestra un sitema asincrónico compuesto por un subsistema asincrónico y otro
sincrónico. En este caso, el sistema global puede funcionar en forma eficaz aún cuando el subsistema
sincrónico reciba información de cualquier parte del sistema, incluso de subsistema asincrónico.
Veamos ahora algunos ejemplos de SDs de fase múltiple. Un caso particular de un SD de dos fases
es el de los biestables amo-esclavo, donde el biestable esclavo "mira" al amo y "dispara" por flanco
descendente de la señal de reloj. A su vez, en algunos biestables (como el J-K), la entrada al biestable amo
depende de la salida del esclavo; y el "disparo" del amo se produce por flanco ascendente de la señal del
reloj.

C0 Subsistema
Asincrónico
C1 A
C0
Reloj
C1
Subsistema
Asincrónico
B

Figura 6-71: Interconexión de dos sistemas digitales asincrónicos mediante dos fases de reloj.

Otro ejemplo de Sds de dos fases se esquematiza en la Figura 6-71, donde se muestra una forma
de interconectar dos subsistemas asincrónicos. Por ejemplo, el subsistema A podría incluir circuitería
asincrónica y entregar datos al subsistema B. Cuando B recibe datos de A, opera por si mismo, y luego
realimenta los resultados a A. La transferencia bilateral de datos requerida entre los dos subsistemas
asincrónicos puede realizarse mediante el uso de dos fases de reloj. Entonces, cuando A "mira" a B (en la
transición C0), B se mantiene inalterado; y cuando B "mira" a A (en la transición C1), A se mantiene
inalterado.

Máxima velocidad de operación de los sistemas digitales.


Maxima velocidad del reloj para un circuito sincrónico.
En esta sección estudiaremos cómo determinar la velocidad máxima a la que puede operar el reloj,
para que un circuito sincrónico dado opere confiablemente. La limitación en la velocidad del reloj se debe a
los retardos de propagación soportado por las señales en su paso por las compuertas lógicas y los
biestables que conforman el circuito; y por el tiempo de "setup" de los biestables (es decir, el tiempo de
tolerancia posterior al cambio de una de sus entradas, y anterior a la transición del reloj).
En la figura 6-72 se muestra un bloque de un circuito sincrónico genérico conformado por dos
biestables y un bloque combinacional con n niveles de puertas lógicas. A partir de lo indicado en la figura, es
posible estimar el período mínimo de reloj (Tmin) y, entonces, calcular la frecuencia máxima (fmax) a la que
puede operar el reloj. Los cálculos se efectúan a partir de las siguientes relaciones:

Tmin = Máximo retardo de propagación en el biestable +


+ n x Máximo retardo de propagación en las puertas lógicas +
+ Tiempo de "setup" del biestable

1
fmax = 
Tmin

K-esima K+1-esima
transición Salida del Entrada al transición
del reloj biestable biestable del reloj

Máximo retardo Máximo retardo Tiempo de "setup


en el biestable de puerta x n del biestable

S Q n niveles de S Q
puertas lógicas

R R
Ck

Figura 6-72: Estimación de Tmin para el cálculo de la máxima velocidad de reloj en un


circuito sincrónico.
Máxima velocidad del reloj para un sistema digital.
Analicemos el caso de SD de fase simple que incluye subsistemas asincrónicos y subsistemas sincrónicos.
La máxima frecuencia de reloj se determina de una forma muy similar a la utilizada para elcaso de un

6-19
ARQUITECTURA DE COMPUTADORAS - 6. SISTEMAS LOGICOS SECUENCIALES (ed.2004)

circuito sincrónico, pero ahora se deberá tener en cuenta el efecto del "rippling" de los biestables
involucrados.
En la figura 6-73 se muestra su SD cuyo biestable de salida (B4) recibirá una "puesta a 1" cuando
el contador asincrónico de 3 bits pase de 7 a 0 (es decir, del estado 111 al 000). Para ello, en el mismo
pulso de reloj, los 3 biestables deben cambiar de estado lógico, las señal propagarse por dos niveles de
compuertas y producirse el setup de B4.
Para el cálculo de Tmin, resulta apropiado definir el nivel de "rippling" (r) del subsistema asincrónico,
que está relacionado sólo con los biestables asincrónicos "vistos" por las compuertas. El valor de r se
calcula como el número de retardos de propagación en los biestables que deben ocurrir para que quede
precisamente determinada la entrada a las compuertas. Por ejemplo, en la Figura 6-73, r=3.

B1 B2 B3 B4

1 T Q 1 T Q 1 T Q S Q
Ck Ck Ck
Q Q Q 0 R Q

Ck
Figura 6-73: Ejemplo del efecto de la circuitería asincrónica en el cálculo de la
máxima velocidad de reloj.
En definitiva, el valor de Tmin en un circuito digital se calcula como:
Tmin = r x Máximo retardo de propagación en el biestable +
+ n x Máximo retardo de propagación en las puertas logicas +
+ Tiempo de "setup" del biestable

6-20
ARQUITECTURA DE COMPUTADORAS
Ingeniería en Sistemas de Información
Universidad Tecnológica Nacional
Facultad Regional Santa Fe

7. MEMORIAS
(edición 2004)

En la unidad temática anterior hemos estudiado los Registros Acumuladores (R.A.) entre las
diversas aplicaciones de los biestables.
Dijimos que los R.A. tienen la función de memorizar un conjunto de bits y recordemos que al
conjunto de bits memorizados en un R.A. se lo denomina PALABRA.
En esta unidad temática estudiaremos los dispositivos que tienen la función de memorizar Conjun-
tos de Palabras y que llevan el nombre genérico de MEMORIAS.
En realidad hoy en día la estructura de Memoria de una computadora abarca todo tipo de dispositivo
de almacenamiento, dado que el sistema operativo dinámicamente administra la misma moviendo
constantemente la información mas utilizada a soportes de acceso rápido (normalmente más costosos y por
lo tanto reducidos) y la menos utilizada a los más lentos (más económicos y por lo tanto voluminosos).
Podemos graficar esta jerarquía de las memorias en función del tamaño, costo, rendimiento, como
una pirámide:

Rápida y cara

Mayor rendimiento
Registros Mayor costo

Cache

Memoria principal

Memoria discos

Almacenamiento fuera de línea (cintas)

Lenta pero barata


Figura 7-1

Definiciones:
Mínima unidad de memoria: Se denomina bit abreviatura de binary digit y soporta un dígito binario.
Mínima unidad direccionable: Son grupos de BITs accesibles simultáneamente, también llamadas posiciones
de memoria, que de acuerdo a la cantidad de bits adoptan los nombres: 4 bits, NIBBLE (cuarteto), 8
bits, BYTE (octeto). Otros agrupamientos no tienen nombres particulares. Dados los códigos actualmente
usados que ocupan 8 dígitos para representar un carácter, el Byte es la medida mas comúnmente usada.
Palabra: Puede ser de uno o más bytes, su tamaño esta relacionado con el del bus o canal de datos de
entrada/salida y/o la capacidad de los registros.
Direccionamiento: Se denomina así a la SELECCIÓN de una determinada posición de la memoria para
introducir (Escribir) información en ella o leer lo que contenga.
Capacidad: Si llamamos "m" a la capacidad de la memoria (en bytes), para optimizar la capacidad de
selección se hace que "m" sea una potencia de 2. Si "n" es el número de variables binarias necesarias para
n
seleccionar o direccionar "m" palabras resulta: m = 2
4
Así: Sí n = 4 entonces m = 2 = 16 bytes
10
Sí n = 10 entonces m = 2 = 1024 bytes = 1 Kb
Al valor 1024 por similitud con el sistema decimal se denomina K (Kilo), por ser el valor más
próximo a 1000. De aquí surge el Kbyte (Kb) y para mayores capacidades se mide en múltiplos de Kbyte,
entonces:
2 Kb 2048 bytes, siendo n = 11
16 Kb 16384 bytes, siendo n = 14
Además:
1000 Kb = 1048576 bytes = 1 Mb (Megabyte), siendo n = 20
1000 Mb = 1 Gb (gigabytes), siendo n = 30

Un primer ejemplo Introductorio.


Supongamos que deseamos construir con biestables una unidad de memoria que posee una
capacidad de almacenamiento de ocho palabras de cuatro bits cada una.
Su diseño lógico deberá responder al siguiente esquema de bloque:
ARQUITECTURA DE COMPUTADORAS - 7 MEMORIAS (ed. 2004)

Entrada de
información

E3 E2 E1 E0 habilit. unidad
Dirección D0 H de memoria
de la D1 8 palabras
palabra D2 de 4 bits E/L Selección
Esc. o Lect.
S3 S2 S1 S0

Salida de
información
Figura 7-2.
Hemos dicho que nuestra U. de M. posee 8 palabras de cuatro bits. La misma consta entonces
de 8 Registros Acumuladores, teniendo cada uno de ellos 4 biestables.
Si se desea escribir una información es decir, memorizar 4 bits en uno de los ocho registros
Acumuladores disponibles se debe proceder como sigue:
1.- Presentar la Información a memorizar en las 4 entradas E3 , E2, E1 y E0
2.- Presentar en las líneas de Dirección D2 , D1 y D0 el código binario que determina en cuál de los
8 Registros debe ingresar la Información.
3.- Emplazar un 0 a la señal de selección de la operación a realizar ESCRITURA / LECTURA
4.- Habilitar esta U. de M. mediante un 1 en la entrada "H".

Figura 7-3.
En caso que se desee Leer la Información almacenada en uno de los ocho registros se debe
proceder a:
1.- Presentar en las líneas de Dirección D2, D1 y D0 el código binario que determina en cual es el
registro que se desea Leer.
2.- Emplazar un 1 la señal de selección de la operación a realizar ESCRITURA / LECTURA
3.- Habilitar esta U. de M. mediante un 1 en la entrada "H".
Un esquema lógico que responde a las especificaciones descriptas se muestra en la Figura 7-3 .
Obsérvese la presencia del decodificador que convierte los bits D2, D1 y D0 denominados bits de
Dirección o simplemente Dirección en un nivel 1 sólo para R0 o R1 .... R7 , obsérvese además que la
Unidad de Memoria así direccionada sólo está habilitada por la señal "H".
Sin la presencia de esta señal la U. de M. se encuentra aislada en sus líneas de entrada y salida y
no es posible mientras dure esa condición (H = 0) escribir o leer cualquiera de sus registros.
Esta unidad de memoria, que mediante su descripción nos hemos introducido en este tema,
se denomina Memoria de Acceso Aleatorio de Escritura/Lectura no simultánea.
Es de acceso aleatorio por cuanto el tiempo que se requiere para acceder a cualquiera de sus
registros es el mismo.
Es de Escritura/Lectura no simultánea pues durante un acceso, un solo registro puede ser leído o
escrito.

Memorias de Acceso Aleatorio - M.A.A. (RAM, Random Access Memory)

7-2
ARQUITECTURA DE COMPUTADORAS - 7 MEMORIAS (ed. 2004)

Son aquellas en las que el tiempo de acceso tanto en operación de lectura como de escritura es
el mismo cualquiera sea la posición de la memoria a la que se desee acceder.

n2 n1
M.A.A. Entrada inf.
selec. E / L Salida inf.
n1
Habilitación de la
Unidad de Memoria
Figura 7-4.
Del esquema anterior:
n1 : Bits de información por posición que se desea leer o escribir simultáneamente.
n2 : Bits de dirección que permiten seleccionar la posición de n1 bits que se desean leer o escribir simultá-
neamente.
Selección de E/L: Señal lógica que indica a la M.A.A. si se desea ESCRIBIR O LEER.
Habilitación de E/L : Señal lógica que según su estado autoriza o no la operación de escritura o lectura.
Entrada y Salida de información: Del esquema general se observa la presencia de una barra para
ENTRADA y de una barra para SALIDA de la información.

Alternativas para la organización de la decodificación de la dirección.

Figura 7-5.
Hemos visto que la selección de una palabra se realiza mediante n bits de dirección que son las
variables de entrada a un decodificador.
Éste, ya sabemos, es un sistema combinacional, que tiene un Nº de salidas igual al de combi-
naciones posibles de las variables de entrada, activando para cada combinación de las variables de
entrada una y sólo una de las variables de salida.
La organización más simple del sistema de direccionamiento se aprecia en el esquema siguiente,
organización esta que se denomina "Organización lineal o por palabra"
Su inconveniente: el número de conexiones de direccionamiento crece linealmente con el número de
n
posiciones. Así para 12 bits de direcciones, n2= 12 y entonces: 2 2 = 4096 conexiones.
Una organización más compleja pero que reduce el número de conexiones es la denominada
ORGANIZACIÓN POR COINCIDENCIA:

Figura 7-5.
Su ventaja: reduce el número de conexiones. Así para 12 bits de direcciones resulta:
n /2 n /2 6 6
2 2 + 2 2 = 2 + 2 = 128 conexiones
Mucho menor que 4096 conexiones resultantes con Organización Lineal.
Otra forma de ver la aplicación es mediante filas y columnas, la fila la selecciona "X" y la columna la
selecciona "Y".
4
Veamos un ejemplo de una memoria direccionada por 4 dígitos binarios (16 registros) que tendría 2
2 2
= 16 conexiones en una organización lineal y sólo 2 + 2 = 8 conexiones en la organización por
coincidencia.

7-3
ARQUITECTURA DE COMPUTADORAS - 7 MEMORIAS (ed. 2004)

Figura 7-7.

MEMORIAS ACTIVAS:
Son aquellas que durante el funcionamiento del computador, pueden ser escritas y leídas. En la
actualidad son volátiles, es decir, pierden la información guardada desde el momento en que se les corta la
energía.
En la actualidad se usan dos diferentes tipos estas memorias las estáticas y las dinámicas.
RAM estática (SRAM): Esta construida en base a semiconductores (biestables), se emplea cuando el
tamaño de la memoria necesario es pequeño (Ej.: 1 Mbyte), dado que su costo es superior al de la RAM
dinámica.
RAM dinámica (DRAM): Son mucho más económicas que las SRAM y por ello son utilizadas cuando se
necesita mayor capacidad de memoria. El método de acceso es el mismo pero la diferencia es que el
soporte físico son capacitores integrados y solo pueden retener la información durante 2 o 4 ms
(milisegundos). Después de 2 o 4 ms, hay que 'refrescar' por completo el contenido de la memoria, porque
los capacitores, que almacenan el 1 o 0 lógico, pierden sus cargas. Los ciclos de refrescos se logran
mediante un ciclo de lectura, escritura o uno especial de refresco, que no lee ni escribe datos. El ciclo de
refresco es interno de la DRAM y se logra mientras funcionan otros componentes del sistema. Esto se
denomina refresco oculto, trasparente o a veces robo de ciclo. El uso de este tipo de memoria representa
una perdida del tiempo de la computadora poco significativo en relación al menor costo de la misma.

MEMORIAS PASIVAS (ROM):


Si bien la modalidad de acceso es igual a las memorias de acceso aleatorio, estas memorias se
diferencian de las anteriores en que no son volátiles, es decir no se borran aunque se desconecte la alimen-
tación.
En la memoria ROM (Read Only Memory o memoria de sólo lectura) se almacenan en forma
permanente programas y datos que residen en el sistema y que no deben cambiar cuando se corta la
corriente.
La ROM esta disponible en la actualidad en varias configuraciones:
ROM propiamente dicha es programada en el momento de su fabricación en base a información
proporcionada por el cliente y no puede ser modificada. Se utiliza un negativo fotográfico (mascara) para
controlar las conexiones eléctricas en el circuito. Se requiere una mascara especial para cada conjunto
diferente de información a ser almacenada, lo que hace que este tipo de memoria sea conveniente sólo si se
encarga en grandes cantidades.
La figura 7.8 muestra la estructura de una ROM bipolar. Contiene 16 celdas de memoria colocadas
en 4 renglones (registros) de 4 celdas cada uno. Cada celda está formada por un transistor bipolar
conectado en configuración de colector abierto (entrada en la base, salida en el emisor). Nótese que
algunos transistores tienen sus bases conectadas a la línea y otros no, esto es lo que determina que la celda
sea igual a 1 (conectado) o 0 (abierto).
Dado que a un tiempo sólo puede estar habilitado un solo renglón, todas las celdas correspondientes
a una misma posición de un registro pueden ser conectadas a una salida común.

7-4
ARQUITECTURA DE COMPUTADORAS - 7 MEMORIAS (ed. 2004)

Figura 7-8.

PROM se programan una vez fabricadas. La estructura de estas memorias es muy parecidas, la
diferencia esta en que en la base de los transistores se coloca un fusible de nichrome o de oxido de silicio
(ver figura 7-9). Este tipo de memoria se entrega con todos los fusibles intactos (todas las celdas valen 1) y
el usuario cortando o quemando selectivamente los fusibles la va programando. Esta tarea se realiza
electrónicamente haciendo pasar un pulso de alto voltaje (10 - 30 V) en el fusible que se desea quemar
(pasa a valer 0), actualmente no son muy utilizadas. Estas memorias se pueden programar una sola vez, es
decir que si se comete un error de programación o se desea modificar un programa la memoria debe ser
reemplazada en su totalidad.

Figura 7-9.

EPROM es un tipo ROM que se puede programar y borrar. Se utiliza cuando se debe cambiar la
programación a menudo o cuando hay poca demanda de la misma. Para borrar este tipo de memoria, se la
debe exponer a luz ultravioleta de alta intensidad. El inconveniente que tiene es que el proceso de borrado
afecta a la totalidad de la memoria, es decir se borra complementamente y debe ser programada
nuevamente, completamente.
EEPROM (ROM programable y eléctricamente borrable). Su característica es muy parecida a la
EPROM, la diferencia radica en que como el borrado no realiza por exposición a luz ultravioleta sino
mediante cargas eléctricas, se puede seleccionar los registros que se desean borrar.
Otros tipos, más nuevos, de memorias que podríamos denominar mayormente de lectura, son las
memorias flash, y encontramos entre ellas la EAROM (eléctricamente alterable) o NOVRAM (RAM no
volátil). Estos dispositivos de memoria se pueden borrar por acción eléctrica en el sistema, pero se requiere
más tiempo para bórralas que una RAM normal.

Dispositivos Lógicos Programables (PLD).


La misma tecnología que se utiliza para confeccionar las memorias ROM programables se utiliza
para el desarrollo de los dispositivos lógicos programables o arreglos lógicos programables. La idea básica
es proporcionar circuitos integrados con lógica combinacional AND y OR en los cuales se puedan programar
funciones lógicas fundiendo o no fusibles.

7-5
ARQUITECTURA DE COMPUTADORAS - 7 MEMORIAS (ed. 2004)

Figura 7-10.

Cada una de las líneas de productos están conectadas mediante una conexión fusible a la entrada
de una compuerta OR. Interrumpiendo apropiadamente alguna de esta conexiones se logra programar las
diferentes funciones deseadas. Por ejemplo:
Con todas las conexiones intactas, O1 = A ⋅ B + A ⋅ B + A ⋅ B + A ⋅ B
Si interrumpimos la conexión 1 y 4, O1 = 0 + A ⋅ B + A ⋅ B + 0 = A ⋅ B + A ⋅ B

Simbología del PLD.

El ejemplo de la figura 7-11 sólo tiene dos variables de entrada y el diagrama ya es bastante denso,
es por eso que los fabricantes adoptaron una simbología especial para representar el circuito de estos
dispositivos. En lugar de trazar una línea por cada conexión, se traza una sola por modulo AND o OR que
pasa por todas las posibles entradas. Si en la intersección de esa línea con la entrada hay una cruz ( X ) es
una conexión fusible. Si hay un punto ( • ) es una conexión alambrada, no se puede modificar. La ausencia
de alguno de estos símbolos indica que no existe conexión alguna.

Figura 7-11.

En el mercado existen circuitos integrados en donde esta alambrado el arreglo AND y con fusible el
OR, la inversa , ósea con fusible el arreglo AND y alambrado el OR o con fusible ambos arreglos.

Memorias de Acceso Serie (M.A.S.)


Son aquellas en las que el tiempo que tarda en accederse para escribir o leer una información en
una determinada posición depende de las situación física de esta en el interior de la memoria.

entrada salida

orden de desplazamiento
Figura 7-12.
Para ESCRIBIR: La información debe pasar por todas la posiciones que preceden a la posición pretendida.
Para LEER: La información debe pasar por todas la posiciones que siguen a la posición pretendida.
Veremos dos formas principales de organizar la información en Memorias de Acceso Serie
(M.A.S.).

7-6
ARQUITECTURA DE COMPUTADORAS - 7 MEMORIAS (ed. 2004)

1 ) Organización en Serie de los bits: En esta se colocan en serie las posiciones y los bits de cada
posición.
posición 0 posición 1 .......................... n −1
posición 2 2
→ bit ...... bit bit ...... bit bit ...... bit bit ...... bit →
ent. 0 n1 -1 0 n1 -1 0 n1 -1 0 n1 -1 salida

Figura 7-13.
n2 n2
Este esquema representa 2 posiciones de n bits, siendo el número total de bits 2 . n1 . A esta
organización le corresponde el diagrama de bloques:

entrada salida
1 1

orden de desplazamiento Figura 7-14.


2 ) Organización paralela de los bits: En esta organización se colocan en serie las posiciones mientras
que los bits de cada posición se colocan en paralelo.
posición 0 posición 1 .................... n −1
posición 2 2
bit 0 bit 0 bit 0 bit 0
bit 1 bit 1 bit 1 bit 1
..................... ................. ................. ...................
..................... ................. ................. ...................
bit n1 -1 bit n1 -1 bit n1 -1 bit n1 -1
Figura 7-15.
que puede condensarse en el siguiente diagrama de bloque:

entrada M. A. S. salida
n1 n1
orden de desplazamiento Figura 7-16.
LIFO - FIFO.
Los ejemplos anteriores referentes a memorias de acceso secuencial fueron mostrados sobre una
memoria con organización FIFO (First In First Out), es decir que el primer dato en entrar a la memoria es el
primero en ser accedido. Este tipo de memoria también puede ser estructurada con una organización del
tipo LIFO (Last In First Out), es decir que el ultimo dato en ingresar a la memoria es el primero en ser
accedido. A esta ultima organización responde la memoria de pila de datos y el diagrama tiene el siguiente
formato:
entrada
n1 M. A. S.
salida
orden de despl. Figura 7-17.

Memoria de Pila.

Si bien las memorias secuenciales fueron creadas debido a que por su lógica de funcionamiento
eran mucho mas económicas que las memorias de acceso directo, solo podían ser utilizadas para ciertos
fines específicos como por ejemplo la resolución de ecuaciones expresadas en notación polaca y el
almacenamiento de punteros de retorno en los llamados de programa a un subprograma.
En la actualidad esta lógica de memoria de pila es utilizada para almacenar punteros de retorno,
pero no esta soportado físicamente en una memoria secuencial. Si no que se simula la misma en un sector
de la memoria RAM, y en lugar de correr la información en un sentido u otro, lo que modifica es un puntero
que apunta a lo que seria el registro tope de la pila. Ahondaremos en este punto, cuando veamos la lógica
de llamado de un programa a un subprograma en la siguiente unidad.

La memoria Rambus.

Un caso especifico de estudio es el desarrollado por Rambus para dar solución a uno de los
mayores problemas que existen en el diseño de una memoria.
Como ya hemos visto cuando se direcciona un registro de memoria, la transferencia desde su
posición física al registro de salida o viceversa se realiza a través de un bus paralelo, de la cantidad de vías
que tenga el bus depende la cantidad de información que se puede transmitir simultáneamente en un ciclo
de reloj.
El mayor inconveniente en estos casos es la integración de una considerable cantidad de vías en un
circuito, reduciendo al máximo la posibilidad de error por efecto de radiofrecuencia.
La salida de Rambus es incrementar la velocidad del controlador de memoria (por ejemplo para un
procesador que trabaja con un reloj de 100 Mhz usar una señal externa de 800 Mhz.) y multiplexar en una
salida de 64 bits, 8 señales de 8 bits cada una.

7-7
ARQUITECTURA DE COMPUTADORAS
Ingeniería en Sistemas de Información
Universidad Tecnológica Nacional
Facultad Regional Santa Fe

8. El Ordenador
(Edición 2006)

MAQUINA DE PROGRAMACIÓN FIJA


Suma manual.
Con los recursos vistos hasta el momento se puede encarar el diseño de un circuito que nos
sirva para ir sumando sucesivas cantidades en un registro que denominaremos ACUMULADOR.
Para ello, necesitamos crear, en primer término un registro (grupo de n biestables) que nos
permitan memorizar una cantidad de entrada ingresada por pulsadores, un registro de salida o
ACUMULADOR donde quedará el resultado de la suma de las sucesivas entradas y registros
intermedios donde depositaremos temporariamente la información. Además y fundamentalmente
necesitaremos de un grupo de sumadores que nos permitan realizar efectivamente la operación de
suma.
Con estos elementos construimos el siguiente circuito:

Referencias secuencia de proceso Figura 8-1.

RE reg. entrada Puesta a 0 general


RI reg. intermedio 0 Ingresa dato en RE
RS reg. salida 1 Memoriza
2 Puesta a 0 RS
3 Totalizar
4 Puesta a o RI y RE
5 Ir a 0

Al iniciar el proceso se hace una puesta a 0 general, pulsando la tecla correspondiente, en cada
uno de los registros.
Luego ingresamos en el RE el dato a sumar. Si observamos el circuito, a medida que
ingresemos el valor, se va a producir la suma con el contenido del RS (recordar que los sumadores son
sistemas combinacionales y por lo tanto cambian, en la medida que cambien las variables de entrada).
Una vez que se ingresó el valor de entrada completo, y el resultado de la suma esté estable, se
debe memorizar en un registro intermedio (RI).
Este paso nos permitirá hacer una puesta a 0 del registro de salida, (que está también
involucrado en la entrada) antes de transferir el nuevo resultado.
Digitando la tecla totalizar, se habilita el paso de la información desde el registro intermedio al
registro de salida. Y luego, se puede hacer la puesta a cero del registro de entrada y el registro
intermedio.
De esta forma, el resultado queda en el registro de salida, y pasa a ser un operando, junto con
un nuevo valor que se ingresa en el registro de entrada de la siguiente suma.
ARQUITECTURA DE COMPUTADORAS - 8 EL ORDENADOR - ed.2006

Repitiendo este proceso, se pueden ir acumulando sucesivas cantidades. Aunque, el proceso es


demasiado pesado debido a que por cada suma, se deben digitar varias teclas y, en una secuencia
determinada.
Automatización del proceso.
Encaremos el diseño tratando de automatizar el proceso. Para ello, agregamos un contador que
se incrementa mediante un generador de pulsos, y cada combinación de salida habilita una función. De
esta forma logramos que las mismas se cumplan en una secuencia determinada.
Al digitar suma, se habilita el paso de pulsos desde el G.I. al contador y cuando este vale 1,
habilita la tecla memorizar, cuando vale 2, hace la puesta a 0 de RS, al valer 3, totaliza y 4 pone a 0 el
RE y RI. El contador en 5 finaliza el proceso, para ello restaura el valor del mismo a cero, y cierra el paso
de pulsos, a la espera de un nuevo valor. A estos sucesivos pasos los denominamos microinstrucciones.
De esta forma, nuestra tarea será, ingresar los datos en RE, y digitar suma.

Puesta a 0 general. Figura 8-2.


0 Ingresa dato en RE
1 Dígita suma

MAQUINA DE PROGRAMACIÓN VARIABLE


Introducción:
Las máquinas que hemos visto anteriormente, se encasillan en el tipo de máquinas de
programación fija y responden al esquema siguiente:

Figura 8-4.
La Unidad de Memoria (U.M.) almacena los datos externos, los resultados parciales y los finales
del proceso.
Esta puede estar constituida por algunos registros, tal es el caso de las máquinas vistas o, si el
número de datos es elevado (mas de diez), poseer una organización o estructura como las estudiadas
en el tema relativo a memorias.
La Unidad de Aritmética y Lógica (U.A.L.) recibe información procedente de la Unidad de
Memoria, ejecuta los cálculos y le devuelve los resultados.
La Unidad de Control (U.C.) gobierna ambas unidades.

8-2
ARQUITECTURA DE COMPUTADORAS - 8 EL ORDENADOR - ed.2006

Este es un sistema secuencial que a partir de una orden externa de inicio de proceso, efectúa
una evolución entre estados, desde uno inicial, según un determinado diagrama de flujo, controlado por
los impulsos de un generador.
Por cada estado, la U.C. emite una señal de control para que la Unidad de Memoria y la Unidad
Aritmética y Lógica realicen la microoperación adecuada. Una microoperación es entonces:
"Una operación Aritmética o Lógica o una transferencia entre registros que se realiza durante un
ciclo del generador de impulsos equivalente a un único estado de la U.C.".

LA COMPUTADORA.
Arquitecturas Secuenciales.
En esta la U.C., en lugar de recibir una simple orden externa de operación, recibe una
"Secuencia De Instrucciones" o "programa almacenado" que le indican las sucesivas microoperaciones a
realizar. Las instrucciones deben alojarse en una unidad de memoria.
Esta estructura general, fue definida por Von-neuman en 1946 y en la actualidad rige en el
funcionamiento de diferentes modelos y marcas.
El esquema general de bloques que corresponde a la máquina de programación variable es
entonces:

Figura 8-5. Esquema básico de bloques de una máquina de programación variable.

Siendo las instrucciones una combinación de bits que indican a la U. de C. las acciones que
debe realizar, pueden entonces almacenarse en la misma U. de M. en que se almacenan los datos. Con
lo que el esquema se reduce a:

Figura 8-6. Esquema básico de bloques de una máquina de Programación variable


con Unidad de Memoria banalizada.

La Unidad de Memoria más conveniente es la de Acceso Aleatorio. Debe poseer un sector


activo (Lectura/Escritura) para alojar:
* Datos
* Resultados parciales o finales
* Instrucciones
Como se ha visto en el tema correspondiente a 'Memorias', esta puede además, poseer un
sector pasivo (Lectura solamente) para alojar tanto datos como instrucciones fijos.
El conjunto constituido por la U.de C. y la U.A.y L. recibe, por lo general el nombre de Unidad
Central de Proceso y La Memoria de datos e instrucciones recibe el nombre de memoria central o
principal.
Los datos del proceso se han de transferir desde el exterior. Los resultados del proceso se han
de transferir hacia el exterior.
Además las Instrucciones se almacenan en memorias externas y deben ser enviadas a la M.C.
en forma similar a los datos.
Los demás elementos o sistemas externos a la U.C.P., M.C. y G.I. se denominan en forma
general "PERIFÉRICOS".
De lo antes dicho se deducen dos esquemas generales:

8-3
ARQUITECTURA DE COMPUTADORAS - 8 EL ORDENADOR - ed.2006

1. Si las transferencias de información se realizan a través de la Unidad Central de Proceso


(U.C.P.).

Figura 8-7. esquema, U. C. P. / M. C.


2. Si no se realiza simultáneamente transferencia de información con M.C. y un periférico
pueden emplearse conexiones comunes a la M.C. y Periféricos:

Figura 8-8. esquema, U. C. P. / M. C. y Periféricos


Este es el diagrama o esquema de bloques típico de un Computador u Ordenador.
La Instrucción.
Como dijimos, las instrucciones están constituidas por una combinación de bits que se alojan en
palabras de la M.C. y que deben poseer información sobre:
1. Que operación debe realizar el sistema.
2. Con qué operandos realizarla.
Por lo tanto la Instrucción debe poseer dos campos:
* Campo de código de operación
* Campo de direcciones de operandos
Estos se esquematizan de siguiente manera:
0 n
Código de operación direcciones

El registro de Instrucciones: La ejecución de una instrucción, ya hemos visto, hace necesario que la
Unidad de Control primero "busque" la instrucción en la Memoria Central, para que a continuación pase a
la etapa de la ejecución propiamente dicha. Se requiere por lo tanto alojar la instrucción, durante el
tiempo que dura su ejecución en un registro ubicado en la U.C.P. que toma la denominación de
REGISTRO DE INSTRUCCIONES.
La instrucción de cuatro direcciones: La ejecución de una instrucción implica alguna de las siguientes
acciones:
* La realización de una operación con un solo operando, (por ejemplo "complementar") o dos
operandos (por ejemplo suma aritmética) y por ende la necesidad de conocer las direcciones
de uno ó 2 operandos.
* La presencia de un resultado y entonces la necesidad de conocer la dirección donde debe ser
alojado.
* La dirección de la próxima instrucción a ejecutar.
Entonces la forma más simple de informar a la U.de C. es constituir una instrucción con un
campo de dirección conteniendo 4 direcciones:
0 n
cód. operación dir. operando 1 dir. operando 2 dir. resultado dir. prox. inst.

El inconveniente de este formato es que la instrucción necesita un elevado número de bits.


El Contador de Programa: En general las instrucciones se ejecutan secuencialmente. Pueden
entonces alojarse en posiciones contiguas de la memoria y por lo tanto la dirección de la próxima
instrucción puede sustituirse por un registro contador que se denomina: CONTADOR DE PROGRAMA y
cuyo contenido se incrementa en una unidad cada vez que se ejecuta una instrucción. De esta forma

8-4
ARQUITECTURA DE COMPUTADORAS - 8 EL ORDENADOR - ed.2006

luego de "rescatar" la instrucción corriente y al incrementarse en 1 queda apuntando a la próxima


instrucción a ejecutarse. Es importante recordar que esta operación se realiza LUEGO de haber obtenido
la instrucción corriente y ANTES de proceder a ejecutar la misma.
El contador de programa posibilita una instrucción de 3 direcciones:
0 n
cód. operación dir. operando 1 dir. operando 2 dir. resultado
Registro auxiliar: Si se conviene en almacenar el resultado en la dirección de uno de los operandos se
logra la instrucción de 2 direcciones:
0 n
cód. operación dir. operando 1 dir. operando 2
Hace falta entonces prever una instrucción de Transferencia de Información de una posición de
memoria a otra para el caso en que sea necesario salvar o conservar el operando en cuya dirección
debe alojarse el resultado.
Además implica la presencia de un Registro Auxiliar en la U.C.P. para conservar
momentáneamente las informaciones procedentes de la memoria.
Se puede reducir aún más el número de bits de una instrucción, empleando un solo campo de
direcciones con lo que se logra, la instrucción de una dirección:
0 n
cód. operación dir. operando

El registro acumulador: Dado que la instrucción de una dirección sólo selecciona un operando en
memoria, hace necesario el empleo en la U.C.P. del registro auxiliar anteriormente mencionado para
conservar el otro operando. Este mismo registro suele emplearse además para almacenar el resultado
de la operación, tomando por esta causa el nombre de Registro Acumulador.
Muchas computadoras tienen una cierta cantidad de registros de propósito general, cualquiera
de los cuales puede ser usado indistintamente como acumuladores. Si por ejemplo hubiera 8 registros
de este tipo, se necesitarían solo 3 bits para direccionarlos, lo que es considerablemente menor que la
cantidad de bits necesarios para direccionar un palabra de memoria. De esta forma las instrucciones
podrían estar conformadas con una dirección de operando de memoria y otra de registro.
Además de los registros que se han visto podemos nombrar aparte: "registro de instrucciones"
(IR) contiene la instrucción que esta siendo ejecutada cuya salida esta disponible para los circuitos de
control, los que a su vez generan el secuenciamiento de señales necesario para controlar los procesos
intervinientes en la ejecución de dicha instrucción. El "reg. de direcciones de memoria" (RDM) que es
usado para contener la dirección de la locación de memoria a la que se quiere acceder. El "reg. buffer
de memoria o reg. auxiliar de memoria' (RBM) es la puerta de entrada/salida de la memoria en el se
deposita la palabra de memoria leída o se toma la palabra a ser escrita en la memoria.
Un diseño de una maquina mínima seria:

Figura 8-9.

Definición de los componentes.

8-5
ARQUITECTURA DE COMPUTADORAS - 8 EL ORDENADOR - ed.2006

Unidad de Control o Comandos (UC) es la encargada administrar el funcionamiento de la maquina.


Con tal finalidad emite secuencialmente las señales de control o microoperaciones (MO) necesarias para
cumplimentar los estados de búsqueda y ejecución. La UC posee terminales de salida; una por cada
MO.
Téngase en cuenta además que el mismo número identifica el terminal de control del registro a
través del cual al MO debe ingresar. Estos números están puestos solo a modo de ejemplo.
los impulsos que activan la UC y que sincronizan el funcionamiento general de la máquina,
provienen de un generador de impulsos (GI).
La UC tiene registros asociados tal como el RCP y el RO.
Registro Contador de Programa (RCP), Es del tipo contador. Contiene la dirección de la próxima
instrucción a ejecutarse. En el mismo se coloca, inicialmente, la dirección de comienzo del programa y
luego es incrementado en 1 por cada instrucción que se ejecuta.
Registro Operación (RO), es donde se deposita el código de operación de la instrucción para ser
analizado por la UC.
La Memoria central (MC) es ACTIVA, es decir, permite la lectura o escritura (aleatoria) de todos sus
registros, pero además es BANALIZADA pues cualquiera sea la dirección de los mismos alojan por igual
tanto instrucciones como operandos. La MC tiene asociados el RDM y el RAU.
Registro de Dirección de Memoria (RDM) es un registro del tipo acumulador y tiene por función la de
alojar la dirección de la palabra cuyo contenido ha de leerse o escribirse.
Registro auxiliar (RAU) tiene la función de actuar en calidad de Registro Buffer de la Memoria Central
(MC). En efecto, toda información (operando o instrucción) que egresa de la MC o que ingresa a la
misma es transitoriamente alojada en el RAU. Además este registro puede incrementarse, siendo por lo
tanto de tipo mixto, Acumulador y Contador.
Unidad Aritmética y lógica (UAL) es donde se realizan las distintas operaciones. Posee un registro
denominado Acumulador (RA), un registro de un solo bit llamado Registro Unión (RU). El RA y RU se
encuentran fuertemente acoplados, como si fuesen un solo registro al momento de ser operados. Y, por
ultimo un adicionador binario de n sumadores.
Funcionamiento de la máquina mínima.
La ejecución de toda instrucción requiere de dos etapas. Primero, localizar (leer) la instrucción
en la memoria (Estado de búsqueda) y luego la ejecución propiamente dicha de la misma (Estado de
ejecución).
Estado de búsqueda. En esta máquina la búsqueda de la instrucción se cumplimenta durante tres
ciclos de reloj. En el primero se envía el RCP al RDM, en el segundo se realiza la lectura de la
instrucción, conjuntamente se incrementa en 1 el RCP y en el tercero se envía el código de operación al
ROP.

Figura 8-10.
En el esquema de la figura 8-10 podemos analizar el siguiente ejemplo: supongamos que al
iniciarse la búsqueda de la instrucción el RCP contiene el valor A1h. Esto indica que la instrucción que
debe buscarse en MC para ser ejecutada se encuentra en la palabra Nº A1h, y si el contenido de la
palabra A1h es el valor 2FFh, entonces se sucederan las siguientes operaciones:
En el ciclo de reloj 1: el valor A1h presente en el RCP es copiado en el RDM. De este modo, la
palabra nº A1h se encuentra direccionada a través del decodificador de direcciones de la MC.
En el ciclo de reloj 2: se produce la lectura de la palabra direccionada. Por lo tanto, el contenido
de la palabra A1h, es decir 2FFh, es copiado en RAU. Además este mismo ciclo de reloj se incrementa
el contenido de RCP.

8-6
ARQUITECTURA DE COMPUTADORAS - 8 EL ORDENADOR - ed.2006

De este modo en el ejemplo presente, el RCP pasa a contener el A2h (A1h + 1h).
En el ciclo de reloj 3: el contenido del campo de operación de la instrucción presente en el RAU,
es decir la cantidad 2h es copiada en el ROP. Así concluye el estado de búsqueda, debiendo retenerse
los tres hechos importantes siguientes:
1. El código de operación de la instrucción se encuentra en ROP a disposición de la UC.
2. El RCP contiene la dirección de la palabra que sigue a la ocupada por la instrucción buscada.
3. El RAU contiene la instrucción buscada.
Estado de Ejecución. Durante este ciclo la UC proporciona las señales de control o MO necesarias
para ejecutar la instrucción cuyo campo de operación se encuentra presente en el ROP. Los ciclos de
reloj que se requieren para que se ejecute la instrucción dependen del número de MO que deben
efectuarse secuencialmente.
Instrucciones de salto o bifurcación. Esta se lleva a cabo, reemplazando el contenido actual del RCP
por la dirección a la que se quiere bifurcar o saltar. Es por este tipo de acciones (modifican el RCP),
que el incremento del RCP para seguir con la secuencia lógica de un programa se realiza antes de
ejecutar la instrucción (en el estado de búsqueda).
LENGUAJE MAQUINA Y ENSAMBLADOR.
En el nivel mas básico, el microprocesador responde a un listado de operaciones que se
denomina programa maquina. Este esta escrito en código maquina siguiendo el formato de
instrucciones que ya hemos visto y por supuesto en binario. En este formato los programas son muy
difícil de comprender para los seres humanos y mucho mas difícil de generar.
Un primer paso para mejorar su interpretación, seria manejar los valores binarios en notación
hexadecimal, pero de todas formas todavía el sistema es bastante complejo.
El lenguaje ensamblador utiliza palabras y frases para representar los códigos máquina del
microprocesador y además palabras o etiquetas para referenciar posiciones de memoria.
El programa escrito de esta forma se denomina Simbólico o fuente y pasa a formato Objeto o
Absoluto cuando es traducido a binario.
Lenguaje ensamblador
(programa simbólico o fuente)
Etiqueta Nemotecnico Operando Comentarios
LONUM LDY $70 ; Carga Y con # de elementos en
lista almacenada en la posición
de memoria 0070h
LDA #$FF ; Carga A con FFh (suponer
número menor en FFh)
COMP DEY ; Decrementa Y (registro Y es
contador)
• • • •
• • • •
Figura 8-11.
La escritura de un programa en formato simbólico en lenguaje ensamblador, según se ve en la
figura 8-11, normalmente tiene un formato restringido y podemos dividir cada sentencia en cuatro
campos: (1) etiqueta, (2) nemotecnico, (3) operando, (4) comentarios. El campo etiqueta no se utiliza
siempre, si colocamos algún nombre en este campo el mismo es asociado a la dirección de memoria
correspondiente a esa posición del programa y el mismo nombre puede ser usado para referenciar esa
dirección de memoria en cualquier punto del programa ya sea para localizar algún dato a operar o un
sector del programa adonde bifurcar. El campo nemotecnico es el código simbólico exacto que
proporciona el fabricante. Este campo indica al programa ensamblador la instrucción u operación que se
desea realizar. El campo de operando contiene información sobre registros, datos o direcciones
asociados con la operación. En este campo se puede referenciar directamente al operando o
mencionando la etiqueta el mismo tenga asociada a alguna otra parte del programa. Por ultimo el
campo comentario no es evaluado por el ensamblador y es usado solamente para comprender que
ocurre en el programa.
Con los tres primeros campos el ensamblador genera el lenguaje correcto de maquina
realizando básicamente la siguiente tarea: asocia cada etiqueta a la dirección correspondiente
generando una tabla de referencia, reemplaza cada nemotecnico por su valor binario y cada operando
por su dirección o valor binario, en caso de ser un nombre de etiqueta, la dirección correspondiente la
toma de la tabla de referencia, asigna a cada operación-operando posiciones consecutivas de memoria.
Junto con el código Objeto, se proporciona un listado del programa simbólico y Objeto, listado
de errores, referencias a las etiquetas utilizadas, etc.

8-7
ARQUITECTURA DE COMPUTADORAS - 8 EL ORDENADOR - ed.2006

Otra función del ensamblador es reservar espacio para los operandos, recordar el punto o
dirección de arranque del programa, optimizar el programa agregando, modificando la secuencia de
ejecución de las instrucciones, etc.. Algunos ejemplos se verán mas adelante en los ítems específicos.
Algunas de estas funciones se pueden indicar mediante parámetros y/o pseudoinstrucciones
(instrucciones al ensamblador).

Código máquina Lenguaje ensamblador


(objeto o absoluto) (programa simbólico o fuente)
Dirección Contenido Etiqueta Nemotecnico Operando Comentarios
(hex) (hex)
0020 A4 70 LONUM LDY $70 ; Carga Y con # de elementos en
lista almacenada en la posición
de memoria 0070h
0022 A9 FF LDA #$FF ; Carga A con FFh (suponer
número menor en FFh)
0024 88 COMP DEY ; Decrementa Y (registro Y es
contador)
0025 08 PHP ; Introduce registro PS en pila
(guarda señalizadores)
0026 D1 60 CMP ($60),Y ; Compara (A - M)
pone C = 1 si A ≥ M
pone C = 0 si A < M
(direccionamiento indirecto Y)
0028 90 2D BCC NOCHA ; Si C = 0, entonces bifurca a
dirección simbólica NOCHA
002A B1 60 LDA ($60),Y ; Carga A con nuevo numero mas
bajo de la lista (usando
direccionamiento indirecto Y)
002C 28 NOCHA PLP ; Saca registro PS de la pila
(restaura señalizadores)
002D D0 24 BNE COMP ; Si Z = 0, entonces bifurca a
dirección simbólica COMP
002F 60 RTS ; Vuelta de subrutina

Figura 8-12
En la figura 8-12 se puede observar nuevamente el programa fuente junto con el programa
objeto generado por el ensamblador, sin interesar la función de esta rutina y de las instrucciones
(algunas de las cuales fueron modificadas con el fin de resaltar lo que seria el campo operación y el
operando o dirección), se puede observar en la primer columna la posición hexadecimal donde esta cada
palabra del programa y en la segunda columna el programa objeto que no es mas que una secuencia de
valores hexadecimales (binario expresado en hexadecimal).
La programación en lenguaje ensamblador es un método de 'humanizar' las operaciones de un
microprocesador; aunque sigue siendo bastante difícil su manejo, a este lenguaje lo denominamos de
bajo nivel. Existen otros lenguajes como el BASIC, FORTRAM, PASCAL, etc. que facilitan aun mas la
tarea del programador y no son tan rígidos en su formato de escritura. En estos lenguajes de alto nivel
una sentencia de programa puede ser equivalente a 20 o 30 instrucciones de maquina.
MEJORANDO EL RENDIMIENTO.
Modos de direccionamiento. El modo de direccionamiento realizado en el ejemplo de maquina
precedente es el denominado directo o absoluto, que queda definido a continuación junto a otras
diferentes formas de realizarlo.
• Modo directo: La dirección de memoria del operando, está dada explícitamente como una parte de la
instrucción.
• Modo inmediato: El operando está dado explícitamente en la instrucción.
• Modo indirecto: La dirección efectiva del operando está en el registro o en la locación de memoria,
cuya dirección aparece en la instrucción.
• Modo indexado: La dirección efectiva del operador se obtiene sumando un valor "Índice" a la dirección
dada en la instrucción.
transferencia entre registros. Ya hemos mencionado que normalmente se dispone no uno sino de
varios registros de uso general para realizar las diferentes operaciones. Para permitir la transferencia
entre ellos se conectan bus común; como se vio en la unidad 6; debiéndose activar las respectivas
puertas de salida y entrada del registro emisor y receptor respectivamente.

8-8
ARQUITECTURA DE COMPUTADORAS - 8 EL ORDENADOR - ed.2006

secuenciamiento de las señales de control. La unidad de control deberá tener algún medio de
generar la secuencia de señales de control. Se han usado una gran variedad de técnicas para resolver
este problema, la mayoría de las cuales pertenecen a una de las siguientes categorías:
1. Control por Hardware.
2. Control Microprogramado.
Control por Hardware: Ya hemos visto en el ejemplo de máquina mínima cómo son las diferentes
señales de control y cómo deben ejecutarse por ejemplo en diferentes ciclos de reloj (recordar el
contador utilizado para generar señales visto en la maquina de programación fija). A su vez, cada acción
puede generar nueva información (overflow, carry, cero, negativo, etc.). Estas señales denominadas
Flags no son más que líneas de control que entran a la unidad de control, ésta posee un
codificador/decodificador (circuito combinatorio) que genera las señales de control requeridas,
dependiendo de los resultados parciales que se vayan dando.
Control microprogramado: Para describir este método, se comenzará definiendo a la palabra de control,
cuyos bits individualmente representan a cada una de las señales de control. Por lo tanto cada uno de
los pasos que forman la secuencia de control en la ejecución de una instrucción, define una única
combinación de ceros y unos en la palabra de control.
Los microprogramas correspondientes al conjunto de instrucciones de máquina, están
almacenados en una memoria especial, llamada memoria de microprograma. La unidad de control
genera entonces la secuencia de señales de control para ejecutar una instrucción leyendo
sucesivamente las palabras de control del correspondiente microprograma desde la memoria de
microprogramas.
Como conclusión se resaltarán algunos puntos importantes relativos a las maquinas
micropogramadas;
1.- El conjunto de instrucciones de una máquina, queda definido en su microporgrama, por lo tanto es
posible cambiar el conjunto de instrucciones de una CPU, simplemente alterando el contenido de la
memoria de microprogramas. Esto ofrece una gran flexibilidad tanto al diseñador como al usuario de la
maquina.
2.- Ya que el contenido de la memoria de microprograma es modificado muy infrecuentemente,
usualmente se usan memorias de lectura solamente (ROM) para este propósito.
3.- Generalmente se provee en bus separado dedicado a la comunicación entre la CPU y la memoria de
microprogramas.
4.- Ya que la ejecución de una instrucción de maquina implica varios accesos a la memoria de
microinstrucciones, el tiempo de acceso de ésta juega un papel muy importante en la determinación del
tiempo total de ejecución de cada instrucción.
EN BUSCA DE MAYOR VELOCIDAD.
Arquitecturas paralelo.
El procesamiento paralelo es una forma eficiente del procesamiento de la información que se
basa en la explotación de sucesos concurrentes en el proceso de cómputos.
Concurrencia implica paralelismo, simultaneidad y pipelining. Sucesos paralelos pueden ocurrir
en múltiples recursos durante el mismo intervalo de tiempo; sucesos simultáneos pueden ocurrir en el
mismo instante de tiempo y sucesos pipeline pueden ocurrir en lapsos de tiempo solapados.
Estos sucesos concurrentes aparecen en un sistema de cómputos en varios niveles de
procesamiento. El procesamiento paralelo demanda la ejecución concurrente de varios programas en el
computador, en contraste con el procesamiento secuencial.

Hablaremos de niveles de paralelismo, a los cuales caracterizaremos de la siguiente manera, y


detallaremos considerando de un mayor a menor nivel de paralelismo:
Multiprogramación, Multiprocesamiento: son acciones que se toman a nivel de programa o
trabajo.
Tarea o Procedimientos: representan acciones que se toman dentro de un mismo programa,
ejecutándose procesos independientes en forma simultanea.
Interinstrucciones: acciones a nivel de instrucción. Esto es, dentro de una misma tarea o proceso
se pueden ejecutar instrucciones independientes en forma simultánea.
Intrainstrucciones: involucran acciones simultáneas que se pueden realizar para una misma
instrucción. Por ejemplo, vectorización de operaciones escalares dentro de una instrucción compleja tipo
DO, FOR.
Como puede notarse, el paralelismo de un mayor nivel se obtiene por medio de algoritmos,
cuando en cambio los de menor nivel se logra con importante actividad de las componentes de
hardware.

8-9
ARQUITECTURA DE COMPUTADORAS - 8 EL ORDENADOR - ed.2006

A los efectos de lograr un mayor grado de paralelismo, técnicas específicas del procesamiento
distribuido son incorporadas a arquitecturas centralizadas. Algunas de las formas por las cuales puede
obtenerse el paralelismo, son las siguientes:
Multicomputadoras: computadoras independientes, muy a menudo una de ellas actúa como
supervisor, que realizan una tarea común en una sola ubicación.
Multiprocesadores: un conjunto de unidades de cómputo, donde cada una de las cuales tiene sus
propios conjuntos de instrucciones y datos, pero comparten una misma memoria. Las computadoras
multiprocesadores consisten en un número “n” (siendo n mayor o igual a dos) de procesadores que
operan sobre una misma memoria y, se encuentran interconectados mediante canales que transmiten
comandos de datos y control. Son controlados por un sistema operativo único.
Redes de Computadoras: básicamente involucra varias computadoras independientes conectadas
mediante un canal de manera tal que los recursos disponibles en un punto de dicha red, puedan verse
como disponibles para todos los integrantes en dicha red.
Procesador Pipeline: se trata de un único computador que puede realizar simultáneamente las
operaciones de cálculos en determinadas secciones, con diferentes estadios de completitud. Los
procesadores pipeline se basan en el principio de dividir los cálculos a realizar en una cantidad de
unidades funcionales capaces de operar simultáneamente existiendo superposición.
Procesador array: es un grupo de unidades de cómputo donde cada una de las cuales realiza en forma
simultanea la misma operación sobre diferentes conjuntos de datos. Estos procesadores operan sobre
vectores. Las instrucciones del mismo son ejecutadas en serie, pero trabajan en forma paralela sobre
vectores de datos.

Clasificación de FLYNN: Un procesador típico trabaja buscando instrucciones y operandos de la


memoria principal, ejecutando las instrucciones y colocando los resultados en la memoria. Las distintas
etapas asociadas con este procesamiento constituyen el ciclo de instrucción:
• Generar la dirección de la próxima instrucción.
• Buscar la instrucción.
• Decodificarla.
• Generar las direcciones de los operandos.
• Ejecutar la instrucción.
• Almacenar los resultados.
Las instrucciones pueden verse como una corriente o flujo de instrucciones que se desplazan de
la memoria al procesador central, mientras que los operandos forman otra corriente o flujo, que en
adelante llamaremos flujo de datos, desplazándose entre la memoria y el procesador central.
M.J.Flynn realizó una clasificación bastante útil del paralelismo presente en un procesador
basado en el número del flujo de instrucciones y de datos simultáneos visto por el procesador durante la
ejecución de un programa.
Teniendo en cuenta las combinaciones que se pueden presentar con estos dos ítems, flujo de
datos y flujo de instrucciones, surgen estos cuatro grupos:
• SISD (Single Instruction - Single Data)
• SIMD (Single Instruction - Multiple Data)
• MISD (Multiple Instruction - Single Data)
• MIMD (Multiple Instruction - Multiple Data)
En la figura 8-13 vemos que esta categorización depende de la multiplicidad de sucesos
simultáneos en los componentes del sistema.
Para comprender esta clasificación nos basta tener en cuenta tres componentes ya vistos:
1. Módulos de memoria
2. Unidad de control.
3. Unidad de procesamiento o unidad aritmética y lógica.
El flujo de datos entre el módulo de memoria y el procesador circula en forma bidireccional, en
categorías superiores vemos que se recurren a módulos de memoria múltiples que producen flujo de
datos múltiples.
En el gráfico de la figura 8-13 podemos notar que cada flujo de instrucciones es generado por
una unidad de control independiente. En el gráfico, no se indica el subsistema de entrada / salida ya que
no es factor determinante en este tipo de clasificación.
IS

IS DS
CU PU MM
(a) SISD

8-10
ARQUITECTURA DE COMPUTADORAS - 8 EL ORDENADOR - ed.2006

(b) SIMD

(c) MISD

(d) MIMD
CU= Unidad de Control IS = Flujo de Instrucciones
PU = Unidad de proceso DS = Flujo de datos
MM = Modulo de memoria SM = Memoria compartida Figura 8-13.

SISD: Este tipo de arquitectura corresponde a la mayoría de las computadoras serie, disponibles
actualmente, e indica (como puede observarse en la figura 8-13 (a)) una sola instrucción, un solo dato a
la vez.
Las instrucciones se ejecutan secuencialmente pero pueden superponerse en sus diferentes
etapas de ejecución (pipeline).
En muchos casos se recurre a varias unidades funcionales como ser de procesamiento y de
memoria, pero siempre estarán supervisadas por una única unidad de control.
Como se vio anteriormente el proceso de ejecución de una instrucción implica generalmente
cuatro etapas: búsqueda de la instrucción (IF) de la memoria principal; decodificación de la instrucción
(ID); búsqueda del operando (OF), si es necesario en la ejecución; y la ejecución (EX) propiamente
dicha.
En un computador con arquitectura clásica estas etapas deben completarse antes de ejecutar la
próxima instrucción. Por ejemplo, si tendríamos en un programa un bloque de código con las siguientes
características:
For i = 1 to 5
A(i) = A(i) * 2;
Las cinco veces que se pasa por la asignación, serán cinco instrucciones, con instrucciones
completamente independientes de las otras.

SIMD: Si lográramos implementar el ejemplo anterior (dado en SISD) en forma paralela, en cinco
unidades de procesamiento simultáneas bajo el control de una única unidad de control, ejecutaríamos
las cinco instrucciones en forma simultánea, con lo cual se lograría ahorrar bastante tiempo. Esta idea la
podemos visualizar en la figura 8-13 (b). El esquema es, tener una memoria, una unidad de control de la
cual dependen varias unidades de ejecución que depositarán sus datos en memoria. Es decir, una sola

8-11
ARQUITECTURA DE COMPUTADORAS - 8 EL ORDENADOR - ed.2006

instrucción que ataca a muchos datos. Este esquema se conoce comúnmente como un procesador
vectorial.

MISD: Esta arquitectura presenta n elementos procesadores; cada uno de ellos recibe distintos flujos
de instrucciones que operan sobre el mismo flujo de datos. Es decir, se tienen múltiples instrucciones
con un solo dato.
Los resultados de un procesador se convierten en la entrada (operandos) del próximo
procesador y así sucesivamente. Esta arquitectura no ha recibido mucha atención hasta el momento y
no existen implementaciones reales de la misma, lo cual significa que es solamente un esquema teórico.

MIMD: Esta categoría corresponde a la mayoría de los sistemas multiprocesos. En este esquema
tenemos varias unidades de control, con varias unidades de ejecución. Es decir, se ejecutan muchas
instrucciones con muchos datos.
En estos sistemas vemos que existirá una interacción entre los n procesadores ya que los flujos
de datos se obtienen de la unidad de memoria compartida por todos los procesadores. Si los n flujos de
datos se obtuvieran de subespacios disjuntos del módulo de memoria, sólo tendríamos múltiples SISD
que no es otra cosa que un conjunto de n sistemas SISD (de un único procesador) independientes.
Teniendo en cuenta esa interacción entre los distintos procesadores se suele hacer una división
entre los fuertemente acoplados y débilmente acoplados.

Paralelismo en sistemas de un solo procesador.


Cierto grado de paralelismo se puede conseguir en sistemas con un solo procesador. Ésto se
consigue por hardware y software.
Los intentos realizados por hardware se basan en la multiplicidad de recursos y superposición
temporal. En estos intentos es necesario realizar un balance de la velocidad de proceso de los distintos
subsistemas con el objeto de evitar cuellos de botella y lograr así el incremento de la performance del
sistema aumentando la cantidad de instrucciones ejecutadas en la unidad de tiempo.
Las técnicas empleadas a tal efecto son:
Multiplicidad de unidades funcionales: Consiste en aumentar la cantidad de unidades funcionales, corre
pendiente a la Unidad Aritmética y Lógica.
Paralelismo y Pipelining en la CPU: Aquí en lugar de aumentar la cantidad de unidades funcionales, se
recurre a mejorarlas. El Pipelining consiste en la superposición de las distintas etapas de la ejecución de
una instrucción.
Superposición de operaciones de CPU y de E/S: La idea es la ejecución simultánea del ciclo de CPU y
la E/S. Básicamente se consigue con las técnicas de acceso directo a memoria, o con la utilización de
procesadores dedicados exclusivamente a las operaciones de E/S.
Utilización de sistemas de memoria jerárquicos: El objetivo es disminuir la diferencia de velocidades
entre CPU y el sistema de memoria, recurriéndose así a la cache que oficia de interface entre CPU y la
memoria principal, etc.

Multiprogramación y Tiempo compartido: También se puede conseguir un mejor rendimiento del


computador mediante opciones de software. Es sabido que tendremos programas de aplicación en que
aparecerán grandes actividades de procesamiento, ocupando la mayor parte del tiempo la CPU, y otros
por el contrario insumen mucho tiempo en operaciones de entrada/salida.
El objetivo es entonces de superponer la ejecución de estos programas balanceando el ancho
de banda de las distintas unidades funcionales del procesador, obteniéndose de esta manera la
superposición de operaciones de entrada/salida y de CPU.
El problema que puede aparecer con este método es que si existen procesos que demanden
una utilización de CPU demasiado prolongada, no darían lugar a la ejecución de otros procesos,
apareciendo tiempos de espera demasiado largos y por lo tanto perdiéndose las bondades de la
multiprogramación. El método de tiempo compartido (Time Sharing) resuelve este problema asignando
periodos limitados de tiempo a cada uno de los procesos.

Arquitectura PIPE-LINE.
Ya hemos mencionado que para lograr operaciones concurrentes en un procesador se utilizan
dos técnicas básicas: paralelismo y pipelining.
El paralelismo conseguía la concurrencia multiplicando las componentes del hardware tantas
veces como sea posible, de modo que las diferentes etapas del proceso se ejecuten simultáneamente.

8-12
ARQUITECTURA DE COMPUTADORAS - 8 EL ORDENADOR - ed.2006

Pipelining consiste en desdoblar la función a realizarse en varias partes, es decir, divide la tarea
en una secuencia de subtareas cada una de las cuales se ejecuta en una etapa de hardware
especializada que trabaja concurrentemente con otra de las etapas del pipeline. Así como el agua fluye
a través de una tubería (pipeline) las instrucciones o datos fluyen a través de las etapas de un
computador digital pipeline a una velocidad que es independiente de la longitud de la tubería (número de
etapas del pipeline) y depende solamente de la velocidad a la cual los datos e instrucciones pueden
ingresar al pipeline.
Esta velocidad a su vez depende del tiempo que tarde el dato en atravesar una etapa. Este
tiempo puede ser significativo ya que el computador no sólo desplaza los datos o instrucciones de etapa
en etapa sino que en cada una de ellas se realiza alguna operación sobre los mismos. Como ejemplo en
el caso de las instrucciones tendremos operaciones de búsqueda, decodificación y ejecución.

Pipeline Físico o de Instrucción: Veamos como primer ejemplo de un pipeline (de cuatro etapas) el
proceso de ejecución de una instrucción en un computador digital que como vimos, modela 4 pasos
principales: levantar la instrucción de memoria (Instruction Fetch - IF); identificar la operación que debe
efectuarse (Instruction Decoding – ID); levantar los operandos de ser necesarios en la ejecución
(Operand Fetch - OF); y por último ejecutar la operación aritmético lógica que ha sido decodificada. Debe
entenderse que antes de comenzar la ejecución de una nueva instrucción, debe completarse los cuatro
pasos antes indicados.

(Etapas)
IF ID OF EX

Figura 8-14 (a) Un procesador pipeline

En la figura 8-14 (b) podemos ver la ejecución superpuesta de las instrucciones sucesivas, que se
comentaba con anterioridad. Luego de haber cargado el primer pipe un procesador pipeline produce un
resultado de salida por cada ciclo (donde ciclo de pipeline se considera aproximadamente igual al tiempo
que tarda la etapa más lenta).

Etapas O/P O/P O/P O/P O/P


pipeline

EX I1 I2 I3 I4 I5 ......
OF I1 I2 I3 I4 I5 ...... Tiempo
ID I1 I2 I3 I4 I5 ...... (ciclos del
IF I1 I2 I3 I4 I5 ...... pipeline)
1 2 3 4 5 6 7 8

Figura 8-14 (b) Diagrama espacio-temporal para un procesador pipeline.

Esto muestra que el ciclo de una instrucción se reduce a un cuarto del tiempo de ejecución original en
relación a un procesador sin pipeline como lo muestra la siguiente figura:

Etapas O/P O/P O/P


pipeline

EX I1 I2 I3 ......
OF I1 I2 I3 ...... Tiempo
ID I1 I2 I3 I4 ...... (ciclos del
IF I1 I2 I3 I4 ...... pipeline)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 .....

Figura 8-14 (c) Diagrama espacio-temporal para un procesador no-pipeline.

Veamos algunos ejemplos más de pipelines pero en este caso de dos y tres etapas. Algunas
instrucciones requieren dos etapas para ser ejecutadas como la mayoría de las operaciones entre
registros:

8-13
ARQUITECTURA DE COMPUTADORAS - 8 EL ORDENADOR - ed.2006

• B: Búsqueda de la instrucción.
• E: Hace una simple operación aritmética (ADD/SUB), lógica o de desplazamiento.
y entre instrucciones que requieren tres etapas como load y store:
• B: Búsqueda de la instrucción
• E: Calcula la dirección necesaria para hacer un acceso a memoria.
• M: Hace la operación de memoria a registro o de registro a memoria.
A continuación se muestra la ejecución de una secuencia de instrucciones en ausencia de un
pipeline, lo cual sin ninguna duda y adelantándonos a los próximos ejemplos constituye un claro
desperdicio.
LOAD A←M B E M
LOAD B←M B E M
SUB C←A-B B E
STORE M←C B E M
BRANCH X B E
Veamos ahora esta misma secuencia de instrucciones ejecutada en un pipeline de dos etapas.
LOAD A←M B E M
LOAD B←M B E M
SUB C←A-B B E
STORE M←C B E M
BRANCH X B E
NOOP B E
Con este esquema, las fases B y E de dos instrucciones diferentes pueden ejecutarse
simultáneamente. Si suponemos que la memoria tiene una sola puerta de acceso, como es el caso de
RISC I y RISC II por ejemplo (ver Arquitecturas CISC y RISC), solamente un acceso a memoria puede
estar llevándose a cabo en un instante dado. Esto implica que cuando la memoria de datos está siendo
accedida por una instrucción de LOAD o STORE, el resto del pipeline esta suspendido, pues un acceso
de búsqueda no puede ser procesado al mismo tiempo. Esto requiere la introducción de un estado de
espera en algunas instrucciones. Debido a la interrupción de la secuencia normal de instrucciones
producida por el branch, se introduce un NOOP (no operation) para simplificar el diseño.
Una manera de que la CPU vea como si tuviese dos puertas de memoria, es incorporar una
memoria cache de instrucciones. Efectivamente esta memoria cache aparece como una puerta
independiente para la CPU, siempre que no ocurra un miss (faltante). La CPU verá entonces dos
puertas separadas de memoria, una para instrucciones y una para datos. El esquema quedaria:
LOAD A←M B E M
LOAD B←M B E M
NOOP B E
SUB C←A-B B E
STORE M←C B E M
BRANCH X B E
NOOP B E

Al quitar la limitación impuesta por una única puerta de acceso a memoria, el ciclo de acceso al
dato de una instrucción LOAD o STORE (M) puede ocurrir en paralelo con el ciclo de calculo (E) de la
próxima instrucción. Esto no ocasiona ningún inconveniente de dependencia de datos para las
instrucciones STORE, pero si en cambio para las instrucciones LOAD. La etapa de cálculo de la
instrucción que sigue al LOAD no debe depender del valor que está siendo cargado. Esta situación
puede ser examinada o bien por el compilador, quien en tal caso inserta un NOOP, o mediante extra
hardware, suspendiendo el pipeline mientras espera que el dato llegue de memoria.
En el caso más favorable la velocidad de ejecución puede ser hasta tres veces la del sistema sin
pipeline.
Hasta aquí hemos considerado que las tres etapas son aproximadamente de igual duración.
Debido a que la fase E generalmente involucra una operación de ALU, su ejecución es mayor que las
demás, pudiendo ser entonces dividida en dos etapas:
• E1: Lectura del registro.
• E2: Operación de ALU y escritura de un registro.

8-14
ARQUITECTURA DE COMPUTADORAS - 8 EL ORDENADOR - ed.2006

Lo cual nos conduce a un Pipeline de cuatro etapas como vemos en el siguiente esquema:
LOAD A←M B E1 E2 M
LOAD B←M B E1 E2 M
NOOP B E1 E2
SUB C←A-B B E1 E2
STORE M←C B E1 E2 M
BRANCH X B E1 E2
NOOP B E1 E2
NOOP B E1 E2
Hasta cuatro instrucciones pueden estar ejecutándose a la vez, por lo tanto la velocidad puede
ser, en el caso más favorable, de hasta cuatro veces más que la de un sistema sin pipeline.

Pipeline Digital o Lineal:


Mientras un ítem en particular fluye a través del pipeline, éste ocupa sólo una etapa por vez. A
medida que transcurre el tiempo la etapa que quedo vacante por un ítem, será ocupada por el siguiente.
Este uso concurrente de diferentes etapas por diferentes ítems se lo conoce por solapamiento. El
resultado neto es que la máxima velocidad a la cual los nuevos ítems pueden ingresar al pipeline
depende exclusivamente del tiempo máximo requerido para atravesar una etapa y no del número de
éstas.
La utilización del pipeline se traduce en una mejora del comportamiento o performance del
procesador. Ésto es, si una función se lleva a cabo en T segundos en un procesador de diseño
convencional, al utilizar un procesador pipeline de N etapas esa misma función podrá realizarse en T/N
segundos. Ésto es a nivel teórico, dado que, la mejora de performance dependerá de la cantidad de
operaciones que puedan estructurarse en pipeline y también de calidad de la partición o subdivisión de
cada una de esas operaciones. La estructuración en pipeline de un procesador se realiza en diferentes
niveles como aritmética de punto flotante, ciclo de instrucción, procesador de entrada/salida, etc..
Esta división o partición de una función en varias subfunciones se podrá realizar si se dan las
siguientes condiciones:
1. La evaluación de la función básica es equivalente a la evaluación secuencial de las subfunciones que
la constituyen.
2. Las entradas a una subfunción provienen únicamente de las salidas de subfunciones previas en la
secuencia de evaluación.
3. Excepto el intercambio de entradas y salidas no existe otra vinculación entre las subfunciones.
4. Debe disponerse del hardware necesario para la evaluación de dichas subfunciones.
5. El tiempo requerido por estas unidades de hardware para evaluar las subfunciones es
aproximadamente el mismo.
Este hardware mencionado en el punto 4 es el correspondiente o asociado con las distintas
etapas del pipeline.
A diferencia del pipeline físico (tubería), el digital no maneja los datos en forma continua. Éste
maneja los datos en forma interrumpida y los va desplazando de etapa en etapa sincronizando con un
reloj.
Dado que la lógica que realiza el procesamiento en cada etapa generalmente carece de
memoria y dado el carácter discontinuo de la aparición de los datos en las etapas se impone la utilización
de un elemento de memoria en la entrada y salida de cada etapa. De esta manera, bajo el control del
reloj asociado a cada elemento de memoria, evitamos que los datos ingresen a una etapa antes que
haya finalizado el proceso anterior.

L L L L
n n n n
I O
n u
p S1 S2 .... Sk t
u p
t t

R
n
Figura 8-14 (c) Estructura de un procesador pipeline digital
L: Latch
Si: etapa i-ésima
R: reloj

8-15
ARQUITECTURA DE COMPUTADORAS - 8 EL ORDENADOR - ed.2006

En la figura 8-14 (c) se puede ver las estructura básica de un pipiline digital o lineal. Éste
consiste de una cascada de estapas de procesamiento. Dichas etapas son circuitos que efectúan
operaciones aritméticas o lógicas sobre los datos que fluyen a través del pipe., y se encuentran
separadas por registros de muy alta velocidad encargados de almacenar los resultados intermedios
entre etapas, llamados latches.

Pipeline vs. Solapamiento.


Los conceptos de pipelining y solapamiento tienen significados parecidos pero no son
equivalentes, pese a que en algunos casos se los utiliza indistintamente. Ambos se basan en la idea de
partición o subdivisión de una función, pero se aplican en distintos entornos.
Se dice que podrá existir pipeline cuando se den las siguientes condiciones:
1. Cada evaluación de la función básica es independiente de las anteriores.
2. Cada evaluación requieren aproximadamente la misma secuencia de subfunciones.
3. Cada subfunción se encadena perfectamente con la anterior.
4. Los tiempos utilizados para evaluar las distintas subfunciones son aproximadamente
iguales.
Solapamiento se podrá utilizar cuando se den las siguientes condiciones:
1. Existe dependencia entre las distintas evaluaciones.
2. Cada evaluación puede requerir una secuencia diferente de subfunciones.
3. Cada subfunción tiene un propósito distinto.
4. El tiempo por etapa no es necesariamente constante, sino que depende de la etapa y
de los datos que la atraviesan.
En muchos casos el pipeline propiamente dicho y que detallamos en primer lugar, se lo suele
llamar sincrónico o estático, por otra parte el solapamiento se lo suele llamar pipeline asincronico o
dinámico.
Un ejemplo de pipeline estático es el de una unidad destinada a realizar sumas en punto flotante
sobre datos provenientes de otra unidad. Aquí la función básica, suma en punto flotante es
relativamente simple, el resultado de una sumo depende del anterior, próximo o de cualquier otro.
Además una vez que se realizó la partición, todas las sumas siguen la misma secuencia.
El ejemplo más simple de solapamiento o pipeline dinámico se da en un procesador donde la
entrada/salida es manejada por un procesador, los cómputos por otro y la comunicación se realiza a
través de un modulo de memoria común.
La realización de una función en este procesador alternará entre el procesador de cómputo y el
de entrada/salida.
memoria común

procesador procesador
de cálculo de ent./sal.

Figura 8-15
En otros casos la evaluación de una función sólo requerirá de un procesador. En este caso
vemos que las distintas operaciones están menos sincronizadas que en el caso del sumador en punto
flotante. La participación de la función básica varía dinámicamente y aún el tiempo empleado en cada
etapa es difícil de predecir.
Otro ejemplo de operación por solapamiento es el de ejecución de instrucciones de CPU's de
alta velocidad. En este caso el hardware podrá estar dividido en un número fijo de etapas como en el
caso del sumador de punto flotante, pero de acuerdo con las diferencias de formato de las instrucciones
cada una puede desarrollar un camino diferente a través del pipeline.

PROBLEMAS DE LOS PIPELINES


Dependencia entre instrucciones y riesgos.
En una maquina secuencial clásica todas las operaciones que involucran la ejecución de una
instrucción se completan antes que comience la próxima. En el caso de las maquinas SISD podemos
intentar realizar pipeline a nivel de ejecución de instrucciones.
Esto consistirá en solapar la ejecución de las mismas de manera que algunas de las
operaciones necesarias para las instrucciones i+1, i+2, .... puedan realizarse antes que finalice la
ejecución de la instrucción i. Puede ocurrir que las operaciones realizadas por i+1, i+2, dependan de los
resultados de i que aún no fue completada. Esta dependencia entre instrucciones crea riesgos que
deben evitarse y resolverse.
Se reconocen tres clases de riesgos, read-after-write, write-after-read y write-after-write.
Veamos las diferencias considerando este segmento de código de programa:

8-16
ARQUITECTURA DE COMPUTADORAS - 8 EL ORDENADOR - ed.2006



Almacenar en x

Sumar x
Almacenar en x


Almacenar en x


El riesgo read-after-write entre dos instrucciones i y j (siendo j posterior a i) se presentara
cuando j trata de leer un operando que es modificado por i. Si la operación en i que modifica el
operando no se completa antes que j lo acceda, entonces j leerá el valor erróneo. En el ejemplo el
riesgo existirá entre el primer almacenar en x y el sumar x, si el sumar x extrae el operando antes que
haya sido actualizado por almacenar.
El write-after-read ocurre cuando la instrucción j desea modificar un operando que es leído por i.
Si j modifica el operando antes que i lo haya leído, este dato así leído será erróneo. Este riesgo puede
existir entre el sumar y el segundo almacenar en x.
Finalmente el write-after-write existe cuando i y j tratan de actualizar el mismo operando, en el
caso que j lo haga en primer lugar. En nuestro ejemplo se el segundo almacenar se realiza después del
tercero, obviamente el valor en x no es el que el programa espera.

Manejos de saltos.
Uno de los problemas que ocaciona el uso de pipeline se da con la instrucción de bifurcación o
salto. Recordemos que esta instrucción se ejecutaba colocando la dirección a la que debia ir en el
Registro contador de programa. Ahora, si nos fijamos en el ejemplo siguiente veremos que cuando se
ejecuta el salto, la próxima instrucción ya fue leída y por lo tanto se ejecutara erróneamente. Estos
problemas ocacionados por la aparición de saltos en el programa pueden ser obviados mediante la
alteración en el flujo normal de ejecución del programa. Tal técnica se la denomina usualmente como
salto retardado (delayed branch). La siguiente tabla muestra en la primera columna las instrucciones
de un programa que incluye entre las mismas a un JUMP. En la segunda columna introducimos un
NOOP después del JUMP en función de regularizar el pipeline. Si ahora alteramos el orden de ejecución
de las instrucciones, como se muestra en la tercer columna, ejecutándose primero el JUMP y
posteriormente el ADD, conseguimos una mejora en el rendimiento.
Dirección Salto normal Salto retardado Salto retardado
(optimizado)
300 LOAD X.A LOAD X.A LOAD X.A
301 ADD 1.A ADD 1.A JUMP 305
302 JUMP 305 JUMP 306 ADD 1.A
303 ADD A.B NOOP ADD A.B
304 SUB C.B ADD A.B SUB C.B
305 STORE A.Z SUB C.B STORE A . Z
306 STORE A.Z

En las siguientes figuras podemos apreciar la diferencia en la ejecución:


300 LOAD X.A B E M
301 ADD 1.A B E
302 JUMP 306 B E
303 ADD A,B B E
306 STORE A.Z B E M
La instrucción 303 se ejecuta en forma errónea ya que fue leída antes de que se modifique el RCP.
300 LOAD X.A B E M
301 ADD 1.A B E
302 JUMP 306 B E
303 NOOP B E
306 STORE A.Z B E M
(a) Primer solución: Insertando NOOP

8-17
ARQUITECTURA DE COMPUTADORAS - 8 EL ORDENADOR - ed.2006

300 LOAD X.A B E M


301 JUMP 305 B E
302 ADD 1.A B E
305 STORE A.Z B E M
(b) Solución mejorada: Intercambiando el orden de las instrucciones
Como la instrucción de ADD se busca antes de que la instrucción JUMP tenga oportunidad de
alterar el contador de programa, el programa mantiene la semántica original.
Este procedimiento aplicado aquí a un salto incondicional, no puede aplicarse siempre en casos
de saltos condicionales, ya que la condición que está examinando el branch puede ser alterada por la
instrucción que la precede. En estos casos el compilador no debe hacer el intercambio de instrucciones.
Diversos estudios llevados a cabo, muestran que la mayoría de los saltos condicionados pueden ser
optimizados de esta forma.
Con las instrucciones LOAD, se procede de una forma similar. El registro sobre el cual se va a
efectuar el LOAD es bloqueado por la CPU. La secuencia de instrucciones se continúa ejecutando hasta
que alguna instrucción requiera el registro bloqueado, en este momento la CPU debe esperar la
finalización del LOAD. Una mayor eficiencia se logra si el compilador puede reacomodar instrucciones
mientras el LOAD está en el pipeline.

INTERFACES CON PERIFÉRICOS.


Los sistemas de cómputo se comunican con el "mundo exterior" a través de periféricos, tales
como unidades de vídeo, impresoras, unidades de disco y de cinta, lectores de tarjetas, convertidores
analógicos-digitales, etc. La comunicación entre el microprocesador del sistema y los periféricos se
efectúa a través de unidades especiales denominadas interfaces. En la Figura 16, se muestra un
diagrama en bloques de un sistema digital compuesto por un microprocesador (µ µP) comunicado con 4
periféricos a través de 2 interfaces. Los bloques asociados a los periféricos incluyen su unidad
controladora propia. El µP se comunica con el periférico 1 a través de la interface 1; y con los
periféricos 2, 3, 4 mediante la interface 2. Durante las operaciones de entrada/salida (E/S), cada
interface tiene asignadas diversas funciones: convertir la información de acuerdo a los formatos
utilizados por el µP y el periférico; direccionar la información hacia o desde el periférico de interés;
informar sobre el estado del periférico (disponible u ocupado); reconciliar diferencias de tiempo entre el
µP y el periférico (sincronización); etc.

Microprocesador Interface 1 Ctrl. Perif. 1


+
Memoria central
Interface 2 Ctrl. Perif. 2

Ctrl. Perif. 3 Ctrl. Perif. 4

Figura 16: Diagrama de bloques de un sistema digital comunicado con periféricos.


La simultaneidad de operaciones.
El funcionamiento del sistema del sistema de la Figura 16 involucra tanto la ejecución de un
programa en el µP (programa principal), como la ejecución de transferencias de información con las
unidades periféricas (operaciones de E/S). La mayor velocidad de operación del sistema se logra
cuando ambos tipos de ejecuciones se realizan con el mayor grado de simultaneidad. Existen al menos
4 modos para la ejecución de operaciones de E/S:
• Modo bloqueado: se interrumpe el programa principal para ejecutar operaciones de E/S, durante las
cuales el µP transfiere información al "buffer" del controlador del periférico, y espera inactivo
(bloqueado) que el periférico se desocupe para efectuar una nueva transferencia.
• Modo por prueba de estado: en el programa principal se intercalan sentencias que permitan
reconocer el estado del periférico (disponible u ocupado). Si está disponible, el µP ejecuta una
transferencia de E/S; si está ocupado, el µP continúa con la ejecución del programa principal. La
mayor dificultad consiste en la complejidad que adopta el programa principal, tornando tediosa la
tarea del programador.
• Modo por interrupción de programa: en lugar de controlar el estado de los periféricos mediante el
programa principal, son los mismos periféricos quienes "avisan" al µP, el que permite suspender el

8-18
ARQUITECTURA DE COMPUTADORAS - 8 EL ORDENADOR - ed.2006

programa en ejecución para activar el programa de E/S y efectuar una nueva transferencia de
información. Finalizada la transferencia, el µP continúa con la ejecución del programa principal.
• Modo Canal: la transferencia de información se efectúa directamente entre la memoria central y
periférico durante un solo ciclo de reloj, y sin intervención del µP. La transferencia está a cargo de un
unidad automática de intercambio denominada canal (en un diagrama como el de la figura 16, el
canal es parte de la interface). Si el bloque de memoria a transferir no está siendo utilizado por el
programa, la ejecución del mismo no se suspende. En caso contrario, el programa se suspende sólo
durante el ciclo que dura la transferencia. Así cuando se necesita efectuar una transferencia, el canal
"roba" sólo un ciclo de reloj al µP. De esta manera, la simultaneidad entre las ejecuciones del
programa principal y de las operaciones de E/S es casi total.
Transferencias de Información.
Los intercambios de información entre la memoria central y los periféricos suelen clasificarse en
dos categorías generales: a) las transferencias programadas; y b) las transferencias por acceso directo a
memoria (por robo de ciclo).
Transferencias programadas.
Las transferencias programadas se efectúan siempre bajo control de un programa ejecutado por
el µP. En la figura 17 se muestra un diagrama en bloques típico de sistema de cómputos con
transferencia de información programada. El µP envía la instrucción de E/S al decodificador a través del
bus de control. Para efectuar una operación de E/S, el decodificador selecciona el canal adecuado del
multiplexor o del demultiplexor (según se trate de una entrada o salida, respectivamente), para contactar
el periférico deseado. Luego, el µP recibe el estado del periférico seleccionado por medio del registro
de estado de los periféricos, determinando se éste se encuentra libre u ocupado. Si el periférico esta
libre, se transfiere la información a través del bus de datos.
En el caso específico en que se efectúe una operación de salida, la información se transfiere al
periférico a través de un grupo de biestables (Flip-Flop) del canal demultiplexor, en donde se la retiene
hasta completar la transferencia. De esta forma, se elimina cualquier error que pudiera ocurrir debido a
que la mayoría de los periféricos son más lentos que los µP.
Las transferencias programadas pueden ser clasificadas en tres tipos: a) sincrónicas, b)
asincrónicas; y c) por interrupción de programa. Aunque no nos extenderemos en los temas, daremos
algunas nociones básicas sobre estos tipos de transferencias.

Microcomputador interfase
P1 P2 . . . Pn

...
Memoria estado de Demultiplexor
Central periféricos + Flip-Flops

bus de datos
Micro-
procesador Multiplexor
Decodificador
bus de control ...

P1 P2 . . . Pn
Figura 17: Diagrama en bloques de un sistema digital con transferencia de información programada.
Las transferencias sincrónicas son en general, las que requieren implementar la menor cantidad
de "software" y de "hardware". En este tipo de transferencia, el periférico debe responder a la operación
de E/S, dentro de ciertos tiempos especificados por el µP.
Las transferencias asincrónicas (técnicamente denominadas "handshaking") son comúnmente
usadas en sistemas de microcómputo. para realizar una transferencia asincónica, el µP efectúa los
siguientes pasos: 1) testea el estado del periférico; 2) activa el periférico cuando éste se encuentra libre;
3) efectúa la transferencia de datos ("input" o "output"); y 4) desactiva el periférico.
Las transferencias por interrupción de programa son particularmente útiles cuando se dispone
de periféricos lentos, o en aplicaciones donde se desconoce la probabilidad de ocurrencia de una
transferencia (por ej., en redes de comunicación). En las transferencias por interrupción de programa. la
iniciativa la tiene el µP que cumple los siguientes pasos: a) reconoce la presencia de la interrupción al
final de una instrucción del programa principal, b) almacena el contador de programa, c) ejecuta una

8-19
ARQUITECTURA DE COMPUTADORAS - 8 EL ORDENADOR - ed.2006

rutina para procesar la interrupción; d) almacena sus registros internos (de trabajo y de estado), e)
ejecuta la transferencia de datos bajo control por "software", y f) recupera su estado previo a la
interrupción para continuar con la ejecución del programa principal.
Transferencias por acceso directo a memoria.
las transferencias por acceso directo a memoria (ADM) son controladas totalmente por
"hardware"; y, por tal motivo, las interfaces son más complejas que las requeridas por las transferencias
programadas. En la Figura 18 se muestra un diagrama en bloques típico de un sistema de cómputos
con transferencia de información por ADM.
Cuando el programa principal requiere efectuar una operación de E/S, contacta un periférico, el
cual pone en 1 la bandera de ADM. Entonces, la lógica de ADM solicita al µP ingresar en un estado
"ocioso" (típicamente, mediante una entrada del tipo WAIT o HOLD en Req). Cuando el µP ingresa en el
estado "ocioso", se lo notifica a la lógica ADM mediante la señal Ack. En tal situación, los buses de
datos y de dirección se aíslan de µP mediante puertas de tercer estado. Esto permite que una lógica
externa tome el comando de esos buses para ejecutar la transferencia de información por ADM. La
señal de control se suministra a la lógica de ADM para indicar que se efectuará una operación de salida
o de entrada en la memoria (R/W). El registro de dirección se carga con la dirección inicial del bloque de
datos a transferir y el intercambio de datos entre la memoria central y el periférico se ejecuta a través del
bus y del registro de datos. A continuación de cada transferencia, se incremente el registro de dirección
mediante la señal Inc. Cuando se concluye el intercambio de información, el periférico envía una señal
de control que efectúa el "reset" de la bandera de ADM y de la señal Req. Esta última acción permite al V
continuar con su tarea normal.
Microcomputador interfase

Req. control
Micro- Lógica de
procesador ADM Bandera
Ack reset de ADM Periférico

R/W Inc.
Memoria Reg. de dirección Selección.
Central bus de dirección

bus de datos Reg. de datos

Figura 18: Diagrama en bloques de un sistema digital con transferencia de información por ADM.

ARQUITECTURAS CISC Y RISC.


Soportado en gran medida por el avance de la tecnología de circuitos integrados la tendencia en
computadoras fue aumentar la complejidad de su arquitectura.
Con la idea de que al contar con un set más poderoso simplificaría los compiladores y además,
que al crear instrucciones de máquina cada vez más parecidas a la sentencia del lenguaje de alto nivel
se rompería el cerco entre lenguajes assembler (bajo nivel) y el lenguaje de programación, consiguiendo
una mayor velocidad de proceso, se crearon computadoras de uso general con instrucciones cada vez
mas complejas. A este grupo de maquinas las podemos agrupar como del tipo CISC ( computadoras
con set de instrucciones complejo).
Pero investigaciones realizadas sobre esta tendencia y sobre las implementaciones que
generaron, dieron resultados negativos, como ser, un elevado tiempo de diseño, aumento de la
probabilidad de errores y en algunos casos implementaciones inconsistentes.
Aún más, los compiladores al realizar su tarea no recurrían a las instrucciones más complejas,
que un poco era la razón de estas nuevas estructuras.
Además debe tenerse en cuenta que esas instrucciones complejas eran muchas veces
responsables de retardos en la performance de todo el sistema.
Sumado a ésto que la unidad de control para poder soportarlas debe ser más compleja que lo
usual y, que al ser microprogramada esa complejidad adicional provoca mayor tiempo en su propia
ejecución.
Con el propósito de explorar alternativas que subsanen esos inconvenientes, surgen las
maquinas RISC (computadoras con set de instrucciones reducido).

8-20
ARQUITECTURA DE COMPUTADORAS - 8 EL ORDENADOR - ed.2006

La hipótesis es que al contar con un set reducido de instrucciones, se puede diseñar una
arquitectura en VLSI (integración en muy grande escala) que haga uso de los recursos en una forma
más eficiente que en CISC.
También se debe lograr un reducción en el tiempo de diseño, en los errores de diseño y en el
tiempo de ejecución de las instrucciones.
Descripción de las características del RISC.
En desarrollos llevados a cabo por distintos grupos, es común observar que a veces usan una
misma terminología o vocablo para designar cosas distintas, o que designan lo mismo con terminologías
diferentes. RISC no es una excepción, o dicho en otras palabras, no todos definen RISC de la misma
manera, quizá con el afán de poder decir que la máquina en cuestión es RISC.
Diferentes investigadores han propuesto las características que debe cumplir un computador
para ser RISC. Como conclusión a esas propuestas y a la luz de las arquitecturas RISC más recientes,
no se puede definir una grilla de características que debe cumplir una arquitectura para ser RISC, es
común encontrar que los diseños más recientes carecen de alguno de los 'dogmas' establecidos, sino
más bien hablar de las características típicas que podemos encontrar en las arquitecturas RISC. Éstas
son:
• Operaciones de ciclo único.
• Diseño Load/Store, Registro a Registro.
• Control por hardware.
• Reducido número de instrucciones y modos de direccionamiento.
• Formato fijo de instrucciones.
• Pipelining.
• Maximización de uso de Registros.
Operaciones de ciclo único.
RISC I, establecía que las instrucciones deberían ser tan rápidas y no más complicadas que las
microinstrucciones de las maquinas corrientes tales como PDP11 o VAX. Ejecutar una instrucción
compleja que necesita varios ciclos para ejecutarse requiere convencionalmente una combinación de
cierta lógica y microcódigo. Normalmente implementar esta instrucción compleja significará una
ejecución más rápida que si la misma fuese implementada como una secuencia de instrucciones
primitivas. Ejemplos de tales instrucciones son la multiplicación y división en punto fijo y las operaciones
en punto flotante. La pregunta a hacerse es entonces: ¿cuándo se justifica implementar una instrucción
compleja del tipo mencionado?. La respuesta es simple: se justificara siempre que la frecuencia con que
se usen equilibre el costo extra asociado con su implementación, y más importante que ésto es que,
estas instrucciones no disminuyan la velocidad de ejecución de las instrucciones primitivas. La mayoría
de los estudios sobre la frecuencia con que aparecen determinadas instrucciones mostraron un alto uso
de instrucciones primitivas como LOAD, STORE, BRANCH, COMPARE, ADD. Si la presencia de un set
de instrucciones más complicado significa agregar un nivel de compuertas extra a un ciclo básico de
máquina de 10 niveles, la velocidad de la CPU ha sufrido una degradación de un 10% . La frecuencia de
uso y el mejoramiento del rendimiento de funciones complejas debe primero superar esta degradación
del 10 % y luego superar el costo adicional. Si esta presencia de funciones complejas resulta en una
CPU que excede los límites del chip o de la plaqueta, la degradación en rendimiento puede ser aún peor.
Diseño Load/Store, Registro a Registro.
La mayoría de las instrucciones de las máquinas RISC involucran operaciones entre registros,
estando sólo permitido a las instrucciones de LOAD y STORE el acceso a memoria. Esto permite por un
lado simplificar el set de instrucciones y por lo tanto también la lógica de control. Por otro lado las
arquitecturas RISC al motivar el uso de registros, permite que los operandos que son accedidos
frecuentemente, permanezcan en un área de alta velocidad.
Control por Hardware.
La estructura de la unidad de control en un procesador de VLSI refleja claramente el set de
instrucciones. La lógica necesaria para descodificar una instrucción compleja retarda el tiempo de
descodificación, lo cual tiene un impacto en el rendimiento cuando la unidad de control esta en el camino
crítico.
La simplicidad del control por hardware en los diseños RISC hace que solo el 6 ó 10 % del área
del chip constituya funciones de control, mientras que en otros diseños (68000 o z8000) el área de
control ocupa en un 50 y un 60 %. Ésto ha permitido no sólo simplificar el diseño del chip, reduciendo el
tiempo de diseño, sino también aprovechar el área no usada en funciones de control para destinarla
principalmente a registros.
Instrucciones y Modos de Direccionamiento.

8-21
ARQUITECTURA DE COMPUTADORAS - 8 EL ORDENADOR - ed.2006

Las máquinas RISC se caracterizan por su reducido número de instrucciones y por estar
compuestas por aquellas de mayor frecuencia de uso relativa. Los diseños RISC tienen entre 31 y 39
instrucciones para RISC I Y II, contra alrededor de 300 instrucciones de una maquina CISC como la
VAX. El tener un set de instrucciones reducido permite simplificar la lógica de control.
Con respecto a los modos de direccionamiento, los diseños RISC usan los modos de
direccionamiento más simples. En caso de ser necesario, los modos más complejos pueden ser
sintetizados en software a través de los más simples. El usar los modos de direccionamiento más
simples permite simplificar el set de instrucciones y en consecuencia la lógica de control.
Formato fijo de Instrucciones.
Una característica común a todos los diseños RISC, es justamente el tener un formato fijo de
instrucciones. El formato fijo ayuda a simplificar la implementación pues, permite una simple y rápida
decodificación. Se puede entonces asignar cada campo de la instrucción a una función particular,
adecuada para un controlador por hardware, pudiendo evitarse microcódigos, lo que redunda en una
mayor velocidad.
La mayoría de los diseños RISC tienen instrucciones de 32 bits de longitud, lo que permite un
direccionamiento real de 4 Gbytes de memoria.
pipelining.
Ya hemos visto que una forma de mejorar el rendimiento de una computadora es el uso de
ejecución en pipeline, esta técnica es adoptada con diferentes variantes por todos los diseños RISC.

Maximización del uso de Registros.


El uso de procedimientos trae aparejado dos operaciones que involucran un alto consumo de
tiempo: el almacenar o recuperar registros en cada call o return, y el pasar parámetros y resultados entre
procedimientos. Este tiempo puede reducirse con técnicas que administren el uso de los registros.
Los diseñadores de las maquinas RISC encararon la forma de maximizar el uso de los registros
desde dos ópticas totalmente diferentes. desde el punto de vista del compilador o desde el hardware.
Un ejemplo típico del primer caso es el algoritmo de coloración de grafos. La solución que se
aplica en este caso son las reglas prescritas para pintar un grafo con un número fijo de colores, donde
cada color representa uno de los registros.
En la siguiente figura se presentan las variables A a G durante el periodo de uso.
A B C D E F G
instrucción 1
instrucción 2
instrucción 3




Figura 8-17.
Suponiendo que solo se dispone de 4 registros, el problema se reduce a encontrar la forma de
mapear las 7 variables con los cuatro colores, lo que es equivalente a pintar el grafo con solo cuatro
colores. Una solución a este problema puede ser la siguiente: Se comienza a mapear las primeras
cuatro variables con los cuatro colores. Las variables A y E pueden compartir el mismo color ya que no
tienen conflictos entre si. Lo mismo ocurre con C y F. Para G en cambio, ya todos los colores están
ocupados, de modo que el compilador debe usar LOADs y STOREs para liberar un registro y hacer
espacio para G.
La solución implementada en hardware, en cambio, consiste en equipar al procesador con
bancos múltiples de registros. El procesador asigna simplemente un nuevo banco de registros para
cada llamada a procedimiento, evitando de esta manera el tener que almacenar los registros en
memoria. Claro que el número de registros no es ilimitado. En muchos programas la profundidad del
anidado de llamadas a procedimientos excederá el número de ventanas de registros suministradas por
el procesador. Para estos casos se debe proveer un mecanismo que libere algunos registros moviendo
su contenido a memoria.
azul rojo verde negro
instrucción 1 A B
instrucción 2 C
instrucción 3 A D

8-22
ARQUITECTURA DE COMPUTADORAS - 8 EL ORDENADOR - ed.2006

• E C
• F
• G
• E F
• B G
D Figura 8-18

Ventanas de registros solapadas.


En función de su accesibilidad, los registros pueden ser clasificados en globales, locales y
solapados. Los registros globales pertenecen a todas las ventanas y tienen los mismos números para
cada ventana. Los registros locales pertenecen a una sola ventana. Los registros solapados pertenecen
a dos ventanas pero tiene diferente número para cada una de ellas.
El tiempo de ejecución de un ciclo esta dado por el tiempo que lleva leer y sumar dos registros y
guarda el resultado en otro registro.
Investigaciones realizadas en el uso de lenguajes de alto nivel indican que los llamados a
procedimientos son los que ocupan mayor tiempo de ejecución. En el caso del RISC tendremos muchos
de ellos ya que las instrucciones complejas de CISC son subrutinas de RISC. Por lo tanto en este caso
el llamado a procedimiento debe ser más rápido que el usual. Para ello RISC ha utilizado el concepto de
ventanas de registros con la ventaja adicional de reducir el tráfico de memoria.
Cada llamado a procedimiento aloja una nueva ventana de registros, extraída del archivo general
de registros, para ser utilizada en este procedimiento; al ejecutar el retorno se resetea un indicador que
restaura la ventana o conjunto anterior.
Cabe destacar que NO todos los registros se salvan o restauran durante los procedimientos;
esos registros (r0 - r9) se llaman globales.
El conjunto de registros usado por cada procedimiento se superpone, de esta manera el pasaje
de parámetros es automático.
Podemos ver entonces que para la selección de un registro determinado se necesitan dos
parámetros: saber de que ventana se trata y seleccionar un registro dentro de dicha ventana. En RISC II
la identificación de la ventana la suministra el estado de la CPU y la selección del registro viene
especificada en la instrucción.
La ventana de parámetros tiene la estructura indicada en la siguiente figura:
r31
ALTOS
r26
r25
LOCALES
r16
r15
BAJOS
r10
r9
GLOBALES
r0
Figura 8-19
Los registros 'ALTOS' (r26 - r31) contienen los parámetros transferidos por el procedimiento
llamante. Los registros 'LOCALES' (r16 - r25) se utilizan para el almacenamiento de variables locales.
Los registros 'BAJOS' (r10 - r15), aparecen en los registros 'ALTOS' (r26 - r31) de la nueva ventana. Un
encadenamiento de procedimientos A, B y C lo ejemplificamos en la siguiente figura 8-20.
El número de ventana cambia cada vez que se ejecuta un llamado a procedimiento. Por lo
tanto, almacenar o recuperar registros cuando hay calls o returns no es necesario. Las variables locales
que no son escalares son almacenadas en la memoria principal.
Las ventanas se hallan organizadas en stack, en el cual a los pares de procedimientos padre e
hijo se les asigna ventanas solapadas adyacentes.
Preparándose para un posible llamamiento a un procedimiento, el padre escribe los argumentos
actuales en los registros bajos de la ventana corriente y el hijo los tiene disponibles en los registros altos
de su propia ventana. De esta forma el solapado de ventanas permite el pase de argumentos dentro de
registros. Similarmente, el uso de ventanas solapadas permite el retorno de valores desde un
procedimiento hijo a su padre.
Al tener las ventanas y las regiones de solapamiento un tamaño fijo, la descodificación se realiza
simplemente por medio de una lógica AND-OR.
RISC II tiene 138 registros de 32 bits, de los cuales 10 registros son globales, estando el resto
organizado en 8 ventanas de 6 registros solapados, 10 registros locales, y otros 6 registros solapados.
Las ventanas están organizadas en forma cíclicas (la ultima relacionada con al primera) y
manejadas mediante el uso de dos punteros que llevan la cuenta de las ventanas ocupadas y vacías. El

8-23
ARQUITECTURA DE COMPUTADORAS - 8 EL ORDENADOR - ed.2006

Current Window Pointer (CWP) apunta a la ventana del procedimiento que está actualmente activo el
Saved Window Pointer (SWP) identifica la última ventana que ha sido salvada en memoria.
Las variables guardadas en los registros solapados son visibles solamente por el procedimiento
hijo en el lenguaje de alto nivel. Este procedimiento tiene un nombre para estas variables, pudiendo
hacer referencia a las mismas. En el procedimiento padre en cambio, estos ítems no son variables sino
valores de expresiones. Ésto es verdadero si los argumentos son pasados por valor. En el caso que los
mismos sean pasados por referencia, los registros solapados contienen punteros que apuntan a los
argumentos.
reg. físicos reg. lógicos
proc. A proc. B proc. C
137 r31
Alto A A
132 r26
131 r25
LocalA A
122 r16
121 r15 r31
Bajo A - Alto b A B
116 r10 r26
115 r25
Localb B
106 r16
105 r15 r31
Bajo b - Alto c B C
100 r10 r26
99 r25
Localc C
90 r16
89 r15
Bajo c C
84 r10

9 r9 r9 r9 r9
GLOBALES A B C
0 r0 r0 r0 r0

Figura 8-20.
Por ejemplo si el procedimiento D quiere llamar al procedimiento E, primero escribe los
argumentos de E en los registros solapados comunes a ambos y luego ejecuta un call. El CWP se corre
una ventana. Ahora si el procedimiento E quisiera llamar al procedimiento F, los argumentos de salida
de F destruirían a los argumentos de entrada de A, lo que debemos evitar. Esto se logra comparando
CWP con SWP. Cuando CWP es igual a SWP más 1, y se ejecuta una instrucción de call, se genera un
trap de overflow que evita se complete la instrucción de call.
Lo que hace el trap es trasladar el control a una rutina que maneja el overflow. Esta rutina salva
una o más ventanas en memoria y actualiza el SWP. En caso similar se procede en el caso de
underflow de registros a raíz de returns.

8-24

También podría gustarte