¿Los procesadores ARM (recientes y antiguos) usan microcódigo? Si es así, ¿para qué? ¿No son sus instrucciones lo suficientemente simples como para ser ejecutadas directamente sin ser traducidas a micro-operaciones?
TL, DR; Mientras que los procesadores ARM utilizan conceptos similares a las CPU microcodificado (por ejemplo, hay un bloque de instrucciones de hardware que decodifica en una o más micro-operaciones ), que están no microcodificado en el sentido tradicional que utiliza una ROM para almacenar cada micro-instrucción, ni ¿Se pueden modificar estas microinstrucciones / operaciones después de producirlas en el hardware real? De hecho, los procesadores ARM utilizan control cableado en el decodificador de instrucciones para generar microoperaciones.
Sin embargo, en la práctica, la modificación del decodificador de instrucciones puede ser similar a la modificación de un procesador microcodificado, porque ARM licencia el código fuente del lenguaje de descripción de hardware ( HDL ) de sus arquitecturas de CPU a fabricantes individuales, lo que hace que las modificaciones a nivel de hardware sean significativamente más fáciles de implementar. Consulte la sección Decodificador de instrucciones en el Wikibook de diseño de microprocesador para ver más diferencias entre los decodificadores de instrucciones RISC y CISC típicos.
Si bien la arquitectura ARM en sí no está microcodificada en el sentido tradicional, las instrucciones individuales se decodifican en microoperaciones más pequeñas . Un procesador ARM moderno está lejos de ser "simple": aunque las instrucciones en sí son muy ortogonales, existe una gran cantidad de tecnología moderna (por ejemplo, canalización, instrucciones superescalares, ejecución fuera de orden, almacenamiento en caché, instrucciones complejas extendidas como unidades de punto flotante). o instrucciones NEON) que tiene un núcleo moderno A9. De hecho, cualquier procesador puede ser lo suficientemente simple para ejecutarse sin traducción a micro-operaciones, pero esto es esencialmente poner "todos sus huevos en una sola canasta": no puede corregir ninguna posible errata en el conjunto de instrucciones, ni expandirla / modificarla después de la producción.
Sin embargo, si solo estamos hablando de la etapa de decodificación de instrucciones , entonces muchos procesadores ARM no están microcodificados de una manera que permita la modificación después del hecho, aunque esto puede deberse a que la mayoría de los fabricantes que otorgan licencias de tecnología ARM tienen acceso a la realidad código fuente de hardware (escrito en un HDL). Esto reduce el consumo de energía porque no se requiere una etapa de microcódigo, pero las instrucciones individuales se "compilan" en bloques de hardware reales. Esto también permite la corrección de erratas por parte de cada fabricante.
De hecho, incluso en una CPU basada en CISC (por ejemplo, x86), no hay ningún requisito para el uso de microcódigo. Sin embargo, en la práctica, la complejidad del conjunto de instrucciones, combinado con varias diferencias en licencias, consumo de energía y aplicaciones, hacen que la elección del microcódigo sea ideal para el caso de x86. Sin embargo, en el caso de ARM, es menos útil ya que los cambios en el conjunto de instrucciones (decodificador) son mucho más fáciles de implementar y controlar en términos del hardware en sí (ya que el fabricante puede personalizarlo).
Aunque tener microcódigo en realidad puede simplificar el diseño del procesador en algunos casos (ya que cada instrucción existe como un "microprograma" en lugar de un hardware real), esto es efectivamente solo un decodificador de instrucciones (por ejemplo, la extensión Thumb-2 , que permite variables- las instrucciones de longitud deben existir agregando un decodificador de instrucciones separado en línea con el decodificador de instrucciones ARM). Si bien funcionalmente estas unidades se pueden implementar usando microcódigo, esto no sería inteligente en términos de consumo de energía, ya que debe definir la salida para cada señal de control en la CPU, incluso si no es necesario. Esto no Sin embargo, tiene algo que ver con lo "compleja" que es la CPU en sí, ya que los núcleos ARM tienen todas las construcciones modernas que uno esperaría (canalización, cachés de instrucciones / datos, memorias intermedias micro-TLB, predicción de ramificaciones, memoria virtual, etc.) )
En el caso de ARM, dada la ortogonalidad del conjunto de instrucciones, la complejidad involucrada en la implementación de dicho enfoque microcodificado superaría los beneficios de simplemente cambiar el hardware relevante directamente en el bloque decodificador de instrucciones. Si bien esto es ciertamente posible, termina "reinventando la rueda", por así decirlo, dado que es capaz de modificar directamente (y compilar / probar / emular) los cambios en el hardware.
Puede "pensar" en el código fuente ARM como un tipo de microcodificación en este caso, aunque en lugar de almacenar cada micro-operación / microprograma en una ROM que se puede modificar después de los hechos, se implementan directamente en hardware en el decodificador de instrucciones. Dado que el decodificador de instrucciones en sí está escrito en VHDL / Verilog, realizar cambios en las instrucciones existentes es tan simple como modificar el código fuente, volver a compilar y probar el nuevo hardware (por ejemplo, en un FPGA o un simulador). Esto contrasta con la complejidad del hardware moderno x86, que es mucho más difícil de probar / simular durante el desarrollo, y aún más difícil de modificar después de la producción (ya que el tamaño en términos de transistores supera con creces lo que se puede ejecutar dentro, incluso el más moderno y costoso FPGA, lo que agrega un beneficio al uso de una tienda de microcódigo).hardware físico usando un FPGA.