El IPC-16A PACE de National Semiconductor , acrónimo de "Processing and Control Element" (Elemento de Procesamiento y Control), fue el primer microprocesador comercial de 16 bits de un solo chip , anunciado a finales de 1974. [ 1 ] Era una implementación de un solo chip de su arquitectura IMP-16 de cinco chips de principios de 1973 , que a su vez se había inspirado en la minicomputadora Data General Nova . Al IMP-16 básico, PACE añadió un nuevo modo operativo, el "modo byte", que era útil para trabajar con datos de 8 bits como texto ASCII .
Implementado en tecnología pMOS , como era común en la época, el PACE requería tres tensiones de alimentación y un reloj externo con señal suficiente para controlar la lógica interna. Normalmente, este reloj era suministrado por el chip STE. La mayoría de los sistemas PACE también requerían el chip BTE para convertir las señales de tensión internas más altas a niveles TTL , utilizados por el resto del sistema. Sus pines de dirección y datos multiplexados también requerían lógica adicional.
Aunque National Semiconductor tenía acuerdos de subcontratación con Signetics y Rockwell Semiconductor , ninguna de las dos compañías produjo el diseño PACE. Al PACE le siguió el INS8900 , que tenía la misma arquitectura pero estaba implementado en nMOS . Esta versión facilitó la interfaz eléctrica y también corrigió varios errores en la lógica del PACE y aumentó la velocidad en aproximadamente un 50 %. [ 2 ] Para cuando estuvo disponible, estaban apareciendo CPU de 16 bits de mayor rendimiento, y la compañía comenzó a restar importancia a las ventas de la línea.
Descripción
Físico

