DMI – Corso di laurea magistrale in Informatica
Copyleft
2016-2017 Giuseppe Scollo
di che si tratta:
i modelli FSM catturano bene gli aspetti di flusso del controllo e decisionali degli algoritmi, tuttavia mancano di gerarchia; ciò è fonte di limitazioni severe quando si tratta di sistemi di controllo complessi
esplosione degli stati
gestione delle eccezioni
flessibilità a tempo di esecuzione
un controllo più flessibile si realizza con la sua microprogrammazione
la prima idea di microprogrammazione fu proposta da Maurice Wilkes, nel 1951, ma trovò ampia applicazione a partire dagli anni '60, per divenire dominante nel decennio successivo con la diffusione delle architetture CISC (Complex Instruction-Set Computer)
a partire dagli anni '80 le architetture RISC (Reduced Instruction-Set Computer) hanno conteso il campo a quelle CISC, per divenire quindi dominanti
Schaumont, Figure 6.3 - In contrast to FSM-based control, microprogramming uses a flexible control scheme
CSAR (Control Store Address Register): l'analogo del Program Counter convenzionale
il controllo microprogrammato risolve i problemi delle FSM:
Schaumont, Figure 6.4 - Sample format for a 32-bit
micro-instruction word
la definizione di formato e codifica delle microistruzioni è guidata da considerazioni di progetto; ecco un esempio di codifica
il formato in figura 6.4 non è ottimale, poiché il campo indirizzo è usato solo per istruzioni di salto: può avere altri usi con altre istruzioni
Schaumont, Figure 6.5 - Example of vertical versus horizontal
micro-programming
un altro risparmio di spazio o tempo si ha con l'alternativa per il campo comando:
spesso si ha una soluzione mista, e.g. la codifica nel campo next:
Schaumont, Figure 6.6 - CSAR encoding
il datapath di una macchina microprogrammata consiste di tre elementi:
a ciascuno di questi elementi possono corrispondere alcuni bit di controllo nella codifica della microistruzione, per esempio:
inoltre il datapath può generare flag di stato per il controllore microprogrammato
ecco un esempio di controllo microprogrammato di un datapath che include: una ALU con registro a scorrimento, un banco di otto registri, un registro accumulatore e una porta di input
codifica mista orizzontale/verticale: globalmente orizzontale, poiché ogni unità nel datapath usa una porzione distinta della parola di controllo, codifica verticale dei segnali di controllo di ciascuna unità nella sua porzione
Schaumont, Figure 6.7 - A micro-programmed datapath
lo shifter genera anche bit di esito usati dal controllore microprogrammato per salti condizionati
campi della parola di controllo:
il datapath preleva ed esegue una microistruzione ogni ciclo di clock
la tabella 6.1 presenta un esempio di codifica di microistruzioni per l'architettura vista (prima parte):
Field | Width | Encoding | |||
SBUS | 4 | Selects the operand that will drive the S-Bus | |||
0000 | R0 | 0101 | R5 | ||
0001 | R1 | 0110 | R6 | ||
0010 | R2 | 0111 | R7 | ||
0011 | R3 | 1000 | Input | ||
0100 | R4 | 1001 | Address/Constant | ||
ALU | 4 | Selects the operation performed by the ALU | |||
0000 | ACC | 0110 | ACC | S-Bus | ||
0001 | S-Bus | 0111 | not S-Bus | ||
0010 | ACC + S-Bus | 1000 | ACC + 1 | ||
0011 | ACC – S-Bus | 1001 | S-Bus – 1 | ||
0100 | S-Bus – ACC | 1010 | 0 | ||
0101 | ACC & S-Bus | 1011 | 1 |
tabella 6.1 (seconda parte):
Field | Width | Encoding | |||
| |||||
Shifter | 3 | Selects the function of the programmable shifter | |||
000 | logical SHL(ALU) | 100 | arith SHL(ALU) | ||
001 | logical SHR(ALU) | 101 | arith SHR(ALU) | ||
010 | rotate left ALU | 111 | ALU | ||
011 | rotate right ALU | ||||
Dest | 4 | Selects the target that will store S-Bus | |||
0000 | R0 | 0101 | R5 | ||
0001 | R1 | 0110 | R6 | ||
0010 | R2 | 0111 | R7 | ||
0011 | R3 | 1000 | ACC | ||
0100 | R4 | 1111 | unconnected | ||
Nxt | 4 | Selects next-value for CSAR | |||
0000 | CSAR + 1 | 1010 | cf ? CSAR + 1 : Address | ||
0001 | Address | 0100 | zf ? Address : CSAR + 1 | ||
0010 | cf ? Address : CSAR + 1 | 1100 | zf ? CSAR + 1 : Address |
con la codifica definita in tabella 6.1, una microistruzione si forma selezionando una funzione per ciascuno dei moduli nel datapath e un indirizzo per il campo Address (con un opportuno valore di indifferenza per esso qualora Nxt sia nullo)
a mo' di esempio, vediamo come una istruzione RTL, quale ACC ← R2, si traduce in una microistruzione
Schaumont, Figure 6.8 - Forming micro-instructions from register-transfer instructions
strutture di controllo complesse, quali cicli e strutture if-then-else, possono esprimersi come combinazione (o sequenza) di istruzioni RTL
il microprogramma è scritto in una notazione RTL simbolica immediatamente traducibile in microistruzioni in modo simile all'esempio precedente
Command Field | || | Jump Field | |
IN → R0 | |||
IN → ACC | |||
Lcheck: | (R0 – ACC) | || | JUMP_IF_Z Ldone |
(R0 – ACC) << 1 | || | JUMP_IF_C Lsmall | |
(R0 – ACC) → R0 | || | JUMP Lcheck | |
Lsmall: | ACC – R0 → ACC | || | JUMP Lcheck |
Ldone: | JUMP Ldone |
Schaumont, Listing 6.1 - Micro-program to evaluate a GCD
letture raccomandate:
per ulteriore consultazione: