Il processore PD32 Macchina di von Neumann Unità di Ingresso Memoria di lavoro Unità di Calcolo Unità di Controllo Unità di Uscita Suddivisione SCA-SCO Unità di Ingresso Memoria di lavoro Unità di Calcolo Unità di Controllo Segnali di controllo/condizione Flusso dati Unità di Uscita SCA SCO Modifica macchina di Von Neumann con CPU Unità di Ingresso Memoria di lavoro Unità di Calcolo Unità di Controllo CPU Unità di Uscita Dal linguaggio ad alto livello al linguaggio macchina Non dipende dalla macchina HW Programma in Linguaggio alto Livello a=b+c Compilatore • Insieme istruzioni che dipendono dalla macchina hw (simboliche) • Commenti • Riferimenti simbolici • Insieme Istruzioni della macchina hw • Riferimenti indirizzi fisici Programma in Linguaggio Assembly movw b,R1 movw c,R2 addw R2,R1 movw R1,a Assemblatore Programma in Linguaggio Macchina Macchina HW 000101..010100 1011101..010100 01011..11101010 010..1110101010 PD32 • Processore “virtuale” dotato di registri da 32 bit • Non esiste nella realtà, ma le sue funzionalità sono simulate tramite un programma • Nel seguito sarà usato per approfondire alcuni aspetti legati alle architetture dei calcolatori • Sistema multiciclo • No pipeline, no memoria cache R0,R1... registri .. . R1 R7 MDR memoria di lavoro R0 MAR I/ODR TEMP1 ALU, shifter unità di calcolo I/OAR TEMP2 PC ALU SR SHIFTER IR UNITA' DI CONTROLLO CPU N.B. non sono indicati i segnali di controllo che dal SCO vanno verso i registri interni, le unità di calcolo e la struttura di interconnessione dispositivi ingresso/uscita struttura di interconnessione Collegamenti con memoria e I/O PD32- Sottosistema di Calcolo (SCA) • Registri (basati su Flip-Flop D con segnale di Enable) – speciali – generali • Dispositivi di calcolo – Shifter – ALU (somma e sottrazione) • MUX • Decodificatori • Struttura di interconnessione: BUS Esecuzione dell’istruzione L’esecuzione dell’istruzione prevede tre fasi fetch, decodifica e esecuzione -La decodifica è fatta dal sistema di controllo (SCO); le altre da SCA -SCA utilizza le risorse del processore -La fase di esecuzione di un ciclo istruzione consiste in un numero variabile (dipende dall’istruzione) di operazioni elementari (cicli macchina) - Ciascun ciclo esegue un’operazione elementare (ad esempio trasferimento di un dato da un registro) Un semplice esempio Consideriamo l’istruzione a=a+b, espressa in un linguaggio di alto livello • “Memorizza nella variabile di nome a, la somma dei valori contenuti nelle variabili di nome a e b” • Nota: Le variabili sono individuate da un nome simbolico deciso precedentemente nel programma.. a 15 b 9 Prima a =a+b a 24 b 9 Dopo Un semplice esempio (2) Per eseguire questa istruzione è necessario – Stabilire dove sono memorizzati i valori da sommare – Stabilire dove va scritto il risultato dell’operazione – Quale operazione svolgere • Nel PD32, gli operandi sono memorizzati nei registri interni alla CPU (registri visibili al programmatore) • Il formato dell’istruzione è (s può essere B,W,L) ADDs <sorgente><destinazione> Il campo destinazione è un registro che contiene il valore iniziale di un operando e che sarà modificato ADDW R2,R1 #somma R1 con R2 (32 bit) e poni il risultato in R1 Esecuzione istruzione Indirizzo PC 100 adds R2,R1 . . PC=Program Counter contatore di programma (memorizza indirizzo dell’ istruzione in esecuzione) MEMORIA 100 Istruzione: fase di fetch Indirizzo PC 100 IR adds R2,R1 PC=Program Counter IR= Instruction Register (memorizza istruzione in esecuzione) adds R2,R1 . . MEMORIA 100 Istruzione: decodifica Indirizzo PC 100 IR adds R2,R1 adds R2,R1 . . MEMORIA Controllo Decodifica istruzione: predispone i comandi per la sua esecuzione 100 Istruzione: fase di esecuzione Indirizzo PC 100 IR adds R2,R1 adds R2,R1 100 . . MEMORIA Controllo Risorse di calcolo Esecuzione dell’istruzione (consiste di diversi passi) CPU come interprete La CPU può essere specificato come la ripetizione continua del seguenti passi (Ciclo Istruzione) che interpretano le istruzioni di un programma contenuto in memoria. La notazione fetch: (PC)IR incrementa PC esegui istruzione in IR vai al passo fetch • • (PC) indica il contenuto della locazione di memoria con indirizzo PC La CPU interpreta le istruzioni che man mano sono presenti nel suo Instruction Register (nota che l’esecuzione istr. puo’ modificare PC) Tale schema è semplificato poiché per interagire con l’esterno, o gestire situazioni anomale, tale ciclo deve poter essere interrotto. PD32- BUS interno • Usato per il collegamento dei registri interni • Operazioni che caratterizzano il bus – Ricezione dati • i bit presenti sul bus sono memorizzati in un registro – Trasmissione dati • Il contenuto di un registro è posto sul bus • Al più un solo registro può scrivere sul bus – segnali di controllo opportunamente generati • Il segnale di abilitazione alla scrittura di un registro corrisponde alla ricezione dei dati presenti sul bus in quel momento • Il segnale di abilitazione sul buffer three-state permette di trasferire sul bus il contenuto del registro PD32- BUS interno, segnali di controllo Una sola scrittura per volta (controllo mediante Bi) 2n segnali di controllo (n numero dei registri) WR0 WR1 R0 BR0 Wi=1, leggi dal bus Bi =1 scrivi sul bus WR7 R1 BR1 R7 BR7 32 bit PD32- BUS interno, esempio R1 -> R0 Per eseguire il trasferiemento da R1 ad R0 (simbolicamente (R1)->R0) devono essere affermati solamente i seguenti segnali: BR1 = 1, WR0 = 1 WR0 WR1 R0 BR0 WR7 R1 BR1 R7 BR7 32 bit PD32- Banco dei registri • Insieme di 8 registri generali indicati da R0 ad R7 • Sono controllati mediante – Segnali di abilitazione per • scrittura del registro (WM) • lettura e conseguente invio sul bus interno del contenuto del registro (RM) Indirizzo WM RM BUS interno PD32- Banco dei registri Decoder Indirizzo registro WM RM w0 R0 w1 R1 B0 wi =1, scrivi valore sul bus in Ri Bi = 1, invia sul bus valore di Ri w7 B1 R7 B7 BUS PD32- esempio: R7 ->BUS Indirizzo registro Address=111, RM=1 Decoder 1 1 1 Address WM RM w0 R0 w1 B0 R1 w7 B1 nota: non si può leggere e scrivere contemporaneamente R7 B7 BUS PD32- ALU • Esegue le operazioni aritmetiche e logiche dei valori memorizzati in due registri tampone (non visibili al programmatore) Temp1 e Temp2 • Il risultato è posto in un registro generale Ri 32 TEMP1 WT1 TEMP2 ALU BA WT2 OpCode (specifica operazione da eseguire) PD32- ALU, esempio: esecuzione addw R2,R1 WM RM TEMP1 WT1 3 Address TEMP2 WT2 REGISTRI OpCode ALU BA 32 PD32- ALU, esempio: esecuzione addw R2,R1 1. R1 -> Temp1 WM RM=1, Address = 001, WT1=1 RM TEMP1 WT1 3 Address TEMP2 WT2 REGISTRI OpCode ALU BA 32 PD32- ALU, esempio: esecuzione addw R2,R1 1. 2. R1 -> Temp1 R2 -> Temp2 WM RM=1, Address = 001, WT1 = 1 RM=1, Address = 010, WT2 = 1 RM TEMP1 WT1 3 Address TEMP2 WT2 REGISTRI OpCode ALU BA 32 PD32- ALU, esempio: esecuzione addw R2,R1 1. 2. 3. R1 -> Temp1 RM=1, Address = 001, WT1 = 1 R2 -> Temp2 RM=1, Address = 010, WT2 = 1 ALU-OUT(Temp1+Temp2)->R1 WM=1, Address = 001, OpCode = addw, BA=1 WM RM TEMP1 WT1 3 Address TEMP2 WT2 REGISTRI OpCode ALU BA 32 Osservazioni • • • • Per l’esecuzione dell’istruzione (senza considerare la fase di fetch) sono state necessarie 3 operazioni elementari Ogni operazione viene eseguita durante un ciclo di clock In generale il numero di cicli di clock richiesti per completare una istruzione è variabile e dipende dall’istruzione. Tale paramentro viene indicato con CPI (Clock per Instruction) La velocità di esecuzione di un programma dipende anche dal numero medio di CPI PD32- Shifter Usato per eseguire operazioni di scorrimento di posizioni, nonché per lo spostamento di dati tra registri interni (i registri tampone non possono scrivere sul bus mentre i segnali di controllo valgono per tutti i registri) 32 bit TEMP1 WT1 TEMP2 OpCode ALU BA WT2 SHIFTER OpCode BS Shifter (background) Spostamento logico a destra di k posti. bn-i = 0 (per 0 ≤ i < k) bi = ai+k (per 1≤ i ≤ n - k) C = ak 0 . . .0 a . .a n b n a a . .. a k+2 k+1 k b b n-k+1 n-k b 2 b 1 1 C Barrel shifter an a n-1 an-2 a a1 n-3 d 1 . . . c 1 2 . . . c 2 reg istro di . . . 3 c 3 contro llo . . . . . . ... lo g n -1 ... . . . . . . c c lo g n ... bn ... bn/2 b1 lo g n -1 lo g n Schema di una cella Ci d PD32- Status Register Contiene informazioni sull’esito dell’ultima operazione (ex. zero, overflow). Usato anche come ingresso per alcune operazioni (ex. Salti condizionati) 32 TEMP1 WT1 TEMP2 OpCodeALU WT2 SHIFTER ALU BA OpCodeSHIFTER BS SR BSR Wt1 R0 Wt2 TEMP1 TEMP2 singola linea AND opcode AND opcode linee multiple shifter B B BA R1 . . decoder ... . M U X S R7 AND BS SR B SR AND AND ALU IR W MUX IR AND INC(N=1,2,4) PC W R M PC W M R PC N.B. non sono evidenziate le variabili di condizione che da SR e IR vanno al SCO Incremento PC INC2 INC1 WPC PC R PC Il PC deve essere incrementato (se non si eseguono istruzione di salto) NOTA: le istruzioni PD-32 possono avere lunghezza diversa; quindi incremento PC è variabile PD32- Interazione con la memoria • La memoria contiene sia i dati che le istruzioni e può essere sia letta che scritta. • E’ necessario quindi: – Prelevare istruzioni – Leggere dati – Scrivere dati • Le operazioni di lettura/scrittura avvengono fra una locazione di memoria e un registro (registro dati, RI, PC) • E’ necessario quindi instradare opportunamente i dati ricevuti dalla memoria verso i registri e viceversa. Memoria: organizzazione logica a a a a 3 2 1 0 0 0 00 0 0 01 0 0 10 0 0 11 0 1 00 0 1 01 0 1 10 0 1 11 1 0 00 1 0 01 1 0 10 1 0 11 1 1 00 1 1 01 1 1 10 1 1 11 Organizzazione logica a vettore di 16 celle di memoria a a a a 3 2 1 0 001 011 101 111 1 1 1 1 a a a a 3 2 1 0 001 011 101 111 0 0 0 0 a a a a 3 2 1 0 000 010 100 110 1 1 1 1 a a a a 3 2 1 0 000 010 100 110 0 0 0 0 Un’organizzazione a 4 moduli di 16 celle di memoria Memoria RAM RD 1 2 de cod er di ri ga al DB am plifica tore di uscita . . . CS ma trice m x m bit da l DB m am plifica tore di scrittu ra 1 2 . .. de cod er di col onna in dirizzi da ll'AB linea singola linee multiple WR m Memoria comportamento esterno Funzionalmente è caratterizzata dai seguenti segnali – – – – – Indirizzo della parola da leggere/scrivere MR, affermato se si vuole leggere MW, affermato se si vuole scrivere CS, Abilita l’intero modulo (Chip Select) Dati Tempo di accesso n bit Indirizzo valido Dati MR MR MW CS Indirizzo m bit Dato valido Memoria organizzazione in moduli Data BUS (32 bit) d31…d24 d15…d8 d7…d0 MR MW MR MW MR MW MR MW CS CS CS CS a2…a31 Mb3 Mb2 Mb1 Mb0 d23…d16 a2…a31 a2…a31 a2…a31 Address BUS (30 bit) Memoria: spazio di indirizzamento Locazione 00000000 Lo spazio di indirizzamento del PD32 e’ monodimensionale e Composto da 232 locazioni (byte) Byte (8 bit) Word (16 bit) Locazione FFFFFFFF Longword (32 bit) Memoria: disallineamento a a a a 3 2 1 0 001 011 101 111 1 1 1 1 a a a a 3 2 1 0 001 011 101 111 0 0 0 0 a a a a 3 2 1 0 000 1 010 1 100 1 110 1 a a a a 3 2 1 0 000 0 010 0 100 0 110 0 Esempio di memorizzazione di una informazione di quattro byte allineati sullo stesso indirizzo di riga. a a a a 3 2 1 0 001 011 101 111 1 1 1 1 a a a a 3 2 1 0 001 011 101 111 0 0 0 0 a a a a 3 2 1 0 000 1 010 1 100 1 110 1 a a a a 3 2 1 0 000 0 010 0 100 0 110 0 Esempio di memorizzazione di una informazione di quattro byte disallineati a a a a 3 2 1 0 001 011 101 111 1 1 1 1 a a a a 3 2 1 0 001 011 101 111 0 0 0 0 a a a a 3 2 1 0 000 1 010 1 100 1 110 1 a a a a 3 2 1 0 000 0 010 0 100 0 110 0 Esempio di memorizzazione di una informazione di due byte disallineati Memoria: byte allineati Data BUS (32 bit) d31…d24 d15…d8 d7…d0 MR MW MR MW MR MW MR MW CS CS CS CS a2…a31 Mb3 Mb2 Mb1 Mb0 d23…d16 a2…a31 a2…a31 a2…a31 Address BUS (30 bit) Memoria: byte non allineati (1) Data BUS (32 bit) d31…d24 d15…d8 d7…d0 MR MW MR MW MR MW MR MW CS CS CS CS a2…a31 Mb3 Mb2 Mb1 Mb0 d23…d16 a2…a31 a2…a31 a2…a31 Address BUS (30 bit) Memoria: byte non allineati (2) Data BUS (32 bit) d31…d24 d15…d8 d7…d0 MR MW MR MW MR MW MR MW CS CS CS CS a2…a31 Mb3 Mb2 Mb1 Mb0 d23…d16 a2…a31 a2…a31 a2…a31 Address BUS (30 bit) Memoria: interfaccia del PD32 • • • Registro Memoria Dati (MDR) Registro Indirizzo (MAR) Segnali di Controllo (MR,MW, Mb3, Mb2, Mb1, Mb0) WMDR dati BMDR SCO Memoria Di Lavoro Segnali di Controllo indirizzi Bus interno WMAR Bus Interno del PD32 Memoria: interfaccia SCA del PD32 M D R Data Bus DIR B MDR B W MDR DB M A R W Address Bus MAR B AB SCA del PD32 PD32- Interazione con l’esterno • Ogni fase che comporta l’interazione con le unità esterne viene detta ciclo macchina. • Ogni ciclo macchina può essere costituito da uno o due cicli di bus; per esempio la lettura di una parola memorizzata su due byte non allineati sullo stesso indirizzo di riga necessita di due accessi in memoria (cioè di due cicli di bus). Interfaccia dispositivi di I/O INTERFACCIA Indipendente dal dispositivo Dipendente dal dispositivo indirizzi Decoder segnali di controllo Registro segnali di Device controllo Control dati dati BUS Dispositivi di I/O: interfaccia del PD32 • Registro Dati (I/ODR) • Registro Indirizzo (I/OAR) • Segnali di Controllo (I/OR,I/OW, Start, ……….) WMDR dati BI/ODR SCO Dispositivo di I/O Segnali di Controllo indirizzi Bus interno WMAR I/O: interfaccia SCA del PD32 Bus Interno del PD32 I/O D R I/O Data Bus DIR B I/ODR B W I/ODR I/ODB I/O A R W I/O Address Bus I/OAR B I/OAB SCA del PD32 Interconnesione del PD32 30 PD32 32 Interfaccia I/O Interfaccia I/O 32 8 Modulo di memoria I/O address bus I/O control bus I/O data bus Modulo di memoria dispositivo di I/O dispositivo di I/O Memory address bus Memory control bus Memory data bus Sottosistema di controllo (SCO) Data In Data Out SCA (SLAVE) Stato o variabili di condizionamento Variabili Condizionamento esterne TASK SCO (MASTER) Uscite esterne Sottosistema di controllo (SCO) start microprogramma relativo alla fase di fetch Decodifica codice della classe dell' istruzione XXX microprogramma relativo alle istruzione la cui classe è XXX YYY microprogramma relativo alle istruzione la cui classe è YYY ZZZ . .. microprogramma relativo alle istruzione la cui classe è ZZZ SCO: schema di Mealy variabili di condizione circuito di selezione reg. SEL CK micro ordini ROM codice classe load CK spostamento base reset SCO: schema di Moore Reset: azzera cod. classe (inizia fetch) variab. di cond.: influenzano esecuzione istr. (ad es. var. in SR) Micrordini: comandi per SCA CK: clock codice classe reset base Load: segnale di caricamento nuova istruzione (a fine fetch) load spostamento Cod. Classe: codice istruzione micro ordini ROM SEL CK SS1 SS2 SSm ... multiplexer circuito di selezione variabili di condizione Interazione con la memoria: ciclo di scrittura T1 T2 CLOCK BUS INDIRIZZI indirizzo MWR BUS DATI dato T3 Interazione con la memoria: ciclo di lettura T1 T2 T3 CLOCK BUS INDIRIZZI indirizzo MRD BUS DATI dato Passi elementari per eseguire il Fetch (ipotesi: 4 byte allineati in memoria) 1. PC -> MAR; /* trasferimento del contenuto del PC nel MAR */ WMDR WPC PC RPC Data Bus INC4 BMDR WIR Memoria Di Lavoro DIR BDB IR Address Bus WMAR BAB Fetch 1. 2. PC -> MAR; /* trasferimento del contenuto del PC nel MAR */ (MAR)->MDR /* trasferimento istruzione da eseguire in MDR*/ WMDR WPC PC RPC Data Bus INC4 BMDR WIR Memoria Di Lavoro DIR BDB IR Address Bus WMAR BAB Fetch 1. 2. 3. PC -> MAR; /* trasferimento del contenuto del PC nel MAR */ (MAR) -> MDR /* trasferimento istruzione da eseguire in MDR*/ MDR -> IR /* trasferimento istruzione da eseguire nell’IR*/ PC+4->PC /* e predisposizione PC per prelievo prossima istruzione*/ WMDR WPC PC RPC Data Bus INC4 BMDR WIR Memoria Di Lavoro DIR BDB IR Address Bus WMAR BAB Fetch: micro-ordini 1. PC -> MAR; /* trasferimento del contenuto del PC sul MAR */ 1. RPC = 1, WMAR = 1 2. (MAR) -> MDR /* trasferimento istruzione da eseguire in MDR*/ 1. BAB = 1 /* T1 */ 2. BAB = 1, MRD = 1 /* T2 */ 3. BAB = 1, MRD = 1, WMDR = 1 /* T3*/ 3. MDR -> IR /* trasferimento istruzione da eseguire in IR e predisposizione PC per prelievo prossima istruzione*/ 1. BMDR = 1, WIR = 1, INC4 = 1 Ciclo Istruzione - Decode fetch5: decodifica istr. utilizzando IR e dopo esecuzione delle diverse istruzioni, add, mov, sub, jump... RESET reset fetch1 fetch2 fetch3 fetch4 I = MOV fetch5 IR add1 I = ADD add2 SCO addx Ciclo Istruzione Ciclo Istruzione - Fetch Il registro “Program Counter” contiene l’indirizzo da cui prelevare l’istruzione da eseguire. Il SCO lo incrementa di 4 ad ogni fetch Fetch 1) 2) 3) MEMORIA PC PC -> MAR (MAR) -> MDR MDR -> IR, PC + 4 -> PC Istruzione 1 Istruzione 2 IR = Instruction Register Segnali di comando per la SCA e per lo SCO Bus memoria Istruzione 3 Si assume che ogni istruzione sia di 4 byte Esecuzione dell’istruzione Nel PD32 la fase di esecuzione di un ciclo istruzione consiste in un numero variabile di cicli macchina dipendente dal numero di accessi in memoria necessari (oltre al fetch) ADDW R1, R2 Entrambi gli operandi sono contenuti in registri interni del PD32 (indirizzamento a registro) ADDW #20h, R2 Uno degli operandi (0x20) è memorizzato nei due byte successivi a quelli contenente l’istruzione (indirizzamento immediato) 1. PC -> MAR; 1. PC -> MAR; 2. (MAR) -> MDR 2. (MAR) -> MDR 3. MDR -> IR , PC+4->PC 3. MDR -> IR , PC+4->PC 4. R2 -> Temp1 4. R1 -> Temp1 5. PC -> MAR 5. R2 -> Temp2 6. (MAR) ->MDR 6. OUT_ALU -> R2 7. MDR -> Temp2, PC+2->PC 8. OUT_ALU -> R2 Esercizi Con riferimento alla parte SCA della CPU, rispondere • Cosa succede se elimino il buffer temp2? discutere l’efficienza del sistema (vantaggi e svantaggi) • Modificare la struttura SCA inserendo due bus dati • Se ci sono due bus dati come migliora l’efficienza del sistema? su quali operazioni? • Nel PD32 ci sono 8 registri dati; discutere vantaggi e svantaggi di avere molti registri dati (ad es. cento) • Nel fetch si incrementa il PC per tutte le istruzioni. Perché è corretto anche per i salti; migliora l’efficienza? • Dare il microdice per le istruzioni di salto del PD32