¿Por qué una ruta de datos en microcontroladores siempre tiene una potencia de 2 de ancho?

8

Las rutas de datos de microcontroladores siempre tienen una potencia de 2 de ancho: 4 bits, 8, 16, 32 bits, etc. Incluso los PIC que utilizan instrucciones de 12 bits de ancho son controladores de 8 bits. ¿Por qué? ¿Hay alguna ventaja de diseño en esto? ¿Qué tiene de malo un bus de datos de 12 bits o un controlador de 7 bits ?

editar
El 7-bit no tiene mucho sentido, pero es lo que me hizo pensar en la pregunta. Las respuestas se refieren a la tradición de 8 bits. Pero 16 bits no son 8 bits, y 24 bits pueden manejar datos de 8 bits y de 16 bits, ¿verdad? ¿Por qué se saltaron 24 bits para pasar a 32 bits?

Federico Russo
fuente
77
¡El sacrilegio lo quema en la hoguera!
kenny
@kenny Sí, ¡también estoy indignado! :-)
m.Alin
@ m.¡Alin el horror! Antes de que se dé cuenta, la gente volverá a los diseños de trozos y escribirá sus propios ensambladores.
kenny
Debería ser sentenciado a 3 años de usar solo teletipos de códigos antiguos de 5 bits (estos tenían códigos separados para "turno" para acceder a más letras, entre otras alegrías).
Olin Lathrop
2
... porque un poco en sí mismo es una potencia de 2? :-P
shimofuri

Respuestas:

8

La tradición tiene un fuerte tirón. Pero también lo hace la interoperabilidad. Casi todos los formatos de archivo y protocolos de comunicaciones existentes funcionan en bytes. ¿Cómo manejas esto en tu microcontrolador de 7 bits?

El PIC se sale con la suya al tener el espacio de instrucción completamente separado y programado con anticipación desde el exterior. Hay algo de valor en el ajuste de bits del conjunto de instrucciones, ya que es lo único que puedes controlar como diseñador de microprocesadores.

Si desea una arquitectura extrema, podría codificar Huffman el conjunto de instrucciones, dándole un bitness de longitud variable .

pjc50
fuente
7

Mínimo sensible de 4 bits:
0-9 Los datos numéricos necesitan 4 bits
0-9 = 10 palabras.
Siguiente tamaño de palabra binaria más alto = 4 bits = 16 palabras posibles.
Entonces datos BCD (decimal codificado en binario) = 4 bits

8 bits lógico siguiente salto
0-9, az, AZ = 10 + 26 + 26 = 62 palabras.
Podría manejar con 7 bits = 128 palabras.
8 es casi tan fácil como 7 y permite 2 x 4 bits, por lo que los datos numéricos pueden empaquetarse 2 por 8 bytes.

¿Entonces 12 bits (no 16)?:
Siguiente tamaño lógico arriba = 12 bits y el PDP-8 temprano y muy exitoso usó 12 bits. 12 bits utilizados para datos y programa permiten 2 ^ 12 = 4096 ubicaciones de direcciones. Como Bill Gates posiblemente haya dicho una vez, "4K de memoria debería ser suficiente para cualquiera".

La siguiente familia PDP-11 usó 16 bits.

Doblando para la compatibilidad.
Si desea interoperar con sistemas en niveles más bajos y más altos y si desea tener dispositivos más capaces en la misma familia, entonces tener capacidad para manejar 2 palabras del sistema más pequeño dentro de la palabra de sistema más grande tiene mucho sentido.


PERO

Las excepciones que prueban la regla:

"Siempre" es una palabra tan fuerte :-)
Ejemplos de 1 bit, 12 bit, 18 bit, 36 bit a continuación.
Las máquinas de 18 y 36 bits nunca fueron microcontroladores.
Los de 1 y 12 bits eran.


El sistema de un bit mencionado a continuación es realmente un sistema de "bits aleatorios como mejor le parezca". La palabra de datos de un bit es esencialmente un indicador de ir / no ir producido por el cálculo y se utiliza para habilitar o deshabilitar la actividad del programa. El contador del programa es un contador ascendente que avanza a través de la memoria cíclicamente con código habilitado o deshabilitado según sea necesario. Muy muy muy desagradable de hecho. Cuando llegó al mercado, los procesadores de 8 bits del día eran bastante maduros y el procesador de 1 bit nunca tuvo mucho sentido. No sé cuánto uso tuvo.


1 bit !!!:

