Processore Memoria Control (Parte di controllo) Datapath (Parte operativa) I/O
Parte di Controllo La Parte Controllo (Control) della CPU è un circuito sequenziale istruzioni eseguite in più cicli di clock ad ogni ciclo, si esegue uno micropasso (microistruzione) dell istruzione Lo stato interno al circuito sequenziale determina lo specifico micropasso da eseguire Gli output della Parte Controllo sono inviati alla Parte Operativa, che li interpreta come comandi controlli dei multiplexer, controlli per le ALU, segnali per abilitare la scrittura in registri, ecc. Gli input della Parte Controllo giungono dalla Parte Operativa campi del registro che contiene l istruzione corrente (IR), risultati di operazioni di confronto, ecc.
Parte di Controllo Esistono diverse ISA (MIPS, x86, ARM) Abbiamo visto vari componenti di base comuni alla realizzazione dei processori Un progettista deve implementare una ISA usando blocchi funzionali e logiche di controllo Vedremo come implementare una versione molto semplice dell ISA MIPS. Collegamenti della parte operativa (datapath) Identificazione dei segnali della parte di controllo (control)
Istruzioni di memory-reference: lw, sw Istruzioni Istruzioni arithmetic-logic: add, sub, and, or, slt Istruzioni di control-flow: beq, j Tutte le istruzioni sono lunghe 32 bit R-Type 31 26 21 16 11 6 0 op rs rt rd shamt funct 6 bit 5 bit 5 bit 5 bit 5 bit 6 bit I-Type 31 26 21 16 0 op rs rt immediate 6 bit 5 bit 5 bit 16 bit J-Type 31 26 0 op op: codice operativo dell istruzione target address 6 bit 26 bit rs, rt, rd: dei registri sorgente (rs, rt) e destinazione (rd) shamt: shift amount (è diverso da 0 solo per istruz. di shift) funct: seleziona le varianti dell operazione specificata in op immediate: offset dell indirizzo (load/store) o valore immediato (op. aritmetiche) target address: indirizzo target di un istruzione di jump
Progetto 1. Analizzare il set di istruzioni verificare i requisiti del datapath il datapath deve includere gli elementi di memoria corrispondenti ai registri dell ISA tipicamente sono necessari altri registri, usati internamente o non referenziabili direttamente attraverso l ISA es.: PC (Program counter) analizzare la semantica di ogni istruzione, data in termini di trasferimenti tra registri, ed eventuali operazioni tra i registri ll datapath deve fornire i cammini per permettere tutti i register transfer necessari, e gli accessi alla memoria 2. Selezionare i vari componenti del datapath (es. ALU) e stabilisci la metodologia di clocking 3. Assemblare il datapath in accordo ai requisiti, aggiungendo i segnali di controllo 4. Analizzare l implementazione di ogni istruzione per determinare il setting dei segnali di controllo che provocano i vari register transfer 5. Assemblare la logica di controllo in accordo al punto 4 Proviamo a progettare una CPU in cui ogni istruzione viene eseguita all interno di un singolo ciclo di clock
Analisi dell ISA L implementazione delle istruzioni è abbastanza simile: 1. Prelevare l istruzione dalla memoria usando il contenuto del registro PC 2. Leggere l istruzione da eseguire dalla memoria (fetch) 3. Interpretare i campi dell istruzione per decidere esattamente cosa fare (decode) 4. Eseguire l istruzione (execute) a. Leggere uno o due registri b. Usare l ALU c. Scrivere in memoria o in un registro 5. Aggiornare il contenuto del registro PC e ricominciare Quindi ALU, Register File e PC devono essere inclusi nella Parte Operativa Per comodità rappresenteremo la memoria assieme agli altri elementi della Parte Operativa, ma essa non fa logicamente parte della CPU
Analisi dell ISA Per tutte le istruzioni, dobbiamo come prima cosa effettuare il fetch op rs rt rd shamt funct = M[ PC ] op rs rt imm16 = M[ PC ] op 26bit address = M[ PC ] istruzioni trasferimenti tra registri ADD SUB R[rd] R[rs] + R[rt]; PC PC + 4; R[rd] R[rs] R[rt]; PC PC + 4; LOAD R[rt] M[ R[rs] + sign_ext(imm16) ]; STORE BEQ PC PC + 4; M[ R[rs] + sign_ext(imm16) ] R[rt]; PC PC + 4; if ( R[rs] == R[rt] ) then else PC PC + 4 + (sign_ext(imm16) << 2); PC PC + 4; BEQ adotta un indirizzamento di tipo PC-relative Al momento dell aggiornamento il PC contiene già l indirizzo dell istruzione successiva a quella corrente
Possibile implementazione Gestione PC Dati da scrivere in un registro Dati letti (LOAD) Fetch Campi rs, rt, rd dell istruzione Campo immediate dell istruzione Dati da memorizzare (STORE)
Gestione Program Counter Necessario realizzare, all interno dello stesso ciclo di clock, il fetch dell istruzione e l incremento del PC Non possiamo usare l ALU principale, perché questa è già utilizzata per eseguire le istruzioni Stiamo implementando una CPU a singolo ciclo risorse replicate Nota che dalla memoria istruzioni viene letta una nuova istruzione ad ogni ciclo di clock
Estensione di segno I 16 bit del campo immediato dell istruzione (es. istruzioni di LOAD/STORE) sono estesi di segno (16 bit 32 bit) prima di essere sommati con il registro R[rs] L indirizzo così calcolato (R[rs] + sign_ext(imm16)) viene usato per accedere alla Memoria Dati in lettura/scrittura M[R[rs] + sign_ext(imm16)]
Calcolo del branch Necessario per realizzare il calcolo dell indirizzo di salto dei branch PC PC + 4 + (sign_ext(imm16) << 2) Non possiamo usare l ALU, perché viene già utilizzata per eseguire l operazione di confronto (sottrazione)
Linee di controllo e multiplexer Registro da scrivere in istruzioni R-Type o I-Type Brach o incremento Scrittura registro da ALU o LOAD Secondo ingresso ALU R-Type o I-Type
Parte di controllo
Controllo ALU Dobbiamo definire il circuito di controllo per calcolare i 4 bit di controllo dell ALU (ALU Operation) da assegnare in base al tipo di istruzione Il circuito sarà a 2 livelli: Il primo livello calcolerà ALUOp in base all op code Il secondo livello calcolerà effettivamente ALU Operation in base al campo funct e a ALUOp
Altri segnali di controllo Nome del segnale Effetto quando deasserted Effetto quando asserted RegDst RegWrite ALUSrc PCSrc MemRead MemWrite MemtoReg Il numero del registro di destinazione per l ingresso Write register proviene dal campo rt dell istruzione (bit 20:16) Nessuno Il secondo operando della ALU proviene dalla seconda uscita del Register File (Read data 2) Il registro PC è aggiornato con l uscita dell addizionatore che calcola il valore PC + 4 Nessuno Nessuno Il valore riportato in ingresso al registro Write data proviene dalla ALU Il numero del registro di destinazione per l ingresso Write register proviene dal campo rd dell istruzione (bit 15:11) Il registro sull ingresso Write register è scritto con il valore sull ingresso Write data Il secondo operando della ALU proviene dell estensione di segno dei 16 bit meno significativi dell istruzione Il registro PC è aggiornato con l uscita dell addizionare che calcola il risultato del salto I contenuti della memoria dati identificati dall indirizzo sono inviati sull uscita Read data I contenuti della memoria dati identificati dall indirizzo sono sostituiti con il value sull ingresso Write data Il valore riportato in ingresso al registro Write data proviene dalla memoria dati
Parte di controllo
Esempio: add
Esempio: load
Esempio: beq
Esempio: aggiungere j
Eccezioni e interruzioni Il progetto del controllo del processore si complica a causa della necessità di considerare, durante l esecuzione delle istruzioni, il verificarsi di eventi inattesi, quali interruzioni ed eccezioni Eccezione evento sincrono, generato all interno del processore, e provocato da problemi nell esecuzione di un istruzione es.: overflow, istruzione non valida Interruzione evento asincrono, che giunge dall esterno del processore segnale che giunge da un unità di I/O, utilizzato per comunicare alla CPU il verificarsi di certi eventi es.: la terminazione di un operazione di I/O la cui esecuzione era stata richiesta in precedenza dalla CPU
Gestione delle Eccezioni e interruzioni Il controllo di ogni processore deve essere predisposto per gestire il verificarsi di eventi inattesi Tutti i processori, quando si verifica un evento di eccezione/interruzione, lo gestiscono secondo lo schema seguente: 1. interruzione dell esecuzione del programma corrente 2. salvataggio di parte dello stato di esecuzione corrente (almeno PC) 3. salto ad una routine del codice (handler) che costituisce il Sistema Operativo (SO) Il SO è stato caricato in memoria al momento del boot del sistema Il salvataggio dello stato del programma interrotto serve al SO per poter riprenderne eventualmente l esecuzione, successivamente e se necessario
Gestione delle Eccezioni e interruzioni Il controllo (ma anche il datapath corrispondente) deve essere progettato per individuare l evento inatteso interrompere l istruzione corrente salvare il PC corrente (nel registro interno EPC = Exception PC) salvare la causa dell interruzione nel registro Cause saltare ad una routine del SO (exception/interrupt handler) ad un indirizzo fisso Il MIPS non salva nessun altro registro oltre PC è compito dell handler salvare altre porzioni dello stato corrente del programma (es. tutti i registri generali), se necessario esistono CPU dove il salvataggio esteso dello stato viene sempre effettuato prima di saltare all interrupt handler salvataggio garantito dal microcodice complesso