# DLX (informatica)

DLX è un'architettura per microprocessori RISC sviluppata da John L. Hennessy e David A. Patterson, i principali sviluppatori dell'architettura MIPS e del progetto Berkeley RISC i due progetti che diedero via all'epoca RISC.

## L'architettura

DLX sta per delux ed è sostanzialmente una versione semplificata e ripulita dell'architettura MIPS sviluppata per scopo didattico in ambito universitario. L'architettura DLX è del tipo load/store con registri a 32 bit ed essendo progettata come esempio di studio per i corsi universitari non comprende tutte le complicazioni di una moderna architettura RISC, ma è comunque effettivamente realizzabile ed emulabile (e.g. WinDLX).

## Le istruzioni

Nel IR (Instruction Register) lungo 32 bit è contenuta l'istruzione in corso di esecuzione. Le istruzioni hanno lunghezza fissa di 32 bit, di cui un campo da 6 bit per l'operatore che quindi codifica al massimo 64 istruzioni, anche se il set standard è composto da 50 istruzioni; e campi da 5 bit per selezionare ognuno dei 32 registri general purpose usati come operandi. Le istruzioni DLX sono di tre tipi, le istruzioni R le istruzioni I e le istruzioni J.
Le istruzioni R lavorano esclusivamente tra registri, utilizzano un operatore e tre operandi riferiti a registri, tutto in una lunghezza di 32 bit ovviamente. Nelle istruzioni R solo i primi 21 bit sono utilizzati direttamente, gli 11 bit rimantenti sono utilizzati per estendere il campo operatore e definire così delle istruzioni aggiuntive. Queste istruzioni aggiuntive (che possono lavorare sempre solo con i registri) sono comode se si volesse aggiungere e utilizzare la FPU o altri componenti. Le istruzioni R sono usate per il calcolo numerico su interi con la ALU, o su floating point con la FPU.
| opcode | RS1 | RS2 | RD | extens |
| 6 bit | 5 bit | 5 bit | 5 bit | 11 bit |
Le istruzioni I sono simili ma utilizzano due operandi riferiti a registri ed un operando immediato da 16 bit con segno, che quando è trasferito in un registro da 32 bit viene "esteso in segno". Le istruzioni I sono usate per l'accesso diretto alla memoria e il trasferimento dati verso e da i registri.
| opcode | RS1 | RD | immid |
| 6 bit | 5 bit | 5 bit | 16 bit |
Le istruzioni J invece sono istruzioni di salto e contengono un operatore e uno spiazzamento da 26 bit con segno che sommato all'indirizzo contenuto nel PC (Registro Program Counter) fornisce l'indirizzo di destinazione del salto. Le istruzioni J sono usate per implementare le strutture di controllo del flusso di un programma.
| opcode | displacement |
| 6 bit | 26 bit |

## La pipeline

Il DLX come i processori MIPS ottimizza l'esecuzione della singola istruzione con l'utilizzo di pipeline per incrementare le prestazioni. La pipeline è una semplice versione a cinque stadi, la classica pipeline di un'architettura RISC ispirata alla suddivisione in cinque fasi dell'esecuzione di una istruzione nell'architettura non pipeline; i cinque stadi della pipeline sono:
* IF - Instruction Fetch unit
    Unità di caricamento delle istruzioni, la terminologia moderna utilizza il nome di load unit
* ID - Instruction Decode unit
    Questa unità riceve le istruzioni caricate, estrae l'opcode e gli operandi dall'istruzione estremamente somigliante al concetto di quella dell'all'epoca diffusissimo MOS 6502. Questa unità inoltre recupera i valori dai registri.
* EX - Execution unit
    Questa unità riceve gli operandi ed esegue le operazioni aritmetiche e logiche. Viene indicata come ALU con la terminologia moderna.
* MEM - Memory access unit
    Questa unità carica i dati dalla memoria principale sotto il controllo delle unità ID e EX
* WB - WriteBack unit
    Questa unità memorizza i risultati, la terminologia moderna la identifica come store unit
L'architettura MIPS prevedeva che tutte le operazioni fossero eseguite in un ciclo di clock per ottenere elevate prestazioni. Nel caso di operazioni più lunghe (come l'accesso alla memoria) il compilatore inseriva delle NOP per fermare la pipeline.
Nell'architettura DLX invece si segue un approccio più moderno. Il processore usa il data-forwarding e il riordino delle istruzioni. Quando il processore incontra delle istruzioni non eseguibili in un ciclo di clock le istruzioni vengono bloccate nelle unità funzionali e reinserite nel flusso di esecuzione quando sono pronte. Esternamente le istruzioni vengono eseguite nell'ordine indicato dal programma.