Un quadro della situazione Lezione 28 Il Processore: unità di lo (2) Vittorio Scarano rchitettura Corso di Laurea in Informatica Università degli Studi di Salerno Input/Output Sistema di Interconnessione Registri Central Processing Unit Memoria Principale Interconnessione interna alla CPU Unità di lo Unità ritmetico Logica Cosa abbiamo fatto progettazione del processore Dove stiamo andando.. progettazione della unità di lo Perché: per comprendere come viene pilotato la unità di elaborazione 2 Dove siamo nel corso Organizzazione della lezione Progettazione: unità di elaborazione Codifica della informazione Logica Digitale Unità ritmetico Logica () Memoria Il set delle istruzioni Processore: unità di elaborazione Processore: unità di lo Processore: pipeline Valutazione delle prestazioni Un riepilogo: ruolo della unità di lo progettazione mediante macchina a stati finiti Semplificazione del progetto della unità di lo mediante la microprogrammazione 3
La unità di lo Le macchine a stati finiti Responsabile dei segnali di lo che vengono inviati alla unità di elaborazione lcune difficoltà gestione dei diversi passi di esecuzione della istruzione Due tecniche per la progettazione della unità di lo tecniche per la rappresentazione della UC Queste rappresentazioni della UC permettono la sintesi automatica della implementazione sotto forma di ROM o di PL 5 Rappresentazione simbolica del comportamento Costituite da: un insieme di stati (rappresentati con un cerchio) insieme di transizioni di stato attraverso una funzione di prossimo stato che mette in relazione lo stato corrente e lo stato successivo Nella rappresentazione della UC ogni stato rappresenta i valori dei segnali di lo che sono messi a 1 quelli non esplicitati vanno messi a 0 per il lo dei multiplexer è invece necessario specificare ad ogni passo il valore 6 =+ =Reg{IR{20-16]] Esecuzione, Out= op Out = + Sign-extend(IR{15- if (==) then =[31-28] Una visione completa della macchina a SF address computation 2 Src= 1 Src= 10 Op = 00 3 (Op = 'LW') Mem IorD =1 access (Op = 'SW') 5 Start Mem IorD= 1 access 0 Mem Src= 0 IorD= 0 IR Src = 01 Op =00 Source= 00 6 (Op='LW') or (Op= 'SW') Execution Src =1 Src = 00 Op= 10 Instruction fetch (Op = R-type) R-type completion 7 RegDst = 1 Reg MemtoReg =0 ranch completion 8 Src = 1 Src= 00 Op = 01 Cond Source= 01 (Op = 'EQ') Instruction decode/ register fetch 1 9 Src= 0 Src = 11 Op= 00 (Op ='J') Jump completion Source= 10 -back step 7 RegDst =0 Reg MemtoReg=1 8
Implementazione della UC dalla MSF Uso di un registro temporaneo che memorizza lo stato corrente di un blocco di logica combinatoria che determina i segnali e lo stato futuro Combinational logic Inputs Outputs Datapath outputs Organizzazione della lezione Un riepilogo: ruolo della unità di lo progettazione mediante macchina a stati finiti Semplificazione del progetto della unità di lo mediante la microprogrammazione Inputs from instruction register opcode field State register Next state 9 10 Necessità di strumenti progettuali più efficaci Per la progettazione della Unità di lo per il set di istruzioni del MIPS ridotto (da noi studiato) la macchina a stati finiti ha 10 stati e quindi risulta facilmente gestibile Per unità di lo per implementazioni complete da 1 a 20 cicli di clock centinaia di stati con molti più archi la rappresentazione grafica diventa complicata da mantenere possibili errori di progettazione Necessario uno strumento più efficace.. 11 L idea: la microprogrammazione Trattare l insieme dei segnali di lo come una istruzione da eseguire una istruzione di lo detta microistruzione per differenziarla dalle istruzioni MIPS Ogni microistruzione definisce quali segnali vanno messi a 1 in un certo stato definisce anche quale è la successiva microistruzione da eseguire Il microprogramma rappresentazione simbolica della unità di lo 12
Il microprogramma Il formato delle microistruzioni Rappresentazione simbolica della unità di lo che verrà tradotta in porte logiche da strumenti automatici come per le macchine a stati finiti Formato delle microistruzioni valgono gli stessi principi progettuali della progettazione della unità di elaborazione (semplicità etc.) Formato campi che specificano il valore dei segnali di lo 13 Ogni microistruzione contiene 7 campi Campo Funzione operazione compiuta da ; risultato in Out provenienza primo operando provenienza secondo operando lettura o scrittura del banco dei registri e provenienza dei valori in caso di scrittura lettura o scrittura della memoria e provenienza dei dati; in caso di lettura specifica il registro destinazione modalità di aggiornamento del modalità di scelta della istruzione successiva 1 La scelta della microistruzione successiva Diverse possibilità: passare alla microistruzione seguente: il campo viene messo al valore passare alla microistruzione che inizia l esecuzione della prossima istruzione MIPS la prima microistruzione ha una etichetta il campo viene messo al valore passare alla microistruzione a seconda di valori indicati in input alla unità di lo si usa una tabella di Dispatch (solitamente una ROM) il campo viene messo al valore Dispatch i dove i è il valore che viene passato alla tabella di Dispatch che restituisce la prossima istruzione 15 I valori dei campi (1) stringa Subt Func code Extend Extshift indica la label della istruzione deve sommare deve sottrarre deve usare funct per la operazione è il primo operando della registro è il primo operando della registro è il secondo operando della il valore è il secondo operando della uscita esten. segno è il secondo operando della uscita dello shift è il secondo operando della 16
I valori dei campi (2) Le label e la tabella di Dispatch MDR outcond Jump addr. Dispatch i legge i due registri, usando IR, output in e scrive usando rt come registro, e Out come dato scrive usando rt come registro, e MDR come dato legge la memoria usando (indir.), risultato in IR e MDR legge la memoria usando Out (indir.), risultato in MDR scrive la memoria usando Out (indir.), e (dato) scrive uscita della nel se Zero vale 1, scrive in il valore di Out scrive in l indirizzo di salto preso dalla istruzione vai alla microistruzione successiva vai alla prima microistruzione (che inizia la esecuzione) usa la tabella di dispatch (ROM) per indicare la prossima istr. 17 Le label nel campo sequencing sono di due tipi: riferimento esplicito ad una etichetta definita per una mimcroistruzione uso della tabella di dispatch con il valore Dispatch i Le etichette che terminano con 1 oppure 2 sono usate dalla tabella di Dispatch che ne restituisce l indirizzo (della microistruzione) a seconda del valore dei 6 bit del campo Op che vengono passati alla unità di lo 18 I primi due passi =+ =Reg[IR[20-16]] Esecuzione, Out= op Out = + Sign-extend(IR[15- if (==) then =[31-28] 19 Incremento Program Counter e scrittura dell incremento lettura istruzione da (in IR) salto alla microistruzione indicata dalla tabella di dispatch Extshift WRite Dispatch 1 20
Le etichette del Dispatch Servono a differenziare i tipi di istruzioni una specie di switch Esistono etichette Mem1 Rformat1 EQ1 JUMP1 Notare il carattere 1 finale delle etichette =+ =Reg{IR[20-16]] Esecuzione, Out= op Out = + Sign-extend(IR[15- if (==) then =[31-28] 21 22 Istruzioni di accesso alla memoria calcolo indirizzo due passi per la LW (uso di Dispatch 2) un passo per la SW Mem1 LW2 SW2 Extend MDR WRite Dispatch 2 =+ =Reg[IR{20-16]] Esecuzione, Out= op Out = + Sign-extend(IR[15- if (==) then =[31-28] 23 2
Istruzioni di tipo R Operazione indicata dal campo funct Scrittura nel registro del risultato della operazione Torna alla microistruzione con label fetch Rformat1 Func WRite =+ =Reg{IR[20-16]] Esecuzione, Out= op Out = + Sign-extend(IR[15- if (==) then =[31-28] 25 26 Istruzione di branch Effettua una sottrazione tra e il risultato non interessa, serve solamente la linea Zero Scrivi il program counter calcolato nel passo precedente solamente se la linea Zero della è a 1 Torna alla microistruzione con label fetch EQ1 Subt WRite Outc ond =+ =Reg{IR[20-16]] Esecuzione, Out= op Out = + Sign-extend(IR[15- if (==) then =[31-28] 27 28
Istruzione di jump Scrivi nel il nuovo indirizzo Torna alla microistruzione con label fetch JUMP1 WRite Jump address 29 L intero microprogramma Mem1 LW2 SW2 Rformat1 EQ1 JUMP1 Func Subt Extshift Extend MDR WRite Outco nd Jump address Dispatch 1 Dispatch 2 30 Implementazione del microprogramma La implementazione alternativa Il microprogramma può essere visto come una rappresentazione di una macchina a stati finiti e quindi può essere usato per lo stesso tipo di generazione automatica della ROM (o PL) per la implementazione Una implementazione alternativa implementare separatamente la funzione di lo (generazione dei segnali) e la selezione della prossima istruzione uso di un contatore che viene incrementato e di una parte di logica che compie la selezione dell indirizzo 1 1 er er Microcode Microcode storage storage Outputs Outputs Input Input Microprogram Microprogram counter counter ress ress select select logic logic Inputs Inputs from from instruction instruction register register opcode opcode field field Datapath Datapath outputs outputs 31 32
lcuni esercizi/domande.. (1) lcuni esercizi/domande.. (2) (dove non specificato si intende sempre per la unità di elaborazione a ciclo multiplo ) cosa serve il segnale di lo Cond? Quale è la differenza tra una istruzione ed una microistruzione? Per eseguire una istruzione add, quale è il segnale di lo Op? Quanti passi sono necessari per eseguire la istruzione sw? e per la lw? Cosa si trova in Op alla fine del secondo passo di esecuzione di una istruzione? 33 Quale è la differenza tra una unità di elaborazione a ciclo singolo ed una a ciclo multiplo? e quale è preferibile e perché? Quali sono le istruzioni che vengono eseguite nel minor numero di passi? Tutte le istruzioni di tipo R vengono eseguite nello stesso numero di passi? Tutte le istruzioni di tipo I vengono eseguite nello stesso numero di passi? Modificare la unità di elaborazione per eseguire anche la istruzione NE 3 può essere introdotto qualche altro segnale di lo Esercizi di programmazione (1) Esercizi di programmazione (2) Scrivere un programma in ssembler MIPS che ordini in senso crescente un array di 100 interi memorizzati a partire da STRT Scrivere un programma in ssembler MIPS che calcoli il reverse R di un array di 100 interi (memorizzato a partire da STRT) l elemento in posizione 99 si troverà in posizione 0 l elemento in posizione 98 si troverà in posizione 1 etc. etc. Scrivere un programma in ssembler MIPS che li se un array (memorizzato a partire da STRT) è palindromo e scriva il risultato (1=true) nella locazione 1000 un array (stringa) è palindromo se l array = R 35 36