Introducción *
ALGUNOS CONCEPTOS FUNDAMENTALES *
Traída de una palabra a partir de la memoria *
Almacenamiento de una palabra en la memoria *
Transferencias entre registros *
Realización de una operación aritmética o lógica *
Manejo de registros por compuerta y temporización de transferencias de datos *
EJECUCIÓN DE UNA INSTRUCCIÓN COMPLETA *
Ramificación *
SECUENCIAMIENTO DE SEÑALES DE CONTROL *
Controladores fijos *
Control microprogramado *
CONCLUSIONES *
BIBLIOGRAFIA *
ANEXOS *
En esta sección agruparemos a las mayores casas diseñadoras de CPU's; así como a sus productos mas actuales y conocidos en el mundo de los microprocesadores *
INTEL *
Pentium Classic: *
Pentium MMX: *
Pentium Pro: *
Pentium II: *
CELERON *
Xeon *
AMD *
K5: *
K6: *
K6-2: *
CYRIX *
6x86: *
6x86MX: *
MII: *
Winchip C6: *
En su forma más simple, un sistema de computadora cuenta con una unidad que ejecuta instrucciones de programas. Esta unidad se comunica con otros subsistemas dentro de la computadora, y a menudo controla su operación. Debido al papel central de tal unidad se conoce como unidad central de procesamiento, o CPU (Central processing unit). Dentro de muchas computadoras, un subsistema como una unidad de entrada, o un dispositivo de almacenamiento masivo, puede incorporar una unidad de procesamiento propia. Tal unidad de procesamiento, aunque es central para su propio subsistema, resulta claro que no es "central" para el sistema de computadora en su conjunto. Sin embargo, los principios del diseño y operación de una CPU son independientes de su posición en un sistema de computadora. Este trabajo estará dedicado a la organización del hardware que permite a una CPU realizar su función principal: traer instrucciones desde la memoria y ejecutarlas.
El algoritmo de solución de cualquier problema consiste en varios pasos que deben realizarse en una secuencia específica. Para implantar tal algoritmo en una computadora, estos pasos se descomponen en pasos más pequeños, cada uno de los cuales representa una instrucción de máquina. La secuencia de instrucciones resultante es un programa en lenguaje de máquina que representa al algoritmo en cuestión. El mismo enfoque general se utiliza para permitir a la computadora realizar funciones especificadas por instrucciones individuales de máquina. Esto es, cada una de estas instrucciones se ejecuta realizando una secuencia de operaciones más rudimentarias. Estas operaciones, y los medios por los cuales se generan, serán el tema principal de análisis en este trabajo.
ALGUNOS CONCEPTOS FUNDAMENTALES
Las instrucciones que constituyen un programa que debe ejecutar una computadora se cargan en localizaciones secuenciales de su memoria principal. Para ejecutar este programa la CPU trae una instrucción por vez y realiza las funciones especificadas. Las instrucciones se traen por medio de localizaciones efectivas de la memoria hasta la ejecución de una ramificación o de una instrucción de salto. La CPU lleva un control de la dirección de la localización de la memoria de la siguiente instrucción, por medio del empleo de un registro de la CPU especial al que se denomina contador de programa (PC). Después de traer una instrucción, el contenido del PC se actualiza para apuntar a la siguiente instrucción de la secuencia.
Considérese, para simplificar, que cada instrucción ocupa una palabra de la memoria. Por lo tanto, la ejecución de una instrucción requiere que la CPU realice los siguientes tres pasos:
1 . Traer el contenido de la localización de la memoria a la que apunte el PC. Interpretar el contenido de esta localización como una instrucción que debe ejecutarse. Por lo tanto, almacenarla en el registro de instrucción (IR: Instruction Register). En forma simbólica esto puede escribirse como:
IR ¬ [[PL]]
2. Incrementar el contenido del PC en l.
PC ¬ [PC] + I
3. Realizar las acciones especificadas por la instrucción almacenada en el IR.
Obsérvese que en aquellos casos en que una instrucción ocupa más de una palabra, los pasos 1 y 2 pueden repetirse tantas veces como sea necesario para traer la instrucción completa. Por lo general a estos dos pasos se les conoce como fase de traída, mientras que el paso 3 constituye la fase de ejecución.
La estructura de las rutas principales de datos dentro de la CPU: Los bloques de la CPU. Estos bloques pueden organizarse e interconectarse de varias formas. Una de tales organizaciones se muestra en la siguiente figura. En este caso, la unidad aritmética y lógica (ALU) y todos los registros de la CPU están conectados a través de un bus común. Desde luego, este bus es interno y no debe confundirse con el bus externo, o buses, que conectan a la CPU con la memoria y los dispositivos de E/S. El bus externo de memoria se muestra en la siguiente figura conectado con la CPU por medio de los registros de datos y de dirección MDR y MAR. El número y funciones de los registros del RO al R(n - 1) varían mucho de una máquina a otra. Pueden ser para que el programador los emplee en operaciones generales, pero algunos de ellos pueden ser registros de aplicación especial, tales como registros índice o apuntadores de pila.