Motorola MC14500B Recibí una mención honorífica de Jack Gansell por la mejor descripción de este dispositivo :-)

Hoja de datos : haga clic en la página para descargar PDF.

ingrese la descripción de la imagen aquí


12 bits:

Harris HM-6100, también conocido como Intersil IM6100 - aspirante a minicomputadora de 12 bits] ( http://www.classiccmp.org/dunfield/other/i6100cfs.pdf )

Basado en el minicomputador DEC PDP-8 de 12 bits de gran éxito.

Visión general

  • La memoria de programa y la memoria de datos ocupan el mismo espacio de memoria. El tamaño total de la memoria directamente direccionable es de 4 K palabras. El tamaño de la palabra es de 12 bits. El 6100 no tiene memoria de pila.

    El tamaño de la memoria del programa es de 4 K palabras. Todas las instrucciones condicionales permiten al procesador omitir la siguiente instrucción solamente. Para ir condicionalmente a una dirección arbitraria en la memoria cuando se cumple cierta condición, el código debe ejecutar primero la instrucción "omitir si no se cumple la condición" y colocar la instrucción de salto incondicional directa o indirecta después de la instrucción de omisión. Se pueden usar instrucciones incondicionales para saltar directamente dentro de la página actual (127 palabras), o saltar indirectamente dentro del espacio de memoria completo (4 K palabras). El 6100 admite llamadas de subrutinas, pero, debido a la falta de memoria de la pila, la dirección de retorno de las subrutinas se almacena en la memoria . No hay instrucciones de "retorno de la subrutina": la subrutina debe usar el salto indirecto para volver a la persona que llama.

    El tamaño de la memoria de datos es de 4 K palabras. Se puede acceder a los datos directamente dentro de la página cero (0000h - 007Fh) o dentro de la página actual de 127 palabras. Se puede acceder a los datos indirectamente en cualquier lugar en 4 K palabras de memoria.

Wikipedia - Intersil 6100

El PDP-8 y el Intersil 6100 tenían 16 instrucciones muy completas. No hay instrucciones para restar.
La instrucción ADD se llama TADD para recordarle que es una suma de complemento de 2 para que no necesitemos ... restar instrucción.


18 bit, 36 bit otro - la familia PDP:

Procesador de datos programados de Wikipedia

PDP1 - 18 bit

PDP2 - 24 bits murieron al nacer

PDP3, PDP6 - 36 bit


PDP-12 User Handbook (preliminar - Wow.
A pesar de la numeración, esto es pre pre PDP16, un PDP-8 con esteroides con capacidad de E / S analógica) y máquina de laboratorio de ingeniería. Podría haber tenido uno gratis si hubiera querido, pero no encajaría en ningún lugar sensato, o insensible. El
primer juego de computadora que jugué fue en uno de estos.
Guerra espacial. La
máquina estaba en dos gabinetes de tamaño pequeño.
Abrirías una puerta y entrarías para hacer cosas internos.

Russell McMahon
fuente
Si desea una parte de producción de 24 bits, las GPU R300 / 420 de ATI (tarjetas 9500-X600 y X700-850) se ajustan perfectamente.
Dan Is Fiddling By Firelight
La idea de un micro de un bit parece interesante, pero ¿qué tan útil fue un chip como el MC14500B en la práctica? Creo que tener datos de entrada controlan un bit de dirección de programa (usando un pestillo y un multiplexor 2: 1) sería más efectivo que tratar de usar instrucciones para administrar el estado. Encontré una hoja de datos de la era de la década de 1990 para la pieza, que sugiere que se mantuvo por un tiempo, pero tengo curiosidad por saber cómo se usaría ese chip.
supercat
@supercat: encontré una referencia en la que un diseñador dijo que tenía un viejo diseño discreto de alambre que reemplazó por uno basado en un MC14500B y, durante algunos años, el cliente compró varios de ellos. Dicho esto, un dispositivo más lisiado e incapaz sería difícil de imaginar.
Russell McMahon
Realmente no puedo imaginar la psicología del diseño de la década de 1970, pero el controlador de disquetera de Steve Wozniak (presentado en Apple) [) demuestra que no se necesita mucha lógica discreta para construir una "computadora". Después de mirar el manual para ese MC14500B, pensé en cómo podría diseñar un sistema para ejecutar código desde una PROM usando solo lógica discreta (fuera de la PROM). Creo que las entrañas de mi máquina serían un pestillo transparente de 8 bits, un flip flop de 8 bits y un NAND cuádruple, y posiblemente un retraso RC (dependiendo de los requisitos de configuración / retención para la E / S). Una instrucción de 16 bits por ciclo.
supercat
Siete bits del flip flop impulsarían los bits de dirección superior de la PROM, y el bit inferior sería controlado por el reloj. Durante la primera mitad de cada ciclo, el pestillo transparente tomaría muestras de los seis bits de salida superiores (dirección de E / S) y el dispositivo realizaría una lectura de E / S. La entrada de E / S impulsaría el séptimo bit de enclavamiento transparente, y 3 NAND actuarían como un multiplexor utilizando la entrada enclavada para seleccionar Q0 o Q1 de la PROM para alimentar el bit de enganche transparente restante. Durante la segunda mitad de cada ciclo, realice una escritura de E / S con la dirección y los datos bloqueados.
supercat
7

Porque la mayor parte del mundo ha convergido en el almacenamiento, la comunicación y el manejo de datos informáticos en fragmentos de 8 bits. No es un estándar oficial, pero es uno muy fuerte ad-hoc.

En el pasado, ha habido máquinas que manejan múltiples que no sean 8 bits en sus rutas de datos. Los ejemplos incluyen las series CDC Cyber ​​6000 y 7000 y el PDP-8. Las máquinas CDC usaban bytes de 6 bits, y el PDP-8 tenía una palabra de 12 bits de ancho sin una forma especial de manejar solo cantidades de 8 bits. Ciertamente, también había otras máquinas en esta categoría. La razón por la que no escucha mucho sobre ellos hoy es porque las personas han decidido que quieren máquinas que puedan manejar bien sus bytes de 8 bits, y eso es lo que hacen los fabricantes. ¿Qué tan bien crees que se vendería un microcontrolador de 7 bits? Quienquiera que hiciera uno sería ridiculizado y luego encontraría pocos clientes. Sería una estúpida propuesta de negocios.

Puede ver alguna evidencia adicional de "bytes" que no sean de 8 bits si observa los estándares de Internet. Deliberadamente usan el término "octeto" porque en aquel entonces no había un acuerdo universal de que un byte siempre tuviera 8 bits. Hoy en día, el significado de byte ha convergido para significar 8 bits binarios y te reirías de la ciudad si trataras de usarlo de manera diferente.

Olin Lathrop
fuente
2

Hay un poco de eficiencia combinada con mucha compatibilidad con versiones anteriores como la razón de esta elección de diseño común.

Si mi ruta de datos tiene 7 bits de ancho, necesito 3 bits para representar cualquier línea dada de esa ruta. Como voy a desperdiciar tres bits, también podría usarlos por completo, tanto por eficiencia como para eliminar un camino muerto que podría provocar un error de bloqueo.

Los tipos de datos más comunes se basan en un mordisco de 4 bits, y la mayoría de ellos se basan en un byte de 8 bits. Al elegir utilizar una base alternativa, es posible que deba recurrir a un código extraño e ineficiente para tratar con los tipos de datos comunes. Por ejemplo, mi computadora de 7 bits requeriría 5 espacios de memoria para manejar cualquiera de los números de 32 bits, incluido el punto flotante, que son muy comunes en la industria actual.

Si mi máquina no dependiera de datos externos, probablemente podría salirse con la suya, pero los controladores de motor, los codificadores, los sensores de temperatura y la mayoría de los dispositivos y sensores de interfaz del mundo real admiten tales unidades estándar.

No es que sea imposible conectar una computadora de 7 bits a un puerto USB, pero va a hacer muchas pruebas adicionales y ejecutará muchas más instrucciones para procesar todas esas transacciones de 5 unidades para los tipos de datos de 32 bits de lo que lo haría si usted agregó un poco más a su ruta de datos y se alineó con el resto de la industria.

Sin embargo, comenzó en gran medida y se unió al formulario actual debido a la eficiencia del direccionamiento de bits, por lo que esa es la causa raíz. Si, por ejemplo, creara una computadora trinaria (3 estados en lugar de 2 estados por bit), vería los tamaños de bits más eficientes en 3, 9, 27, 81, etc. También vería intentos menos eficientes en 18, 24, 33 y 66 en un esfuerzo por proporcionar una compatibilidad más estrecha con los sistemas binarios.

Adam Davis
fuente
1
"Los tipos de datos más comunes se basan en un mordisco de 4 bits". No creo que sea verdad. Los datos de texto (hay muchos ) se basan en bytes, y los datos numéricos (incluidos los comprimidos / codificados) a menudo se basan en 16 bits o 32 bits. El único uso de datos de 4 bits que se me ocurre es BCD, pero la OMI es muy limitada.
stevenvh
@stevenvh Creo que se refiere al gran uso de HEX para agrupar datos ... Yo diría que es cierto, en arquitecturas a menudo se ve esta descomposición
clabacchio
1

Es más fácil porque le permite especificar una cantidad de bits en una cantidad de bits. Esto puede parecer un truco de salón, pero los conjuntos de instrucciones lo hacen todo el tiempo. Piense, por ejemplo, en una instrucción de "desplazamiento a la izquierda":

SHL R1,4

Si tiene un número de bits que es una potencia de dos, puede codificar el operando en un número fijo de bits sin desperdicio.

drxzcl
fuente
1
También pensé en eso, pero no estoy seguro de que sea razón suficiente para basar una arquitectura completa en él.
stevenvh
1
Creo que un factor más importante es la capacidad de almacenar y acceder a datos en matrices de bits. El uso de tales matrices no representa una gran parte de lo que hacen las computadoras, pero son poco comunes. En una máquina con, por ejemplo, bytes de 8 bits, el elemento i de una matriz puede leerse arr[i >> 3] >> (i & 7)o probar si arr[i >> 3] & mask[i & 7]es distinto de cero (algunas CPU prefieren un enfoque sobre el otro). Hacer tal cosa con un tamaño de palabra sin potencia de dos sería mucho más difícil.
supercat
@supercat No mucho más difícil, solo mucho más lento. Uno simplemente reemplaza un turno con una división. Lo cual estoy seguro de que ya sabes, pero pensé que vale la pena señalarlo.
Roman Starkov el
0

En lo que respecta a mi conocimiento en electrónica digital, la razón parece ser bastante obvia. La cuestión es que, para todos los sistemas digitales, utilizamos el concepto de sistema de números binarios. Esto significa que tenemos solo dos niveles de operación, es decir, 0 o 1. Por lo tanto, cualquier combinación que sea posible a nivel de hardware debe ser una combinación de 0s y 1s. Entonces, si necesitamos realizar 4 tareas diferentes, entonces necesitamos 2 variables, para 32 tareas necesitamos 5 variables y así sucesivamente (la lógica es 2 ^ n donde n es el número de variables). Entonces, como estamos tratando en solo dos niveles, estamos obligados a tener una combinación como una potencia de 2 solamente, lo que en consecuencia representa tener 2,4,8,16,32,64,128,256 y así sucesivamente ... ..

naved
fuente
1
Esto no explica los poderes de 2 para la longitud de la palabra. Usted menciona una longitud de 5 como suficiente para 32 combinaciones. OP pregunta por qué no hay controladores de 5 bits.
stevenvh
@stevenvh: Eso está absolutamente bien señor. Lo tengo. Quizás no me enfoqué en la pregunta correctamente. Gracias.
naved
Moví tu respuesta a un comentario, que puedes usar en el cuadro a continuación. Las respuestas están dirigidas a proporcionar contenido sobre la pregunta, el resto es para comentarios.
clabacchio
0

Admito que solo he leído las otras respuestas, pero un detalle clave parece solo abordado indirectamente: velocidad lógica y compacidad.

Si tuviera que empacar valores de 24 bits de manera contigua, y también pudiera acceder a ellos de una manera direccionada por bytes, entonces la lógica de procesamiento necesitaría dividirse por 3 para el acceso de palabras. La división es bastante costosa de hacer en lógica (solo verifique su referencia de procesador favorita: la instrucción de división es lenta), a menos que sea específicamente por una potencia de 2; en ese caso, simplemente ignora los bits más bajos (que el software hace al cambiar de bit). Esa es la misma razón fundamental por la que preferimos los accesos alineados.

Por supuesto, es posible diseñar un procesador alrededor de estos límites, tal vez incluso codificar los accesos de palabras como el cuarto valor de dirección (ya que se necesitan dos bits para seleccionar entre tres bytes), y no me sorprendería mucho verlos en un DSP (como una GPU); pero no es la norma para las CPU. También terminaría con un paso extraño de 4/3 para los accesos a la matriz de bytes, que necesitaría un manejo similar a los números BCD. Por lo tanto, se vuelve mucho más eficiente manejar una matriz de vectores de 3x8 bits en lugar de bytes de 8 bits.

Yann Vernier
fuente