Il processore PD32
Macchina di von Neumann Unità di Ingresso Memoria di lavoro Unità di Uscita Unità di Calcolo Unità di Controllo
Suddivisione SCA-SCO Unità di Ingresso Memoria di lavoro Unità di Uscita Unità di Calcolo SCA Unità di Controllo SCO Segnali di controllo/condizione Flusso dati
Modifica macchina di Von Neumann con CPU Unità di Ingresso Memoria di lavoro Unità di Uscita Unità di Calcolo Unità di Controllo CPU
Dal linguaggio ad alto livello al linguaggio macchina Forma molto astratta (linguaggio C->lisp) Non dipende dalla macchina HW Programma in Linguaggio alto Livello Compilatore a:=b+c Dipende dalla macchina hw Insieme istruzioni del macchina hw (simboliche) Commenti Riferimenti simbolici Programma in Linguaggio Assembly Assemblatore movw b,r1 movw c,r2 addw R2,R1 movw R1,a Insieme Istruzioni della macchina hw Programma in Linguaggio Macchina Macchina HW 000101..010100 1011101..010100 01011..11101010 010..1110101010
Un semplice esempio Consideriamo l istruzione aritmetica a:=a+b, espressa in un linguaggio di alto livello (ex. Pascal). Essa ha il seguente significato Memorizza nella variabile di nome a, la somma dei valori contenuti nelle variabili di nome a e b Le variabili sono i contenitori delle informazioni, e sono individuati da un nome simbolico deciso precedentemente nel programma.. a b 15 a 24 9 a:=a+b b 9 Prima Dopo
Un semplice esempio (2) Come può il calcolatore eseguire questa istruzione? E necessario stabilire Dove sono memorizzati i valori da sommare Dove va scritto il risultato dell operazione Quale operazione svolgere Ad esempio, nel PD32, gli operandi devono essere memorizzati nei registri interni alla CPU (registri visibili al programmatore) Il formato dell istruzione che esegue la è ADDs <sorgente><destinazione> (s può essere B,W,L) Il campo destinazione è un registro che contiene anche il valore iniziale di un operando e che andrà riscritto ADDW R2,R1 #somma R1 con R2 e poni il risultato in R1
Ciclo istruzione Indirizzo PC 100 adds R2,R1 100.. MEMORIA PC=Program Counter
Ciclo istruzione Indirizzo PC 100 adds R2,R1 100 IR adds R2,R1.. MEMORIA PC=Program Counter IR= Instruction Register
Ciclo istruzione Indirizzo PC 100 adds R2,R1 100 IR adds R2,R1.. MEMORIA Controllo
Ciclo istruzione Indirizzo PC 100 adds R2,R1 100 IR adds R2,R1.. Controllo Risorse di calcolo MEMORIA
CPU come interprete Il comportamento della CPU può essere specificato come la ripetizione continua del seguente insieme di operazioni (Ciclo Istruzione) atte ad interpretare le istruzioni di un programma contenuto in memoria. La notazione (PC) indica il contenuto della locazione di memoria con indirizzo PC fetch: (PC) IR incrementa PC esegui istruzione in IR vai al passo fetch La CPU cioè interpreta le istruzioni che man mano sono presenti nel suo Instruction Register Tale schema è semplificato poiché per interagire con l esterno, o gestire situazioni anomale, tale ciclo deve poter essere interrotto.
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.
R0 R1.. R7. struttura di interconnessione MDR MAR memoria di lavoro TEMP1 TEMP2 I/ODR I/OAR dispositivi ingresso/uscita 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
PD32- Sottosistema di Calcolo (SCA) Registri (basati su Flip-Flop D con segnale di Enable) speciali generali Shifter ALU (somma e sottrazione) MUX Decodificatori Struttura di interconnessione: BUS
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 W R0 W R1 W R7 R 0 R 1 R 7 B R0 B R1 B R7 W i =1, leggi dal bus B i =1 scrivi sul bus 32 Una sola scrittura per volta (controllo mediante Bi) 2n segnali di controllo (n numero dei registri)
PD32- BUS interno, esempio R1 -> R0 Per eseguire il trasferiemento da R1 ad R0 (simbolicamente (R1)->R0) devono essere affermati solamente i seguenti segnali: B R1 = 1, W R0 = 1 W R0 W R1 W R7 R 0 R 1 R 7 B R0 B R1 B R7 32
PD32- Banco dei registri Insieme di 8 registri generali indicati da R0 ad R7 Sono controllati mediante Segnali di abilitazione per scrittura del registro (W M ) lettura e conseguente invio sul bus interno del contenuto del registro (R M ) Indirizzo W M R M BUS interno
PD32- Banco dei registri Decoder Indirizzo registro W M R M R 0 R 1 R 7 w 0 w 1 w 7 B 0 B 1 B 7 w i =1, scrivi valore sul bus in Ri B i = 1, invia sul bus valore di Ri 2 + log 2 n segnali di controllo (n = numero registri) BUS
PD32- esempio: R7 ->BUS notare che non si può scrivere contemporaneamente su un registro del banco Decoder 1 1 1 Indirizzo registro Address W M R M R 0 R 1 R 7 w 0 w 1 w 7 B 0 B 1 B 7 Address=111, RM=1 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 W T1 TEMP1 TEMP2 W T2 OpCode ALU B A
PD32- ALU, esempio: addw R2,R1 W M R M 3 Address REGISTRI W T1 TEMP1 TEMP2 W T2 ALU OpCode B A 32
PD32- ALU, esempio: addw R2,R1 1. R1 -> Temp1 R M =1, Address = 001, W T1 =1 W M R M 3 Address REGISTRI W T1 TEMP1 TEMP2 W T2 ALU OpCode B A 32
PD32- ALU, esempio: addw R2,R1 1. R1 -> Temp1 R M =1, Address = 001, W T1 = 1 2. R2 -> Temp2 R M =1, Address = 010, W T2 = 1 W M R M 3 Address REGISTRI W T1 TEMP1 TEMP2 W T2 ALU OpCode B A 32
PD32- ALU, esempio: addw R2,R1 1. R1 -> Temp1 R M =1, Address = 001, W T1 = 1 2. R2 -> Temp2 R M =1, Address = 010, W T2 = 1 3. ALU-OUT(Temp1+Temp2)->R1 W M =1, Address = 001, OpCode = addw, B A =1 W M R M 3 Address REGISTRI W T1 TEMP1 TEMP2 W T2 ALU OpCode B A 32
Osservazioni Per eseguire l 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 dal numero medio di CPI
PD32- Shifter Usato per eseguire operazioni di scorrimento di k 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 W T1 TEMP1 TEMP2 W T2 OpCode ALU SHIFTER OpCode B A B S
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 a a... a n k+2 k+1 k 1 b b b b b C n n-k+1 n-k 2 1
Barrel shifter a n a a a a n-1 n-2 n-3 1 d 1... c 1 2... c 2 registro 3 log n -1.................. di controllo... c c 3 log n -1 log n c log n...... bn b n/2 b 1
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 W T1 TEMP1 TEMP2 W T2 OpCodeALU ALU SHIFTER OpCodeSHIFTER B A SR B S B SR
Wt1 Wt2 R0 TEMP1 TEMP2 AND AND opcode ALU shifter opcode R1 BA B SR B BS AND AND B SR...... decoder M U X I R R7 S MUX W IR AND AND PC INC(N=1,2,4) R M W M W PC R PC singola linea linee multiple N.B. non sono evidenziate le variabili di condizione che da SR e IR vanno al SCO
PC INC 4 INC 2 INC 1 W PC R PC
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 E necessario inoltre 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 0 0 0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0 0 1 0 1 0 1 1 0 0 1 1 1 1 0 0 0 1 0 0 1 1 0 1 0 1 0 1 1 1 1 0 0 1 1 0 1 1 1 1 0 1 1 1 1 Organizzazione logica a vettore di 16 celle di memoria a a a a 3 2 1 0 0 0 1 1 0 1 1 1 1 0 1 1 1 1 1 1 a a a a 3 2 1 0 0 0 1 0 0 1 1 0 1 0 1 0 1 1 1 0 a a a a 3 2 1 0 0 0 0 1 0 1 0 1 1 0 0 1 1 1 0 1 a a a a 3 2 1 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 0 0 Un organizzazione a 4 moduli di 16 celle di memoria
linea singola linee multiple Memoria RAM statica RD 1 2 amplificatore di uscita al DB decoder di riga... m matrice m x m bit amplificatore di scrittura CS dal DB 1 2... m WR decoder di colonna indirizzi dall'ab
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 MR MW CS Dati Indirizzo n bit m bit MR Indirizzo valido Dato valido
Memoria organizzazione in moduli Data BUS (32 bit) d 31 d 24 d 23 d 16 d 15 d 8 d 7 d 0 MR MW MR MW MR MW MR MW CS CS CS CS a 2 a 31 a 2 a 31 a 2 a 31 a 2 a 31 Mb 3 Mb 2 Mb 1 Mb 0 Address BUS (30 bit)
Memoria: spazio di indirizzamento Locazione 00000000 Spazio di indirizzamento del PD32 e monodimensionale e Composto da 2 32 locazioni (byte) Byte (8 bit) Word (16 bit) Longword (32 bit) Locazione FFFFFFFF
Memoria: disallineamento a a a a 3 2 1 0 0 0 1 1 0 1 1 1 1 0 1 1 1 1 1 1 a a a a 3 2 1 0 0 0 1 0 0 1 1 0 1 0 1 0 1 1 1 0 a a a a 3 2 1 0 0 0 0 1 0 1 0 1 1 0 0 1 1 1 0 1 a a a a 3 2 1 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 0 0 Esempio di memorizzazione di una informazione di quattro byte allineati sullo stesso indirizzo di riga. a a a a 3 2 1 0 0 0 1 1 0 1 1 1 1 0 1 1 1 1 1 1 a a a a 3 2 1 0 0 0 1 0 0 1 1 0 1 0 1 0 1 1 1 0 a a a a 3 2 1 0 0 0 0 1 0 1 0 1 1 0 0 1 1 1 0 1 a a a a 3 2 1 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 0 0 Esempio di memorizzazione di una informazione di quattro byte disallineati a a a a 3 2 1 0 0 0 1 1 0 1 1 1 1 0 1 1 1 1 1 1 a a a a 3 2 1 0 0 0 1 0 0 1 1 0 1 0 1 0 1 1 1 0 a a a a 3 2 1 0 0 0 0 1 0 1 0 1 1 0 0 1 1 1 0 1 a a a a 3 2 1 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 0 0 Esempio di memorizzazione di una informazione di due byte disallineati
Data BUS (32 bit) Memoria: byte allineati d 31 d 24 d 23 d 16 d 15 d 8 d 7 d 0 MR MW MR MW MR MW MR MW CS CS CS CS a 2 a 31 a 2 a 31 a 2 a 31 a 2 a 31 Mb 3 Mb 2 Mb 1 Mb 0 Address BUS (30 bit)
Memoria: byte non allineati (1) Data BUS (32 bit) d 31 d 24 d 23 d 16 d 15 d 8 d 7 d 0 MR MW MR MW MR MW MR MW CS CS CS CS a 2 a 31 a 2 a 31 a 2 a 31 a 2 a 31 Mb 3 Mb 2 Mb 1 Mb 0 Address BUS (30 bit)
Memoria: byte non allineati (2) Data BUS (32 bit) d 31 d 24 d 23 d 16 d 15 d 8 d 7 d 0 MR MW MR MW MR MW MR MW CS CS CS CS a 2 a 31 a 2 a 31 a 2 a 31 a 2 a 31 Mb 3 Mb 2 Mb 1 Mb 0 Address BUS (30 bit)
Memoria: interfaccia del PD32 Registro Memoria Dati (MDR) Registro Indirizzo (MAR) Segnali di Controllo (MR,MW, Mb 3, Mb 2, Mb 1, Mb 0 ) W MDR SCO B MDR Segnali di Controllo MDR dati Memoria Di Lavoro MAR indirizzi Bus interno W MAR
Memoria: interfaccia SCA del PD32 Bus Interno del PD32 B MDR M D R W MDR M A R DIR B DB Data Bus Address Bus W MAR B AB SCA del PD32
Interfaccia dispositivi di I/O INTERFACCIA indirizzi dati segnali di controllo Indipendente dal dispositivo Decoder Registro Dipendente dal dispositivo Device Control segnali di controllo 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,.) W MDR SCO B I/ODR Segnali di Controllo I/ODR dati Dispositivo di I/O I/0AR indirizzi Bus interno W MAR
I/O: interfaccia SCA del PD32 Bus Interno del PD32 B I/ODR I/O D R W I/ODR I/O A R DIR B I/ODB I/O Data Bus I/O Address Bus W B I/OAR I/OAB SCA del PD32
PD32 Interconnesione del PD32 30 32 Memory address bus Memory control bus Memory data bus 8 32 Modulo di memoria Modulo di memoria Interfaccia I/O dispositivo di I/O Interfaccia I/O dispositivo di I/O I/O address bus I/O control bus I/O data bus
I/O Memory mapped In altri sistemi (no PD32) i dispositivi sono visti come locazioni di memoria nello spazio di memoria normale (memory-mapped I/O) CPU n m address bus control bus data bus Interfaccia I/O Interfaccia I/O. Modulo di memoria Modulo di memoria
Sottosistema di controllo (SCO) Data In SCA (SLAVE) Data Out Stato o variabili di condizionamento TASK Variabili Condizionamento esterne SCO (MASTER) Uscite esterne
Sottosistema di controllo (SCO) start microprogramma relativo alla fase di fetch codice della classe dell' istruzione XXX YYY ZZZ microprogramma relativo alle istruzione la cui classe è XXX microprogramma relativo alle istruzione la cui classe è YYY... microprogramma relativo alle istruzione la cui classe è ZZZ
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).
SCO: schema di Mealy variabili di condizione circuito di selezione ROM reg. SEL CK micro ordini codice classe load CK spostamento base reset
SCO: schema di Moore load reset codice classe spostamento base ROM micro ordini SEL CK SS1 SS2... SSm multiplexer circuito di selezione variabili di condizione
Interazione con la memoria: ciclo di scrittura T1 T2 T3 CLOCK BUS INDIRIZZI indirizzo MWR BUS DATI dato
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 */ W MDR W PC INC 4 W IR PC IR R PC B MDR MDR MAR DIR B DB Data Bus Address Bus Memoria Di Lavoro W MAR B AB
Fetch 1. PC -> MAR; /* trasferimento del contenuto del PC nel MAR */ 2. (MAR)->MDR /* trasferimento istruzione da eseguire in MDR*/ W PC W MDR INC 4 PC R PC B MDR MDR DIR B DB Data Bus Memoria Di Lavoro W IR IR MAR Address Bus W MAR B AB
Fetch 1. PC -> MAR; /* trasferimento del contenuto del PC nel MAR */ 2. (MAR) -> MDR /* trasferimento istruzione da eseguire in MDR*/ 3. MDR -> IR /* trasferimento istruzione da eseguire nell IR*/ PC+4->PC /* e predisposizione PC per prelievo prossima istruzione*/ W PC W MDR INC 4 PC R PC B MDR MDR DIR B DB Data Bus Memoria Di Lavoro W IR IR MAR Address Bus W MAR B AB
Fetch: micro-ordini 1. PC -> MAR; /* trasferimento del contenuto del PC sul MAR */ 1. R PC = 1, W MAR = 1 2. (MAR) -> MDR /* trasferimento istruzione da eseguire in MDR*/ 1. B AB = 1 /* T1 */ 2. B AB = 1, MRD = 1 /* T2 */ 3. B AB = 1, MRD = 1, W MDR = 1 /* T3*/ 3. MDR -> IR /* trasferimento istruzione da eseguire in IR e 1. B MDR = 1, W IR = 1, INC 4 = 1 predisposizione PC per prelievo prossima istruzione*/
Ciclo Istruzione - Decode RESET reset fetch1 fetch2 fetch3 fetch4 fetch5 I = ADD IR I = MOV add1 SCO addx add2
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) 1. PC -> MAR; 2. (MAR) -> MDR 3. MDR -> IR, PC+4->PC 4. R1 -> Temp1 5. R2 -> Temp2 6. OUT_ALU -> R2 ADDW #20h, R2 Uno degli operandi (0x20) è memorizzato nei due byte successivi a quelli contenente l istruzione (indirizzamento immediato) 1. PC -> MAR; 2. (MAR) -> MDR 3. MDR -> IR, PC+4->PC 4. R2 -> Temp1 5. PC -> MAR 6. (MAR) ->MDR 7. MDR -> Temp2, PC+2->PC 8. OUT_ALU -> R2