Figura 1.: Organización
de bus único para la ruta de datos
dentro de la CPU
Dos de los registros de la figura, los registros Y\ Z, no se han mencionado. Estos registros son invisibles para el programador; esto es, no necesita preocuparse de su existencia, ya que nunca son referenciados en forma directa por instrucción alguna. Sólo son utilizados por CPU para almacenamiento temporal durante la ejecución de ciertas instrucciones. Sin embargo, nunca se utilizan para almacenar datos generados por una instrucción para que luego los utilice otra instrucción.
Con pocas instrucciones, la mayor parte de las operaciones de los pasos 1 al 3 mencionados antes pueden llevarse a cabo con una o más de las siguientes funciones, en alguna secuencia previamente especificada:
Ahora se examinará con cierto detalle la forma en que cada una de las funciones anteriores se implanta en una computadora común.
Traída de una palabra a partir de la memoria
En una memoria de acceso aleatorio, la información está almacenada en localizaciones identificadas por sus direcciones. Para traer una palabra de información de la memoria, la CPU tiene que especificar la dirección de la localización de la memoria en donde esta información está almacenada y solicitar una operación de Leer. Esto se aplica si la información que se va a localizar es una instrucción de un programa o una palabra de datos (operando) especificada por una instrucción. Entonces, para realizar la traída desde la memoria, la CPU transfiere la dirección de la palabra de información requerida al registro de dirección en la memoria (MAR: memory address register). Según se muestra en la figura anterior, el MAR está conectado a las líneas de dirección del bus de memoria. Por lo tanto, la dirección de la palabra requerida se transfiere a la memoria principal. Mientras tanto, la CPU utiliza las líneas de control de bus de memoria para indicar que se requiere una operación de Leer. Lo normal es que después de emitir esta solicitud, la CPU espere hasta que reciba una respuesta de la memoria, que le informe que la función solicitada se ha concluido. Esto se logra por medio del uso de otra señal de control del bus de memoria, a la cual se denominará Función de Memoria Completada (MFC). La memoria pone esta señal en 1 para indicar que el contenido de la localización especificada de la memoria se ha leído y está disponible en las líneas de datos del bus de memoria. Se considerará que en cuanto la señal MFC sea igual a 1, la información que está en las líneas de datos está cargada en el MDR y por lo tanto está disponible para su uso dentro de la CPU. Esto completa la operación de traída desde la memoria. Como ejemplo, considérese que la dirección de la localización de la memoria a la que se vaya a efectuar el acceso está en el registro RI y que los datos de la memoria deben cargarse en el registro R2. Esto se logra por medio de la siguiente secuencia de operaciones:
La duración del paso tres depende de la velocidad de la memoria utilizada. Por lo general, el tiempo necesario para leer una palabra de la memoria es más prolongado que el tiempo requerido para realizar cualquier operación única dentro de la CPU. Por lo tanto, el tiempo general de la ejecución de una instrucción puede disminuir si la secuencia de operaciones está organizada de manera tal que otra función útil se realice dentro de la CPU mientras espera que la memoria responda. Resulta obvio que sólo las funciones que no requieran del empleo del MDR o del MAR podrán realizarse durante este tiempo. Tal situación se presenta durante la fase de traída desde la memoria. Como pronto se verá, el PC puede incrementarse mientras se espera que se complete la operación de Leer. En el análisis anterior se ha presentado un ejemplo de la forma en que la transferencia de datos entre dos dispositivos puede tener lugar, en este caso la CPU y la memoria principal. El mecanismo de transferencia en que un dispositivo inicia la transferencia (solicitud de Leer) y espera hasta que el otro dispositivo responda (señal MFC) se denomina transferencia asíncrona. Puede verse con facilidad que este mecanismo permite transferir datos entre dos dispositivos independientes que tengan velocidades diferentes de operación. Un esquema opcional que se encuentra en algunas computadoras utiliza transferencias síncronas. En este caso, una de las líneas de control del bus transporta los pulsos de un reloj que funciona continuamente con una frecuencia fija. Estos pulsos proporcionan señales de temporización a la CPU y a la memoria principal. En cada ciclo del reloj se completa una operación de la memoria. Además los instantes en que la dirección se coloca en las líneas de dirección y los datos se cargan en el MDR son fijos en relación con los pulsos del reloj. El esquema de bus síncrono lleva a un implante más simple. Sin embargo, no puede aceptar dispositivos de velocidades muy variadas, si no se reduce la velocidad de todos los dispositivos a la del más lento. En el resto del análisis de la operación de la CPU, se considerará que se emplea un bus de memoria asíncrono.
Almacenamiento de una palabra en la memoria
El procedimiento para escribir una palabra en una localización dada de la memoria es semejante al empleado para leer de la memoria. La única excepción es que la palabra de datos que se va a escribir se carga en el MDR antes de que se emita el comando Escribir. Si se considera que la palabra de datos que se va a almacenar en la memoria está en R2, y que la dirección de la memoria está en R1, la operación de Escribir requiere la siguiente secuencia:
Es interesante observar que los pasos 1 y 2 son independientes. Por lo tanto, pueden llevarse a cabo en cualquier orden. En realidad, pueden efectuarse de manera simultánea, si la arquitectura de la computadora lo permite, esto es, si las dos transferencias no utilizan la misma ruta de datos. Desde luego, esto no sería posible en la organización de bus único de la figura anterior. Obsérvese también que, como en el caso de la operación de Leer, el periodo de espera del paso 4 puede encimarse con otras operaciones, siempre y cuando tales operaciones no utilicen los registros MDR o MAR.
Transferencias entre registros
Para permitir la transferencia de datos entre varios bloques conectados al bus común de la figura anterior, debe haber manejo de entrada y salida por compuerta. Esto está representado de manera simbólica en la figura siguiente (2). Las compuertas de entrada y salida del registro Ri están controladas por las señales Rientrada y Risalida, respectivamente. Entonces, cuando el registro Rientrada es igual a 1, los datos disponibles en el bus común se cargan en Ri. De manera semejante, cuando Risalida es igual a l, el contenido del registro Ri se coloca en el bus. Mientras el Risalida es igual a 0, el bus puede utilizarse para transferir datos de otros registros.
Ahora se examinará la transferencia de datos entre dos registros. Por ejemplo, para transferir el contenido del registro Rl al registro R4, se necesitan las siguientes acciones:
Esta transferencia de datos puede representarse en forma simbólica
R1salida, R4entrada
Realización de una operación aritmética o lógica
Al realizar una operación aritmética o lógica, debe recordarse que la ALU es en sí misma un circuito combinatorio que no tiene almacenamiento interno. Por lo tanto, para realizar una adición, por ejemplo, los dos números que se van a sumar deben estar listos en las dos entradas de la ALU simultáneamente. Se proporciona con este fin el registro Y de la figura anterior (1) que se utiliza para contener uno de los dos números, mientras que el otro es manejado por compuerta hacia el bus. El resultado se almacena en forma temporal en el registro Z. Por lo tanto, la secuencia de operaciones para sumar el contenido del registro R1 con el del registro R2 y almacenar el resultado en el registro R3 debe ser la siguiente:
|
PASO |
ACCIÓN |
|
1 |
R1salida ,Yentrada |
|
2 |
R2salida , Add , Zentrada |
|
3 |
Zsalida , R3entrada |
En el paso 2 de esta secuencia el contenido del registro R2 se maneja por compuerta hacia el bus; de allí, a la entrada B de la ALU que está conectada directamente con el bus. El contenido del registro Y siempre está disponible en la entrada A. La función realizada por la ALU depende de las señales aplicadas a las líneas de control de la ALU. En este caso, la línea Suma se iguala a 1, provocando que la salida de la ALU sea la suma de los dos números en A y B. Esta suma se carga en el registro Z ya que su compuerta de entrada está abierta (Zentrada). En el tercer paso, el contenido del registro Z se transfiere al registro destino R3. Es obvio que esta última transferencia no puede realizarse durante el segundo paso, ya que sólo una salida de registro puede conectarse en forma significativa al bus en cualquier momento dado.
Manejo de registros por compuerta y temporización de transferencias de datos
Antes de proceder a analizar la ejecución de instrucciones de máquina, es necesario detenerse brevemente para presentar algunos de los detalles necesarios del implante para el manejo de datos por compuerta hacia y desde el bus común de la figura 1. También se presentará una breve panorámica de la temporización requerida para el control de señales que estén involucradas en la transferencia de datos entre registros.

