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?
microcontroller
architecture
Federico Russo
fuente
fuente
Respuestas:
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 .
fuente
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.
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.
fuente
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.
fuente
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.
fuente
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":
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.
fuente
arr[i >> 3] >> (i & 7)
o probar siarr[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.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 ... ..
fuente
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.
fuente