stringtranslate.com

PACE nacional de semiconductores

Troquel PACE de National Semiconductor (IPC-16A/500)

El IPC-16A PACE de National Semiconductor , abreviatura de "Elemento de procesamiento y control", fue el primer microprocesador comercial de un solo chip de 16 bits , anunciado a finales de 1974. [1] Fue una implementación de un solo chip de sus cinco de principios de 1973. -Chip de arquitectura IMP-16 , que a su vez se había inspirado en el miniordenador Data General Nova . Al IMP-16 básico, PACE agregó un nuevo modo operativo, "modo byte", que era útil para trabajar con datos de 8 bits como texto ASCII .

Implementado en pMOS , como era común en la época, PACE requería tres voltajes de suministro y un reloj externo con suficiente señal para controlar la lógica interna. Esto normalmente lo proporcionaba el chip STE. La mayoría de los sistemas PACE también requerían el chip BTE para convertir las señales de voltaje interno más alto a niveles TTL utilizados por el resto del sistema. Su dirección multiplexada y sus pines de datos también requerían lógica adicional.

Aunque National Semiconductor tenía acuerdos de segunda fuente con Signetics y Rockwell Semiconductor , ninguna de las empresas produjo el diseño de 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 PACE y aumentó la velocidad en aproximadamente un 50%. [2] Cuando estuvo disponible, aparecieron CPU de 16 bits de mayor rendimiento y la empresa comenzó a restar importancia a las ventas de la línea.

Descripción

Físico

Configuración de pines del PACE original.

El PACE estaba empaquetado en un paquete dual en línea (DIP) de 40 pines , originalmente en cerámica. Como se basaba en la lógica pMOS , la serie PACE requería tres voltajes de suministro, +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 +8V normalmente se suministraba mediante electrónica sencilla alimentada por la línea de +5V, reduciendo así la complejidad del suministro eléctrico .

El chip normalmente se accionaba mediante un reloj externo de 750 nanosegundos (1,33 MHz) utilizando el chip System Timing Element, STE, para producir señales con la intensidad de señal requerida. [2] Como estas señales también eran utilizadas por dispositivos externos, las señales de reloj estaban en niveles TTL , +5V, en contraste con la mayoría de los pines que estaban en +8V. [3]

Como las señales externas se presentaron a +8 V, interconectar el sistema con dispositivos comunes que funcionan a niveles TTL no fue trivial. Por este motivo, los sistemas que utilizan PACE normalmente incluyen un elemento transceptor bidireccional, BTE. Esto funcionó en conjunto con PACE para producir un conjunto completo de señales de bus en voltajes TTL que luego podrían usarse para interactuar fácilmente con la mayoría de los dispositivos contemporáneos como SRAM . [4]

Para encajar direcciones y datos de 16 bits en un DIP de 40 pines, se multiplexó el mismo conjunto de 16 pines entre la presentación de una dirección y la lectura y escritura de datos en ciclos separados. Esto requería que los dispositivos externos, como la memoria principal , conservaran la dirección entre ciclos. [5]

Diseño interno

El IMP-16 de National Semiconductor se inspiró en Data General Nova, pero tenía una serie de diferencias menores en su ISA. Entre ellos se encontraba el manejo de los cuatro registros del procesador de 16 bits accesibles al usuario . En Nova, los dos primeros registros eran acumuladores de uso general y se usaban para la mayoría de las operaciones aritméticas y lógicas básicas, mientras que los dos segundos podían usarse como operandos o como registros de índice . El IMP-16 siguió este modelo, [6] pero el PACE cambió una serie de instrucciones para que operaran solo en el primer acumulador, AC0. [2]

El Nova original no implementó una pila en el hardware, aunque esto se agregó en los modelos Nova 3 posteriores a partir de 1975. PACE implementó un estilo diferente de pila usando un nuevo registro Stack Pointer (SP) que se incrementaba y disminuía automáticamente cuando se PUSHescribían PULLinstrucciones. fueron encontrados. El contador de programa (PC) se empujaba o se colocaba automáticamente en la pila durante las llamadas y devoluciones de subrutinas . Instrucciones adicionales permitieron empujar y retirar también los cuatro registros y el Registro de banderas de control y estado. [7]

La CPU tenía diez ubicaciones de memoria de 16 bits que contenían los valores de pila más altos. Una característica única de PACE es que cuando la pila se llena y se intenta realizar otra inserción, o cuando está vacía y se intenta extraer, se genera una interrupción . Esto normalmente se usa para llamar al código del controlador de interrupciones que copia algunos o todos los valores de la pila a la memoria principal y luego vacía la pila. Esto permite que los registros de la pila interna se utilicen como un caché de una pila basada en memoria más grande. [7]