Supóngase que cada bit de los registros de las figuras 1 y 2 consiste en el seguro simple mostrado en la figura 3. Se considera que el elemento de almacenamiento mostrado es uno de los bits del registro Z. Mientras que el control de entrada Zentrada es igual a 1, el estado del seguro cambia para que corresponda con los datos del bus. Siguiendo el cambio de 1 a 0 en la entrada Zentrada, los datos almacenados en el seguro inmediatamente antes de este cambio se aseguran hasta que Zentrada sea de nuevo igual a 1. Entonces, las dos compuertas de entrada del seguro implantan la función de interruptor de control de entrada de la figura 2.
Figura 2.: Manejo por compuerta de entrada y salida para los registros de la figura 1
Si se examinan los interruptores de salida de la figura 2 se muestra que, en el caso ideal, deben ser interruptores mecánicos de ENCENDIDO/APAGADO. Cuando un interruptor dado está ENCENDIDO, transfiere el contenido de su registro correspondiente al bus. Cuando se encuentra APAGADO, está desconectado eléctricamente del bus. Esto es, no pone al bus en estado específico alguno, permitiendo así que otro registro coloque datos en el bus. Por lo tanto, la salida de la combinación del registro con el interruptor puede ser en uno de los tres estados: 1,0 ó circuito abierto.
En
los implantes reales, los interruptores mecánicos resultan incompatibles
con la tecnología
electrónica
empleada en computadoras
en términos de velocidad
de operación y de otras características.
En su lugar la compuerta de salida de un registro que transfiere el contenido
de ese registro al bus común se diseña para que se comporte de
la misma forma que un interruptor mecánico. Esto es, es capaz de estar
eléctricamente desconectada del bus.
Figura 3.: Entrada y salida manejadas por compuerta para un bit de registro
Es capaz de colocar ya sea un cero o un uno en el bus cuando sea necesario. Debido a estas tres posibilidades, se dice que tal compuerta tiene una salida de tres estados. Se utiliza una entrada separada de control, tanto para habilitar la salida por compuerta, como para ponerla en un estado de alta impedancia (desconectada eléctricamente). Este último estado corresponde al de circuito abierto de un interruptor mecánico.
Debe observarse que ni los circuitos de compuerta lógica TTL, ni los CMOS son adecuados para la conexión directa con un bus. Conectar las salidas de dos de tales circuitos en paralelo provoca un corto circuito, lo que provocaría operación inadecuada o aun daño a las compuertas involucradas.
Un diseño optativo para el bus común de la figura 2 que no requiere de los interruptores de salida, utilizaría compuertas de colector abierto (para bipolar) o de drenaje abierto (para MOS). La salida de tal compuerta es equivalente a un interruptor a tierra. El interruptor está abierto cuando la salida de compuerta se encuentra en el estado 1 , y cerrado cuando se encuentra en 0. La estructura de un bus de colector abierto está representada simbólicamente en la figura 4. Cuando no está trabajando, el bus se mantiene en uno debido al resistor de "jalón hacia arriba" mostrado. Entonces, siempre y cuando todos los interruptores de salida de compuerta estén abiertos, esto es, todas las salidas estén en el estado 1, el bus también. Si cualquier salida de compuerta cambia a 0, el interruptor correspondiente de salida se cierra y el bus es "empujado hacia abajo" al estado 0. En otras palabras, el bus realiza una función AND en todas las salidas de compuerta conectadas con él. Algunas veces a esto se le conoce como conexión de "AND - cableado". Si se utiliza este arreglo de manejo por compuerta, la compuerta de salida de tres estados de la figura 3 puede reemplazarse por una compuerta de colector abierto NAND, según se muestra. Cuando Zsalida está alto (1), el bit almacenado en el seguro se alimenta al bus. Cuando Zsalida está bajo (0), el bus se deja en el estado 1 ocioso, permitiendo que los datos provenientes de otros registros se transfieran al bus.
En general, el diseño de tres estados permite transferencias de datos más veloces en comparación con el enfoque de colector abierto de drenaje abierto. Por esta razón su uso en el diseño de buses es mucho más común. La principal característica distintiva de un bus de colector abierto es su capacidad de AND - cableado, por lo tanto el arreglo de colector abierto se utiliza principalmente para líneas de buses en donde se requiera esta capacidad. Por ejemplo, a menudo se emplea en líneas de solicitud de interrupción.
Ahora se analizarán algunos aspectos de la temporización de transferencias de datos dentro de la CPU.

