DLX
# DLX

El DLX es un microprocesador RISC diseñado por John Hennessy y David A. Patterson, los diseñadores principales de la arquitectura MIPS y de Berkeley RISC (respectivamente), los dos ejemplos de la arquitectura RISC. El DLX es básicamente un MIPS revisado y simplificado con una arquitectura simple de carga/almacenamiento de 32 bits. Pensado principalmente para propósitos educativos, se utiliza ampliamente en cursos de nivel universitario sobre arquitectura de computadores.
Las instrucciones DLX se pueden separar en, tipo R, tipo I y tipo J. Las instrucciones de tipo R son instrucciones de registro puras, con un operando y tres registros contenidos en la palabra de 32 bits. Las de tipo I son similares, pero solo incluyen un registro, y usan los otros 16bits empleados en las de tipo R para indicar los otros dos registros para almacenar valores inmediatos. Por último, las de tipo J son saltos, conteniendo un operando y una dirección de 26 bits.
Los opcodes tienen una longitud de 6 bits, lo que hacen un total de 64 posibles instrucciones básicas. Hacen falta 5 bits para seleccionar uno de los 32 registros. En el caso de las instrucciones de tipo J solo 18 de los 32 bits de la palabra son usados, lo que implica que los 6 bits más bajos se puedan emplear para indicar "instrucciones extendidas". Esto permite al DLX más de 64 instrucciones, siempre y cuando solo trabajen con registros. Es útil para, por ejemplo, el soporte de Unidad de coma flotante.
El DLX, como el MIPS, basa su rendimiento en el uso de la segmentación de cauce o pipeline. En el diseño DLX es un ejemplo sencillo, un concepto clásico del RISC. La segmentación de cauce tiene cinco etapas:
En el diseño MIPS original uno de los métodos para ganar rendimiento era forzar la finalización de cada instrucción en un ciclo, forzando al compilador a insertar instrucciones NOP en los casos en los que la instrucción fuera a tardar más, como por ejemplo, en accesos a memoria.
En el DLX se usó una aproximación más moderna a instrucciones largas, utilizando un sistema de reenvío de información (data-forwarding) e instrucciones de reordenación. Así las instrucciones que tardan más en ejecutarse son "retenidas" en sus unidades y reinsertadas en la cadena de ejecución cuando se completan. Externamente parece que la ejecución se realizara de forma lineal.