Teoria del contollo automatico Circuiti sequenziali – Sistema dinamico I Circuiti Sequenziali sono circuiti i cui segnali di uscita dipendono non solo dai segnali di ingresso ma anche dallo stato all’interno del circuito stesso: O = F (I, S). In questi circuiti si introduce il concetto di Stato del Sistema e di Tempo. Lo stato del sistema è dato dalla capacità del circuito di memorizzare e preservare un valore, affermato o negato, che influisce sui segnali di ingresso. Il tempo acquista valore perché la funzione di uscita dovrà tener conto dello stato del sistema al tempo t e utilizzarlo per calcolare il proprio stato al tempo t + 1. Il circuito sequenziale è il circuito base che realizza l’elemento fondamentale dei sistemi dinamici: la memoria. La sua componente caratteristica è la retroazione: il segnale di uscita rientra come segnale di ingresso al circuito che lo compone. Quando a = 1 e b = 0 possiamo supporre l’uscita S = 0. Quando a = 0 e b = 1 possiamo supporre l’uscita S = 0. Cosa succede quando sia a che b sono = 0 o 1 ? Non possiamo saperlo se non prendiamo in considerazione l’uscita S t nell’istante t in cui applichiamo il segnale a e b. Quando a = 0 e b = 0 nell’istante t, se S t = 0, l’uscita S t+1 = 0, mentre se S t = 1, l’uscita S t+1 = 1. Il valore dell’uscita non cambia e preserva il suo valore quando manteniamo i segnali di ingresso a 0. Abbiamo realizzato un circuito di memoria. Circuito RS Il circuito sequenziale RS , Reset and Set, realizza un circuito di memoria e ha la caratteristica di avere due ingressi, uno per affermare l’uscita Q, l’altro per negarla. Gli altri valori di ingresso lasciano inalterato il valore dell’uscita Q. la combinazione di ingressi R = 1 e S = 1 non viene applicata. 1 Circuito Bistabile Asincrono Trasparente - BAT – detto LATCH D Questo circuito è composto da un circuito sequenziale RS con gli ingressi R e S pilotati da un bit di dato D e abilitati da un segnale di controllo C. Circuito Sequenziale Flip-Flop Questo circuito è composto da due LatchD in cascata, pilotati da un segnale di controllo C. Il cambiamento del segnale di uscita Q avverrà solo in presenza del fronte di discesa del segnale di controllo, realizzando così un dispositivo sincronizzato. E’ il componente fondamentale di ogni calcolatore col quale si realizzano per esempio i registri della CPU. 2 Automi a stati finiti Definizione di automa a stati finiti Un automa a stati finiti è un dispositivo ideale definito da: • un insieme S = {S1, S2, …, S k} di stati interni • uno stato iniziale S i ∈ S • un insieme X = {X1, X2, …, X p} degli stati di ingresso, ovvero delle combinazioni di segnali applicati dall’esterno • un insieme Z = {Z1, Z2, …, Z q} degli stati di uscita, ovvero delle combinazioni dei segnali in uscita • una funzione Z = F ( X, S ) che rappresenta la dinamica del sistema, ovvero calcola il prossimo stato in funzione degli ingressi applicati e dello stato del dispositivo. Un automa a stati finiti ci permette di descrivere un qualunque problema che evolva in tempi discreti e si possa trovare in un numero finito di stati diversi. Per consentire stabilità nel passaggio da uno stato all’altro nel momento di applicazione dei segnali di ingresso, i nostri dispositivi memorizzeranno gli stati interni in circuiti sequenziali di tipo RS, LatchD o FlipFlop. Diagramma degli stati Per mostrare i diagrammi degli stati useremo dei grafi orientati composti da nodi, gli stati del dispositivo, da cui partono degli archi orientati, le transizioni di stato, su ognuno dei quali è indicato lo stato degli ingressi che generano la transizione e lo stato delle uscite dopo la transizione. 3 Progettare un automa che riconosca tutte le stringhe binarie che terminano con 3 bit a 1. Il seguente diagramma mostra l’automa a stati finiti che realizza il dispositivo che riconosce le stringhe binarie che terminano con 3 bit a 1. Questo circuito ha quattro stati, quindi potrà essere realizzato utilizzando 2 bistabili: Log 2 S n. Tabella della verità di questo automa a stati finiti, riduzione algebrica e circuito che lo implementa. U1 U2 I D1 D2 Si 0 0 0 0 0 S0 D1 = I U1 U2 + I U1 U2 + I U1 U2 0 0 1 0 1 S1 D1 = I U1 U2 + I U1 ( U2 + U2 ) 0 1 0 0 0 S0 D1 = I U1 U2 + I U1 0 1 1 1 0 S2 1 0 0 0 0 S0 D2 = I U1 U2 + I U1 U2 + I U1 U2 1 0 1 1 1 S3 D2 = I U1 U2 + I U1 ( U2 + U2 ) 1 1 0 0 0 S0 D2 = I U1 U2 + I U1 1 1 1 1 1 S3 4 Progettare un bistabile di tipo J K. Il Bistabile JK è un circuito sequenziale che si comporta come descritto nella seguente tabella di verità. Per realizzare questo bistabile utilizzeremo come circuito per memorizzare lo stato dell’automa il circuito sequenziale RS. J K Qt Q t+1 R S Si 0 0 0 0 0 0 S0 R=JKQt+JKQt 0 0 1 1 0 0 S1 R=JQt(K+K) 0 1 0 1 0 1 S1 R=JQt 0 1 1 1 0 0 S1 1 0 0 0 0 0 S0 S=JKQt+JKQt 1 0 1 0 1 0 S0 S=KQt(J+J) 1 1 0 1 0 1 S1 S=KQt 1 1 1 0 1 0 S0 Il diagramma a stati che rappresenta il bistabile JK è il seguente: Questo circuito ha due stati distinti, quindi potrà essere realizzato utilizzando un solo bistabile: Log 2 2. 5 Caratteristiche generali di una CPU In generale le CPU hanno i seguenti componenti di base: • il Program Counter è il registro che contiene l’indirizzo di memoria della prossima istruzione da eseguire. • L’Istruction Register è il registro che contiene l’istruzione da eseguire letta dalla memoria • l’Accumulatore è il registro da dove passano tutte le operazioni della CPU Modelli architetturali di CPU Ci sono modelli differenti di progettazione delle CPU. Modello orientato all’accumulatore Cicli di clock Istruzione assembler Descrizione 1+1 Load C Carica il dato all’indirizzo C nell’accumulatore 1+1 Add B Somma il dato all’indirizzo B all’accumulatore (C) 1+1 Store A Memorizza la somma all’indirizzo A Le istruzioni passano sempre per l’accumulatore. Modello orientato alla memoria Cicli di clock Istruzione assembler Descrizione 4+? Add A, B, C Somma i dati contenuti agli indirizzi B e C e lo memorizza all’indirizzo A Questo è l’approccio seguito dai processori CISC. Le istruzioni sono più potenti ma hanno più accessi alla memoria. Modello orientato allo stack Cicli di clock Istruzione assembler Descrizione 1+1 Push B Carica dall’indirizzo B il dato e lo pone sullo stack 1+1 Push C Carica dall’indirizzo C il dato e lo pone sullo stack 1+1 Add Somma i due dati contenuti sulla cima dello stack 1+1 Pop A Muove all’indirizzo A la cima dello stack contenente la somma B + C Questo è l’approccio seguito dai processori CISC. Le istruzioni sono più potenti ma hanno più accessi alla memoria. 6 Modello orientato ai registri Cicli di clock Istruzione assembler Descrizione 1+1 Load R1, C Carica il registro R1 con il dato contenuto all’indirizzo C 1+1 Load R2, B Carica il registro R2 con il dato contenuto all’indirizzo B 1 Add R3, R1, R2 Somma i valori contenuti nei due registri R1 e R2 e lo pone nel registro R3 1+1 Store R3, A Copia il valore contenuto in R3 all’indirizzo A Questo è l’approccio seguito dai processori RISC. Le istruzioni sono lunghe tutte una parola (32 bit), si fa uso massivo dei registri e le modalità di accesso alla memoria sono estremamente limitate. Una caratteristica importante delle CPU RISC è che sono più semplici e quindi più piccole di CPU CISC. Per capire meglio la differenza tra un processore CISC e un processore RISC possiamo vedere questo esempio: a = b + c + d + e Processore CISC Processore RISC Add Temp, d, e Load R1, b Add Temp, Temp, c Load R2, c Add a, Temp, b Load R3, d Load R4, e Add R5, R4, R3 Add R5, R5, R2 Add R5, R5, R1 Store R5, a Le CPU di tipo CISC, data la loro complessità, contengono dei veri e propri microprogrammi per la realizzazione delle proprie istruzioni, secondo l’intuizione di Morris Wilkes. 7 Elementi di Aritmetica Binaria La numerazione naturale binaria e la notazione binaria in complemento a due. La numerazione naturale binaria con n bit rappresenta numeri da 0 a 2 n – 1. La notazione binaria in complemento a due con n bit rappresenta numeri da: - 2 Se a = – 2 n–1 eb=2 n-1 Numero Binario Numero in Decimale 011 3 010 2 001 1 000 0 111 -1 110 -2 101 -3 100 -4 – 1 allora b – a + 1 = 2 n-1 –1+2 n-1 +1=2*2 n-1 n–1 a+2 n-1 – 1. n =2 . Note 01xxx = Numero Massimo 1* = Tutti 1 = -1 10* = Numero Minimo Se N è uguale ad un numero binario di 4 bit: b3 b2 b1 b0 qual è il numero – N ? Osserviamo che: N + (– N ) = 0 e in binario una stringa di bit: b3 b2 b1 b0 +⎯b3⎯b2⎯b1⎯b0 + 1 = 0. Infatti la somma bit a bit: ( bx +⎯bx ) è una stringa di bit ad 1 che in notazione complemento due rappresenta il numero decimale –1, che sommato ad 1 da sempre 0. La rappresentazione del numero binario segue la regola posizionale dei numeri decimali, quindi il valore della cifra più a destra avrà un peso pari a n b 0 dove n è la cifra e b è la base della numerazione in oggetto. Nel caso di numerazione binaria, le potenze sono tutte potenze di 2, le cifre possono essere 0 o 1. Esempio 1001 = 9, cioè 1 * 2 3 + 0 * 2 2 + 0 * 2 1 + 1 * 2 0 = 9. Proprietà di estensione del segno dei numeri binari in complemento a 2 I numeri binari in complemento a due godono della proprietà di estensione del segno: Esempio: da 4 bit a 8 bit: 1101 = 11111101 oppure 0101 = 00000101. La rappresentazione del valore decimale associato a 4 bit in complemento 2 è:(a) - 2 3 b3 + Σ i = 0..2 b i * 2 i, infatti 1101 = - 2 3 + 2 2 + 2 0 = - 8 + 4 + 1 = -3. Se noi estendiamo il segno da 4 bit a 5 bit otteniamo che: - 2 4 b3 + Σ i = 0..3 b i * 2 i = - 2 4 b3 + 2 3 b3 + Σ i = 0..2 b i * 2 i = b3 ( 2 3 - 2 4 ) + Σ i = 0..2 b i * 2 i = b3 ( 2 3 - 2 4 ) + Σ i = 0..2 b i * 2 i = b3 ( 2 3 ( 1 - 2) ) + Σ i = 0..2 b i * 2 i = b3 ( - 2 3 ) + Σ i = 0..2 b i * 2 i (a) Big endian – peso più significativo delle cifre verso sinistra (MIPS) Little endian – peso più significativo delle cifre verso destra (PENTIUM) 8 Il MIPS, processore RISC a 32 bit Il microprocessore MIPS Il MIPS è un microprocessore RISC a 32 bit. Ha la capacità di indirizzare 2 32 locazioni di memoria pari a 4 Gbyte. L’unità di trasferimento, la parola, è di 32 bit. Il bus di memoria è composto da: • 32 bit di indirizzo, unidirezionali • 32 bit di dati bidirezionali • # bit di controllo bidirezionali Tutte le istruzioni del MIPS sono lunghe 32 bit (Reduced Istruction Set Computer). Il MIPS contiene 32 registri da 32 bit nel suo Register File (o Banco Registri). La lettura e la scrittura dei dati sul Bus della memoria avviene mediante due registri: • il MAR, Memory Address Registry e • il MDR, Memory data Registry, detto anche MBR, Memory Buffer registry Tipi di istruzione Il MIPS ha tre tipi di istruzioni: • istruzioni di tipo R – Registro (le tre R: read ‘rite, ‘ritmeitc) • istruzioni di tipo I – Immediato • istruzioni di tipo J – Salto incondizionato Tempi di accesso ai vari tipi di memoria Il tempo di esecuzione di un’istruzione della CPU è dell’ordine di 10 ns, Il tempo di esecuzione di un accesso alla memoria è dell’ordine dei 100 ns, mentre Il tempo di esecuzione di un accesso al disco è dell’ordine dei 10 ms 9 Modi di indirizzamento del MIPS Il MIPS ha i seguenti modi di indirizzamento, di cui uno solo per accedere alla memoria Istruzioni di tipo I Istruzioni di tipo R aritmetiche Istruzioni di tipo R – Load/Store Istruzioni di tipo R – Salto condizionato Istruzioni di tipo J – Salto incondiziona to 10 Il Register File Il register file del MIPS è composto da 32 registri di 32 bit ciascuno, due circuiti per leggere contemporaneamente due registri: RL1, RL2, un circuito per scrivere un dato D di 32 bit in un registro: RS. 11 ALU – Unità Logica Aritmetica L’ALU del MIPS è in grado di fare solo poche operazioni di base. • Il prodotto logico AND • La somma logica OR • La somma aritmetica • La differenza aritmetica • L’istruzione SLT: imposta il registro Rd con 1 nel il contenuto del registro Rs < Rt, altrimenti 0 • Imposta il segnale di Zero se il risultato della differenza dei due registri Rs - Rt è uguale a zero Di seguito la cellula elementare di un bit dell’ALU. La differenza è ottenuta applicando la formula valida per i numeri binari in complemento 2: a – b = a +⎯b + 1. Il segnale di controllo Kalu2 è chiamato anche “inverti b” e serve sia per selezionare il segnale b negato in ingresso al sommatore, sia per impostare ad 1 il bit di carry del solo bit 0 dell’ALU. Gli altri bit di controllo KAlu0 e KAlu1, selezionano l’operazione richiesta dall’istruzione eseguita. I bit di controllo KAlu0, KAlu1, KAlu2 sono calcolati dall’unità di controllo della CPU e dell’ALU. 12 Di seguito riportiamo il simbolo dell’ALU e la tabella delle combinazioni dei 3 bit di controllo calcolati dalla CPU e forniti in input per controllare l’operazione aritmetico/logica richiesta: Op Kalu2 Kalu1 Kalu0 AND X 0 0 OR X 0 1 ADD 0 1 0 SUB 1 1 0 SLT 1 1 1 E’ possibile rappresentare l’ALU come un insieme di cellule di un bit in cascata anche se non è la soluzione adottata nelle CPU a causa dei tempi di propagazione delle somme ai bit successivi (problema della profondità dei circuiti booleani). Il bit Zero è impostato quando tutti i bit del risultato dell’operazione sono a zero ed è utilizzato per eseguire i salti condizionati, infatti l’esecuzione di una beq $r1, $r2, label (salta se i due registri sono uguali), è ottenuta sottraendo al primo registro il secondo e utilizzando il valore del bit di zero impostato come abilitazione al circuito di salto (vedi istruzioni di tipo R). 13 La moltiplicazione nel MIPS La moltiplicazione è realizzata secondo l’algoritmo sotto riportato. Pseudo istruzione Note Risultato = 0 Ripeti 32 volte Se il bit meno significativo del Moltiplicatore = 1 Risultato = Risultato + Moltiplicando Left Shift ( Moltiplicando ) Right Shift ( Moltiplicatore ) Fine Ripeti Il circuito che lo implementa è il seguente: Questo circuito però presenta un problema: è necessario utilizzare 3 registri a 64 bit con conseguente complicazione della logica del processore. Si è arrivati quindi alla seguente soluzione: Ponendo il risultato della somma iterata nella parte superiore dei 64 bit del risultato e shiftando il risultato a destra ad ogni iterazione, utilizziamo solo un registro a 64 bit per il risultato, gli altri 2 sono a 32 bit. 14 Di conseguenza l’algortimo utilizzato risulta il seguente: Pseudo istruzione Commento Ris = 0 Ris = Registro risultato a 64 bit M = Moltiplicando Q = Moltiplicatore in LRis LRis = 32 bit meno significativi Ripeti 32 volte Se Q0 = 1 HRis = HRis + M Q0 = Bit meno significativo del moltiplicatore HRis = 32 bit più significativi Right Shift ( Ris ) Fine Ripeti Se poi osserviamo che i 32 bit meno significativi del risultato sono inutilizzati e vengono shiftati a destra come il moltiplicatore, possiamo realizzare una ulteriore versione: 15 L’algoritmo di Booth Una ulteriore raffinamento del processo di moltiplicazione è stato introdotto da Booth, da cui il nome Algoritmo di Booth, che ha osservato come data una sequenza di bit a 1, per esempio 00111100, la somma dei bit a 1 consecutivi poteva essere espressa come la differenza tra 01000000 e 00000100: c = 00111100 = 1 x 25 + 1 x 24 + 1 x 23 + 1 x 22 = 60, a = 01000000 = 1 x 26 = 64, b = 00000100 = 1 x 22 = 4, a – b = 64 – 4 = 60 = c In simboli possiamo scrivere che: Σ i = a .. b bi x 2i = 2b+1 – 2a . Possiamo quindi eseguire meno somme per ottenere lo stesso risultato: Senza algoritmo di Booth Con algoritmo di Booth Moltiplicando x ( 00011110 ) 4 3 2 Moltiplicando x ( 00011110 ) 1 Mx(1x2 +1x2 +1x2 +1x2 ) M x (1 x 25 - 1 x 21 ) M x ( 16 + 8 + 4 + 2 ) = M x 30 M x ( 32 - 2 ) = M x 30 Dal momento che la moltiplicazione è realizzata mediante l’iterazione di somme del moltiplicando, l’algoritmo di booth diminuisce il numero di somme necessarie, lasciando inalterato il numero degli shift a destra: Pseudo istruzione Note Ris = 0 Ris = Registro risultato a 64 bit Q-1 = 0 Bit shiftato = 0 M = Moltiplicando Q = Moltiplicatore in LRis LRis = 32 bit meno significativi Ripeti 32 volte Se Q0 Q-1 = “10” allora HRis = HRis - M – 2a , HRis = 32 bit più significativi Altrimenti Se Q0 Q-1 = “01” allora HRis = HRis + M + 2b+1 Right Shift ( Ris ) Fine Ripeti 16 Progetto dell’Unita di Controllo Principale del MIPS Le istruzioni di tipo R Le istruzioni di tipo R sono quelle prevedono l’utilizzo dei registri per effettuare operazioni aritmetiche sui registri, salti condizionati, letture e scritture in memoria. Segnali di controllo Di seguito la tabella riassuntiva dei segnali di controllo in funzione del tipo di istruzione eseguita. 17 Istruzioni tipo R - Aritmetiche Le istruzioni aritmetiche sono caratterizzate dall’avere il codice operativo dell’istruzione IR [31..26] con i 6 bit tutti a 0. I 6 bit a zero sono utilizzati per generare il bit di controllo RegWrite (porta NOR), che abilita la scrittura del risultato dell’operazione logica calcolata, nel registro di destinazione. 18 Istruzioni tipo R – Salti condizionati Le istruzioni di salto condizionato sono caratterizzate dall’utilizzare i registri Rs e Rt per eseguire il confronto, mentre i bit da 0..15, che normalmente contengono di valori di Rd, Shamt e Funct, contengono un offset che rappresenta il numero di istruzioni da saltare in avanti o indietro rispetto al Program Counter (PC). Il confronto nella Branch On Equal è realizzato mediante la sottrazione di Rs con Rt. Se i due registri sono uguali, il bit di Zero dell’ALU è posto a 1 e abilita la somma del’offset PC + 4 + #Istruzioni x 4. 19 beq R1, R2, Offset Note PC Å PC + 4 Incrementa subito il Program Counter BRANCH Å 1 Segnale di controllo ALU1 Å R1 1° Operando ALU ALU2 Å R2 2° Operando ALU ZERO Å True ( ALU1 – ALU2 == 0 ) FullOffset Å SE(Offset(16 bit)) Estensione di segno a 32 bit dell’offeset FullOffsetx4 Å SHL2 ( FullOffset) Moltiplico l’offset per 4 eseguendo lo shift a sinistra NEWPC Å PC + 4 + FullOffsetx4 Preparo il salto di FullOffset istruzioni per il PC If ( ZERO And BRANCH ) Then PC Å NEWPC Eseguo il salto se la condizione è rispettata Else PC Å PC + 4 Istruzioni tipo R – Load / Store Le istruzioni di caricamento dalla memoria e salvataggio in memoria sono caratterizzate dall’utilizzare i registri Rs + Offset di 16 bit per determinare l’indirizzo di memoria dal quale leggere / scrivere il dato da depositare in / prelevato da Rt. Lw R1, Offset(R2) Note PC Å PC + 4 Incrementa subito il Program Counter MemRead Å 1 Segnale di controllo ALU1 Å R2 1° Operando ALU FullOffset Å SE(Offset(16 bit)) 2° Operando ALU – Est. di segno a 32 bit dell’offset MAR Å ALUOut L’indirizzo da leggere è posto sul bus degli indirizzi MBR Å MEM [ MAR ] Lettura del dato all’indirizzo MAR RegWrite Å 1 Segnale di controllo MemoToReg Å 1 Segnale di controllo R1 Å MBR Scrivo il dato in R1 20 I segnali KAlu[0..2] impostano la somma dei due operandi, il segnale AluSrc indica al mutiplexer di selezionare come secondo operando l’offset, esteso a 32 bit, al contenuto del registro di base Rs. Questo schema è comune sia alla lettura che alla scrittura, nei prossimi schemi vedremo come vengono utilizzati i segnali MemWrite, MemtoReg e MemRead. 21 MIPS simple data path Schema riassuntivo dei datapath fino ad ora visti, con l’aggiunta della logica di fetch dell’istruzione (1) combinata con la logica del salto condizionato (2) 1 2 Di seguito un’ipotesi di integrazione ulteriore con la logica di salto incondizionato (3). 3 22