Figura 4.: estructura de bus de colector abierto
Por ejemplo, considérese la operación de adición del paso 2 del almacenamiento de una palabra en la memoria. A partir del momento en que la señal R2salida es igual a 1, hay un retraso temporal para que la compuerta se abra y para que después los datos viajen a través del bus hasta la entrada de la ALU. Los circuitos sumadores de la ALU provocan un retraso más. Para que el resultado se almacene en la forma adecuada en el registro Z, los datos deben mantenerse en el bus durante un periodo adicional igual al tiempo de preparación y de espera de este registro. Esta situación se muestra en el diagrama de temporización de la figura 5. La suma de los cinco tiempos de retraso define la duración mínima de la señal R2salida
La organización de bus único de la figura 1 representa sólo una de las posibilidades para interconectar distintos bloques de la CPU. Un arreglo alternativo es la estructura de dos buses mostrada en la figura 6. Todas las salidas de los registros están conectadas al bus A y todas las entradas de los registros están conectadas al bus B. Los dos buses están conectados a través del enlace de buses G, el cual, al habilitarse, transfiere los datos contenidos en el bus A al bus B. Cuando se deshabilita G, los dos buses están eléctricamente aislados. Obsérvese que el registro de almacenamiento temporal Z de la figura 1 no es necesario en esta organización debido a que, con el enlace de bus inhabilitado, la salida de la ALU puede transferirse en forma directa al registro destino. Por ejemplo, la operación de adición analizada antes (R3 ¬ [R1] + [R2]) ahora puede efectuarse de la siguiente forma:
|
PASO |
ACCION |
|
1 |
R1salida , Gcapacitado , Yentrada |
|
|
R2salida , Add , ALUsalida , R3entrada |
Figura 5.: Temporización de las señales de control durante el paso de Suma
Es importante observar que si los registros son seguros simples como el de la figura 4.3, el registro destino de la secuencia anterior debe ser diferente de R2, debido a que las dos operaciones R2entrada y R2salida no pueden realizarse al mismo tiempo. Esto se debe a que la ALU es una red combinatoria. Por lo tanto, carece de almacenamiento interno. Sin embargo, aún así es posible realizar la operación R2 ¬ [R1] + [R2], intercambiando R1salida y R2salida y reemplazando R3entrada por R2entrada en el paso 2. La restricción de que R2salida y R2entrada no puedan realizarse en el mismo paso puede atemperarse con el empleo de flip-flops disparados por flanco. Si hay uso de flip flops disparados por flanco, la temporización de una transferencia de registros que involucre a R2 permanece esencialmente igual que la de la figura 5, con Zentrada reemplazado por R2entrada. En este caso R2entrada representa la entrada de reloj al registro, la cual se considera como disparada por flanco negativa. La salida de R2 permanece sin cambio hasta t2, momento en el que los datos disponibles en el bus de entrada se cargan en R2.