El registro de bandera de estado y control también tenía 16 bits de ancho. Los bits 0 y 15 se establecen 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 adición resultó en un acarreo, OVF si se desbordaba y LINK, que indicaba que era necesario cambiar un poco durante las instrucciones de cambio y rotación. [7] LINK normalmente se maneja utilizando 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 rastrear los dos por separado durante una serie de turnos/ rotar y agregar instrucciones, que es una secuencia común. El indicador IN EN, normalmente 1, permite habilitar o deshabilitar interrupciones. [8] Una característica única del PACE, que no está presente en el IMP-16, es el indicador BYTE. Cuando está activado, 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 del SCF se asignan en su mayoría directamente a pines en el exterior del chip. Los bits 1 a 5 son los indicadores IE1 a IE5, que se utilizan para controlar las interrupciones de forma prioritaria. IE1 se configura solo en caso de desbordamiento de pila. Los otros cuatro se pueden usar para deshabilitar líneas de interrupción individuales o, más comúnmente, producir un valor binario de 0 a 15 que los dispositivos externos usan para determinar si deben realizar una interrupción o no. Por ejemplo, si el valor en estos indicadores suma 5, cualquier dispositivo con un valor de interrupción de 5 o menos (1 es la prioridad más alta) puede expresarlo, un dispositivo que desea llamar a una prioridad más baja, digamos 7, está recibiendo instrucciones. para sostenerlo. [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 que podría hacer asignando 128 bytes de buffer interno a 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 usaba instrucciones de longitud variable, todas las instrucciones usaban 16 bits. Las palabras de 16 bits se dividieron 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 utilizaron 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 cada uno para LDy ST(ver 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 en cero, la dirección estaba dentro de la página base, [a] normalmente los primeros 256 bytes de memoria. Establecer R en 1 y X en 0 utilizó los ocho bits restantes como un desplazamiento de la PC. Establecer el bit X en 1 activó la indexación, usando los ocho bits además de los valores en los registros de índice, con R en 0 agregaría el valor en AC2, y al configurarlo en 1 se usó AC3 en su lugar. [9]

Normalmente, la página base eran los primeros 256 bytes de memoria, pero cuando BPSse afirmó el pin, dividió 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 alta memoria y pudieran detectar fácilmente escrituras y lecturas examinando la dirección en el bus y viendo si los nueve bits superiores eran todos unos. Curiosamente, no hay instrucciones para cambiar la configuración del BPS, sino que la mayoría de los sistemas conectaron el pin a uno de los pines de estado y luego usaron las instrucciones de cambio de estado para controlarlo. [11]

El direccionamiento indirecto en PACE era limitado y estaba respaldado principalmente por las instrucciones LDy ST, que cargan y guardan valores entre los registros y la memoria. La indicación de direccionamiento indirecto utilizó códigos de operación separados, en lugar de utilizar bits de indicación de direccionamiento. Cuando se usaba, la dirección se construía normalmente, agregando los ocho bits de dirección a la página base o PC. Luego leería el valor de 16 bits en esa ubicación de memoria y luego lo cargaría o almacenaría desde esa dirección. Cuando se combina con la bandera X, el desplazamiento de 8 bits primero se suma o resta del registro de índice indicado. [12]

Otro usuario de direccionamiento indirecto fue ISZy DSZ. Estos incrementaban o disminuían 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 fue que (en cualquier modo de direccionamiento) si el valor se cambiaba a cero, SKse llamaba a la instrucción ip. Esto permitió salir de los bucles sin realizar pruebas adicionales; normalmente, la última instrucción del bucle sería JMPvolver a la parte superior del bucle, pero cuando el valor llegara a 0, pasaría automáticamente SKy JMPcontinuaría. [13]

Este estilo de control en bucle es común en las minicomputadoras, pero no en los diseños de microcomputadoras. En micros dedicados, este tipo de operación normalmente se logra con varias instrucciones, una que compara el índice del bucle con un valor dado (en este caso, cero) y luego vuelve a la parte superior si no se cumple la condición. El salto a cero inherente del PACE era una característica común de los minis que aceleraban el rendimiento del bucle al evitar una prueba separada. Cuando no sea apropiado, el incremento o disminución podría establecer el desplazamiento en cero para evitar activar esta función. [13]

INS8900

Distribución de pines del INS8900 mejorado.

La mejora continua 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 gran voltaje en la capa del sustrato, como pMOS. En términos prácticos, esto significa que un procesador nMOS puede funcionar con sólo dos voltajes de entrada en lugar de tres, y el suministro positivo se puede configurar en +5 V, lo que hace que la interfaz con circuitos TTL sea trivialmente fácil. [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 del chip original, aunque, como era de esperar, algunos de los pines de la fuente de alimentación cambiaron sus entradas; el +5V V SS original ahora estaba a tierra (GND), el V BB cambió de -8 a +8V y el antiguo -12V V GG se convirtió en el +12V V DD . Por razones desconocidas, otros dos pines no cambiaron de función pero sí de nombre; CLK se convirtió en V CC y 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 bloquear la dirección en el bus de direcciones/datos compartidos, pero sí hizo que dicho bloqueo fuera mucho más fácil. En lugar de requerir el chip BTE relativamente complejo, esta tarea ahora podría realizarse mediante componentes TTL comunes, aunque National Semiconductor sugirió sus propios INS8208 e INS8212 para este propósito. [15] El bus ahora podría implementarse mediante un solo INS8208 que almacene 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 cada búfer de 8 bits de datos y dos INS8212 para cada uno retiene 8 bits de la dirección. [dieciséis]

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 podría ser reemplazado por un cristal adecuado y un único inversor 7404 , disponible en muchos fabricantes. [16] Como el reloj externo ya no era de alta potencia, solo se necesitaba una entrada de reloj, el antiguo NCLK, ahora rebautizado como CLKX. La antigua segunda fase se generó ahora a bordo de la CPU. Estos cambios también permitieron que el sistema funcionara a una velocidad más alta; se recomendó un cristal de 2 MHz, un aumento bastante significativo desde el 1,33 del PACE. Esto mejoró los tiempos de instrucción de 8 a 20 microsegundos. [2]

Otros cambios incluyeron una serie de correcciones a problemas encontrados en PACE. Entre ellos destacaba un problema con la interrupción que se activaba cuando la pila se llenaba. En el PACE esto no funcionó correctamente; Si la interrupción llegara exactamente al mismo tiempo que un NIR3 o NIR5, se llamaría 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 llamar al mismo código, que luego determinaría lo que realmente había ocurrido. [17] Hubo problemas similares cuando se produjo una interrupción de nivel 0 dentro de los 12 ciclos de otras interrupciones, lo que provocó que se llamara el código incorrecto. [18] Todos estos problemas se resolvieron en el 8900. [17]

Actuación

Aunque el PACE funcionaba a una velocidad de reloj relativamente rápida 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 la memoria. Como resultado, una instrucción típica tardaba entre 12 y 30 microsegundos en completarse, lo que la hace aproximadamente la misma velocidad que los procesadores contemporáneos de 8 bits como el Intel 8080 . [2] Esto todavía proporcionaba una ventaja cuando se trabajaba con datos más grandes, por ejemplo en una biblioteca de punto flotante , ya que esa única instrucción podía procesar el doble de datos en una sola operación. [4]

Notas

  1. ^ Conocido como Zero Page en algunos sistemas, como el MOS 6502 .

Referencias

Citas

  1. ^ https://www.cpu-world.com/CPUs/PACE/index.html
  2. ^ abcde Abramovitz y col. 1981, pág. 1.1.
  3. ^ ab Abramovitz et al. 1981, pág. 1.10.
  4. ^ ab Abramovitz et al. 1981, pág. 1.2.
  5. ^ Abramovitz y col. 1981, pág. 1.3.
  6. ^ Abramovitz y col. 1981, pág. 1.4.
  7. ^ abc Abramovitz y col. 1981, pág. 1.5.
  8. ^ abcd Abramovitz y col. 1981, pág. 1.9.
  9. ^ abc Abramovitz y col. 1981, pág. 1.6.
  10. ^ Abramovitz y col. 1981, cuadro 1.2.
  11. ^ Abramovitz y col. 1981, pág. 1.7.
  12. ^ Abramovitz y col. 1981, págs. 1,8-1,9.
  13. ^ ab Abramovitz et al. 1981, pág. 1.24.
  14. ^ Critchlow, DL (2007). "Recuerdos sobre el escalado de MOSFET". Boletín de la sociedad de circuitos de estado sólido IEEE . 12 (1): 19–22. doi : 10.1109/N-SSC.2007.4785536 .
  15. ^ Abramovitz y col. 1981, pág. 2.
  16. ^ ab Abramovitz et al. 1981, pág. 1.4, Figura 1.2.
  17. ^ ab Abramovitz et al. 1981, pág. 1.22.
  18. ^ Abramovitz y col. 1981, pág. 1.23.

Bibliografía