El PACE se presentaba en un encapsulado DIP ( Dual In-line Package ) de 40 pines , originalmente de cerámica. Al basarse en lógica pMOS , la serie PACE requería tres tensiones de alimentación: +5 V (V SS , pin 20), +8 V (V BB , pin 23) y -12 V como nivel de tierra (V GG , pin 29). El nivel de +3 V se suministraba normalmente mediante electrónica sencilla alimentada por la línea de +5 V, lo que reducía la complejidad de la fuente de alimentación .
El chip se controlaba normalmente mediante un reloj externo de 750 nanosegundos (1,33 MHz ) que utilizaba el chip System Timing Element (STE) para generar señales con la intensidad requerida. [ 2 ] Dado que estas señales también eran utilizadas por dispositivos externos, las señales de reloj estaban a niveles TTL , +5 V, a diferencia de la mayoría de los pines, que estaban a +8 V. [ 3 ]
Como las señales externas se presentaban al nivel de +8 V, la interconexión del sistema con dispositivos comunes que funcionan a niveles TTL no era trivial. Por esta razón, los sistemas que utilizaban el PACE normalmente incluían un elemento transceptor bidireccional (BTE). Este funcionaba en conjunto con el PACE para producir un conjunto completo de señales de bus a voltajes TTL que luego podían usarse para interconectarse fácilmente con la mayoría de los dispositivos contemporáneos, como la SRAM . [ 4 ]
Para poder almacenar direcciones y datos de 16 bits en un encapsulado DIP de 40 pines, se multiplexó el mismo conjunto de 16 pines para que presentaran una dirección y para que leyeran y escribieran datos en ciclos separados. Esto requirió que los dispositivos externos, como la memoria principal , almacenaran la dirección entre ciclos. [ 5 ]
Diseño interno
El IMP-16 de National Semiconductor se inspiró en el Data General Nova, pero presentaba algunas diferencias menores en su ISA. Entre ellas, destacaba el manejo de los cuatro registros del procesador de 16 bits accesibles por el usuario. En el Nova, los dos primeros registros eran acumuladores de propósito general y se utilizaban para la mayoría de las operaciones aritméticas y lógicas básicas, mientras que los dos siguientes podían utilizarse como operandos o como registros de índice . El IMP-16 siguió este modelo, [ 6 ] pero el PACE modificó varias instrucciones para que operaran únicamente sobre el primer acumulador, AC0. [ 2 ]
El Nova original no implementaba una pila en hardware, aunque esta se añadió en los modelos Nova 3 posteriores a partir de 1975. PACE implementó un estilo diferente de pila utilizando un puntero de pila oculto que se incrementa y decrementa automáticamente cuando PUSHse PULLencuentran instrucciones. El contador de programa (PC) se inserta o extrae automáticamente de la pila durante las llamadas y retornos de subrutinas . Instrucciones adicionales permiten insertar y extraer también los cuatro registros y el registro de estado y control. [ 7 ]
PACE tiene diez ubicaciones internas de 16 bits que almacenan los valores superiores de la pila. Una característica única de PACE es que, cuando la pila está casi llena y se intenta otra operación de inserción (push), o cuando está vacía tras un intento de extracción (pull), se genera una interrupción . Esta interrupción se utiliza normalmente para llamar al código del controlador de interrupciones , que copia algunos o todos los valores desde o hacia la pila a la memoria principal . Esto permite que los registros internos de la pila se utilicen como una caché de una pila de mayor tamaño basada en memoria. [ 7 ]
El registro de indicadores de estado y control también era de 16 bits de ancho. Los bits 0 y 15 están ambos establecidos en 1 y normalmente no se utilizan, mientras que los catorce restantes se utilizan activamente. Esto incluía indicadores comunes como CRY para indicar que una suma resultó en un acarreo, OVF si se desbordó y LINK, que indicaba que un bit necesitaba ser desplazado durante las instrucciones de desplazamiento y rotación. [ 7 ] LINK normalmente se maneja usando el indicador de acarreo en la mayoría de los diseños de CPU de microcomputadoras , pero tener dos indicadores separados es más común en minicomputadoras donde hay suficientes bits de estado disponibles, ya que permite que los dos sean rastreados por separado durante una serie de instrucciones de desplazamiento/rotación y suma, que es una secuencia común. El indicador IN EN, normalmente 1, permite habilitar o deshabilitar las interrupciones. [ 8 ] Una característica única del PACE, no presente en el IMP-16, es el indicador BYTE. Cuando esta función está activada, se accede a los datos en palabras de 8 bits en lugar de 16. Esto permite un procesamiento más sencillo de datos de 8 bits, como el texto ASCII . [ 8 ]
El resto de los bits en el SCF se asignan principalmente a pines en la parte exterior del chip. Los bits del 1 al 5 son los indicadores IE1 a IE5, que se utilizan para controlar las interrupciones de forma prioritaria. IE1 se activa solo en caso de desbordamiento o subdesbordamiento de pila. Los otros cuatro se pueden usar para deshabilitar líneas de interrupción individuales o, más comúnmente, para producir un valor binario del 0 al 15 que los dispositivos externos utilizan para determinar si deben o no realizar una interrupción. Por ejemplo, si la suma de los valores de estos indicadores es 5, cualquier dispositivo con un valor de interrupción de 5 o inferior (1 es la prioridad más alta) puede expresarlo; un dispositivo que desee llamar a una prioridad menor, por ejemplo 7, recibe la instrucción de mantenerla. [ 8 ]
De manera similar, los indicadores SCF F11 a F14 se utilizan como salidas para proporcionar control directo sobre dispositivos externos. Por ejemplo, podrían usarse para indicar que el dispositivo 6 debe presentar datos en el bus, lo cual podría hacer mapeando 128 bytes de búfer interno en la página base dividida mencionada anteriormente. [ 8 ]
Modos de direccionamiento y formatos de instrucción
A diferencia de la mayoría de los diseños de microcomputadoras de la época, el PACE no utilizaba instrucciones de longitud variable; todas las instrucciones usaban 16 bits. Las palabras de 16 bits se dividían en una serie de campos de bits para el formato de instrucción. Los seis bits superiores, del 10 al 15, contenían el código de operación , mientras que los bits 8 (R de Relativo) y 9 (X de índice) indicaban el modo de direccionamiento . Los ocho bits restantes de la instrucción normalmente contenían una dirección de 8 bits. [ 9 ] Esto significaba que no se podía especificar directamente una ubicación de memoria arbitraria; se utilizaban varios sistemas diferentes para construir la dirección de 16 bits requerida a partir del valor de 8 bits. Había 43 instrucciones y 45 códigos de operación, con dos códigos de operación para cada una de las funciones LD( STvéase más abajo). [ 10 ]
Cuando X era cero, los bits de dirección representaban una dirección directa en la memoria. Con R también establecido a cero, la dirección estaba dentro de la página base, [ a ] normalmente los primeros 256 bytes de memoria. Al establecer R en 1 y X en 0, se usaban los ocho bits restantes como un desplazamiento desde el PC. Al establecer el bit X en 1, se activaba la indexación, utilizando los ocho bits además de los valores en los registros de índice; con R en 0, se sumaba el valor en AC2, y al establecerlo en 1, se usaba AC3 en su lugar. [ 9 ]
Normalmente, la página base eran los primeros 256 bytes de memoria, pero cuando BPSse activaba el pin, este dividía la página base entre los primeros y los últimos 128 bytes. [ 9 ] La idea era que los dispositivos externos se asignaran a estas ubicaciones de memoria altas y pudieran monitorear fácilmente las escrituras y lecturas examinando la dirección en el bus y viendo si los nueve bits superiores eran todos 1. Curiosamente, no hay ninguna instrucción para cambiar la configuración del pin BPS; en cambio, la mayoría de los sistemas conectaban el pin a uno de los pines de estado y luego usaban las instrucciones de cambio de estado para controlarlo. [ 11 ]
El direccionamiento indirecto en el PACE era limitado y se soportaba principalmente mediante las instrucciones ` LDand` ST, que cargaban y guardaban valores entre los registros y la memoria. Para indicar el direccionamiento indirecto se utilizaban códigos de operación separados, en lugar de los bits de indicación de direccionamiento. Cuando se utilizaba, la dirección se construía de forma normal, sumando los ocho bits de dirección a la página base o al PC. A continuación, se leía el valor de 16 bits en esa ubicación de memoria y se cargaba o almacenaba desde esa dirección. Cuando se combinaba con el indicador X, el desplazamiento de 8 bits se sumaba o restaba primero al registro de índice indicado. [ 12 ]
Otro usuario del direccionamiento indirecto fue ISZy DSZ. Estas instrucciones incrementaban o decrementaban un valor en la memoria y se usaban comúnmente para implementar bucles, por lo que el direccionamiento indirecto era común ya que la variable de control del bucle podía estar ubicada fuera del bloque de código. Otra característica interesante de estas instrucciones era que (en cualquier modo de direccionamiento) si el valor se cambiaba a cero, SKse llamaba a la instrucción ip. Esto permitía salir de los bucles sin ninguna comprobación adicional; normalmente la última instrucción del bucle era un JMPretorno al principio del bucle, pero cuando el valor llegaba a 0, automáticamente SKlo superaba JMPy continuaba. [ 13 ]
Este estilo de control de bucle es común en minicomputadoras, pero no tanto en diseños de microcomputadoras. En microcomputadoras dedicadas, este tipo de operación normalmente se realiza con varias instrucciones: una que compara el índice del bucle con un valor dado (en este caso, cero) y, si no se cumple la condición, vuelve al principio. El salto inherente al cero de la PACE era una característica común de las minicomputadoras que aceleraba el rendimiento del bucle al evitar una prueba separada. Cuando no era apropiado, el incremento o decremento podía establecer el desplazamiento en cero para evitar activar esta función. [ 13 ]
INS8900