Figura 6.: Estructura de dos buses
Considérese
un ejemplo más de organización
de la CPU. En la figura 7 se muestra una arquitectura
de tres buses, con cada bus conectado sólo a una salida y a varias entradas.
Al eliminar la necesidad de conectar más de una salida al mismo bus se
logran transferencias más rápidas de bus en forma simple. Se proporciona
un multiplexor en la entrada de cada uno de los dos registros de trabajo A y
13, lo cual permite que se carguen ya sea del bus de datos de entrada o del
bus de datos de registro.
Figura 7.: Estructura de tres buses
Los registros de aplicación general de la CPU de la figura 7 se muestran como un solo bloque. Se considera que están implantados utilizando una unidad de memoria de acceso aleatorio (RAM: Random-access memory). Debe enfatizarse que en este contexto el término RAM simplemente se refiere al tipo de hardware utilizado para implantar los registros y no debe confundirse con la RAM que constituye la memoria principal de la computadora. Esta última está conectada al bus externo.
EJECUCIÓN DE UNA INSTRUCCIÓN COMPLETA
Ahora se intentará conjuntar la secuencia de operaciones elementales necesarias para ejecutar una instrucción. Considérese la instrucción "Sumar el contenido de la localización NUM de la memoria al registro R1". Para simplificar las cosas, la dirección NUM se da en forma explícita en el campo de dirección de la instrucción. Entonces, la localización NUM se especifica en el modo directo de memoria. La ejecución de esta instrucción requiere de las siguientes acciones.
|
PASO |
ACCION |
|
1 |
PCsalida, MARentrada, Leer, Borrar Y, Fijar el acarreo de la ALU, Suma, Zentrada |
|
2 |
Zsalida, PCentrada, Espera a MFC |
|
3 |
MDRsalida, IRsalida |
|
4 |
Campo de dirección de IRsalida, MARentrada, Leer |
|
5 |
R1salida, Yentrada, Espera a MFC |
|
6 |
MDRsalida, Suma, Zentrada |
|
7 |
Zsalida, R1entrada |
|
8 |
Fin |
Figura 8.: Secuencia de control para la ejecución de la instrucción "Sumar el contenido de la localización direccionada de la memoria en el modo directo de la memoria al registro R1".
En la figura 8 se da la secuencia de pasos de control necesarios para implantar las operaciones anteriores en la estructura de bus único de la figura 1. Entonces, la ejecución de instrucción sucede de la siguiente forma. En el paso 1 la operación de traída de la instrucción se inicia cargando el contenido del PC en el MAR y enviando una solicitud de Leer a la memoria. A1 mismo tiempo se incrementa el PC en 1 a través del uso de la ALU. Esto se logra poniendo una de las entradas a la ALU (registro Y) en 0 y la otra entrada (bus de la CPU) en el valor presente que contenga el PC. Al mismo tiempo el acarreo a la ALU se iguala a 1 y se especifica una operación de Sumar.
El valor actualizado se regresa del registro Z al PC durante el paso dos. Obsérvese que el paso dos se inicia inmediatamente después de emitir la solicitud de Leer de a memoria, sin necesidad de esperar la conclusión de la función de la memoria. Sin embargo, el paso 3 tiene que retardarse hasta que se reciba el MFC. En el paso 3, a palabra traída de la memoria se carga en el IR (registro de instrucción: instruction register). Los pasos del 1 al 3 constituyen la fase de traída de instrucción de la secuencia de control. Desde luego, esta parte es la misma para todas las instrucciones.
En cuanto el IR está cargado, el circuito de decodificación de instrucción interpreta su contenido. Esto permite a la circuitería de control elegir las señales adecuadas para la parte restante de la secuencia de control, pasos 4 a 8, a los que se considera como la fase de ejecución. En el paso 4, el campo de dirección del IR que contiene la dirección NUM, es manejado por compuerta y se lleva al MAR y se inicia una operación de Leer de la memoria. Después el contenido de la memoria R1 se transfiere al registro Y. Cuando se completa la operación de Leer, el operando de la memoria está disponible en el registro MDR. La operación de adición se realiza en el paso 6 y el resultado se transfiere a R1 en el paso 7. La señal de Fin, paso 8, indica la conclusión de la ejecución de la presente instrucción y provoca que se inicie un nuevo ciclo de traída regresando de nuevo al paso 1.
Las ramificaciones se logran reemplazando el contenido actual del PC por la dirección de ramificación, esto es, la dirección de la instrucción a la cual se refiere una ramificación. Por lo común, la dirección de ramificación se obtiene sumando al valor actual del PC, un valor X de compensación, el cual está dado en el campo de dirección de la instrucción de ramificación. En la figura 9 se proporciona una secuencia de control que permite la ramificación de control incondicional utilizando la organización de bus único de la figura 1. Como de costumbre, la ejecución se empieza con la fase de traída y termina cuando la instrucción se carga en el IR en el paso 3. Para ejecutar la instrucción de ramificación, el contenido del PC se transfiere al registro Y en el paso 4. Después el valor de compensación X se envía por compuerta al bus y se realiza la operación de adición. El resultado, que representa la dirección de ramificación, se carga en el PC en el paso 6.
|
PASO |
ACCION |
|
1 |
PCsalida, MARentrada, Leer, Borrar Y, Fijar el acarreo de la ALU, Suma, Zentrada |
|
2 |
Zsalida, PCentrada, Espera a MFC |
|
3 |
MDRsalida, IRsalida |
|
4 |
PCsalida, Yentrada |
|
5 |
Campo de dirección de IRsalida, Suma, Zentrada |
|
6 |
Zsalida, PCentrada |
|
7 |
Fin |
Figura 9.: Secuencia de control para la ejecución de una instrucción de ramificación incondicional.
Es importante observar que en este ejemplo el PC se incrementa durante la fase de traída, sin importar el tipo de instrucción que se esté ejecutando. Así, en el momento en que el valor de compensación X se suma al contenido del PC, pasos 4 y 5 de la figura 9, este contenido ya se ha actualizado para que apunte a la instrucción que sigue en el programa a la instrucción de Ramificación. Por lo tanto, el valor de compensación X debería ser la diferencia entre la dirección de ramificación y la dirección que sigue de inmediato a la instrucción de Ramificación. Por ejemplo, si la instrucción de Ramificación está en la localización 1000 y se requiere ramificar a la localización 1050, el valor de X debería ser de 49.
Considérese ahora 1 caso de una ramificación condicional, en vez de una ramificación incondicional. La única diferencia entre este caso y el de la figura 9 es el de la necesidad de verificar el estado de los códigos de condición entre los pasos 3 y 4.Por ejemplo, si la circuitería de decodificación de instrucción interpreta el contenido del IR como una instrucción de Ramificación en caso negativo (BRN: Branch on Negative), la unidad de control opera de la siguiente forma: primero, se verifica el registro de código de condición. Si el bit N (negativo) es igual a 1, la unidad de control procede a los pasos del 4 al 7 como en la figura 9. Por otra parte, si N es igual a 0 se emite una señal de Fin. En realidad, esto concluye la ejecución de la instrucción de Ramificación y provoca que la instrucción inmediata del programa se traiga, cuando se realice una nueva operación de traer. Por lo tanto, la secuencia de control para la secuencia de Ramificación condicional BRN puede obtenerse a partir de la figura 4.9 reemplazando el paso 4 por:
|
4 |
If |
|
|
If N then PCsalida, Yentrada |
SECUENCIAMIENTO DE SEÑALES DE CONTROL
Para ejecutar instrucciones, la CPU debe disponer de algún medio para generar en la secuencia adecuada las señales de control analizadas antes. Los diseñadores de computadoras han utilizado una amplia variedad de técnicas para resolver este problema. Sin embargo, la mayoría de estas técnicas caen en una de las dos categorías:
En esta sección se analiza el control fijo (cableado permanente), seguido por una breve introducción al control microprogramado. Este último se analizará en detalle en el capítulo cinco.
Considérese la secuencia de señales de control dada en la figura 8. Resulta obvio que se requieren ocho lapsos que no se encimen para la ejecución adecuada de la instrucción representada por esta secuencia. Cada lapso debe tener una duración suficiente al menos para que sucedan las funciones especificadas en el paso correspondiente. Por el momento, considérese que todos los lapsos son de igual duración. Por lo tanto, es posible implantar el control necesario con el empleo de un contador manejado por un reloj, según se muestra en la figura 10. Cada estado o cuenta de este contador corresponde a uno de los pasos de las figuras 8 y 9. Por lo tanto, las señales de control necesarias están determinadas en forma única por la siguiente información:
El término banderas de condición indica aquellas señales que representan el estado de las diferentes secciones de la CPU y de las distintas líneas de control conectadas con ella, tales como la señal de condición del MFC de la figura 8.
A fin de lograr cierto conocimiento de la estructura interna de la unidad de control se empezará dando una visión simplificada del hardware relacionado con ella.
El bloque decodificador-codificador de la figura 10 es simplemente un circuito combinatorio que genera las salidas de control necesarias, dependiendo del estado de todas sus entradas. Al separar las funciones de decodificación y codificación se obtiene el diagrama de bloque más detallado de la figura 11. El paso decodificador proporciona una línea separada de señal para cada paso, o lapso, en la secuencia de control. De manera semejante, la salida del decodificador de instrucción consiste en una línea separada para cada instrucción de máquina. Esto es, para cada instrucción cargada en el IR, una de las líneas de salida de la INSl a INSm, se iguala a 1 y todas las otras líneas a 0.
Todas las señales de entrada al bloque de codificación de la figura 11 deben combinarse para que generen las señales individuales de control Yentrada, PCsalida, Suma, Fin, etc. La estructura del codificador está ejemplificada por el circuito dado en la figura 12. Este circuito es un implante de la función lógica
Zentrada = T1 + T2 · ADD + T5 · BR + ...
Esto es, la señal de control Zentrada, que habilita la entrada al registro Z, se enciende, ON, durante el lapso T1 sin importar la instrucción, durante T6 para una instrucción ADD, y así sucesivamente. Esta parte de la función Zentrada ha sido compilada a partir de las secuencias de control de las figuras 8 y 9. El término T, es común a todas las instrucciones ya que ocurre durante la fase de traída. De manera semejante, la señal de control Fin, figura 13, se genera a partir de la función lógica
Fin = T8 ·
ADD + T7 ·
BR + (T7 ·
N + T4 ·
) ·
BRN + ...
En la figura 11 se muestra la forma en que es posible utilizar la señal Fin para iniciar un nuevo ciclo de traída de instrucción, poniendo el contador de paso de control en su valor inicial.
Figura
10.: Organización
de la unidad de control
Figura
11.: Separación de las funciones de decodificación y codificación
Figura
12.: Generación de la señal de control Zentrada
Las señales MFC y WMFC (Wait for, MFC: espera a MFC) requieren de algunas consideraciones especiales. La señal misma WMFC puede generarse de la misma forma que las otras señales de control, utilizando la ecuación lógica.
WMFC = T2 + T5 · ADD + ...
Figura
13.: Generación de la señal de control Fin
El efecto que se desea con esta señal es retrasar el inicio del siguiente paso de control hasta que no se reciba la señal MFC de la memoria principal. Esto puede lograrse inhibiendo el avance del contador de paso de control durante el periodo requerido. Considérese que el contador de paso de control está regido por una señal llamada RUN. (Corrida)

