Date post: | 03-May-2015 |
Category: |
Documents |
Upload: | patrizia-russo |
View: | 233 times |
Download: | 6 times |
Calcolatori ElettroniciCalcolatori Elettronici
Il ProcessoreIl Processore
Francesco Lo PrestiFrancesco Lo Presti
Rielaborate da Salvatore TucciRielaborate da Salvatore Tucci
CPU 2
Architettura a Livelli: Livelli 1 e 2Architettura a Livelli: Livelli 1 e 2
Livello 2: Livello del Linguaggio Macchina (ISA)Livello 2: Livello del Linguaggio Macchina (ISA)Macchina nuda come appare al programmatore di Macchina nuda come appare al programmatore di sistema. Le istruzioni del suo linguaggio sono sistema. Le istruzioni del suo linguaggio sono interpretate ed eseguite dai microprogrammi del interpretate ed eseguite dai microprogrammi del processoreprocessoreModuli: ProgrammiModuli: ProgrammiL2: Linguaggio macchinaL2: Linguaggio macchinaR2: Registri, spazio di memoriaR2: Registri, spazio di memoria
Livello 1: Macchina Firmware – Livello 1: Macchina Firmware – MicroarchitetturaMicroarchitettura
Interpreta ed esegue le istruzioni del linguaggio Interpreta ed esegue le istruzioni del linguaggio macchinamacchinaE’ direttamente realizzato con i componenti della E’ direttamente realizzato con i componenti della macchina hardwaremacchina hardwareModuli - Unita’ di Elaborazione: CPU, Memoria, Unita’ Moduli - Unita’ di Elaborazione: CPU, Memoria, Unita’ di I/Odi I/OL1: Linguaggio di MicroprogrammazioneL1: Linguaggio di MicroprogrammazioneR1: Reti combinatorie e sequenzialiR1: Reti combinatorie e sequenziali
CPU 3
Organizzazione di un CalcolatoreOrganizzazione di un Calcolatore
Unità di controll
o
Unità di elaborazion
e dati
Memoria
Processore
Dispositivi di I/O
Dispositivi di I/O
Interfaccia di I/O
Interfaccia di I/O
Busdatiindirizzicontrollo
CPU 4
Processore - Central Processing Unit (CPU)Processore - Central Processing Unit (CPU)
Provvede all’esecuzione delle istruzioni macchina Provvede all’esecuzione delle istruzioni macchina Ciclo di EsecuzioneCiclo di Esecuzione
1.1. Prelievo Istruzione dalla MemoriaPrelievo Istruzione dalla Memoria2.2. Decodifica IstruzioneDecodifica Istruzione3.3. Esecuzione IstruzioneEsecuzione Istruzione
Processore e’ composto da due sottosistemi:Processore e’ composto da due sottosistemi:1.1. Unità di ControlloUnità di Controllo ( (ControlControl) – Parte di Controllo) – Parte di Controllo
Controlla il sequenziamento e l’esecuzione delle istruzioni Controlla il sequenziamento e l’esecuzione delle istruzioni generando i segnali di controllogenerando i segnali di controllo
2.2. Unita’ di Elaborazione DatiUnita’ di Elaborazione Dati ( (DatapathDatapath) – Parte Operativa) – Parte OperativaEsegue le istruzioniEsegue le istruzioniALUALU Esegue operazioni logico aritmetiche sui datiEsegue operazioni logico aritmetiche sui dati
Banco di Registri (Register File)Banco di Registri (Register File) Memoria interna CPUMemoria interna CPU
Program Counter (PC)Program Counter (PC)– Indirizzo Prossima IstruzioneIndirizzo Prossima Istruzione
– Instruction Register (IR)Instruction Register (IR)– Codice Istruzione da eseguireCodice Istruzione da eseguire
CPU 5
Processore - Central Processing Unit (CPU)Processore - Central Processing Unit (CPU)
Implementazione set ridotto del MIPSImplementazione set ridotto del MIPSIstruzioni di accesso alla memoria: lw e swIstruzioni di accesso alla memoria: lw e swIstruzioni logico-aritmetiche: add, sub, and, or e sltIstruzioni logico-aritmetiche: add, sub, and, or e sltIstruzioni di branch: beqIstruzioni di branch: beqIstruzioni di jump: jIstruzioni di jump: j
Lunghezza formato: 32 bit; i tre formati delle istruzioni:Lunghezza formato: 32 bit; i tre formati delle istruzioni:
Tipo RTipo R
Tipo ITipo I
Tipo JTipo J
I campiI campiopop: operazione dell’istruzione: operazione dell’istruzione
– rsrs, , rtrt, , rdrd: registri sorgente (due) e destinazione: registri sorgente (due) e destinazioneshamtshamt: shift amount: shift amountfunctfunct: seleziona la variante dell’operazione nel campo op: seleziona la variante dell’operazione nel campo opaddress/immediateaddress/immediate: offset dell’indirizzo o valore immediato: offset dell’indirizzo o valore immediatotarget addresstarget address: indirizzo dell’istruzione di jump: indirizzo dell’istruzione di jump
op target address
02631
6 bits 26 bits
op rs rt rd shamt funct
061116212631
6 bits 6 bits5 bits5 bits5 bits5 bits
op rs rt immediate
016212631
6 bits 16 bits5 bits5 bits
CPU 6
Passi di ProgettoPassi di Progetto
Analizzare il set di Istruzioni: Requisiti del DapapathAnalizzare il set di Istruzioni: Requisiti del Dapapath Analizzare la semantica di ogni istruzione Analizzare la semantica di ogni istruzione
Espressa intermini di trasferimenti e operazioni tra registriEspressa intermini di trasferimenti e operazioni tra registri Il datapath deve includere il banco dei registri (register Il datapath deve includere il banco dei registri (register
file) file) Sono necessari altri registri, non visibili a livello ISA, e.g., PCSono necessari altri registri, non visibili a livello ISA, e.g., PC
Il datapath deve fornire i cammini per permettere tutti i Il datapath deve fornire i cammini per permettere tutti i trasferimenti tra registri necessari, e gli accessi in trasferimenti tra registri necessari, e gli accessi in memoriamemoria
Includeremo la memoria nel progetto (per semplicita’)Includeremo la memoria nel progetto (per semplicita’)
1. Selezionare i Componenti del Datapath1. Selezionare i Componenti del Datapath
2. Assemblare il Datapath secondo i requisiti aggiungendo 2. Assemblare il Datapath secondo i requisiti aggiungendo i segnali di controlloi segnali di controllo
3. Analizzare l’implementazione di ogni istruzione per 3. Analizzare l’implementazione di ogni istruzione per determinare quali segnali di controllo devono essere determinare quali segnali di controllo devono essere affermati o meno per permetterne l’esecuzione affermati o meno per permetterne l’esecuzione
4. Realizzare la Parte di Controllo (4. Realizzare la Parte di Controllo (ControlControl) in accordo a ) in accordo a quanto stabilito al punto 4 del paragrafo precedente.quanto stabilito al punto 4 del paragrafo precedente.
CPU 7
Semantica Istruzioni e RTLSemantica Istruzioni e RTL
RTL (Register-Transfer Language): Linguaggio per RTL (Register-Transfer Language): Linguaggio per esprimere i trasferimenti tra registri (e memoria), esprimere i trasferimenti tra registri (e memoria),
Permette di definire la semantica di ogni istruzionePermette di definire la semantica di ogni istruzioneM[x] contenuto della memoria indirizzo xM[x] contenuto della memoria indirizzo xR[y] contenuto registro yR[y] contenuto registro y
Es: Es: add rd, rs, rtadd rd, rs, rtR[rd]=R[rs]+R[rt], PC=PC+4;R[rd]=R[rs]+R[rt], PC=PC+4;
EsEs:load rt, offset(rs):load rt, offset(rs)R[rt]=M[R[rs]+sign_ext(offset)], PC=PC+4;R[rt]=M[R[rs]+sign_ext(offset)], PC=PC+4;
Es:Es: beq rs, rt, address beq rs, rt, addressIf(R[rs]==R[rt]) If(R[rs]==R[rt])
then PC=PC+4+sign_ext(address)<<2;then PC=PC+4+sign_ext(address)<<2;else PC=PC+4;else PC=PC+4;
Tutte richiedono come passo preliminare il prelievo Tutte richiedono come passo preliminare il prelievo dell’istruzione dalle memoria (fetch)dell’istruzione dalle memoria (fetch)
Istruzione=M[PC]Istruzione=M[PC]
CPU 8
Implementazione del set ridottoImplementazione del set ridotto
I primi due passi da implementare sono comuni a I primi due passi da implementare sono comuni a tutte le istruzioni,indipendentemente dalla classe tutte le istruzioni,indipendentemente dalla classe di istruzione:di istruzione:
Inviare l’uscita del Program Counter (Inviare l’uscita del Program Counter (PCPC) alla memoria ) alla memoria che contiene il programma, caricare l’istruzione (che contiene il programma, caricare l’istruzione (FetchFetch) ) ed aggiornare PCed aggiornare PC
Decodifica dell’Istruzione (Decodifica dell’Istruzione (Decode)Decode) (e lettura registri) (e lettura registri)
La fase di esecuzione (La fase di esecuzione (ExecuteExecute) dipende ) dipende dall’istruzionedall’istruzione
Sono comunque raggruppabili per classi di istruzioniSono comunque raggruppabili per classi di istruzioni
Dopo aver letto i registri, tutte le istruzioni usano Dopo aver letto i registri, tutte le istruzioni usano l’ALU (eccetto j)l’ALU (eccetto j)
Le istruzioni di accesso alla memoria per calcolare Le istruzioni di accesso alla memoria per calcolare l’indirizzol’indirizzo
Le istruzioni logico-aritmetiche per effettuare Le istruzioni logico-aritmetiche per effettuare l’operazionel’operazione
L’istruzione L’istruzione beqbeq per verificare l’uguaglianza fra registri per verificare l’uguaglianza fra registri
CPU 9
Implementazione del set ridotto (2)Implementazione del set ridotto (2)
Poi il comportamento delle istruzioni si differenziaPoi il comportamento delle istruzioni si differenziaIstruzioni di accesso alla memoriaIstruzioni di accesso alla memoria Devono accedere alla memoria per leggere/scrivere il datoDevono accedere alla memoria per leggere/scrivere il dato
Istruzioni logico-aritmeticheIstruzioni logico-aritmetiche Devono accedere ad un registro per scrivere il risultatoDevono accedere ad un registro per scrivere il risultato
Istruzioni di branch e jumpIstruzioni di branch e jump Devono modificare il Program CounterDevono modificare il Program Counter
Vantaggio della semplicità nella progettazioneVantaggio della semplicità nella progettazionePochi formati di istruzione facilitano l’implementazione Pochi formati di istruzione facilitano l’implementazione dell’unità di elaborazionedell’unità di elaborazione
CPU 10
I cinque passi delle istruzioniI cinque passi delle istruzioni
I cinque passi delle istruzioni da effettuareI cinque passi delle istruzioni da effettuare1.1. Fetch Fetch (caricamento) dell’istruzione dalla (caricamento) dell’istruzione dalla
memoriamemoria2.2. DecodeDecode dell’istruzione e fetch dei registri dell’istruzione e fetch dei registri3.3. ExecuteExecute– Uso della ALU (esecuzione dell’operazione o Uso della ALU (esecuzione dell’operazione o
calcolo dell’indirizzocalcolo dell’indirizzo))
4.4. Memory AccessMemory Access– Accesso ad un operando in memoriaAccesso ad un operando in memoria
5.5. Write-backWrite-back– Scrittura del risultato in un registroScrittura del risultato in un registro
CPU 11
Una visione astrattaUna visione astratta
1: fetch 2: decode e register fetch 3: execute 4: mem.
5: write-back
CPU 12
Progettazione dell’unità di elaborazioni Progettazione dell’unità di elaborazioni dati e prestazionidati e prestazioni
CPI
IC TCLOCK
Le prestazioni di un calcolatore sono determinate Le prestazioni di un calcolatore sono determinate da:da:
Numero di istruzioni Numero di istruzioni Instruction Count (IC)Instruction Count (IC)
Durata del ciclo di clock (TDurata del ciclo di clock (TCLOCKCLOCK))
Cicli di clock per istruzione Cicli di clock per istruzione Clock cycle Per Instruction (CPI)Clock cycle Per Instruction (CPI)
La progettazione del processore (unità di La progettazione del processore (unità di elaborazione e unità di controllo) determinaelaborazione e unità di controllo) determina
Durata del ciclo di clockDurata del ciclo di clock
Cicli di clock per istruzione (CPI)Cicli di clock per istruzione (CPI)
CPU 13
Implementazione del Processore: ApprocciImplementazione del Processore: Approcci
Singolo CicloSingolo CicloEsecuzione di ogni istruzione richiede 1 ciclo di clockEsecuzione di ogni istruzione richiede 1 ciclo di clock
Il ciclo di clock deve essere abbastanza lungo da Il ciclo di clock deve essere abbastanza lungo da permettere il completamento dell’istruzione piu’ lentapermettere il completamento dell’istruzione piu’ lentaSvantaggioSvantaggio: velocita’ limitata dall’istruzione piu’ lenta : velocita’ limitata dall’istruzione piu’ lenta supportata, alcune risorse devono essere replicatesupportata, alcune risorse devono essere replicate
Multi-CicloMulti-CicloSuddividere l’esecuzione in piu’ passiSuddividere l’esecuzione in piu’ passiEseguire un passo per cicloEseguire un passo per cicloVantaggioVantaggio: ogni istruzione richiede il solo numero di cicli : ogni istruzione richiede il solo numero di cicli (tempo) richiesto(tempo) richiesto TTclockclock(Singolo Ciclo)> T(Singolo Ciclo)> Tclockclock (Multiplo Ciclo) (Multiplo Ciclo)
PipelinedPipelinedSuddividere l’esecuzione in piu’ passiSuddividere l’esecuzione in piu’ passiEseguire un passo per cicloEseguire un passo per cicloProcessare piu’ istruzioni in paralleloProcessare piu’ istruzioni in parallelo Elaborazione in contemporanea di step diversi di istruzioni Elaborazione in contemporanea di step diversi di istruzioni
consecutive (linea di assemblaggio)consecutive (linea di assemblaggio)
CPU 14
Implementazione Singolo CicloImplementazione Singolo Ciclo
Prima implementazione impiega in singolo Prima implementazione impiega in singolo ciclo di clock per ogni istruzione ciclo di clock per ogni istruzione
Ogni istruzione inizia sul fronte attivo di un ciclo Ogni istruzione inizia sul fronte attivo di un ciclo di clock e termina sul fronte attivo del ciclo di di clock e termina sul fronte attivo del ciclo di clock successivoclock successivo Approccio non pratico e inefficiente rispetto ad una Approccio non pratico e inefficiente rispetto ad una
implementazione multicicloimplementazione multicicloOgni istruzione richiede esattamente tanto Ogni istruzione richiede esattamente tanto tempo quanto il tempo di esecuzone tempo quanto il tempo di esecuzone dell’istruzione piu’ lenta dell’istruzione piu’ lenta Nell’implementazioni multiciclo questo problema si Nell’implementazioni multiciclo questo problema si
evita permettendo alle istruzioni piu’ veloci di evita permettendo alle istruzioni piu’ veloci di essere eseguite in un numero inferiore di cicli essere eseguite in un numero inferiore di cicli
Tuttavia e’ semplice e utile da un punto di Tuttavia e’ semplice e utile da un punto di vista didatticovista didattico
Nota: Nota: Implementeremo il jump solo alla fine della trattazione
CPU 15
I Blocchi della ProgettazioneI Blocchi della Progettazione
••Fase di FetchFase di FetchAccedere all’istruzioni in memoria ed aggiornare PCAccedere all’istruzioni in memoria ed aggiornare PC
••DecodeDecode, Accesso ai registri ed esecuzione istruzioni , Accesso ai registri ed esecuzione istruzioni formato Rformato R
Istruzioni logico-aritmeticheIstruzioni logico-aritmetiche
••DecodeDecode, Accesso ai registri ed operazioni di accesso , Accesso ai registri ed operazioni di accesso alla alla
memoriamemoriaIstruzioni load/storeIstruzioni load/store
••DecodeDecode, Accesso ai registri per i branch, Accesso ai registri per i branchIstruzione beqIstruzione beq
CPU 16
Datapath: Fetch Istruzione e Datapath: Fetch Istruzione e aggiornamento PCaggiornamento PC
PC
Instructionmemory
Instructionaddress
Instruction
a. Instruction memory b. Program counter
Add Sum
c. Adder
PC
Instructionmemory
Readaddress
Instruction
4
Add
Instruction = M[PC]PC = PC + 4
CPU 17
Datapath: Fetch Istruzione e Datapath: Fetch Istruzione e aggiornamento PCaggiornamento PC
Instruction = M[PC]PC = PC + 4
RDMemory
ADDR
PC
Instruction
4
ADD
CPU 18
Datapath: Fetch Istruzione e Datapath: Fetch Istruzione e aggiornamento PCaggiornamento PC
Instruction = M[PC]PC = PC + 4
RDMemory
ADDR
PC
Instruction
4
ADD
CPU 19
Datapath: Istruzioni formato RDatapath: Istruzioni formato R
ALU control
RegWrite
RegistersWriteregister
Readdata 1
Readdata 2
Readregister 1
Readregister 2
Writedata
ALUresult
ALU
Data
Data
Registernumbers
a. Registers b. ALU
Zero5
5
5 3
InstructionRegisters
Writeregister
Readdata 1
Readdata 2
Readregister 1
Readregister 2
Writedata
ALUresult
ALU
Zero
RegWrite
ALU operation3
add rd, rs, rt
R[rd] =R[rs] + R[rt];
CPU 20
Datapath: Istruzioni formato RDatapath: Istruzioni formato R
add rd, rs, rt
R[rd] =R[rs] + R[rt];
5 5 5
RD1
RD2
RN1 RN2 WN
WD
RegWrite
Register File
op rs rt rd functshamt
Operation
ALU Zero
Instruction
3
CPU 21
Datapath: Datapath: Istruzioni Load/StoreIstruzioni Load/Store
16 32Sign
extend
b. Sign-extension unit
MemRead
MemWrite
Datamemory
Writedata
Readdata
a. Data memory unit
Address
Instruction
16 32
RegistersWriteregister
Readdata 1
Readdata 2
Readregister 1
Readregister 2
Datamemory
Writedata
Readdata
Writedata
Signextend
ALUresult
ZeroALU
Address
MemRead
MemWrite
RegWrite
ALU operation3
ALU control
RegWrite
RegistersWriteregister
Readdata 1
Readdata 2
Readregister 1
Readregister 2
Writedata
ALUresult
ALU
Data
Data
Registernumbers
a. Registers b. ALU
Zero5
5
5 3
lw rt, offset(rs)
R[rt] =M[R[rs] + sign_ext(offset)];
CPU 22
op rs rt offset/immediate
5 5
16
RD1
RD2
RN1 RN2 WN
WD
RegWrite
Register File
Operation
ALU
3
EXTND
16 32
Zero
RDWD
MemRead
MemoryADDR
MemWrite
5
lw rt, offset(rs)
R[rt] =M[R[rs] + sign_ext(offset)];
Datapath: Istruzione LoadDatapath: Istruzione Load
CPU 23
op rs rt offset/immediate
5 5
16
RD1
RD2
RN1 RN2 WN
WD
RegWrite
Register File
Operation
ALU
3
EXTND
16 32
Zero
RDWD
MemRead
MemoryADDR
MemWrite
5
sw rt, offset(rs)
M[R[rs] + sign_extend(offset)]=R[rt]
Datapath: Istruzione StoreDatapath: Istruzione Store
CPU 24
Datapath: Istruzione di SaltoDatapath: Istruzione di Salto
16 32Sign
extend
ZeroALU
Sum
Shiftleft 2
To branchcontrol logic
Branch target
PC + 4 from instruction datapath
Instruction
Add
RegistersWriteregister
Readdata 1
Readdata 2
Readregister 1
Readregister 2
Writedata
RegWrite
ALU operation3
beq rs, rt, offset
if (R[rs] == R[rt]) then PC = PC+4 + sign_ext(offset)<<2
CPU 25
beq rs, rt, offset
op rs rt offset/immediate
5 5
16
RD1
RD2
RN1 RN2 WN
WD
RegWrite
Register File
Operation
ALU
EXTND
16 32
Zero
ADD
<<2
PC +4 from instruction datapath
if (R[rs] == R[rt]) then PC = PC+4 + sign_ext(offset)<<2
Datapath: Istruzione di Salto Datapath: Istruzione di Salto beqbeq
CPU 26
Composizione dei blocchi Composizione dei blocchi
Uniamo il blocco relativo alle istruzioni di accesso alla Uniamo il blocco relativo alle istruzioni di accesso alla memoria con quello per le istruzioni di tipo Rmemoria con quello per le istruzioni di tipo R
Multiplexer per scegliere se il secondo operando è un indirizzo (tipo I) oppure il
dato in un registro (tipo R)
Multiplexer per scegliere se ai registri va il dato dalla memoria (tipo I)
oppure il risultato dell’operazione (tipo R)
CPU 27
Datapath: Istruzioni formato RDatapath: Istruzioni formato R
add rd,rs,rt5 516
RD1
RD2
RN1 RN2 WN
WD
RegWrite
Register File
Operation
ALU
3
EXTND
16 32
Zero
RD
WD
MemRead
DataMemory
ADDRMemWrite
5
Instruction32
MUX
MUXALUSrc
MemtoReg
CPU 28
Datapath: Istruzione LoadDatapath: Istruzione Load
lw rt,offset(rs)5 516
RD1
RD2
RN1 RN2 WN
WD
RegWrite
Register File
Operation
ALU
3
EXTND
16 32
Zero
RD
WD
MemRead
DataMemory
ADDRMemWrite
5
Instruction32
MUX
MUXALUSrc
MemtoReg
CPU 29
Datapath: Istruzione StoreDatapath: Istruzione Store
sw rt,offset(rs)5 516
RD1
RD2
RN1 RN2 WN
WD
RegWrite
Register File
Operation
ALU
3
EXTND
16 32
Zero
RD
WD
MemRead
DataMemory
ADDRMemWrite
5
Instruction32
MUX
MUXALUSrc
MemtoReg
CPU 30
Aggiungere il blocco che esegue il fetchAggiungere il blocco che esegue il fetch
PC
Instructionmemory
Readaddress
Instruction
16 32
Registers
Writeregister
Writedata
Readdata 1
Readdata 2
Readregister 1
Readregister 2
Signextend
ALUresult
Zero
Datamemory
Address
Writedata
Readdata M
ux
4
Add
Mux
ALU
RegWrite
ALU operation3
MemRead
MemWrite
ALUSrcMemtoReg
Memoria Istruzioni e dati Separate per Poter leggere e scrivere nello stesso ciclo
ALU e Adder Separati perche’ entrambi devonoPoter essere usati nello stesso ciclo
Composizione dei blocchiComposizione dei blocchi
CPU 31
Aggiungiamo il blocco per il beqAggiungiamo il blocco per il beq
PC
Instructionmemory
Readaddress
Instruction
16 32
Add ALUresult
Mux
Registers
Writeregister
Writedata
Readdata 1
Readdata 2
Readregister 1Readregister 2
Shiftleft 2
4
Mux
ALU operation3
RegWrite
MemRead
MemWrite
PCSrc
ALUSrc
MemtoReg
ALUresult
ZeroALU
Datamemory
Address
Writedata
Readdata M
ux
Signextend
Add
Adder addizionale
Composizione dei blocchiComposizione dei blocchiMultiplexer per
scegliere indirizzo della
prossima istruzione
CPU 32
Datapath: Datapath: addadd
add rd, rs, rt
5 516
RD1
RD2
RN1 RN2 WN
WD
RegWrite
Register File
Operation
ALU
3
EXTND
16 32
Zero
RD
WD
MemRead
DataMemory
ADDRMemWrite
5
Instruction32
MUX
ALUSrc
MemtoReg
ADD
<<2
RD
InstructionMemory
ADDR
PC
4
ADD
ADD
MUX
MUX
PCSrc
CPU 33
Datapath: Datapath: lwlw
lw rt,offset(rs)
5 516
RD1
RD2
RN1 RN2 WN
WD
RegWrite
Register File
Operation
ALU
3
EXTND
16 32
Zero
RD
WD
MemRead
DataMemory
ADDRMemWrite
5
Instruction32
MUX
ALUSrc
MemtoReg
ADD
<<2
RD
InstructionMemory
ADDR
PC
4
ADD
ADD
MUX
MUX
PCSrc
CPU 34
Datapath: Datapath: swsw
sw rt,offset(rs)
5 516
RD1
RD2
RN1 RN2 WN
WD
RegWrite
Register File
Operation
ALU
3
EXTND
16 32
Zero
RD
WD
MemRead
DataMemory
ADDRMemWrite
5
Instruction32
MUX
ALUSrc
MemtoReg
ADD
<<2
RD
InstructionMemory
ADDR
PC
4
ADD
ADD
MUX
MUX
PCSrc
CPU 35
Datapath: Datapath: beqbeq
beq r1,r2,offset
5 516
RD1
RD2
RN1 RN2 WN
WD
RegWrite
Register File
Operation
ALU
3
EXTND
16 32
Zero
RD
WD
MemRead
DataMemory
ADDRMemWrite
5
Instruction32
MUX
ALUSrc
MemtoReg
ADD
<<2
RD
InstructionMemory
ADDR
PC
4
ADD
ADD
MUX
MUX
PCSrc
CPU 36
ControlloControllo
L’Unita di Controllo deve generare:L’Unita di Controllo deve generare: I segnali di controllo dell’ALUI segnali di controllo dell’ALU I segnali di controllo dei vari multiplexerI segnali di controllo dei vari multiplexer I segnali di abilitazione alla scrittura/lettura I segnali di abilitazione alla scrittura/lettura
dei diversi elementi di memoriadei diversi elementi di memoria Basandosi su…Basandosi su… I segnali in ingresso all’unita’ di ControlloI segnali in ingresso all’unita’ di Controllo
I bit del campo opcode (e funct nel caso del I bit del campo opcode (e funct nel caso del formato R) dell’istruzioneformato R) dell’istruzione
0 rs rt rd shamt funct061116212631
6 bit 6 bit5 bit5 bit5 bit5 bit
25 20 15 10 5Istruzione di tipo R
35 o 43 rs rt address016212631
6 bit 16 bit5 bit5 bit
25 20 15Istruzione di load o store
4 rs rt address016212631
6 bit 16 bit5 bit5 bit
25 20 15Istruzione beq
Controllo
Opcode
Funct
Controllo ALU
Controllo MUX
Read/Write
Memorie
6
6
CPU 37
Suddivisione in Main Control e ALU Suddivisione in Main Control e ALU ControlControl
Per semplificare la progettazione/circuitoPer semplificare la progettazione/circuito Bit di funct (formato R) servono solo per il controllo dell’ALUBit di funct (formato R) servono solo per il controllo dell’ALU
Specificano l’operazione da eseguire: Specificano l’operazione da eseguire: add,sub,and,or, add,sub,and,or, o o sltslt
ALUOp serve per specificare il tipo di istruzione ALUOp serve per specificare il tipo di istruzione lw/sw beqlw/sw beq o o formato R)formato R)
Opcode ed ALUOpOpcode ed ALUOp load/store load/store ALUOp=00ALUOp=00 beq beq ALUOp=01ALUOp=01 Formato R Formato R ALUOp=10ALUOp=10
Controllo
Opcode
ALUOp
Controllo MUX
Read/Write
Memorie
2
Controllo
Opcode
Funct
Controllo ALU
Controllo MUX
Read/Write
Memorie
6
6
6
Funct
6
ALU
Control
Controllo ALU
CPU 38
Istruzioni ed Operazioni RichiesteIstruzioni ed Operazioni Richieste Load/store Load/store ALUOp=00ALUOp=00 sommasomma beq beq ALUOp=01 sottrazioneALUOp=01 sottrazione Formato R Formato R ALUOp=10 spec. dal campo functALUOp=10 spec. dal campo funct
Linee di controllo Ainvert (1 bit), Bnegate (1 bit) e Linee di controllo Ainvert (1 bit), Bnegate (1 bit) e Operation (2 bit) dell’ALUOperation (2 bit) dell’ALU0000 = and0000 = and0001 = or0001 = or0010 = add0010 = add0110 = sub0110 = sub0111 = slt0111 = slt1100 = nor1100 = nor
Poiche’ manca nor nel set ristetto ignoriamo AinvertPoiche’ manca nor nel set ristetto ignoriamo Ainvert Il controllo dell’ALU richiede solo gli ultimi 3 bitIl controllo dell’ALU richiede solo gli ultimi 3 bit
Controllo dell’ALUControllo dell’ALU
ALUOp
2
Funct
6
ALU
Control
Controllo ALU=ALU operation
CPU 39
Instruction AluOp Instruction Funct Field Desired ALU controlInstruction AluOp Instruction Funct Field Desired ALU control
opcode operation ALU action opcode operation ALU action LW 00 load word xxxxxx add 010LW 00 load word xxxxxx add 010
SW 00 store word xxxxxx add 010SW 00 store word xxxxxx add 010
Branch eq 01 branch eq xxxxxx sub 110Branch eq 01 branch eq xxxxxx sub 110
R-type 10 add 100000 add 010R-type 10 add 100000 add 010
R-type 10 subR-type 10 sub 100010 sub 110 100010 sub 110
R-type 10 AND 100100 and 000R-type 10 AND 100100 and 000
R-type 10 OR 100101 or 001R-type 10 OR 100101 or 001
R-type 10 set on less 101010 set on less 111R-type 10 set on less 101010 set on less 111
Tabella di Verita’Tabella di Verita’dell’ ALU Controldell’ ALU Control
Controllo dell’ALU (2)Controllo dell’ALU (2)
Input Output
ALUOp
2
Funct
6
ALU
Control
Controllo ALU
ALUOp Funct field ALU ControlALUOp1ALUOp0 F5 F4 F3 F2 F1 F0
0 0 X X X X X X 0100 1 X X X X X X 1101 X X X 0 0 0 0 0101 X X X 0 0 1 0 1101 X X X 0 1 0 0 0001 X X X 0 1 0 1 0011 X X X 1 0 1 0 111
*
CPU 40
Operation2
Operation1
Operation0
Operation
ALUOp1
F3
F2
F1
F0
F (5– 0)
ALUOp0
ALUOp
ALU control block
Controllo dell’ALU: ImplementazioneControllo dell’ALU: Implementazione
Tabella di Verita’Tabella di Verita’dell’ ALU Controldell’ ALU Control
ALUOp Funct field ALU ControlALUOp1ALUOp0 F5 F4 F3 F2 F1 F0
0 0 X X X X X X 0100 1 X X X X X X 1101 X X X 0 0 0 0 0101 X X X 0 0 1 0 1101 X X X 0 1 0 0 0001 X X X 0 1 0 1 0011 X X X 1 0 1 0 111
*
Input Output
CPU 41
Progettazione dell’Unita’ di ControlloProgettazione dell’Unita’ di Controllo
Osservazioni sul formato Istruzioni MIPSOsservazioni sul formato Istruzioni MIPS Il codice operativo (campo Il codice operativo (campo opcodeopcode) e’ sempre nei bit ) e’ sempre nei bit
31-2631-26 I due registri da leggere sono sempre I due registri da leggere sono sempre rsrs (bit 25-21) e (bit 25-21) e rtrt
(bit 20-16)(bit 20-16) Il registro base per load e store e’ sempre il registro Il registro base per load e store e’ sempre il registro rsrs
(bit 25-21)(bit 25-21) L’offset a 16-bit per L’offset a 16-bit per beqbeq,load e store e’ sempre nei bit ,load e store e’ sempre nei bit
15-015-0 Il registro di destinazione e’ Il registro di destinazione e’
bit 20-16 (rt) per loadbit 20-16 (rt) per load bits 15-11 (rd) per le istruzioni R bits 15-11 (rd) per le istruzioni R Occorre un ulteriore multiplexer per indicare quale campo Occorre un ulteriore multiplexer per indicare quale campo
dell’istruzione indica il registro destinazionedell’istruzione indica il registro destinazione
31-26 25-21 20-16 15-11
10-6 5-0
31-26 25-21 20-16 15-0
opcode
opcode
rs
rs
rt
rt address
rd shamt functR-type
Load/store or branch
CPU 42
Datapath e Controllo IDatapath e Controllo I
Registro da scrivere viene da
rt o da rd
MemtoReg
MemRead
MemWrite
ALUOp
ALUSrc
RegDst
PC
Instructionmemory
Readaddress
Instruction[31– 0]
Instruction [20– 16]
Instruction [25– 21]
Add
Instruction [5– 0]
RegWrite
4
16 32Instruction [15– 0]
0Registers
WriteregisterWritedata
Writedata
Readdata 1
Readdata 2
Readregister 1Readregister 2
Signextend
ALUresult
Zero
Datamemory
Address Readdata M
ux
1
1
Mux
0
1
Mux
0
1
Mux
0
Instruction [15– 11]
ALUcontrol
Shiftleft 2
PCSrc
ALU
Add ALUresult
CPU 43
I segnali di controllo ad 1 bitI segnali di controllo ad 1 bit
SegnaleSegnale Effetto quando vale 0Effetto quando vale 0 Effetto quando vale 1Effetto quando vale 1
RegDstRegDst Registro destinazione = rtRegistro destinazione = rt Registro destinazione = rdRegistro destinazione = rd
RegWriteRegWrite NessunoNessuno Nel registro indicato Nel registro indicato sull’ingresso sull’ingresso Write registerWrite register viene scritto il valore viene scritto il valore Write Write datadata
ALUSrcALUSrc Il secondo operando di ALU Il secondo operando di ALU viene da viene da Read data 2Read data 2
Il secondo operando di ALU Il secondo operando di ALU viene dall’estensione di segnoviene dall’estensione di segno
PCSrcPCSrc Scrittura di PC con PC+4Scrittura di PC con PC+4 Scrittura di PC con l’output del Scrittura di PC con l’output del sommatore per il branchsommatore per il branch
MemReadMemRead NessunoNessuno Lettura della locazione di Lettura della locazione di memoria indicata da memoria indicata da AddressAddress
MemWriteMemWrite NessunoNessuno Scrittura della locazione di Scrittura della locazione di memoria indicata da memoria indicata da AddressAddress
MemtoRegMemtoReg Il valore in Il valore in Write dataWrite data (registri) viene dalla ALU(registri) viene dalla ALU
Il valore in Il valore in Write dataWrite data (registri) (registri) viene dalla memoria dativiene dalla memoria dati
CPU 44
PC
Instructionmemory
Readaddress
Instruction[31– 0]
Instruction [20 16]
Instruction [25 21]
Add
Instruction [5 0]
MemtoReg
ALUOp
MemWrite
RegWrite
MemRead
BranchRegDst
ALUSrc
Instruction [31 26]
4
16 32Instruction [15 0]
0
0Mux
0
1
Control
Add ALUresult
Mux
0
1
RegistersWriteregister
Writedata
Readdata 1
Readdata 2
Readregister 1
Readregister 2
Signextend
Mux
1
ALUresult
Zero
PCSrc
Datamemory
Writedata
Readdata
Mux
1
Instruction [15 11]
ALUcontrol
Shiftleft 2
ALUAddress
Datapath e Controllo IIDatapath e Controllo II
CPU 45
Datapath conDatapath conControllo IIControllo II
PC
Instructionmemory
Readaddress
Instruction[31– 0]
Instruction [20 16]
Instruction [25 21]
Add
Instruction [5 0]
MemtoReg
ALUOp
MemWrite
RegWrite
MemRead
BranchRegDst
ALUSrc
Instruction [31 26]
4
16 32Instruction [15 0]
0
0Mux
0
1
Control
Add ALUresult
Mux
0
1
RegistersWriteregister
Writedata
Readdata 1
Readdata 2
Readregister 1
Readregister 2
Signextend
Mux
1
ALUresult
Zero
PCSrc
Datamemory
Writedata
Readdata
Mux
1
Instruction [15 11]
ALUcontrol
Shiftleft 2
ALUAddress
Opcode Istruzione e Segnali di ControlloOpcode Istruzione e Segnali di Controllo
PCSrc non dipende dal solo opcodePCSrc=1 se l’istruzionee’ beq e Zero=1
InstructionRegDst ALUSrcMemto-
RegReg
WriteMem Read
Mem WriteBranch ALUOp1 ALUp0
R-format 1 0 0 1 0 0 0 1 0lw 0 1 1 1 1 0 0 0 0sw X 1 X 0 0 1 0 0 0beq X 0 X 0 0 0 1 0 1
CPU 46
Segnali di Controllo: Istruzioni Formato RSegnali di Controllo: Istruzioni Formato R
Control signalsshown in blue
1
0
0
0
1
???Value depends on
funct
0
0
5 516
RD1
RD2
RN1 RN2 WN
WD
RegWrite
Register File
Operation
ALU
3
EXTND
16 32
Zero
RD
WD
MemRead
DataMemory
ADDRMemWrite
5
Instruction I32
MUX
ALUSrc
MemtoReg
ADD
<<2
RD
InstructionMemory
ADDR
PC
4
ADD
ADD
MUX
MUX
PCSrc
MUX RegDst
5
rdI[15:11]
rtI[20:16]
rsI[25:21]
immediate/offsetI[15:0]
0
1
0
11
0
10
CPU 47
5 516
RD1
RD2
RN1 RN2 WN
WD
RegWrite
Register File
Operation
ALU
3
EXTND
16 32
Zero
RD
WD
MemRead
DataMemory
ADDRMemWrite
5
Instruction I32
MUX
ALUSrc
MemtoReg
ADD
<<2
RD
InstructionMemory
ADDR
PC
4
ADD
ADD
MUX
MUX
PCSrc
MUX RegDst
5
rdI[15:11]
rtI[20:16]
rsI[25:21]
immediate/offsetI[15:0]
0
1
0
11
0
10
Segnali di Controllo: Istruzione Segnali di Controllo: Istruzione lwlw
0
Control signalsshown in blue
0010
1
1
1
0
1
CPU 48
5 516
RD1
RD2
RN1 RN2 WN
WD
RegWrite
Register File
Operation
ALU
3
EXTND
16 32
Zero
RD
WD
MemRead
DataMemory
ADDRMemWrite
5
Instruction I32
MUX
ALUSrc
MemtoReg
ADD
<<2
RD
InstructionMemory
ADDR
PC
4
ADD
ADD
MUX
MUX
PCSrc
MUX RegDst
5
rdI[15:11]
rtI[20:16]
rsI[25:21]
immediate/offsetI[15:0]
0
1
0
11
0
10
Segnali di Controllo: Istruzione Segnali di Controllo: Istruzione swsw
0
Control signalsshown in blue
X010
1
X
0
1
0
CPU 49
5 516
RD1
RD2
RN1 RN2 WN
WD
RegWrite
Register File
Operation
ALU
3
EXTND
16 32
Zero
RD
WD
MemRead
DataMemory
ADDRMemWrite
5
Instruction I32
MUX
ALUSrc
MemtoReg
ADD
<<2
RD
InstructionMemory
ADDR
PC
4
ADD
ADD
MUX
MUX
PCSrc
MUX RegDst
5
rdI[15:11]
rtI[20:16]
rsI[25:21]
immediate/offsetI[15:0]
0
1
0
11
0
10
Segnali di Controllo: Istruzione Segnali di Controllo: Istruzione beqbeq
Control signalsshown in blue
X110
0
X
0
0
0
1 if Zero=1
CPU 50
Datapath conDatapath conControllo IIControllo II
PC
Instructionmemory
Readaddress
Instruction[31– 0]
Instruction [20 16]
Instruction [25 21]
Add
Instruction [5 0]
MemtoReg
ALUOp
MemWrite
RegWrite
MemRead
BranchRegDst
ALUSrc
Instruction [31 26]
4
16 32Instruction [15 0]
0
0Mux
0
1
Control
Add ALUresult
Mux
0
1
RegistersWriteregister
Writedata
Readdata 1
Readdata 2
Readregister 1
Readregister 2
Signextend
Mux
1
ALUresult
Zero
PCSrc
Datamemory
Writedata
Readdata
Mux
1
Instruction [15 11]
ALUcontrol
Shiftleft 2
ALUAddress
Opcode Istruzione e Segnali di ControlloOpcode Istruzione e Segnali di Controllo
PCSrc non dipende dal solo opcodePCSrc=1 se l’istruzionee’ beq e Zero=1
InstructionRegDst ALUSrcMemto-
RegReg
WriteMem Read
Mem WriteBranch ALUOp1 ALUp0
R-format 1 0 0 1 0 0 0 1 0lw 0 1 1 1 1 0 0 0 0sw X 1 X 0 0 1 0 0 0beq X 0 X 0 0 0 1 0 1
CPU 51
Implementazione dell’unita’ di Controllo Implementazione dell’unita’ di Controllo PrincipalePrincipale
Segnale form. lw sw beqSegnale form. lw sw beq RROp5 0 1 1 0Op4 0 0 0 0Op3 0 0 1 0Op2 0 0 0 1Op1 0 1 1 0Op0 0 1 1 0RegDst 1 0 x xALUSrc 0 1 1 0MemtoReg 0 1 x xRegWrite 1 1 0 0MemRead 0 1 0 0 MemWrite 0 0 1 0Branch 0 0 0 1ALUOp1 1 0 0 0ALUOP0 0 0 0 1
Inp
uts
Inp
uts
=O
pco
de
=O
pco
de
Outp
ut
Outp
ut
ss
Tabella di verita’ dell’unita’ di ControlloTabella di verita’ dell’unita’ di Controllo
R-format Iw sw beq
Op0
Op1
Op2
Op3
Op4
Op5
Inputs
Outputs
RegDst
ALUSrc
MemtoReg
RegWrite
MemRead
MemWrite
Branch
ALUOp1
ALUOpO
Rete Combinatoria realizzabile Rete Combinatoria realizzabile tramite PLAtramite PLA
CPU 52
Controllo a Singolo CicloControllo a Singolo Ciclo
Controllo a singolo ciclo Controllo a singolo ciclo Definito da una coppia di tabelle di verita’Definito da una coppia di tabelle di verita’
Controllo Principale e Controllo ALUControllo Principale e Controllo ALU Rete CombinatoriaRete Combinatoria
R-format Iw sw beq
Op0
Op1
Op2
Op3
Op4
Op5
Inputs
Outputs
RegDst
ALUSrc
MemtoReg
RegWrite
MemRead
MemWrite
Branch
ALUOp1
ALUOpO
Operation2
Operation1
Operation0
Operation
ALUOp1
F3
F2
F1
F0
F (5– 0)
ALUOp0
ALUOp
ALU control block
Zero
PCSrc
CPU 53
Controllo a Singolo CicloControllo a Singolo Ciclo
Il Controllo della CPU a singolo ciclo e’ una rete Il Controllo della CPU a singolo ciclo e’ una rete combinatoriacombinatoria
Il Datapath e’ una rete sequenzialeIl Datapath e’ una rete sequenzialeL’output dipende dagli ingressi e dai valori dagli L’output dipende dagli ingressi e dai valori dagli elementi di memoria (Registri e PC)elementi di memoria (Registri e PC)
Il ciclo di clock deve durare abbastanza da Il ciclo di clock deve durare abbastanza da stabilizzare le uscite di tutte le reti combinatorie stabilizzare le uscite di tutte le reti combinatorie prima del fronte di discesa del clockprima del fronte di discesa del clock
Clock in AND con i segnali di controllo di scritturaClock in AND con i segnali di controllo di scrittura I valori in ingresso vengono scritti solo se i segnali sono I valori in ingresso vengono scritti solo se i segnali sono
affermatiaffermati
Ciclo di Clock determinato sulla base del percorso Ciclo di Clock determinato sulla base del percorso piu’ lungopiu’ lungo
CPU 54
Diagramma a blocchi della CPU (Datapath e Diagramma a blocchi della CPU (Datapath e Control) e MemoriaControl) e Memoria
Mem. Istr.
Mem.
Dati
Istruzione
<5:0
>
<31:2
6>
Opcode Funct
CONTROLLO
DATAPATH
Addr
Addr
rs,rt,rd,Im
m
Operation=f(ALUOp,funct)
RegDst ALUSrc MemtoReg
PCRsr=Branch∙Zero
MemWr MemRd RegWr
Zero
Register file
PC
ALU
CPU 55
Shiftleft 2
PC
Instructionmemory
Readaddress
Instruction[31– 0]
Datamemory
Readdata
Writedata
RegistersWriteregister
Writedata
Readdata 1
Readdata 2
Readregister 1
Readregister 2
Instruction [15– 11]
Instruction [20– 16]
Instruction [25– 21]
Add
ALUresult
Zero
Instruction [5– 0]
MemtoReg
ALUOp
MemWrite
RegWrite
MemRead
Branch
JumpRegDst
ALUSrc
Instruction [31– 26]
4
Mux
Instruction [25– 0] Jump address [31– 0]
PC+4 [31– 28]
Signextend
16 32Instruction [15– 0]
1
Mux
1
0
Mux
0
1
Mux
0
1
ALUcontrol
Control
Add ALUresult
Mux
0
1 0
ALU
Shiftleft 2
26 28
Address
31-26 25-0
opcode addressJump
Ulteriore multiplexer con Segnale di controllo jump
Calcolo dell’indirizzo di salto
Datapath e Controllo III: Istruzione Datapath e Controllo III: Istruzione jj
CPU 56
Datapath e Controllo III: Istruzione Datapath e Controllo III: Istruzione jj
5 516
RD1
RD2
RN1 RN2 WN
WD
RegWrite
Register File
Operation
ALU
3
EXTND
16 32
Zero
RD
WD
MemRead
DataMemory
ADDRMemWrite
5
Instruction I32
MUX
ALUSrc
MemtoReg
ADD
<<2
RD
InstructionMemory
ADDR
PC
4
ADD
ADD
MUX
MUX
PCSrc
MUX RegDst
5
0
1
0
11
0
10
ALUControl
ControlUnit
6 6
op I[31:
op I[31:26] funct I[5:0]
ALUOp
2
Branch
MUX
0
1
Jump
<<226
CONCAT28
jmpaddr I[25:0]
PC+4[31-28]
32
CPU 57
L’implementazione singolo ciclo e’ inefficienteL’implementazione singolo ciclo e’ inefficiente
Una istruzione per ciclo, CPI=1, ma…Una istruzione per ciclo, CPI=1, ma…
Il tempo di ciclo e’ determinato dall’istruzione Il tempo di ciclo e’ determinato dall’istruzione
piu’ lungapiu’ lunga
Quale?Quale?
Ciclo di Clock dell’Implementazione a singolo Ciclo di Clock dell’Implementazione a singolo ciclociclo
CPU 58
Calcolo del tempo di ciclo assumendo ritardi Calcolo del tempo di ciclo assumendo ritardi nulli per multiplexer, unita’ di controllo, nulli per multiplexer, unita’ di controllo, estensione del segno, accesso PC, shift left, estensione del segno, accesso PC, shift left, linee) eccetto :linee) eccetto :
Memoria Istruzione e Dati (2ns)Memoria Istruzione e Dati (2ns) ALU ed addizionatori (2ns)ALU ed addizionatori (2ns) Accesso al banco dei registri (1ns)Accesso al banco dei registri (1ns)
Ciclo di Clock dell’Implementazione a singolo Ciclo di Clock dell’Implementazione a singolo ciclo ciclo
Instr.Instr. Mem IMem I Reg RdReg Rd ALU OpALU Op Mem DMem D Reg WrReg Wr TotalTotal
R-typeR-type
loadload
storestore
beqbeq
jumpjump
22 11 22 11 66
22 11 22 22 11 88
22 11 22 22 77
22 11 22 55
22 22
CPU 59
Il tempo di ciclo e’ determinato dall’istruzione Il tempo di ciclo e’ determinato dall’istruzione piu’ lentapiu’ lenta
Nel nostro caso e’ load, ma cosa succederebbe se Nel nostro caso e’ load, ma cosa succederebbe se
considerassimo anche istruzioni floating point?considerassimo anche istruzioni floating point?
Perdita di tempoPerdita di tempo moltre istruzioni possono essere eseguite in moltre istruzioni possono essere eseguite in
un tempo minore un tempo minore
Le risorse che devono essere usate piu’ di una Le risorse che devono essere usate piu’ di una
volta nello stesso ciclo devono essere duplicatevolta nello stesso ciclo devono essere duplicate
Spreco di hardware/chip areaSpreco di hardware/chip area
Problemi con l’Implementazione a Singolo CicloProblemi con l’Implementazione a Singolo Ciclo
CPU 60
Problemi con l’Implementazione a Singolo CicloProblemi con l’Implementazione a Singolo Ciclo
Possibili soluzioniPossibili soluzioni
1.1. Usare un periodo di clock variabile per ogni Usare un periodo di clock variabile per ogni tipo di istruzionetipo di istruzione
Soluzione non praticaSoluzione non pratica
2.2. Approccio MulticicloApproccio MulticicloUsare un tempo di ciclo piu’ piccolo…Usare un tempo di ciclo piu’ piccolo…
Ma permettere l’esecuzione di istruzioni diverse sia Ma permettere l’esecuzione di istruzioni diverse sia completata in piu’ ciclicompletata in piu’ cicli Dividendo l’esecuzione in passiDividendo l’esecuzione in passi Eseguendo un singolo passo per cicloEseguendo un singolo passo per ciclo