Lezione 3 Lezione 3 Materiale di riferimento Sommario 1. R. Shankar, E. B. Fernandez, "VLSI and computer architecture", Academic Press, Inc., 1989, cap. 10 – 21, pagg. 357 - 460 2. G. Bucci, "Architetture degli elaboratori elettronici", McGraw-Hill, 2001, cap. 2, pp. 41 –76. 3. P. Lapsley, J. Bier, A. Shoham, E.A. Lee, "DSP Processor Fundamentals - Architectures and Features", IEEE Press, New York, 1997, cap 4, cap. 7. 4. K. Hintz, D. Tabak, "Microcontrollers - Architecture, Implementation and Programming", Mc Graw - Hill, 1992, cap. 2. 5. Berkeley Design Technology, Inc.(BDTi), “DSPs adapt to new challenges”, reperibile sul sito del corso. • Caratteristiche generali di una architettura • Criteri per la classificazione delle architetture • Architetture di tipo RISC • Architetture di tipo CISC • Architetture per mC e DSP • Repertorio di istruzioni dei mC e dei DSP • Modi di indirizzamento Simone Buso - Microcontrollori e DSP - Lezione 3 1 Simone Buso - Microcontrollori e DSP - Lezione 3 Architettura di un processore Architettura di un processore L’architettura di un processore è l’insieme delle risorse che ne consentono la programmazione in linguaggio macchina. Questa viene talvolta indicata come architettura lato utente (user architecture), per distinguerla da quella lato sistema (system architecture), che si riferisce invece alle risorse richieste dal sistema operativo (in un processore general purpose). Per noi solo la prima accezione ha senso, dato che non ci occuperemo di sistemi operativi per mC e DSP (sebbene ne esistano). Indipendentemente dalla sua implementazione, la finalità di un’architettura è sempre quella di fornire un supporto efficiente alla programmazione di un processore. La definizione di efficienza di una architettura è però un concetto mutevole nel tempo e largamente dipendente dalle applicazioni. Alcune architetture privilegiano il raggiungimento di elevate prestazioni, altre la facilità di uso, altre ancora la programmabilità ad alto livello dei processori. Simone Buso - Microcontrollori e DSP - Lezione 3 3 Architettura di un processore 4 Classificazione delle architetture Discutere l’architettura di un processore significa valutare i seguenti aspetti: E’ possibile classificare le architetture in funzione delle caratteristiche dell’insieme di istruzioni che rendono disponibili al programmatore. 1. struttura delle istruzioni; 2. modi di indirizzamento dei dati; In alternativa, è possibile una classificazione basata sulla filosofia di programmazione sottintesa dall’architettura stessa (linguaggio ad alto livello di riferimento). 3. funzioni realizzate dalle istruzioni. La definizione di una architettura sottintende sempre una precisa organizzazione hardware. Organizzazione e architettura sono quindi due aspetti collegati della progettazione di un processore. Simone Buso - Microcontrollori e DSP - Lezione 3 Simone Buso - Microcontrollori e DSP - Lezione 3 2 I due criteri hanno tra loro una considerevole sovrapposizione. 5 Simone Buso - Microcontrollori e DSP - Lezione 3 6 1 Classificazione delle architetture Classificazione delle architetture Le caratteristiche di maggiore interesse per un insieme di istruzioni sono le seguenti: La simmetria di un insieme di istruzioni indica il grado di uniformità dei modi di indirizzamento tra le diverse istruzioni. Un insieme di istruzioni si dice simmetrico quando esistono poche differenze nei modi di indirizzamento possibili per le varie istruzioni e quindi quando tutti gli operatori possono essere applicati a tutti i tipi di dati. Un set di istruzioni simmetrico implica quindi una maggiore uniformità nei formati delle istruzioni. • • • • • • • • Simmetria Ortogonalità Compattezza Flessibilità Velocità di esecuzione Costo Facilità di debugging Corrispondenza con linguaggi di alto livello Simone Buso - Microcontrollori e DSP - Lezione 3 7 Classificazione delle architetture La compattezza delle istruzioni indica la dimensione del codice macchina che viene generato nella compilazione di un dato programma. Alcune architetture favoriscono la compattezza più di altre (relazione con la complessità delle istruzioni). La flessibilità indica invece la facilità con la quale è possibile modificare l’insieme di istruzioni, e.g. aggiungendone di nuove in una successiva versione del processore. Questo consente di avere un formato di istruzioni unico e costante, favorendo l’allineamento delle stesse in memoria e quindi la velocità del processore. 9 Classificazione delle architetture Simone Buso - Microcontrollori e DSP - Lezione 3 10 Classificazione delle architetture La facilità di debugging indica la leggibilità del codice generato dalla compilazione/scrittura di un programma. Questa è importante per la ri-usabilità e portabilità del codice. La velocità di esecuzione è chiaramente un parametro fondamentale per una architettura. Questa è sempre in relazione con il costo del processore. Si parla di costo di una architettura intendendo il costo del processore che la pone in atto. Questo a sua volta è funzione della tecnologia impiegata, della complessità dei circuiti da realizzare (area di silicio richiesta) e del volume di produzione atteso. Simone Buso - Microcontrollori e DSP - Lezione 3 8 Classificazione delle architetture L’ortogonalità delle istruzioni indica direttamente la regolarità nella struttura della parola che rappresenta un’istruzione. Un set di istruzioni ortogonali presenta parole della stessa lunghezza, in cui le dimensioni dei campi associati alle specifiche funzioni (e.g OPCODE) sono sempre le stesse. Simone Buso - Microcontrollori e DSP - Lezione 3 Simone Buso - Microcontrollori e DSP - Lezione 3 E’ anche associata alla maggiore o minore somiglianza del codice macchina con un linguaggio di alto livello (corrispondenza). Alcune architetture rendono disponibili costrutti tipici dei linguaggi ad alto livello (cicli for, repeat, etc.). 11 Simone Buso - Microcontrollori e DSP - Lezione 3 12 2 Classificazione delle architetture Architetture RISC Sulla base dei parametri appena discussi una possibile classificazione delle architetture è la seguente: Le architetture RISC sono quelle nelle quali le istruzioni sono meno numerose (poche decine) e più semplici possibile. La semplicità è relativa sia al formato che alle funzionalità delle istruzioni. Queste hanno tutte le stesse dimensioni (es. 16 bit) e struttura di parola identica. • Architetture RISC Basate su registri Basate su accumulatore/stack (obsolete) • Architetture di tipo CISC Von Neumann estese Orientate ad oggetti/linguaggi Siccome la decodifica (quasi sempre cablata) risulta molto semplice, le architetture RISC permettono spesso l’esecuzione di tutte le istruzioni in un solo ciclo macchina. Orientate alla sicurezza (poco diffuse) Simone Buso - Microcontrollori e DSP - Lezione 3 13 Architetture RISC Architetture RISC L’area risparmiata consente la realizzazione di strutture come banchi di registri o memorie cache, che accelerano ulteriormente l’esecuzione dei programmi. L’organizzazione della CPU è quindi quasi sempre del tipo a molti registri. 15 Simone Buso - Microcontrollori e DSP - Lezione 3 Architetture CISC Architetture CISC Le architetture di tipo CISC sono caratterizzate da insiemi molto numerosi di istruzioni (anche centinaia), di struttura variabile ed, in genere, piuttosto complessa. La decodifica è in questo caso spesso microprogrammata, per semplificare la realizzazione dell’unità di controllo. Inoltre l’esecuzione delle istruzioni richiede quasi sempre più cicli macchina. Architetture CISC sono comuni a molti processori per uso generico (fino ai primi anni ‘90), piuttosto rare nei mC e DSP. Le architetture di tipo CISC sono realizzate in diverse varianti. La versione più comune sottende un’organizzazione hardware di tipo Von Neumann, con eventuali potenziamenti (si parla di architetture Von Neumann estese). I principali interventi di miglioramento consistono nell’introduzione di: 1. memorie cache; 2. coprocessori; Simone Buso - Microcontrollori e DSP - Lezione 3 14 Le prime realizzazioni di processori RISC avevano una organizzazione della CPU basata su un accumulatore e/o un piccolo stack. Queste avevano istruzioni senza operandi, quindi di massima semplicità, ma comportavano un intenso traffico di dati da e per la memoria. Le prestazioni delle CPU sono aumentate nel tempo molto più rapidamente di quelle delle memorie che sono il “collo di bottiglia” di un processore. Le organizzazioni a stack sono quindi state progressivamente abbandonate. La semplificazione dell’unità di controllo prodotta dalle architetture RISC comporta un considerevole risparmio di area di silicio (riduzione dei costi). Simone Buso - Microcontrollori e DSP - Lezione 3 Simone Buso - Microcontrollori e DSP - Lezione 3 16 3. blocchi di debugging (funzioni di “program tracing”). 17 Simone Buso - Microcontrollori e DSP - Lezione 3 18 3 Architetture CISC Architetture per mC e DSP Specialmente nel passato (anni ‘80), si sono avute realizzazioni di processori orientate ai linguaggi o agli oggetti. I primi miravano ad interpretare direttamente a livello hardware le istruzioni di qualche linguaggio ad alto livello (LISP, FORTH, ..). I processori orientati agli oggetti tentavano invece di rendere astratta l’organizzazione a basso livello del processore, lasciando all’utente la possibilità di creare oggetti di varie classi (es. istruzioni) con una struttura predefinita a livello hardware. Le architetture di alcuni mC di progettazione più datata (anni ’70) sono di tipo CISC (es. Intel 8XC196, Renesas H8S, …). Si tratta di processori estremamente diffusi, ma raramente utilizzati in prodotti di nuova concezione. Simone Buso - Microcontrollori e DSP - Lezione 3 Più recentemente si sono andate affermando architetture di tipo RISC, specialmente per i dispositivi destinati ad usi intensivi (controllo real-time). Le caratteristiche di questi processori sono spesso equivalenti a quelle di un DSP (a virgola fissa). 19 Simone Buso - Microcontrollori e DSP - Lezione 3 20 Architetture per mC e DSP Architetture per mC e DSP Le architetture per DSP sono normalmente ispirate alla filosofia RISC, quindi sono sostenute da CPU che prevedono un notevole numero di registri e sistemi di controllo cablati. I DSP presentano tuttavia caratteristiche che li differenziano notevolmente dai processori RISC di tipo general-purpose. Il formato delle istruzioni è compatto, ma include numerosi campi, per aumentare la potenza delle singole istruzioni. Questo approccio tende a rendere il repertorio di istruzioni asimmetrico e non ortogonale, con conseguenti difficoltà nella programmazione e successivo debugging. Specialmente le prime realizzazioni su larga scala (Texas Instruments, Motorola), si caratterizzavano per la complessità del linguaggio assembly e la impossibilità materiale di ottenere una efficiente programmazione ad alto livello (scarsa qualità dei compilatori). Simone Buso - Microcontrollori e DSP - Lezione 3 21 Architetture per mC e DSP Simone Buso - Microcontrollori e DSP - Lezione 3 Architetture per mC e DSP L’aumento della complessità degli algoritmi usati nelle applicazioni più recenti (anni ‘90) dei DSP (e.g. telefonia mobile) ha spinto verso la realizzazione di architetture più facilmente programmabili. DSP convenzionale: una istruzione complessa è ripetuta ntaps volte. DSP con architettura VLIW: molte semplici istruzioni vengono eseguite in parallelo. All’atto della creazione del codice macchina, sono collocate all’interno di una singola VLIW. Una soluzione molto utilizzata è denominata VLIW (Very Long Instruction Word). Questa architettura combina molte (4, 8) istruzioni semplici in una sola macro-istruzione, che viene letta tutta in una volta dalla CPU. Le istruzioni componenti vengono eseguite in parallelo, quindi in un solo ciclo (risc → cisc). Simone Buso - Microcontrollori e DSP - Lezione 3 22 23 Simone Buso - Microcontrollori e DSP - Lezione 3 24 4 Architetture per mC e DSP Architetture per mC e DSP Il fatto che le istruzioni base siano molto semplici rende più facile la realizzazione di compilatori efficienti. Il fatto che la potenza delle singole istruzioni si riduca, richiede però più memoria per il codice compilato. Questo si traduce in un aumento di costo. Sono stati tentati approcci differenti: a) istruzioni a lunghezza variabile; b) approccio SIMD; Alcuni DSP presentano architetture con istruzioni a lunghezza variabile. Le istruzioni di tipo aritmetico, usate all’interno di algoritmi di calcolo, sono di tipo VLIW, per favorire il parallelismo e flessibilità nell’indirizzamento dei dati. Invece, istruzioni di tipo diverso (e.g. istruzioni di controllo, manipolazione di bit) sono di formato più compatto, per favorire una minore occupazione di memoria. c) processori “su misura”. Simone Buso - Microcontrollori e DSP - Lezione 3 25 Architetture per mC e DSP Simone Buso - Microcontrollori e DSP - Lezione 3 26 Architetture per mC e DSP Altri DSP fanno uso di architetture SIMD (Single Instruction, Multiple Data). Queste consentono l’esecuzione in parallelo della stessa istruzione su dati differenti, incrementando così le prestazioni. Questo approccio, in alcuni casi (serie Texas C64, AD Blackfin o Tiger SHARC) viene combinato con il VLIW. L’obiettivo in questo caso è l’incremento massimo della potenza di calcolo. Benchmark: occupazione di memoria Simone Buso - Microcontrollori e DSP - Lezione 3 27 Architetture per mC e DSP 28 Repertorio delle istruzioni nei DSP Il repertorio delle istruzioni di un DSP, è fortemente orientato al calcolo e include una ampia gamma di funzioni aritmetiche, logiche e matematiche. Infine, per alcuni prodotti vengono utilizzati DSP su misura (licensable cores). In questo caso l’utilizzatore può definire un repertorio di istruzioni ottimizzato per la sua specifica applicazione, arrivando anche a personalizzare l’organizzazione hardware del chip. Per velocizzare l’esecuzione di alcuni tipici algoritmi (DFT, filtri FIR,…), vengono inoltre offerti modi di indirizzamento specifici. Benchè questo approccio porti a realizzazioni estremamente ottimizzate (nessuna risorsa viene sprecata) introduce tempi di sviluppo molto lunghi, costi elevati e scarsa flessibilità. Simone Buso - Microcontrollori e DSP - Lezione 3 Simone Buso - Microcontrollori e DSP - Lezione 3 Tra una famiglia di DSP e un’altra, possono esserci differenze anche notevoli nel repertorio delle istruzioni: alcuni elementi sono però molto comuni. 29 Simone Buso - Microcontrollori e DSP - Lezione 3 30 5 Istruzioni aritmetiche nei DSP Istruzioni aritmetiche nei DSP La moltiplicazione è sempre presente e viene eseguita in un solo ciclo, spesso in diverse modalità (intera, frazionaria, con o senza segno). E’ possibile far seguire alla moltiplicazione una operazione di shift e/o somma sull’accumulatore, che vengono eseguiti nello stesso ciclo macchina. Alla moltiplicazione è dedicato un apposito circuito esterno alla ALU e denominato MAC. In alcune unità è disponibile anche l’istruzione di divisione, ma, di norma, questa non è presente a livello hardware. Alcuni DSP presentano la possibilità di operare in aritmetica saturata, mettendo al riparo da effetti indesiderati dovuti a overflow dell’accumulatore, causati ad es. da ripetute istruzioni di moltiplicazione e somma (MAC). Sempre per agevolare lo sviluppo di algoritmi di calcolo, anche le istruzioni di shift logico e aritmetico sono molto flessibili. Fanno spesso uso di un circuito apposito detto barrel shifter. Esso rende possibile scalare agevolmente i dati durante l’elaborazione. Simone Buso - Microcontrollori e DSP - Lezione 3 31 Istruzioni aritmetiche nei DSP 32 Istruzioni aritmetiche nei DSP a7 a6 a5 a4 a3 a2 a1 a0 Operando a 8 bit Molti DSP consentono al programmatore la scelta della strategia con cui gestire le operazioni che comportano la riduzione del numero di bit dedicati alla rappresentazione di un dato (es: right shift). Le opzioni sono: 1. troncamento; b3 b2 b1 b0 Scalo su 4 bit b3b2b1b0 = a7a6a5a4 b3b2b1b0 = a7a6a5a4 + a3 2. arrotondamento (elimina l’errore sistematico introdotto dalle operazioni di troncamento); 3. arrotondamento convergente. Simone Buso - Microcontrollori e DSP - Lezione 3 Simone Buso - Microcontrollori e DSP - Lezione 3 troncamento arrotondamento Arrotondamento convergente b3b2b1b0 = a7a6a5a4 + a3 b3b2b1b0 = a7a6a5a4 + a4 33 se a3a2a1a0 <> 10002 se a3a2a1a0 = 10002 Simone Buso - Microcontrollori e DSP - Lezione 3 Istruzioni aritmetiche nei DSP Repertorio delle istruzioni nei DSP Nel repertorio delle istruzioni aritmetiche sono talvolta presenti funzioni come: a) radice quadrata; b) funzioni trigonometriche (sinx, cosx). Queste non sono però mai realizzate a livello hardware e quindi richiedono molti cicli macchina per essere calcolate. In aggiunta alle istruzioni che realizzano le operazioni aritmetiche fondamentali, tutti i DSP dispongono di ulteriori istruzioni che consentono ad esempio: 1. spostamento di dati; 2. confronto rapido di dati; 3. manipolazione di bit; 4. ripetizione di segmenti di codice; 5. salti, chiamate a subroutine; 6. emulazione di aritmetica a virgola mobile (per i DSP a virgola fissa). Risulta alle volte più conveniente ricorrere ad approssimazioni polinomiali delle funzioni suddette, che possono essere calcolate in modo molto efficiente. Simone Buso - Microcontrollori e DSP - Lezione 3 35 Simone Buso - Microcontrollori e DSP - Lezione 3 34 36 6 Repertorio delle istruzioni nei mC Repertorio delle istruzioni nei mC Storicamente, i mC hanno sempre avuto un repertorio di istruzioni orientato al controllo di processi più che al calcolo (elaborazione numerica di segnali). Molto spesso le funzioni aritmetiche più avanzate (e.g. moltiplicazione) erano presenti solo a livello di istruzione (i.e. non c’era il moltiplicatore hardware). L’esecuzione di queste istruzioni richiedeva quindi numerosi cicli macchina. Questo rendeva spesso problematica la realizzazione di controlli real-time. Attualmente, l’organizzazione dei mC (di alta gamma) ricalca quella dei DSP a virgola fissa di una decina di anni fa. Il repertorio delle istruzioni di questi dispositivi è quindi simile a quello di un DSP (filosofia RISC, elevata regolarità, programmabilità ad alto livello, …) e spesso è presente il moltiplicatore hardware. Gli accorgimenti descritti in precedenza per l’incremento delle prestazioni (parallelismo) non sono però riprodotti nei mC, essenzialmente per questioni di costo. Simone Buso - Microcontrollori e DSP - Lezione 3 37 Simone Buso - Microcontrollori e DSP - Lezione 3 Repertorio delle istruzioni nei mC Struttura delle istruzioni Per le applicazioni in tempo reale e comunque in ambito industriale, spesso i mC vengono preferiti ai DSP perché includono al loro interno tutte le periferiche necessarie all’interfacciamento con i tipici sistemi da controllare (azionamenti, convertitori di potenza, etc.). Inoltre sono spesso più economici, dissipano minore potenza (adatti alle applicazioni embedded), e sono assai meno suscettibili ai disturbi elettromagnetici tipici dell’ambiente industriale. Tanto nei mC che nei DSP le istruzioni hanno strutture abbastanza regolari. Simone Buso - Microcontrollori e DSP - Lezione 3 Tipicamente sono disponibili istruzioni fino a tre operandi. La struttura della instruction word (IW) è spesso funzione dell’opcode (si riduce però la velocità di decodifica). Il campo OPCODE è suddiviso in sotto-campi con funzioni specifiche. OPCODE 39 operando #2 operando #1 operando #3 Simone Buso - Microcontrollori e DSP - Lezione 3 Struttura delle istruzioni Modi di indirizzamento E’ possibile sviluppare architetture con istruzioni senza operandi (macchine a stack). Esse risultano però poco efficienti e sono ormai state abbandonate. Le istruzioni con un solo operando del tipo: ADD X sottintendono la presenza di un registro accumulatore. Nelle organizzazioni delle CPU a molti registri diventano possibili istruzioni come: ADD X, Y, Z I più comuni modi di indirizzamento dei dati sono: Simone Buso - Microcontrollori e DSP - Lezione 3 38 40 • immediato: l’operando è esplicitamente inserito nell’IW; • a registro: l’operando è in un registro della CPU (specificato nella IW); • diretto o assoluto: l’istruzione contiene l’indirizzo in memoria dell’operando; • indiretto: l’istruzione contiene l’indirizzo in memoria dell’indirizzo dell’operando (puntatore). 41 Simone Buso - Microcontrollori e DSP - Lezione 3 42 7 Modi di indirizzamento Modi di indirizzamento DSP e mC spesso utilizzano unità per la generazione degli indirizzi (AGU) che sono esterne all’ALU e lavorano in background. Ciò rende possibili modi di indirizzamento anche più sofisticati e efficienti: • indiretto su registro: l’indirizzo del puntatore è contenuto in un registro (sono possibili incrementi, offset, …); Altri modi di indirizzamento, molto comuni nei mC e nei DSP sono: • indiretto con auto-incremento: l’IW contiene l’indirizzo di un puntatore, cui viene automaticamente sommato ±1 (talora ±2); • indiretto con offset (indicizzato): il puntatore viene sommato ad una costante inclusa nell’IW per formare l’indirizzo del dato. • circolare: facilita la gestione di vettori di dati (tipico dei DSP); • a bit rovesciati: per la DFT (solo DSP). Simone Buso - Microcontrollori e DSP - Lezione 3 43 Simone Buso - Microcontrollori e DSP - Lezione 3 Indirizzamento circolare X0 X1 X2 X3 r w puntatore puntatore di di lettura scrittura r X1 X2 X0 X3 w Indirizzamento a bit rovesciati Quando uno dei puntatori (r o w) raggiunge la fine del vettore deve essere resettato. Quando uno dei puntatori (r o w) raggiunge la fine del vettore passa in modo automatico alla posizione di partenza. Simone Buso - Microcontrollori e DSP - Lezione 3 44 45 x0 x1 x2 x3 x4 x5 x6 x7 Y0 Y1 Y2 Y3 Y4 Y5 Y6 y7 0 1 2 DFT 3 4 5 6 7 = = = = = = = = X[000] X[100] X[010] X[110] X[001] X[101] X[011] X[111] = = = = = = = = X0 X4 X2 X6 X1 X5 X3 X7 X0 X1 X2 X3 X4 X5 X6 X7 La lettura a bit rovesciati di una sequenza ordinata produce proprio la sequenza di uscita X della DFT: è allora immediato creare il vettore ordinato Y. Simone Buso - Microcontrollori e DSP - Lezione 3 000 001 010 011 100 101 110 111 = = = = = = = = 0 1 2 3 4 5 6 7 000 100 010 110 001 101 011 111 = = = = = = = = 0 4 2 6 1 5 3 7 46 8