Figura 14.: Control de la temporización de la CPU
El contador avanza un paso en cada pulso de reloj sólo si la señal RUN es igual a 1 . El circuito de la figura 14a logrará el control deseado. En cuanto la señal WMFC se genera, RUN se vuelve igual a 0. Entonces, el conteo se inhibe y ningún cambio de señal tiene lugar. La CPU permanece en este estado de espera hasta que la señal MFC se activa y el contador de paso de control se habilita de nuevo. E1 siguiente pulso de reloj incrementa el contador, lo cual da como resultado que la señal WMFC se iguale de nuevo a cero.
El circuito simple de la figura 14a origina un importante problema. La señal MFC es generada por la memoria principal, cuya operación es independiente del reloj de la CPU. Por lo tanto, MFC es una señal asíncrona que puede llegar en cualquier momento a ese reloj. Sin embargo, el funcionamiento adecuado de la circuitería de la CPU, incluyendo el contador de paso de control, requiere que todas las señales de control tengan tiempos de preparación y de espera con relación al reloj, según se ilustró en la figura 5. Por lo tanto, la señal MFC debe estar sincronizada con el reloj de la CPU antes de ser utilizada para producir la señal RUN. Para este fin puede utilizarse un flip-flop, según se muestra en la figura 14b. La salida de este flip-flop que se considera como disparada por flanco negativo, cambia en el extremo descendente de CLK. Esto deja suficiente tiempo para que la señal RUN se ponga antes del siguiente flanco ascendente del CLK el cual avanza al contador. Un diagrama de temporización para una operación de traída de instrucción se da en la figura 15. En esta figura, se ha considerado que la memoria principal tendrá alta la señal MFC hasta que descienda la señal de Leer, indicando que la CPU ha recibido los datos.
Figura
15.: Temporización de las señales de control durante la traída
de instrucciones
El análisis anterior ha presentado una visión simplificada de la forma en la cual puede generarse la secuencia de señales de control necesaria para traer y ejecutar instrucciones. La organización general representada en las figuras 10 y 11, junto con los diagramas de circuito de las figuras de la 12 a la 14, representa un enfoque que permite la implantación de un conjunto arbitrario de instrucciones. Ahora se considerarán algunos aspectos prácticos de la realización de tal circuitería.
Por necesidad, el enfoque empleado en un sistema digital debe tener en cuenta las capacidades y limitaciones de la tecnología del implante elegido. Los circuitos de las figuras 12 y 13 son fáciles de comprender y de diseñar. Sin embargo, es fácil apreciar que el número de compuertas lógicas necesarias para ello y la complejidad del cableado hacen que este enfoque directo resulte poco práctico. El implante de las computadoras modernas se basa en el empleo de la tecnología VLSI. En VLSI, estructuras que abarcan patrones regulares de interconexión resultan mucho más fáciles de implantar que las conexiones aleatorias empleadas en los circuitos anteriores. Tales estructuras son arreglos lógicos programables (PLA: Programable logic array). Según se describe en el apéndice A, un PLA consiste en un arreglo de compuertas AND seguido por un arreglo de compuertas OR. Puede utilizarse para implantar funciones lógicas combinatorias de varias variables. Todo el bloque de codificador - decodificador de la figura 10 puede implantarse bajo la forma de un solo PLA. Entonces, la sección de control de una CPU, o para este caso, de cualquier sistema digital puede organizarse según se muestra en la figura 16.