La continua mejora en la fabricación de semiconductores a principios de la década de 1970 condujo a la introducción del concepto de lógica NMOS , o nMOS. Este tipo de lógica tiene la importante ventaja de que sus transistores internos no requieren un voltaje elevado en la capa del sustrato, como ocurre con los pMOS. En la práctica, esto significa que un procesador nMOS puede funcionar con solo dos voltajes de entrada en lugar de tres, y la alimentación positiva se puede configurar a +5 V, lo que facilita enormemente la interfaz con circuitos TTL. [ 14 ]
National Semiconductor aprovechó esta técnica con un rediseño del PACE en nMOS para crear el INS8900. La nueva versión conservó gran parte del diseño original del chip, aunque, como era de esperar, algunos de los pines de alimentación cambiaron sus entradas: el VSS original de +5 V pasó a ser tierra (GND), VBB cambió de +8 a -8 V, el antiguo VGG de -12 V se convirtió en el VDD de +12 V y CLK se convirtió en CC de +5 V. Por razones desconocidas, NCLK se convirtió en CLKX. [ 3 ]
El cambio más importante en términos de uso fue que los distintos pines de señal ahora funcionaban con voltajes TTL, lo que les permitía comunicarse directamente con sistemas externos como la memoria. Este cambio no solucionó el problema de tener que almacenar la dirección en el bus de datos/direcciones compartido, pero sí simplificó mucho dicho almacenamiento. En lugar de requerir el chip BTE, relativamente complejo, esta tarea ahora podía realizarse con componentes TTL comunes, aunque National Semiconductor recomendaba sus propios INS8208 e INS8212 para este propósito. [ 15 ] El bus ahora podía implementarse con un único INS8208 que almacenaba en búfer las señales de control que indicaban si el bus estaba en modo de dirección o de datos (entre otras cosas), dos INS8208 más para almacenar en búfer 8 bits de datos cada uno, y dos INS8212 para almacenar 8 bits de la dirección cada uno. [ 16 ]
Otro cambio posible gracias a las menores cargas en nMOS fue que las señales de reloj ya no requerían tanta energía. Esto eliminó la necesidad del STE, que podía reemplazarse por un cristal adecuado y un inversor 74C04 , disponibles en muchos fabricantes. [ 16 ] Como el reloj externo ya no era de alta potencia, solo se necesitaba una entrada de reloj, la antigua NCLK, ahora renombrada CLKX. La antigua segunda fase ahora se generaba en la CPU. Estos cambios también permitieron que el sistema funcionara a mayor velocidad. Se recomendó un cristal de 2 MHz, lo que aumentó la velocidad de forma bastante significativa con respecto a los 1,33 MHz del PACE. Esto mejoró los tiempos de instrucción a entre 8 y 16 microsegundos. [ 2 ]
Otros cambios incluyeron varias correcciones a problemas encontrados en el PACE. Entre ellos, destacaba un problema con la interrupción que se activaba cuando se llenaba la pila. En el PACE, esto no funcionaba correctamente; si la interrupción llegaba exactamente al mismo tiempo que una NIR3 o NIR5, se llamaba al código de interrupción incorrecto desde la ubicación 0 en lugar de la 2. National Semiconductor sugirió no usar esta función o colocar la misma dirección en ambas ubicaciones para que siempre llamaran al mismo código, lo que permitiría determinar qué había ocurrido realmente. [ 17 ] Hubo problemas similares cuando una interrupción de nivel 0 ocurría dentro de los 12 ciclos de otras interrupciones, lo que provocaba que se llamara al código incorrecto. [ 18 ] Todos estos problemas se corrigieron en el 8900. [ 17 ]
Actuación
Aunque el PACE funcionaba a una velocidad de reloj relativamente alta para la época, la arquitectura del conjunto de instrucciones (ISA) se implementó mediante microcódigo y el bus multiplexado requería dos ciclos para cada acceso a memoria. Como resultado, una instrucción típica tardaba entre 12 y 30 microsegundos en completarse, lo que la hacía aproximadamente igual a la velocidad de los procesadores de 8 bits contemporáneos como el Intel 8080. [ 2 ] Esto aún proporcionaba una ventaja al trabajar con grandes cantidades de datos, por ejemplo, en una biblioteca de punto flotante , ya que podía procesar el doble de datos en una sola instrucción. [ 4 ]
Notas
Referencias
Citas
- ↑ "Familia de CPU PACE de National Semiconductor" .
- ^ Abramovitz y cols . 1981 , pág. 1.1.
- ^ Abramovitz y col. 1981 , pág. 1.10.
- ^ Abramovitz y col. 1981 , pág. 1.2.
- ^ Abramovitz y col. 1981 , pág. 1.3.
- ^ Abramovitz y col. 1981 , pág. 1.4.
- ^ Abramovitz y cols . 1981 , pág. 1.5.
- ^ Abramovitz y cols . 1981 , pág. 1.9.
- ^ Abramovitz y cols . 1981 , pág. 1.6.
- ↑ Abramovitz et al. 1981 , Tabla 1.2.
- ^ Abramovitz y col. 1981 , pág. 1.7.
- ^ Abramovitz y col. 1981 , págs. 1,8-1,9.
- ^ Abramovitz y col. 1981 , pág. 1.24.
- ↑ Critchlow, DL (2007). "Recuerdos sobre la miniaturización de MOSFET" . Boletín informativo de la IEEE Solid-State Circuits Society . 12 (1): 19– 22. doi : 10.1109/N-SSC.2007.4785536 .
- ^ Abramovitz y col. 1981 , pág. 2.
- ^ Abramovitz y col. 1981 , pág. 1.4, Figura 1.2.
- ^ Abramovitz y col. 1981 , pág. 1.22.
- ^ Abramovitz y col. 1981 , pág. 1.23.
Bibliografía
- IPC-16A PACE , hoja de datos de National Semiconductor, Bitsavers (06/01/2018)
- Abramovitz, Bob; Enger, Janice; Ingraham, Curtis; Jacobson, Susanna; McGuire, Patrick (1981). Manual del microprocesador de 16 bits de Osborne . Osborne/McGraw-Hill. ISBN 0-931988-43-8.
- Microprocesadores de National Semiconductor
- microprocesadores de 16 bits