DLX
Le DLX est un design de microprocesseur RISC effectué par John L. Hennessy et David A. Patterson, les principaux créateurs respectivement des modèles MIPS et Berkeley RISC, les deux types repères de la famille RISC. Le DLX est principalement un MIPS simplifié avec une architecture 32 bits à chargement/enregistrement. Destiné initialement à l'enseignement, le design DLX est très utilisé dans les cours d'architecture des calculateurs, dans l'enseignement supérieur.
Les instructions DLX peuvent être classées en trois types : type R, type I et type J. Les instructions de type R sont des instructions de registres uniquement, avec un opérande et trois numéros de registres dans un mot de 32 bits. Les instructions de type I sont similaires, mais n'incluent qu'un numéro de registre et utilisent les 16 bits restants pour embarquer une valeur immédiate. Les instructions de type J sont des sauts (jumps en anglais), contenant un opérande et une adresse 26 bits.
Les instructions sont de longueur 6 bits, pour un total de 64 instructions basiques. 5 bits sont requis pour sélectionner un registre parmi 32. Dans le cas des instructions de type R, ceci signifie que seuls 21 bits des 32 bits sont utilisés, ce qui permet d'utiliser les 6 bits de poids faible comme "instructions étendues". Ceci permet au DLX de supporter plus de 64 instructions, tant que ces instructions fonctionnent uniquement sur les registres. C'est utile par exemple pour gérer une FPU.
Le DLX, tout comme le MIPS, base ses performances sur l'utilisation d'une pipeline d'instructions. Dans le design DLX, elle est relativement simple, du type RISC. Cette pipeline contient cinq étages :
- IF : Instruction Fetch, chargement de l'instruction
- ID : Instruction Decode, l'unité reçoit l'instruction d'IF, et en extrait l'opérateur et les opérandes, elle récupère également les valeurs des registres si elles sont requises par l'opération
- EX : Execute, effectue l'instruction, c'est l'UAL. Elle est divisée en trois unité de calcul sur les flottants (multiplieur, additionneur, diviseur) et une sur les entiers.
- MEM : Memory access, charge les données depuis la mémoire centrale, sous le contrôle des instructions d'IE et EX.
- WB : Write Back, enregistre les résultats de l'instruction.
Dans le MIPS original, une des méthodes utilisées pour améliorer les performances était de forcer l'exécution de toutes les instructions en un cycle, obligeant le compilateur à insérer des "noops" dans les cas où une instruction demanderait plus de temps, pour des accès mémoire par exemple.
Pour le design du DLX, une approche plus moderne a été utilisée pour les instructions lentes, utilisant un système de retransfert de données et de reclassement des instructions. Dans ce cas les instructions nécessitant plus de cycles sont "bloquées" (stalled en anglais) dans leur unités, puis ré-insérées dans le flux des instructions quand elles se finissent. Globalement, l'exécution paraît s'être effectuée linéairement.