Figura 16.: Implante de un controlador de secuencia en un chip VLSI
Antes de concluir el análisis de los controladores fijos, resulta conveniente hacer unos cuantos comentarios. Hasta ahora se ha supuesto que todos los pasos de control suceden en lapsos iguales. Esto lleva a implantar un contador de condición manejado por un reloj. Resulta fácil apreciar que este enfoque no es muy eficiente en lo referente al uso de la CPU, ya que no todas las operaciones requieren del mismo tiempo. Por ejemplo, por lo general una transferencia simple de registro es mucho más rápida que una operación que incluya adición o sustracción. Es posible, al menos en teoría, construir una unidad de control asíncrona por completo. En este caso, el reloj estaría reemplazado por un circuito que haría avanzar el contador de paso en cuanto se concluya cada paso. En tal enfoque el problema principal es la incorporación de algunos medios confiables de detectar la conclusión de varias operaciones. Según resulta el retraso de propagación en muchos casos es una función, no sólo de las compuertas utilizadas, sino también de los datos específicos que se estén procesando.
Sin embargo, es posible efectuar algunos arreglos. Por ejemplo, puede establecerse una retraso máximo para cada operación y las señales de temporización pueden generarse con esa base. También es posible utilizar relojes separados para subsecciones individuales de un circuito. La comunicación entre varias subsecciones puede entonces realizarse en forma asíncrona, de una manera muy parecida a la de las transferencias de datos entre la CPU y la memoria principal.
Todas las señales de control requeridas dentro de la CPU pueden generarse utilizando un contador de estado y un circuito PLA. Se analizará un enfoque alternativo que se utiliza mucho en el diseño de computadoras. Primero se presentarán algunos términos utilizados con frecuencia.
Se empezará por definir palabra de control (CW: control word) como una palabra cuyos bits individuales representan las diferentes señales de control de la figura 11. Por lo tanto, cada uno de los pasos de control de la secuencia de control de una instrucción define una combinación única de unos y ceros en la CW. Por ejemplo, las CW correspondientes a los pasos 5, 6 y 7 de la figura 8 son como se muestran en la figura 17. Una secuencia de CW correspondientes a la secuencia de control de una instrucción de máquina constituye el microprograma para esa instrucción. Las palabras individuales de control en este microprograma por lo general se denominan microinstrucciones.

Figura 17.: Ejemplo de microinstrucciones para la Figura 8
Considérese que los microprogramas correspondientes al conjunto de instrucciones de una computadora están almacenados en una memoria especial a la que se denomina la memoria de microprograma. La unidad de control puede generar las señales de control para cualquier instrucción, leyendo en forma secuencial las CW del microprograma correspondiente en la memoria de microprograma. Esto sugiere organizar la unidad de control según se muestra en la figura 18. Para leer en forma secuencial las palabras de control a partir de la memoria de microprograma se emplea un contador de microprograma (m PC). El bloque etiquetado "generación de dirección inicial" es responsable de la carga de la dirección inicial del microprograma en el m PC cada vez que se carga una nueva instrucción en el IR. Después, el m PC es incrementado en forma automática por el reloj, provocando que se lean microinstrucciones sucesivas de la memoria. Por lo tanto, las señales de control serán entregadas a las diferentes partes de la CPU en la secuencia correcta.
Hasta el momento no se ha analizado
una importante función de la unidad de control y, en realidad, no se
la puede implantar por medio de la organización simple de la figura 18.
Esta es la situación que surge cuando se requiere que la unidad de control
verifique el estado de los códigos de condición o banderas de
condición, a fin de elegir entre cursos
alternativos de acción. Se ha visto que en el caso de control fijo, esta
situación se maneja incluyendo una función lógica adecuada,
como en la ecuación "Fin = T8 ·
ADD + T7 ·
BR + (T7 ·
N + T4 ·
) ·
BRN + ...", en la circuitería de codificación. Otro enfoque diferente
que se utiliza con frecuencia con el control microprogramado se basa en la introducción
del concepto
de ramificación condicional en el microprograma. Esto puede lograrse
ampliando el conjunto de microinstrucciones a fin de incluir algunas de ramificación
condicional. Además de la dirección de ramificación, estas
microinstrucciones pueden especificar cuál de las banderas de instrucción,
códigos de condición o
tal
vez bits del registro de instrucción deben verificarse como condición
para que tenga lugar la ramificación.
Figura 18.: Organización básica de una unidad de control microprogramado
Ahora es posible implantar la instrucción de Ramificación en Negativo por medio de un microprograma como el que se muestra en la figura 19. Se considera que el microprograma para esta instrucción empieza en la localización 25. Por lo tanto, una microinstrucción de Ramificación, al final de la parte de traída de instrucción del microprograma, transfiere el control a la localización 25. Debe observarse que la dirección de ramificación de esta instrucción de Ramificación es en realidad la salida del bloque de "generación de dirección inicial". En la localización 25, una microinstrucción de ramificación condicional prueba el bit N de los códigos de condición y provoca una ramificación a Fin, si este bit es igual a 0.

Figura 19.: Microprograma para la instrucción Ramificar en Negativo
Para
apoyar la ramificación de microprogramas, la organización de la
unidad de control debe modificarse según se muestra en la figura 20.
Figura 20.: Organización de la unidad de control para permitir ramificación condicional en el programa
Los bits de la palabra de microinstrucción que especifican las condiciones y dirección de ramificación se alimentan al bloque "generador de dirección inicial y ramificación". Este bloque realiza la función de cargar una nueva dirección en el PC cuando así se le indica, por medio de una microinstrucción. Para habilitar el implante de una ramificación condicional, las entradas a este bloque consisten en banderas de condición y códigos, tanto de condición, como del contenido del registro de instrucción. Por lo tanto, el ~ PC siempre se incrementa cada vez que se trae una nueva microinstrucción a partir de la memoria de microprograma, excepto en las siguientes situaciones:
Organizaciones semejantes a la de la figura 20 se han implantado en muchas máquinas. Sin embargo, también se han desarrollado algunos enfoques alternativos que se han implantado en la práctica.
En conclusión, deben observarse algunos puntos importantes en lo referente a las máquinas microprogramadas, los cuales son:
En este trabajo se presentó un panorama general de la organización de la unidad central de procesamiento de una computadora. Muchas variaciones de las organizaciones aquí presentadas se encuentran en las máquinas disponibles en el comercio. La elección de una organización específica implica tener que equilibrar velocidad de ejecución y costo de implante. También se ve afectada por otros factores, tales como la tecnología que se emplee, la flexibilidad de modificación, o el deseo de proporcionar algunas capacidades especiales en el conjunto de instrucciones de la computadora.
Se presentaron dos enfoques en lo relativo al implante de la unidad de control de una CPU: control fijo y control microprogramado. El control microprogramado proporciona considerable flexibilidad en el implante de conjuntos de instrucciones. También facilita la adición de nuevas instrucciones a máquinas ya existentes.
Cuando se presentó por primera vez el control microprogramado, resultaba mucho más lento que el control fijo, debido a la baja velocidad del almacenamiento ROM. Sin embargo, los avances en la tecnología ROM han reducido las diferencias de velocidad. Como resultado, ahora el uso del control microprogramado es mucho más frecuente debido a su flexibilidad.
ECKHOUSE, Richard, L. Robert Morris. Sistemas de Minicomputadoras. Organización, Programación y Aplicaciones (PDP-11). 1982. Editorial Dossat, S.A. Madrid. España.
GORDON, Davis. Management Information Systems: Conceptual, Foundations, Structure, and Development. 1974. McGraw Hill Inc. United States of America.
HAMACHER V. Carl, Zvonko G. Vranesic, Safwat G. Zaky. Computer Organization. 1987. McGraw Hill Inc. United States of America.
HERNÁNDEZ CABALLERO, S. Enciclopedia Temática de Informática. Tomo 1. 1990. Maveco de Ediciones S.A. España.
En esta sección agruparemos a las mayores casas diseñadoras de CPU's; así como a sus productos mas actuales y conocidos en el mundo de los microprocesadores
Las primeras series, funcionaban a 60 y a 66 Mhz., y debido a que trabajaban a 5V. tenían problemas de sobrecalentamiento. Además trabajaban a la misma velocidad que el propio bus. Estos modelos se pueden actualizar mediante el Overdrive de Intel a 120 ó a 133, que duplica la velocidad del bús, e incorpora un reductor de 5V a 3,3V.
A partir del modelo de 75 Mhz ya se empieza a trabajar con multiplicadores de frecuencia internos para que el rendimiento de los procesadores sea mayor que el que el bus y la memoria permiten. Además se soluciona el problema de "calentura" rebajando la tensión de funcionamiento de los nuevos modelos a 3,52 voltios, con lo que se consigue un menor consumo.
De ésta serie de microprocesadores poco se puede decir que no se sepa. Fué famoso en ellos un "bug" detectado que en unas circunstancias muy concretas provocaba un error de cálculo.
Está
optimizado para aplicaciones de 16 bits.
Dispone
de 8Kb de caché de instrucciones + 8Kb de caché de datos.
Utiliza
el zócalo de tipo 5 (socket 5) o el de los MMX (tipo 7). También
es conocido por su nombre clave P54C.
Está
formado por 3,3 millones de transistores
|
Especificaciones de la gama Pentium |
||||||
|
Procesador |
Frecuencia |
Tecnología |
Voltaje |
Bus |
Multiplicador |
Socket |
|
P60 |
60Mhz. |
0,8 µ |
5v |
60Mhz |
- |
4 |
|
P66 |
66Mhz |
0,8 µ |
5v |
66Mhz |
- |
4 |
|
P75 |
75Mhz |
0,6 µ |
3,52v |
50Mhz |
1,5 |
5 / 7 |
|
P90 |
90Mhz |
0,6 µ |
3,52v |
60Mhz |
1,5 |
5 / 7 |
|
P100 |
100Mhz |
0,6 µ |
3,52v |
66Mhz |
1,5 |
5 / 7 |
|
P120 |
120Mhz |
0,35 µ |
3,52v |
60Mhz |
2 |
5 / 7 |
|
P133 |
133Mhz |
0,35 µ |
3,52v |
66Mhz |
2 |
5 / 7 |
|
P150 |
150Mhz |
0,35 µ |
3,52v |
60Mhz |
2,5 |
7 |
|
P166 |
166Mhz |
0,35 µ |
3,52v |
66Mhz |
2,5 |
7 |
|
P200 |
200Mhz |
0,35 µ |
3,52v |
66Mhz |
3 |
7 |
El Pentium MMX es una mejora del Classic al que se le ha incorporado un nuevo juego de instrucciones (57 para ser exactos) orientado a mejorar el rendimiento en aplicaciones multimedia, que necesitan mover gran cantidad de datos de tipo entero, como pueden ser videos o secuencias musicales o graficos 2D. Al ser un juego de instrucciones nuevo, si el software que utilizamos no lo contempla, no nos sirve para nada, y ni Windows 95, ni Office 97 ni la mayor parte de aplicaciones actuales lo contemplan (Windows 98 si). Sin embargo, aun en el caso de que no utilicemos tales instrucciones, notaremos una mejora debido a que, entre otras mejoras, dispone de una caché que es el doble de la del Pentium "normal", es decir 16 Kb para datos y 16 Kb para instrucciones.
La gama MMX empieza en los 133Mhz, pero sólo para portatiles, es decir la versión SL. Para ordenadores de sobremesa la gama empieza en los 166Mhz., luego viene el de 200 y finalmente el de 233 que utiliza un multiplicador de 3,5 y que además necesita de algo más de corriente que sus compañeros.

Sigue siendo un procesador
optimizado para aplicaciones de 16 bits.
Requiere
zócalo de tipo 7 (socket 7). También es conocido como P55C.
Trabaja
a doble voltaje 3,3/2,8V.
Utiliza
la misma tecnología de 0,35 micras.
Lleva
en su interior 4,5 millones de transistores.
Tambien podemos distinguir según el encapsulado sea plástico o
cerámico. El mejor y más moderno es el primero.
Este es uno de los mejores procesadores que ha sacado Intel, a pesar de su relativa antigüedad. Parte de este mérito lo tiene la caché de segundo nivel, que está implementada en el propio chip, y por tanto se comunica con la CPU a la misma velocidad que trabaja ésta internamente.
El zócalo es específico para este modelo y es conocido como Tipo 8.
No cuenta con el juego de instrucciones MMX.
Está optimizado para aplicaciones de 32 bits. (Windows NT, Unix, OS/2...)
Dispone de una caché L1 de 8KB + 8KB. (instrucciones + datos)
Hay una gama de procesadores que posee 256 KB. de caché L2, otra 512, y por último un modelo que cuenta con un Mega.
Puede cachear hasta 64 GB. de RAM.
Está formado por 5,5 millones de transistores.
|
Especificaciones de la gama Pentium Pro |
||||||
|
Procesador |
Frecuencia |
Tecnología |
Caché L2 |
|||