Scuola Politecnica e delle Scienze di Base Corso di Laurea in Ingegneria Informatica Elaborato finale in Calcolatori Elettronici I System on Chip : Architetture di calcolo basate su logica riconfigurabile Anno Accademico 2014/2015 Candidato: Antonio Grimaldi matr. N46/001504 Qualsiasi cosa ti dedichi amore , passione , rispetto, amicizia e felicità può essere considerato una famiglia. La dedica va a tutti questi valori , sperando mi accompagnino per sempre nel corso della vita. Indice System on Chip : Architetture di calcolo basate su logica riconfigurabile ..........................................I Indice.............................................................................................................................................. III Introduzione ..................................................................................................................................... 5 Capitolo 1: System on Chip ............................................................................................................. 7 1.1 Introduzione ........................................................................................................................... 7 1.2 Perchè usare i SOC ? .............................................................................................................. 8 1.3 Xilinx e Altera........................................................................................................................ 9 Capitolo 2 : Architettura ARM ...................................................................................................... 12 2.1 Introduzione ad ARM .......................................................................................................... 12 2.2 Caratteristiche Architettura ARM ........................................................................................ 12 2.3 ARM Cortex-A9 .................................................................................................................. 15 2.3.1 Snoop Control Unit ....................................................................................................... 16 2.3.2 Accelerator Coherency Port .......................................................................................... 17 2.3.3 Generic Interrupt Controller.......................................................................................... 17 2.3.4 Neon Data Engine ......................................................................................................... 18 2.3.5 Floating Point Unit ........................................................................................................ 18 2.3.6 L1 Cache ....................................................................................................................... 18 2.4 Cortex-A50 Series ................................................................................................................ 18 Capitolo 3: Architettura dei System on Chip ................................................................................. 21 3.1 FPGA ................................................................................................................................... 21 3.1.1 Tecnologia di Sviluppo ................................................................................................. 22 3.1.2 Architettura fisica di una FPGA.................................................................................... 22 3.1.3 Flusso di Progetto.......................................................................................................... 23 3.1.4 FPGA vs ASIC .............................................................................................................. 25 3.2 Hard Processor System ........................................................................................................ 26 3.2.1 Micontroller Processor Unit Subsystem ....................................................................... 27 3.2.2 Flash Memory Controller .............................................................................................. 29 3.2.3 SDRAM Controller Subsystem..................................................................................... 29 3.2.4 Phase Locked Loop (PLL) ............................................................................................ 32 3.2.5 On-Chip Memory .......................................................................................................... 33 3.3 Periferiche di supporto e di interfaccia ................................................................................ 33 3.3.1 DMA ............................................................................................................................. 33 3.3.2 SPI ................................................................................................................................. 34 3.3.3 I2C................................................................................................................................. 34 3.3.4 UART ............................................................................................................................ 35 3.3.5 CAN .............................................................................................................................. 35 3.4 Sistema di Interconnessione ................................................................................................. 35 Capitolo 4 : Zynq-7000 .................................................................................................................. 38 4.1 Introduzione ......................................................................................................................... 38 4.2 Architettura di Zynq-7000 ................................................................................................... 39 4.2.1 Application Processor Unit ........................................................................................... 39 4.2.2 FPGA ............................................................................................................................ 41 Conclusioni .................................................................................................................................... 43 Bibliografia .................................................................................................................................... 43 Introduzione Il tema principale dell'elaborato è il Sistem on Chip (SOC) , in particolare sull'architettura generale, nell'approfondimento delle componenti principali e lo studio di una famiglia di dispositivi leader nel mercato. Se volessimo dare una prima definizione veloce e molto semplificativa, un SOC è un circuito integrato che in un solo chip contiene un sistema completo, composto da unità di elaborazione, memorie , periferiche e la logica configurabile. Ma perchè questi sistemi sono diventati così importanti ? Il sistema completo di cui parlavo prima, risiede tutto in un chip dalle dimensioni poco più grandi di una classica CPU. Le ridotte dimensioni di questi sistemi , ed ovviamente la loro caratteristica di avere un ridotto dispendio energetico, li rende perfetti per i sistemi embedded. Inoltre nella trattazione vedremo che la produzione di questi circuiti integrati con logica configurabile è estremamente più economica di quella dei circuiti ad applicazione specifica. Il basso costo e il basso consumo li rendono perfetti per i dispositivi portatili che utilizziamo ogni giorno , quali smartphone e tablet. Con il passare del tempo sono convinto che diventeranno sempre più importanti , e credo guardando in ottica futura che stiamo osservando un trend evolutivo , nel quale passeremo dai classici sistemi con unità di elaborazione general purpose ai SOC. Dunque i SOC sono un evoluzione , un passo in avanti ; basta pensare che gia Intel e AMD (che non hanno bisogno di presentazioni) hanno prodotto , gia qualche anno fa , CPU con motore grafico, controllore di memoria e PCI Express nello stesso chip per personal computer (Tecnologia Fusion).Il primo a pensare un architettura in questo senso fu Intel gia nel lontano 2000 con il progetto "Timna" . Timna era destinato a PC economici , con l'obiettivo ambizioso di integrare controller di memoria e grafico sullo stesso chip. Ma le necessità del mercato costrinsero Intel a virare sul primo "Pentium M" processore con la classica architettura x86 di Intel costruito per pc portatili. Intel non abbandonò completamente il progetto e le continue ricerche portarono a presentare le prime architetture di questo tipo per sistemi embedded. Ad oggi sono moltissimi i sistemi SOC disponibili e le applicazioni che li utilizzano stanno crescendo in maniera vertiginosa. Samsung ad esempio ha una lunga storia di produzione di SOC , sia per i propri dispositivi sia per quelli degli altri . Apple per moltissimo tempo ha progettato i propri dispositivi facendoli produrre da Samsung , per poi passare invece alla TSMC detta anche Taiwan Semiconductor , che è la stessa società che collabora con Altera. Potrei continuare per moltissimo tempo elencando SOC molto conosciuti come Snapdragon di Qualcomm , Tegra di Nvidia e NovaThor di ST-Ericsson. Ma le applicazioni non si limitano ai dispositivi mobili , grazie alle sue caratteristiche, come si vede dalla tabella seguente , potrà essere usato praticamente ovunque in prospettiva futura. 5 Durante la trattazione sentiremo più volte parlare di SOC ARM-based, quindi riserverò un piccolo spazio per quella che è sicuramente l'architettura più usata in assoluto nei sistemi embedded. Durante il primo capitolo vedremo l'architettura generale dei System on Chip , soffermandoci sulle caratteristiche che lo rendono una scelta vincente per moltissime applicazioni. Daremo inoltre qualche cenno su due società rivali del mercato , e senza dubbio le regine per quanto riguarda le FPGA, che sono Xilinx e Altera. Nel secondo capitolo cercherò di descrivere in maniera abbastanza semplice le caratteristiche dell'architettura ARM . Daremo uno sguardo all'interno dell'architettura ARM Cortex-A9 poichè utilizzata nella famiglia Zynq-7000 ,che descriverò nell'ultimo capitolo, e vedremo la serie ARM Cortex-A50 (ultimi arrivati sul mercato) , spiegando alcuni parametri descrittivi e come effettuare un semplice confronto prestazionale. Nel terzo capitolo entreremo nel dettaglio dell'architettura interna, vedendo parte per parte come sono fatte le FPGA e l'Hard Processor System che compongono il System on Chip. Nel quarto capitolo vedremo una famiglia di dispositivi di Xilinx, la Zynq-7000, studiandolo sulla base delle componenti descritte nel capitolo 3 . 6 Capitolo 1: System on Chip I System on Chip (SOC) sono dei circuiti integrati che integrano insieme quello che può essere considerato a tutti gli effetti un intero sistema. Questo sistema lega insieme un Hard Processor System , periferiche , controllori di memoria e la tecnologia FPGA tramite un complesso e veloce sistema di interconnessione. 1.1 Introduzione Dall'immagine successiva osserviamo ,in piccolo a sinistra, una struttura molto generale di un SOC , composta da FPGA, HPS, controllore di memoria e altre periferiche come un ricetrasmettitore. A destra invece vediamo più nel dettaglio come è composto l'Hard Processor System . • La FPGA fornisce la flessibilità della logica riprogrammabile combinata con il 7 risparmio in termini di costi ad essa dovuto. • Hard Memory Controller , è un componente fondamentale per le performance del sistema. Vedremo che è il componente che inizializza , refresha, gestisce e comunica con i dispositivi di memoria esterni. Spesso integra un sistema ECC per incrementare l'affidabilità per applicazioni critiche. • Ricetrasmettitore , buffer full duplex per la trasmissione e ricezione dei dati • Hard PCIe , per l'interconnessione interna delle periferiche ad alta velocità. 1.2 Perchè usare i SOC ? Le caratteristiche viste fino ad ora ci permettono di capire che l'utilizzo che può essere fatto di questa tecnologia è estremamente ampio. Ma perchè usarla? • Incrementare performance di sistema Combinando la flessibilità di una FPGA con un architettura ARM è possibile raggiungere prestazioni molto alte . La stretta integrazione permette un interconnessione che non sarebbe possibile in un architettura a chip separati. • Aumentare l'affidabilità Sono solitamente garantite una varietà di componenti hardware o software per incrementare l'affidabilità del sistema e/o sicurezza. Ad esempio come gia accennato è quasi sempre presente un ECC che rende il sistema più resistente e sicuro quando si presentano errori di memoria o dati corrotti. Vedremo inoltre essere presente un controllore di memoria, che garantisce anche protezione ad accessi in zone della memoria non consentite. Sono presenti inoltre molto spesso sistemi sofisticati di criptazione basati su algoritmi quali Advanced Encryption Standard (AES) , Secure Hash Algorithm (SHA) o RSA. • Incrementare la flessibilità Le SOC permettono di avere ampia flessibilità sul design , permettendone un ampio utilizzo in tantissime applicazioni. Grazie alla FPGA , quindi alla logica programmabile, permettono un veloce adattamento a cambi di protocolli o di variazioni di algoritmi implementativi tramite una semplice riprogrammazione. Ci sono inoltre moltissimi componenti che si può scegliere se integrare o meno nel progetto a seconda dell'obiettivo che vogliamo raggiungere. • Costi di sistema molto bassi Come gia detto le SOC hanno la caratteristica fondamentale di avere consumi molto ridotti. Molto del merito va all'architettura ARM utilizzata nella maggior parte dei sistemi embedded e alla gestione ottimale delle risorse FPGA . • Facilità di Debug I progettisti spesso mettono a disposizione una serie di tool di facile utilizzo per programmare la FPGA , per effettuare il debug , per la simulazione, il modelling e in generale per dare agli utenti gli strumenti adatti per la realizzazione di un progetto. 8 1.3 Xilinx e Altera Dando uno sguardo ad una ricerca del 2010 , Altera e Xilinx erano e sono ancora oggi le regine incontrastate del mercato delle FPGA. Insieme queste due compagnie coprono circa il 90% dell'intero mercato , con un ricavo complessivo superiore ai 4.5 Bilioni di dollari e una capitalizzazione azionaria di 20 Bilioni. Per questo motivo ci concentreremo principalmente su queste due grandi famiglie che producono anche SOC. 9 Altera fondata nel 1983 con sede in California , produce prodotti per tutti i tipi di fasce di mercato . Rispettivamente le famiglie Cyclone, Arria e Stratix per fasce basse, medie e alte rispettivamente. Negli ultimi anni Altera ha fatto molti passi avanti guadagnando parecchi punti percentuali sul mercato . Nel 2013 ha rilasciato la FPGA Stratics 10 con tecnologia semiconduttore a 14nm tri-gate. Xilinx fondata nel 1984 anch'essa con sede a Son Jose in California , è senza alcun dubbio la regina del mercato per le FPGA . Dopo aver dominato il mercato di fascia media-bassa per molti anni con la serie Spartan ha recentemente rilasciato la serie 7 FPGA che con tecnologia semiconduttore a 28nm . Artex-7 e Kintex-7 ricoprono la fascia mediobassa,mentre Virtex-7 e ancora Virtex-Ultrascale coprono la fascia alta. In particolare la serie Ultrascale e dopo Ultrascale+ hanno ridotto sensibilmente la tecnologia a seminconduttore utilizzata , passando da 28nm (Virtex-7) a 20nm (Virtex-Ultrascale) prima , e 16nm (Virtex-Ultrascale+) dopo. Senza entrare troppo nel dettaglio riguardo le FPGA , vediamo un primo confronto tra le SOC di fascia bassa in questa tabella in basso: 10 Al termine della trattazione dovremmo essere in grado di saper interpretare la maggior parte di questi campi indicati. 11 Capitolo 2 : Architettura ARM Indica una famiglia di microprocessori RISC (Reduced instruction set computer) a 32 o 64 bit sviluppata dalla ARM Holdings . Questa architettura grazie alle sue caratteristiche è la più utilizzata nei sistemi embedded e noteremo essere un nome ricorrente per i Sistem on chip che vedremo. 2.1 Introduzione ad ARM ARM sta per Advanced RISC Machines , ed è proprio la linearità e semplicità dei processori RISC che predilogono un set di istruzioni ridotto ma che garantiscono prestazioni molto elevate a renderne un'architettura di punta. L'architettura ARM riesce a combinare prestazioni eccezionali ad un consumo bassissimo ed è proprio per questa ragione che si stima che il 75% dei dispositivi embedded su scala globale si affidi ad essa. Il set di istruzioni molto piccolo richiede di adoperare un numero di transistor molto ridotto rispetto al normale, e questo consente con le tecnologie in sviluppo, di incrementare le prestazioni di progetto in progetto , rendendo addirittura il dispositivo più piccolo. L'altra faccia della medaglia sono le architettura CISC , dotate di un set di istruzioni estremamente complesso , in cui quasi ogni istruzione prevede la possibilità di accesso alla memoria con metodi di indirizzamento molto complessi. I progettisti si resero conto che evitare troppi accessi alla memoria era necessario per ottenere prestazioni più elevate , inoltre i programmatori tendevano quasi sempre ad ignorare le istruzioni complesse messe loro a disposizione , prediligendo uno stile semplice e lineare. 2.2 Caratteristiche Architettura ARM Arm possiede alcune caratteristiche che la rendono un architettura molto particolare . E' un architettura di tipo load/store , con set di istruzioni ortogonali e pipilened a 5+ stadi. • Architettura Load/Store : Le istruzioni di elaborazione dati lavorano solo sui registri interni della CPU , le uniche istruzioni che possono accedere alla memoria sono Load ,per caricare un 12 • • dato dalla memoria ad un registro interno , e Store per passare un dato da un registro interno alla memoria. Set di istruzioni ortogonale: Ogni istruzione può utilizzare tutti i registri indipendentemente (tranne quelli speciali come IP) . E' stato dimostrato che un set di istruzioni ortogonali risulta più efficiente. Pipeline a 5 stadi (o anche più) con Cache Istruzioni e Cache Dati separate : o Lettura : Legge un istruzione o Decodifica : L'istruzione letta viene decodificata , vengono letti gli operandi . Si possono leggere fino a 3 operandi per istruzione dato che viene introdotta l'istruzione MAC (Multiple and Accumulate X=X*(A+B)) o Esecuzione : L'ALU esegue l'operazione e genera il risultato (o un indirizzo se l'operazione è di Load/Store) o Buffer/Data : Si accede alla memoria. Operazione utile solo per Load/Store o Write-back : il risultato viene scritto nel registro destinazione La tecnica di progettazione mediante pipeline sfrutta parallelismo tra fasi diverse di istruzioni consecutive. Ovvero se istruzioni consecutive sfruttano unità funzionali diverse dell'elaboratore (ALU , Memoria , Registri). Quindi non incrementa la velocità di esecuzione di una singola istruzione , ma abbassa il tempo totale di esecuzione di un gruppo di istruzioni (throughput). Questo cambiamento è dovuto al fatto che Load/Store richiedono prima di calcolare l'indirizzo e poi l'accesso alla memoria (Se sono presenti salti condizionati potrebbero richiedere anche qualche ciclo in più) . Buffer/Data compie lavoro utile solo nelle operazioni di load/store permettendo l'accesso alla memoria senza dover svuotare la pipeline e dover ripetere il ciclo. Ci sono comunque criticità , se due istruzioni sfruttano la stessa unità funzionale , o la si replica o si aspetta. Esistono anche cicli a 8/15/15+ stadi per fornire prestazioni più elevate a programmi di fascia più alta. Il modo di esecuzione può essere normal mode o super mode. La prima è la classica user mode in cui il sistema operativo garantisce protezione e isolamento dalle applicazioni. La seconda solitamente si divide ulteriormente in altre modalità più specifiche , considerando che l'architettura è fatta per sistemi embedded e deve affrontare vari tipi di imprevisti dati da eventi esterni. Un esempio sono System Mode per eseguire compiti privilegiati del sistema operativo o Abort Mode se si tenta un accesso alla memoria non autorizzato. 13 La architettura ARM adotta una soluzione fortemente modulare , estendibile con diversi coprocessori che devono però rispettare i protocolli di comunicazione con la CPU . L'aggiunta di coprocessori permette di incrementare le funzionalità e il set di istruzioni. Segnali di controllo sono: • cpi : dalla CPU a tutti i coprocessori . La CPU identifica un istruzione e vuole che uno dei coprocessori la esegua. • cpa : Dal coprocessore alla CPU , quando un coprocessore non è in grado di eseguire quell'istruzione. • cpb : Dal coprocessore alla CPU , quando un coprocessore è gia occupato. L'istruzione verrà eseguita da un coprocessore se i segnali cpa e cpb sono disattivati. In caso contrario sarà il processore ARM a valutare se scartare l'istruzione (cpa attivo per tutti i coprocessori : non è un istruzione conosciuta dall'architettura) o attendere (cpb attivo per qualche coprocessore : so eseguire quell'istruzione ma sono occupato). E' importante far presente che un coprocessore è diverso da un core. Un core è un unità elaborativa della CPU interna al package e possiede lo stesso set di istruzioni di tutti gli altri core. Il coprocessore sono componenti esterni con proprio set istruzioni per estendere le funzionalità del sistema, come la GPU per processo grafico o la FPU per il calcolo in virgola mobile. Un'altra caratteristica che rende unica un'architettura ARM è la gestione dei salti condizionati che viene eseguito attraverso una soluzione chiamata "esecuzione condizionale". L'esecuzione di ogni istruzione diventa condizionale ; se la condizione è rispettata l'istruzione viene eseguita, altrimenti viene convertita in un nop ( No operation). E' il confronto iniziale a spostare automaticamente il valore della condizione nel condition register e le istruzioni di loro natura sono condizionate . Nell'esempio nel caso di esecuzione condizionale l'operazione di move è condizionata da un bit nel condition register. Esempio : 14 • C: if(a>10) return 0; else return 1; • Salto Condizionato (Supponendo numero da controllare in r0): cmp r0, #10 ble L1 (se è minore o uguale di , salta a L1) mov r0, #0 jmp L2 L1 : mov r0 , #1 L2 : ... • Esecuzione Condizionale cmp r0,#10 movgt r0,#0 movle r0,#1 (viene eseguita solo una delle due ma vengono lette entrambe) E' importante specificare che l'esecuzione condizionale non in tutti i casi migliora le prestazioni. 2.3 ARM Cortex-A9 L'architettura ARM è presente come detto nel 75% dei dispositivi embedded. I produttori che intendono progettare una CPU che si basi sull'architettura ARM , devono acquistare una licenza . Le varie architetture vengono chiamate Cortex e si differenziano tra loro per molti fattori. ARM Cortex-A9 era il dispositivo di punta di qualche anno fa , ed è utilizzato in moltissime SOC , come Xilinx Zynq-7000 e Altera Cyclone V. Questo processore offre eccezionali funzionalità con un ridottissimo consumo energetico . E' dotato di un processore ARM quad-core ad altissime prestazioni che implementa pianamente l'architettura ARMv7. E' stato stimato raggiunga 2.50 Dhrystone MIPS/MHz per core. Dhrystone è un programma di benchmark molto famoso sviluppato da Reinhold Weicker nel 1984 , divenuto uno standard per la valutazione delle prestazioni delle CPU. La sua analisi non è completa perchè è un programma che non contiene operazioni a floating point (anche se le architettura ARM solitamente sono accompagnate da un coprocessore FPU per le operazioni in virgola mobile). Il DMIPS è calcolato dividendo il punteggio di Dhrystone 15 per 1757 , punteggio di un processore di riferimento. Questo valore è più indicativo del classico MIPS poichè tiene conto di varie tipologie di istruzioni diverse (ad esempio CISC e RISC). Come si può immaginare i DMIPS/MHz sono ottenuti dividendo il precedente per la frequenza operativa del processore. Vediamo cosa sono e a cosa servono le componenti che vediamo dall'immagine sovrastante, rappresentante l'architettura del Cortex-A9 . 2.3.1 Snoop Control Unit Lo SCU connette i quattro core al sistema di memoria tramite un interfaccia AXI . Si occupa di mantenere la coerenza dati nelle cache tra i core , di gestire le richieste alla memoria cache L2 da parte dei core e dell'ACP. Lo SCU possiede un buffer che permette di gestire i trasferimenti diretti tra cache a cache senza dover chiedere l'appoggio di dispositivi di memoria esterni. Per mantenere la coerenza tra i core lo SCU utilizza una variante del protocollo MOESI . Questo protocollo prevede di descrivere lo stato di ogni linea cache dati di livello-1 con cinque possibili stati : • Modified , i dati sono solo in questa cache e sono sporchi • Owned , i dati possono essere in più di una cache e sono sporchi • Exclusive, i dati sono solo in questa cache e sono puliti • Shared , i dati sono possibilmente in più cache e sono puliti • Invalid , i dati non sono in questa cache Per sporchi e puliti ovviamente si intende se i dati sono coerenti o no con la copia presente in memoria centrale. Lo SCU gestisce questi stati e mantiene la coerenza tra le cache. 16 2.3.2 Accelerator Coherency Port E' un componente opzionale , che rispetta lo standard AXI 64 bit . Nell'architettura ARM master-slave è uno slave che può essere connesso ad acceleratori esterni come un DMAengine o un cryptographic engine. Questo componente fornisce una comuncazione coerente diretta con Core del Cortex-A9 (e le cache) ottimizzando performance e consumo. L'ACP comunica direttamente e strettamente con lo SCU che si occupa dunque di mantenere la coerenza anche delle richieste che arrivano dall'ACP. Ogni transazione di lettura deve necessariamente interagire con lo SCU per vedere se l'informazione richiesta si trova all'interno della cache L1 del processore . Se è così l'informazione viene restituita direttamente all'acceleratore che ha effettuato la richiesta tramite l'ACP. Se non è così viene controllata la cache L2 prima di rimandare direttamente la richiesta alla memoria centrale. Nelle operazioni di scrittura prima che eventuali modifiche si propaghino nella memoria centrale lo SCU si occupa di gestire la coerenza. 2.3.3 Generic Interrupt Controller E' un dispositivo hardware che si prende in carico la gestione delle interruzioni vettorizzate per conto del processore. Si frappone tra i dispositivi interrompenti e il processore , collegandoli su varie linee (IRQ0,IRQ1...) e scaricando la CPU da tale compito che richiederebbe una perdita di tempo considerevole . Gestisce le interruzioni con un meccanismo a priorità che può essere configurato o può variare a seconda delle esigenze. Deve inoltre mantenere una tabella nel quale mantenere l'indirizzo di memoria nel quale è memorizzata la subroutine (Interrupt Service Routine) da far eseguire al processore quando viene lanciata un interruzione. 17 2.3.4 Neon Data Engine La tecnologia ARM NEON è un coprocessore 128 bit SIMD (Single Istruction Multiple Data) che si occupa di accelerare e standardizzare l'elaborazione di segnali e applicazioni multimediali. NEON utilizza un set di istruzioni, registri e elaborazione completamente indipendenti da quelli dei processori. Neon dunque può accelerare gli algoritmi di multimedia e signal processing come codifica/decodifica, elaborazione video , grafica 2D/3D , gaming , imaging processing e così via. Essendo un coprocessore SIMD l'istruzione è la stessa effettuata in parallelo su più dati dello stesso tipo. Ad esempio se si vuole aumentare la luminosità di un immagine , senza un processore/coprocessore SIMD, bisognerebbe prendere ogni pixel , applicare l'algoritmo ad ognuno di essi e poi salvare i risultati in memoria. Con Neon si possono eseguire fino a 16 operazioni uguali per istruzione , quindi si caricano 16 pixel per volta , si applica l'algoritmo a tutti e 16 in parallelo e si procede al salvataggio di tutti in memoria. Il vantaggio prestazionale è evidente. Inoltre NEON libera i processori dalla gestione di queste istruzioni. Neon migliora sensibilmente l'esperienza multimediale dell'utente : • Guarda video in ogni formato • Modifica e migliora video - stabilizzazione degli stessi • Anti-aliasing • Game processing • Riconoscitore vocale • Elaborazione audio multicanale 2.3.5 Floating Point Unit La FPU è un coprocessore che fornisce prestazioni elevate nell'elaborazione di istruzioni a singola e doppia precisione , ed è in grado di risolvere direttamente alcune operazioni come calcoli esponenziali o trigonometrici (estrazione radice , seno..). Nel Cortex-A9 la FPU implementa l'architettura VFPv3 di ARM , che supporta ed è compatibile con le precedenti versioni VFPv1-2. E' compatibile con IEEE 754 , che è lo standard più utilizzato e conosciuto per la rappresentazione in virgola mobile, e per le operazioni definite su essi. Esso può interagire con il motore grafico come la GPU Mali di ARM. 2.3.6 L1 Cache Ogni core possiede due memorie cache , una per i dati e l'altra per le istruzioni , di dimensione variabile solitamente tra i 16KB e i 64KB. 2.4 Cortex-A50 Series L'architettura ARM è presente in tantissimi SOC che utilizziamo nei nostri dispositivi portatili. Ad esempio : • Samsung Exynos prodotta da Samsung (Galaxy S2-S6,Iphone 3) • Snapdragon di Qualcomm (HTC one, Nexus 4) 18 • Tegra di Nvidia (Nexus 7, Tablet Asus) I produttori acquistano le licenze da ARM per progettare CPU basate sulla loro architettura. Le varie architettura vengono chiamate "Cortex" e si differenziano tra loro per molti fattori. Vediamo alcune caratteristiche chiave , cosa sono e come interpretarle. • • • • • DMIPS : gia prima lo abbiamo introdotto come un parametro molto importante per l'analisi delle prestazioni delle CPU , valutato su set di istruzioni sia CISC che RISC. E' ottenuto dividendo il punteggio di Dhrystone per 1757. Stadi Pipeline : abbiamo visto sopra che nelle architetture ARM gli stadi pipiline vengono estesi per incrementare le prestazioni ad alta frequenza. Alcuni processori utilizzano pipeline a 10 stadi o addirittura nelle ultime architetture a 15+ stadi. Esecuzione out of order : se presente è un supporto che aiuta ad inviduare istruzioni non vincolate ad altre e che quindi possono essere eseguite parallelamente, anche non rispettando l'ordine iniziale imposto dal programmatore. Cache L2 : dimensione della memoria cache di livello 2. Nelle architetture ARM solitamente la cache L3 non è presente , per cui quest'ultima è la più grande cache utilizzabile dalla CPU per aumentare la velocità di esecuzione e ridurre la latenza. Execution port : numero massimo di istruzioni che la CPU può processare per ogni ciclo di clock Il parametro più semplice da valutare è il DMIPS. Confrontiamo tre processori : QuadCore Cortex A9 a 1.4 GHz = 2.25 DMIPS*4 core*1,4 GHz = 12.6 Dual Core Cortex A15 a 2.1 GHz = 3.5 DMIPS*2 core*2.1 GHz = 14.7 Dual Core Cortex A57 a 1.6 GHz = 4.4 DMPIS*2 core*1.6 GHz = 14.8 Quindi un A57 ad una frequenza notevolmente più bassa ha più o meno le stesse prestazioni di un A15 a 2.1 Ghz . L'ARM Cortex A57 e A53 sono i primi modelli prodotti da ARM che supportano il nuovo set istruzioni per ARMv8, quindi un architettura a 64bit. Oltre ad avere un set di istruzioni chiamato Aarch64 è dotato di un ISA chiamato Aarch32 per la compatibilità con le precedenti architetture . La prima è più orientata alle prestazioni la seconda ad un trade-off tra prestazioni e consumo. La cosa interessante è che ARM ha prodotto un architettura proprietaria chiamata big.Little dove vengono utilizzate insieme , quindi processori A57 e A53 per ottimizzare in modo intelligente prestazioni e consumi. Samsung ha utilizzato questa configurazione per il nuovo Samsung S6 , con il SOC Exynos 7420 , utilizzando ben 8 core 4+4 divisi equamente in CortexA57 e CortexA53. 19 20 Capitolo 3: Architettura dei System on Chip Per la descrizione dell'architettura ci rifacciamo alla struttura generale del Soc FPGA di Altera. In ogni caso è bene far presente che questa architettura è del tutto generale. Possiamo quindi schematizzare l'architettura generale di un SOC in due parti : l'Hard Processor System e la FPGA. L'HPS e l'FPGA comunicano tramite un interfaccia che deve garantire alte prestazioni che mette in contatto le due porzioni (HPS-FPGA Interfaces). 3.1 FPGA Field Programmable Gate Arrays sono dispositivi a semiconduttore , composti da una matrice di blocchi logici configurabili (CLB) tutti uguali , connessi tramite una fitta rete di connessioni programmabili e circondati da blocchi di I/O. E' un circuito integrato ma a differenza della tecnologia ASIC ( Application specific Integrated Circuits ), nella quale le configurazioni dei transistor sono fisse e scelte in fase di progettazione , la tecnologia FPGA permette la riconfigurazione delle interconnessioni tra transistor , e grazie a questa 21 sua caratteristica può essere riprogrammata più e più volte , implementando anche funzioni logiche molto complesse . Questa matrice di celle e interconnessione forma la base per la costruzione di ogni circuito , anche quelli più complessi. Un aspetto importante sono le interconnessioni interne, detti collegamenti locali , che sono pochi e condivisi tra pochi elementi logici , permettendo ritardi contenuti e dissipazione di potenza limitata. Inoltre all'interno di uno stesso dispositivo sono presenti collegamenti interni di lunghezza differente permettendo un elevata flessibilità .Una caratteristica molto importante di questa tecnologia è la capacità di eseguire operazioni parallele. Caratteristica che la rende una scelta eccellente nelle applicazioni che necessitano di elaborazione parallela come applicazioni di intelligenza artificale o di elaborazione multimediale. Le FPGA sono fatte inoltre per permettere il cambiamento del loro progetto molto tardi nel loro ciclo di progettazione , addirittura dopo che il prodotto è stato ultimato e distribuito. 3.1.1 Tecnologia di Sviluppo Le FPGA si dividono in due grandi famiglie caratterizzate dalla tecnologia di sviluppo. Alla prima famiglia appartengono le FPGA OTP (One Time Programmable) , ossia dispositivi che possono essere programmati una sola volta. Alla seconda famiglia appartengono le FPGA SRAM , che invece possono essere programmate più volte. Tutti i dispositivi ovviamente sono composti da un numero elevatissimo di transistor ma la differenza sta nella tecnologia adoperata per costruirli. I dispositivi OTP basati su tecnologia PROM (Programmable ROM) prima utilizzavano dei MOSFET dotati di un fusibile che permetteva di memorizzare uno 0 a un 1 a seconda se veniva bruciato oppure no. Ovviamente il processo era irreversibile e questa tecnologia era alquanto costosa. Si è passati dunque alla tecnologia EPROM ( Elettrical Programmable ROM) , dispositivi programmabili elettricamente e cancellabili con radiazione ultravioletta , e poi ancora ai EEPROM scrittura e cancellazione elettrica . Con queste tecnologie il nome OTP inizia a perdere di significato. Un ulteriore evoluzione è l'utilizzo della tecnologia FLASH , tecnologia in avanzamento capace di memorizzare più informazione in uno spazio più piccolo grazie alle multilevel cell. La seconda famiglia si basa su tecnologia RAM , dispositivi che devono essere dunque ripogrammati ad ogni accensione per via della loro volatilità. 3.1.2 Architettura fisica di una FPGA 22 Una FPGA è composta da una matrice di blocchi. I blocchi che la compongono vengono chiamati in modo diverso a seconda della famiglia e del costruttore , noi ci riferiremo ad essi come CLB (Configurable Logic Block). Ognuno di questi CLB può essere visto come un insieme di elementi logici basilari chiamati Logic Cell. Questi a loro volta sono composti da una LUT (o più) e da un flip flop . Le singole LUT sono formate da una SRAM a 16 bit e un multiplexer a quattro ingressi . Quindi le LUT dopo la configurazione implementano funzioni logiche booleane di quattro variabili , ma attraverso una organizzazione più complessa è possibile estendere il numero di ingressi. Si preferisce però lasciare le funzioni logiche elementari più semplici possibili poichè la complessità delle LUT cresce esponenzialmente con il numero di ingressi. I CLB vengono dunque connessi tra loro, per realizzare una funzione logica più complessa, tramite un sistema di interconnessione locale abbastanza minimale, in modo da garantire semplicità e velocità allo stesso tempo. Le interconnessioni tra i CLB possono essere di due tipologie : linee fisse o le matrici di scambio. Le matrici di scambio sono costituite da pass-transistor programmabili per instradare i segnali all'interno della matrice. All'esterno della matrice sono presenti i pin di ingresso/uscita che permettono di interfacciarsi con l'esterno.All'interno della matrice sono presenti altre risorse come ALU, risorse di calcolo generali , DCM (Digital Clock Manager) , la rete che trasporta il segnale di clock ai flip flop e elementi di memoria distribuita. 3.1.3 Flusso di Progetto 23 Esistono vari modi per progettare un circuito integrato , un esempio è attraverso i linguaggi di descrizione dell'hardware come VHDL e Verilog. Il modello computazione dei linguaggi di descrizione dell'Hardware è profondamente diverso da quello dei linguaggi di programmazione tradizionali . Il ruolo del progettista è descrivere cosa fare non come. Nei linguaggi di programmazione (C,C++,Java) , gli statement definiscono delle istruzioni eseguite in sequenza o parallelamente da un infrastruttura ( dalla CPU nel caso del C , dalla Java Virtual Machine nel caso del Java ). Nei linguaggi di descrizione dell'Hardware gli statement invece definiscono blocchi hardware , non c'è esecuzione sequenziale (o parallela) , nessuna infrastruttura sottostante e nessun run-time. Ci sarà una fase di Analisi e Sintesi in cui il sintetizzatore analizza i costrutti del linguaggio , riconosce i template e ne deriva i componenti di alto livello (contatori , decoder , multiplexer...). Tale rappresentazione però non è direttamente collegata all'hardware finale ma arvà soltanto un ruolo "funzionale". L'hardware viene inferito nella fase di Mapping, in cui il sintetizzatore si avvale delle celle logiche FPGA per mappare le funzionalità descritte su hardware reale. Vediamo un tipico iter progettuale : • Sintesi : Descrizione schematica del dispositivo , data in ingresso una descrizione attraverso un linguaggio come il VHDL fornisce un uscita una rete logica. Sostanzialmente trasforma il testo in uno schema a blocchi formato da componenti basilari di descrizione. • Simulazione: E' la fase in cui si ottimizza la rete logica in maniera del tutto indipendente dalla tecnologia che dopo verrà utilizzata per la realizzazione fisica. Durante questa fase si effettua un primo controllo sui tempi , si verifica se ci sono ritardi imprevisti che possono provocare errori . In caso affermativo si deve rivedere il linguaggio di descrizione. • Mapping: 24 • • Conversione dei componenti base della rete logica con elementi fisici generici. E' un passaggio che dipende dalla tecnologia che si userà per la realizzazione . In questa fase si cerca di ottimizzare il circuito riducendo l'area occupata. Tutti gli elementi di memoria di alto livello (registri,shift register, contatori) vengono ricondotti a dei semplici flip flop. Si identificano le equazioni booleane (si ottimizzano) , per scegliere i vari collegamenti tra elementi fisici. Si mappano le funzioni booleane sulle Look-up table . Simulazione: Simulazione fisico-elettrica utilizzando programmi di CAD Place and Route: La fase di Place assegna le celle logiche ad una specifica locazione del FPGA . Il routing seleziona i segmenti di linee di connessione e li collega alle celle. E' un processo semiautomatico al quale è possibile assegnare dei vincoli , come area occupata o tempo di propagazione tra collegamenti. Il processo non sempre viene portato al termine in maniera automatica , spesso perchè i vincoli sono impossibili da rispettare o perchè il circuito è troppo complesso. 3.1.4 FPGA vs ASIC ASIC come gia detto sta per Application Specific Integrated Circuits , ovvero circuiti integrati progettati per una specifica applicazione. Questo ci fa capire subito che in questo caso è necessario un processo di design molto più complesso , preciso , costoso anche perchè si deve lasciare il minimo spazio agli errori che in fasi successive sono difficili da risolvere. Concentrarsi su un unico obiettivo chiaramente rende questi circuiti integrati più veloci e potenti nella risoluzione di quello specifico problema, però chiaramente i costi di progettazione raggiungono picchi più alti. In realtà il confronto non è propriamente corretto così come è stato impostato. Questo perchè gli ASIC si dividono in "full-custom ASIC" , "semicustom ASIC" e programmable ASIC. • Full Custom ASIC : un esempio di questo tipo di ASIC è il microprocessore. Con questa tipologia è possibile scegliere in maniera personalizzata celle logiche e layout . Questo permette di includere circuiti analogici, celle di memoria ottimizzate donandogli grande versatilità. Questa produzione richiede tempi lunghissimi di progettazione e costi elevatissimi. • Semi Custom ASIC o Standard Cell : tutte le celle logiche utilizzano componenti standard come porte AND , OR , multiplexer , flip flop. In ogni caso il progettista deve scegliere come piazzare le celle standard e come collegarle. Quindi suppur le celle logiche sono quelle basilari le maschere sono personalizzate da cliente a cliente. • Programmable ASIC : sono disponibili in un catalogo o comunque in configurazioni standard , venduti in grossi volumi ai clienti. Questi dispositivi possono essere programmati e configurati per personalizzare il progetto. Le FPGA sono da un certo punto di vista simili a questo sottoinsieme. Quindi quando ho scritto FPGA vs ASIC , intendo logica programmabile contro logica non programmabile come la Standard Cell . Vediamone un confronto . • Time to market: Gli FPGA hanno tempi di progettazione bassi e permettono di immetere velocemente un prodotto sul mercato. Al contrario i tempi di progettazione di un 25 • • • • • • ASIC sono molto lunghi , spesso durano mesi o addirittura anni. Per ridurre questi tempi spesso si progetta un prototipo in FPGA e dopo lo si cambia in un ASIC. Tool : Dato che la FPGA viene personalizzata nel software i tool non devono essere diversi da cliente a cliente , quindi spesso sono molto economici o addirittura gratuiti. Per gli ASIC invece i tool sono molto costosi dato che devono essere personalizzati e pensati per l'hardware appropiato. Area occupata : da questo punto di vista gli ASIC vincono il confronto. L'hardware personalizzato permettono di ottimizzare la dimensione della board. Costi di progetto : Le FPGA hanno costi di progetto praticamente nulli al contrario ovviamente degli ASIC che possono raggiungere costi anche per milioni di dollari. Costi per unità : Una volta progettato in massa gli ASIC hanno costi per unità decisamente più bassi . Velocità : Il design flessibile e personalizzato degli ASIC permette di raggiungere velocità molto più elevate rispetto ad un progetto generico programmato via software. La differenza di frequenza operativa varia di circa 10 volte (500 MHz contro i 40MHz) Consumo : anche in questo confronto la spuntano gli ASIC che hanno un consumo molto più ridotto (circa 10 volte in meno rispetto le FPGA). Un aspetto non di poco conto è che se dopo l'immissione nel mercato ci accorgiamo della presenza di un bug , nelle FPGA risolvere questo problema risulta più semplice in quanto basta riprogrammare il dispositivo (magari rilasciando un aggiornamento) . Con la tecnologia ASIC i costi per correggere questo errore possono essere elevatissimi. E' chiaro che non è corretto dire quale dei due è la scelta migliore in assoluto , questo ovviamente dipenderà dal tipo di applicazione e dallo specifico obiettivo che vogliamo ottenere. 3.2 Hard Processor System L' HPS contiene : • MPU subsystem • Flash Memory Controller • SDRAM controller subsystem • Sistema di interconnessione • On-Chip Memories • Periferiche di supporto e di interfaccia • PLL (Phase Looked Loops) 26 Vediamone alcune più approfonditamente. 3.2.1 Micontroller Processor Unit Subsystem 27 Questa unità è composta solitamente da un microprocessore (in questo caso ARM) , cache L2, Interrupt Manager, timer e altre componenti. Nel caso in esame stiamo guardando l'architettura della Soc Fpga Altera Cyclon V composta da due processori ARM CortexA9. Abbiamo visto nel secondo capitolo l'architettura ARM del Cortex-A9 MPCore per cui non ci ritorneremo. Sono presenti nel sottosistema diversi timer utilizzati (watchdog e global) dal sistema operativo e dal processore per rilevare loop infiniti , deadlock e per general purpose. Un semplice watchdog viene implementato tramite un contatore di x-bit che funzioni ad una frequenza di clock di y MHz. In questo modo se il timer non si azzera ogni 2^x/(y*10^6) secondi il sistema si resetta. L2 Cache L'MPU subsystem include anche una cache L2 solitamente nell'ordine dei 512 KB. E' condivisa tra i core , l'accesso e la coerenza sono gestiti dallo Snoop Control Unit. Implementa un meccanismo di sicurezza chiamato ECC (Error Code Correction) ed è fondamentale per incrementare la velocità di operazione della CPU. Questa cache è di tipo associativa , cioè le aree di memoria centrale possono essere caricate soltanto in aree specifiche della memoria cache. In particolare nell'architettura della Cyclone V vista sopra le cache sono 8-way set-associative, ovvera una certa area di memoria centrale può essere mappata solo in 8 zone diverse della cache. Memory Management Unit Utilizzata con le cache L1 e L2 per la conversione degli indirizzi virtuali utilizzati da software di alto livello, con gli indirizzi fisici usati dall'hardware. Ogni processore ne ha una personale. Si avvale per funzionare correttamente di alcune TLB spesso di diverse dimensioni. ACP ID Mapper 28 Situato tra l'interconnessione L3 esterna al MPU subsystem e l'ACP slave interno al sottosistema. Più avanti vedremo che lo standard AXI AMBA prevede un AXI ID per identificare univocamente la transazione tra master e slave. L'ACP ID Mapper mappa l'AXI ID a 12 bit proveniente dall'esterno in un AXI ID a 3 bit a cui l'ACP slave è compatibile. Questo succede perchè l'ACP Slave supporta un numero limitato di transazioni parallele (circa 6) che può controllare, ma nell'FPGA possono essere presenti un gran numero di slave che richiedono l'accesso all'ACP. Quindi viene utilizzato un ID AXI di transazione di 12 bit per identificare i tanti master , però ad ognuno di essi viene assegnato un ID di 3 bit identificativo dall'ACP ID Mapper per iniziare la comunicazione. 3.2.2 Flash Memory Controller Il Flash Memory Controller gestisce i dati immagazinati sulla memoria flash e permette la comunicazione con personal computer o device esterni. Le memorie flash sono molto utilizzate per i dispotivi portatili , grazie alla loro dimensione ridotta e alla possibilità allo stesso tempo di immagazzinare una grande quantità di informazione (Multi-level cell) . Esso può essere progettato per lavorare in ambienti a bassi duty-cycle come SDcard , macchine fotografiche digitali o simili. Per esempio esso è usato nelle classiche pennette USB per comunicare con i personal computer ed interagire con il sistema operativo, donando una struttura come quella di un file system. Vengono anche progettati per operare in ambienti con duty-cycle alti come ad esempio i dispositivi di memorizzazione a stato solido (SSD). Dopo la produzione , il flash controller viene utilizzato in prima battuta per formattare la memoria flash per capire se il dispositivo funziona correttamente. Esso ha anche il compito di dividere le celle in good block e bad block durante il ciclo di vita della memoria . Questa distinzione è dovuta al fatto che ci sono un numero massimo di operazioni che si possono effettuare sui blocchi di memoria flash prima che lo strato di ossido cominci a corrodersi. Per questa ragione vengono predisposti blocchi alternativi da mettere in funzione in caso di parti di memoria non funzionanti (bad block). In questo modo si cerca di preservare la capienza iniziale della memoria. Questo fenomeno va sotto il nome di over-provisioning. In realtà questi blocchi non restano inutilizzati , ma sono impiegati dal File-system per migliorare le prestazioni del supporto di memoria. Esistono varie tecnologie per costruire una memoria flash . La prima ad essere utilizzata fu la tecnologia NOR , che ha la caratteristica di ottimizzare i tempi di lettura random. Infatti vengono utilizzate per contenere i firmware di microcontrollori che devono essere aggiornati raramente e devono essere eseguiti spesso. La tecnologia NAND flash si differenzia per la struttura dei transistor che in questo caso sono connessi in serie. Questo tipo di tecnologia è ottimizzato per la modifica veloce dei dati , inolte per effettuare una cancellazione si deve eliminare un intero settore di 8Kb contro i 64Kb della tecnologia NOR. Inoltre la tecnologia NAND occupa molto meno spazio , permettendo con la stessa capacità di area di immagazzinare più informazione. 3.2.3 SDRAM Controller Subsystem Fornisce un accesso efficiente alla SDRAM esterna per il sottosistema del processore , la interconnessione L3 e la FPGA Fabric. Quindi è il responsabile di fornire l'interfaccia di comunicazione tra l'HPS e l'FPGA Fabric. 29 Come si evince dall'immagine e come avevamo gia anticipato , l'SDRAM controller subsystem mette in comunicazione MPU, L3 e FPGA Fabric con i dispositivi di memoria esterni. Il sottosistema è formato da : • SDRAM Controller • Physical Layer Interface (PHY) • Control e Status Registers SDRAM Controller Fornisce grandi performance per l'accesso dati e programmabilità a run-time. Esso implementa gli algoritmi per minimizzare i tempi di latenza. Il controller è formato da una Multi-Port Front End(MPFE) e una Single-Port Controller (SPC) . La prima fornisce interfacce indipendenti per la comunicazione con diversi sottosistemi rendendo il lavoro della Single-Port indipendente da chi effettua la richiesta. Inoltre è il responsabile dell'operazione di scheduling sulle rischieste pendenti, quindi invia la transazione schedulata al Single-Port. Ci sono dunque due tipi di scheduling il primo è chiamato Multiport Scheduling , il secondo DRAM Burst scheduling che vedremo successivamente. Il Multiport Scheduling è responsabile di decidere quale transazione accettare in base alle richieste che gli arrivano sulle porte di ingresso. La Single-Port è responsabile dell'amministrazione e delle comunicazioni con i dispositivi di memoria esterni, e quindi di portare a termine le richieste. Valutare le performance di un SDRAM controller significa valutarne la bandwidth che dipende fortemente dall'efficienza del controllore . 30 Ad esempio supponiamo che il controllore abbia un efficienza del 70% con un interfaccia di 32 bit e una frequenza operativa di 400 MHz : Quindi risulta semplice capire che per incrementare le prestazioni bisogna alzare l'efficienza del controllore . L'efficienza può essere incrementata eliminando i tempi morti , infatti l'efficienza è uguale al numero di cicli di clock in cui il bus dati è occupato, diviso il numero totale di cicli di clock. MPFE SDRAM Burst Scheduling Lo scheduling può variare da tecnologia a tecnologia , ma in genere gli algoritmi si basano tutti su queste semplici regole. L'MPFE controlla che l'indirizzo della richiesta sia appartenente allo stesso banco di memoria attivo . Il SPC serve le richieste così come gli vengono passate dal MPFE. L'algoritmo di scheduling agisce in due fasi , nella prima fase ogni transazione deve attendere un certo tempo per diventare idonea per la scelta. Per diventare idonea deve attendere che il proprio banco diventi attivo. Nella seconda fase le transazioni idonee competono tra loro sulla base di alcuni parametri : • Transazioni ad alta priorità hanno precedenza • Le operazioni di lettura hanno precedenza su quelle di scrittura • Se gruppi di transazioni hanno la stessa condizione (priorità/operazione) si prende la più vecchia L'algoritmo viene detto Burst Scheduling proprio perchè si prova a leggere/scrivere porzioni di memoria contigue per evitare le operazioni previste dal protocollo di accesso alla memoria, ed in questo modo si risparmiano le fasi in cui viene detto al controllore dove andare a prendere i dati. Questa tecnica viene utilizzata per aumentare il throughput. L'ordinamento nel controllore è fondamentale e come detto serve per modificare l'ordine di arrivo delle richieste per massimizzare il numero di operazioni nell'unità di tempo. Si ordinano le operazioni per eseguire sequenzialmente la stessa operazione che per la località spaziale accederà a locazioni contigue della memoria. 31 DDR PHY Fornisce un livello di interfaccia fisico per le operazioni di scrittura e lettura tra il controllore di memoria e i device esterni di memoria. 3.2.4 Phase Locked Loop (PLL) Per PLL in elettronica si intende un circuito in grado di generare un segnale periodico la cui fase è relazionata a quella di un segnale di riferimento. Questo circuito può essere utilizzato per vari scopi ma nel nostro caso viene utilizzato come generatore di clock. Il comparatore di fase è un circuito elettronico che genera un uscita pari alla differenza di fase dei due segnali in ingresso. Il filtro passa-basso permette il passaggio di sole basse frequenze del segnale e spesso è realizzato in maniera molto semplice attraverso il classico circuito RC (filtro passabasso passivo), oppure attraverso lo schema con amplificatore operazionale (filtro passabasso attivo). Il VCO (Oscillatore Controllato in Tensione) ha lo scopo di emettere in uscita un oscillazione di periodo che è determinato da una tensione posta sull'ingresso di controllo. Il divisore di frequenza non è presente nel caso del generatore di clock . Quindi il funzionamento di base è il seguente : il segnale di ingresso e di uscita vengono confrontati nel comparatore di fase , che restituisce dunque lo sfasamento che c'è tra loro . Questo segnale di uscita opportunamente filtrato , raggiunge il VCO che emette un oscillazione di frequenza maggiore o minore rispetto alla precedente a seconda dello sfasamento. Dato che il sistema è retroazionato negativamente, l'uscita del VCO viene confrontata con l'ingresso. A regime il sistema arriverà in uno stato in cui segnale di 32 ingresso(riferimento) e l'uscita del VCO avranno stessa frequenza raggiungendo la stabilizzazione del PPL. 3.2.5 On-Chip Memory L'HPS possiede due tipi di on-chip memory : • On-Chip RAM : solitamente 64KB di general-purpose RAM , accessibile dal FPGA. E' presente inoltre anche in questo caso un ECC in grado di rilevare errori su due bit e correggerne uno. • Boot ROM : contiene il codice necessario per l'avvio dell'HPS . Il processo di avvio dell'HPS è diviso in più fasi. Nel Boot ROM sono scritti degli indirizzi di memoria di un dispositivo di memorizzazione di massa , e queste locazioni contengono del codice da eseguire per avviare il dispositivo. Quelle routine sono dette preloader e devono essere fornite dal programma utente . 3.3 Periferiche di supporto e di interfaccia 3.3.1 DMA Il DMA è usato per spostare dati tra le memorie interne , memorie esterne e periferiche senza l'intervento della CPU e soprattutto in background rispetto alle operazioni della stessa. Le periferiche di input/output lavorano a velocità molto minori rispetto alla CPU , senza il meccanismo di DMA il processore sarebbe completamente occupato durante tutta la durata dell'operazione di read o write senza la possibilità di effettuare altro lavoro utile. Con il DMA la CPU inizia al trasferimento , poi lascia il controllo del bus di comunicazione al DMA controller ed effettua altro lavoro utile. Il DMA controller può spostare grandi quantità di dati da qualsiasi parte tra la logica configurabile e l'hard processor system . Il DMA gestisce i trasferimenti attraverso diversi canali (Acknowledge , richiesta , controllo) e due registri (DC e IOAR) . Quando la CPU necessita di informazioni presenti in memoria , carica nel registro IOAR l'indirizzo dove trovarli e in DC il numero consecutivo di byte da prelevare; è presente inolte un ulteriore bit in cui si indica se l'operazione è di lettura o scrittura. A questo punto il DMA controller invia un segnale alla periferica (Request) aspettando che quest'ultima gli risponda con un segnale di 33 Ackwnoledge. Ad ogni passo si incrementa IOAR e si decrementa DC fino a che quest'ultimo non diventa 0. Questo protocollo seppur estremamente semplice , permette di incrementare enormemente le prestazioni di sistema. Il trasferimento può avvenire in diverse modalità : • Burst Transfer : una volta iniziato il trasferimento il DMA mantiene il controllo del bus di comunicazione fino alla fine e non può essere interotto dalla CPU. • Cycle Stealing : Il DMA esegue il trasferimento di parole per ogni ciclo completo alla volta. Per ogni ciclo c'è un handshaking con la periferica e il trasferimento parte solo se la periferica è completamente pronta. In questo caso la CPU può riprendere il possesso del bus nei frammenti in cui il trasferimento è fermo. • Transparent/Hidden : Il DMA prende possesso del bus solo se la CPU non ne ha bisogno. Il controller tiene traccia delle operazioni della CPU verificando se le operazioni che dovrà effettuare lo terranno occupato per un tempo abbastanza lungo. 3.3.2 SPI Il Serial Peripheral Interface è un sistema di comunicazione tra un micontrollore con circuiti integrati o tra microcontrollori separati. L'architettura è di tipo master-slave , con il master che controlla il bus , emette il segnali di clock per la sincronizzazione e decide quando iniziare e terminare la comunicazione. Il bus SPI è di tipo seriale , ovvero i bit vengono trasferiti uno dietro l'altro e giungono così come sono stati inviati ; è sincrono poichè è presente un clock che scandisce il tempo di trasmissione e ricezione ; è fullduplex in quanto il bus può essere adoperato per l'invio e la ricezione contemporaneamente . Solitamente la comunicazione SPI viene adoperata per la comunicazione tra dispositivi sullo stesso circuito integrato. I segnali sono quattro: • SCLK : Segnali di clock per la sincronizzazione nel trasferimenti di dati • MOSI : Master Output Slave Input , come si vede facilmente dal verso della freccia (o intuibile dall'acronimo) è l'uscita per il Master e l'ingresso per lo slave. • MISO : Master Input Slave Output , il duale del precedente • SS: Chip Select o Slave Select , utilizzato per decidere con quale dei vari slave collegati vogliamo iniziare la comunicazione. Semplificando molto il protocollo si tratta di uno scambio di dati tra shift register sotto il controllo esclusivo di un master. SPI può operarare a frequenze diverse che dipendono dal dispositivo . Sulla maggior parte di essi può raggiungere frequenze operative fino a 10 MHz. 3.3.3 I2C 34 Anche'esso è un sistema di comunicazione seriale,half duplex utilizzato nei circuiti integrati. La classica architettura è composta da almeno un master e almeno uno slave . A differenza del SPI si possono prevedere architetture multimaster. L'I2C a differenza dell'SPI, che utilizza un chip select per indicare lo slave con il quale vuole comunicare , invia un indirizzo sulla linea dati a 7 bit. Sono dunque 128 indirizzi di cui 16 sono riservati e quindi in totale è possibile collegare sullo stesso bus 112 dispositivi. Il protocollo hardware richiede l'utilizzo di due linee di comunicazione chiamate SDA(Serial Data) e SCL (Serial Clock) . Il protocollo è semplice , il master invia un bit di start (S) seguito dall'indirizzo dello slave con cui vuole comunicare (B1..B7) . Il bit B8 sarà utilizzato per indicare se si vuole trasferire informazioni o riceverne. Se lo slave esiste e deve inviare informazioni prende il controllo della linea dati e invia un segnale di ACK . Il master sa dunque che lo slave sta per trasmettere e si mette in attesa. Le velocità raggiunge da I2C sono notevolmente minori rispetto a quelle di SPI , che risulta anche notevolmente più semplice da gestire dato che non è presente un vero e proprio protocollo di handshake. In I2C inoltre tutti i dispositivi collegati al bus possono assumere il ruolo di master , anche se può esserci un solo master alla volta. Tirando le somme l'SPI è decisamente una scelta più saggia per un architettura con un solo master e un numero limitato di slave e quando vuoi la massima velocità di trasmissione possibile . L'I2C sarà utile in sistemi multimaster con molte unità collegate . 3.3.4 UART Universal Asynchronous Receveir-Trasmitter è un dispositivo hardware che si occupa di convertire flussi di bit da un formato parallelo ad un formato seriale asincrono o viceversa. Questo dispositivo è di fondamentale importanza se si vuole realizzare un interfaccia di comunicazione con un calcolatore. Inserire questo dispositivo nel progetto può permettere di aumentare le funzionalità del proprio circuito , aggiungendo dispositivi come Bluetooth e sensori di varia natura. 3.3.5 CAN Controller Area Network è uno standard bus per trasmissione seriale in ambiente multicast utilizzato principalmente per applicazioni real-time. La sua caratteristica principale è di essere estremamente resistente a disturbi di natura elettromagnetica. E' stato progettato su richiesta della Mercedes , che voleva un semplice sistema di comunicazione che collegasse i vari sensori , chiusure centralizzate , dispositivi elettronici senza aumentare eccessivamente i costi di progetto e senza che ci fosse un cablaggio troppo fitto . Il funzionamento è estremamente semplice , il messaggio non contiene indirizzi di alcun genere , ma viene inviato in multicast a tutti i dispositivi della rete. I riceventi leggono il contenuto del messaggio e filtrano solo quelli a cui sono interessati. Si raggiungono velocità di trasmissione fino ad 1 Mbit/sec. L'HPS inoltre fornisce spesso anche controller Ethernet per il trasferimento di dati da 10/100/1000 Mbps in accordo con lo standard IEEE 802.3 e dei controllori USB per il trasferimento seriale ad alta velocità , che supportano la On the Go connection o anche detta connessione a caldo. 3.4 Sistema di Interconnessione 35 Il sistema di interconnessione sui SOC ha subito profonde variazioni nel corso degli anni. Il sistema si è sempre basato sullo standard ARM AMBA (Advanced Micontroller Bus Architecture) . AMBA fu creato nel 1996 da ARM e da moltissimi anni grazie alle altissime velocità che permette di raggiungere è lo standard per le interconnessioni nei sistemi embedded. Dalla prima versione ci sono stati molti sviluppi e molti miglioramenti fino ad arrivare nel 2013 alla versione 5 di AMBA. Vediamo come è avvenuta questa evoluzione : Advanced High-Performance Bus (AHB) In AMBA 2.0 apparve per la prima volta come parte fondamentale l'Advanced High Performance Bus (AHB) , fatto per rimpiazzare Advanced System Bus (ASB) come lo standard di interconnessione per i SOC basati su ARM . AHB e ASB sono molto simili nella loro struttura generale. AHB supporta single data access e vari tipo di accessi burst . Ogni trasferimento è definito in due fasi : fase indirizzo e fase dati. La fase di indirizzo viene portata a termine durante la fase dati della precedente operazione. L'architettura AHB è mostrata nell'immagine in basso , ed è una tradizionale architettura bus , master e slave . Il protocollo prevede delle operazioni avanzate come RETRY o SPLIT nel caso in cui uno slave non sia in grado di rispondere immediatamente. In quel caso il master che ha preso possesso del bus , ritirerà la richiesta e gli altri master potranno procedere. Multi-layer AHB Sebbene questa architettura bus sia ancora utilizzata , circa una decina di anni fa i SOC ARM hanno iniziato ad utilizzare le architetture bus multilivello. Ogni livello del bus è un singolo indipendente sistema AHB . Ogni livello è formato da M multplixer con S ingressi e 1 uscita , più S multiplexer con M ingressi ed una uscita (dove M è il numero di Master e S il numero di Slave) tutti connessi tra loro . Con questa architettura più master possono comunicare con più slave simultaneamente , se i master non richiedono la comunicazione allo stesso slave. I protocolli di comunicazione sono stati modificati eliminando, per la verità gli abbastanza sgraditi, SPLIT e RETRY 36 dell'architettura precedente e aggiundendo un protocollo di handshaking molto conosciuto attraverso HGRANT, HBUSREQ e HREADY. AXI3 (Advanced eXensible Interface) Con i System on Chip moderni che includono multicore, DSP , controllori grafici e moltissime altre periferiche avanzate avere un sistema di interconnessione limitato può diventare un collo di bottiglia per l'intero sistema. L'architettura multi-layer seppur migliore di quella a singolo livello , non è in grado di star dietro alle sempre più insistenti richieste dei sistemi moderni. Le ragioni principali sono che le operazioni sono transfernoriented. Per ogni trasferimento viene considerato un indirizzo sul quale agire , e un singolo dato viene letto o scritto , per cui per ogni parola da trasferire serve l'handshaking. Poi l'architettura master-slave pone un limite dovuto al fatto che gli slave potrebbero non essere sempre disponibili , e il master andrà in stallo in attesa che lo slave di liberi . Inoltre la comunicazione non è mai full-duplex . Un interfaccia AXI è composta da cinque canali (write address, write response , read address , read data/response) che operano indipendentemente dagli altri . Tutti utilizzano lo stesso protocollo di comunicazione tra master e slave a seconda dell'operazione da effettuare. Anche in questo caso le transazioni sono transfer-oriented , però sulla stessa transazione avviene anche la risposta dello slave sul canale corrispondente. Inoltre le comunicazioni sono bursted, quindi vengono trasferiti dati da 1 a 16 bit ad alta velocità senza che il processo possa essere interotto. Ogni trasferimento viene marcato con un ID che permette ai master e slave di capire a quale transazione si fa riferimento , ed inoltre questo permette di implementare algoritmi che ottimizzino il trasferimento di dati , ad esempio i trasferimenti non devono necessariamente essere contigui. E' presente in questo standard il write interleaving. Due master che vogliono comunicare con lo stesso slave non richiedono l'uso esclusivo del bus , ma se lo scambiano mentre l'altro è in fase idle . AXI4 E' la penultima versione del protocollo AXI . Rispetto alla versione precedente è stata incrementata la dimensione massima del trasferimento burst da 16 a 256 bit. I segnali di risposta degli slave sono stati estesi e sono state effuati altri miglioramenti strutturali per incrementare notevolmente il troughput . Sono stati estesi i segnali di Quality of Service (QoS) rendendo i dettagli che questi possono comunicare più precisi . Una differenza significativa è che il write interleaving è stato eliminato rendendo il protocollo AXI più semplice da gestire . E' stato eliminato perchè si è visto che adoperando il trasferimento burst veniva raramente utilizzato . Attualmente è senza dubbio l'interfaccia AMBA più utilizzata in assoluto nei System on Chip. Nel protocollo è presente un bus chiamato Advanced Peripherical Bus (APB) per interconnettere le periferiche tra loro . 37 Capitolo 4 : Zynq-7000 4.1 Introduzione Zynq-7000 è una famiglia di SOC progettate da Xilinx . Questi prodotti integrano un Dual-Core ARM Cortex A9 MPCore (che è lo stesso utilizzado da Cyclon V di Altera), con la logica programmabile di Xilinx. Non siamo entrati nel merito della FPGA prodotte da Xilinx e Altera poichè esulava dallo studio della mia trattazione, ma bisogno specificare che queste due sono le famiglie leader del mercato per quanto riguarda le FPGA . Su questi dispositivi Zynq-7000 sono presenti FPGA proprietarie Xilinx ovviamente , e sono Virtex-7, Kintex-7 o Artix-7 tutte e tre con tecnologia 28nm . Queste FPGA erano fino a poco tempo fa il prodotto di punta di Xilinx , ora però sono state sorpassate dalle FPGA Virtex/Kintex UltraScale e Virtex/Kintex Ultrascale+ che hanno raggiunto prestazioni ancora più eccellenti con tecnologia a dimensione ancora più ridotta , rispettivamente di 20nm e 16nm. Così come abbiamo visto essere composta l'architettura generale di un HPS , l'ARM Cortex A9 è il cuore del subsystem processor che include on-chip memory, un ricco set di 38 periferiche di I/O e interfacce di memoria esterne. Queste SOC sono in grado di servire un elavatissimo numero di applicazioni , incluse : • • • • • Assistente di guida , informazioni di guida e infotaiment per l'auto Videocamere Elaborazione , analisi e diagnostica di immagini in ambito medico Stampanti multifunzione Sistemi di controllo industriale 4.2 Architettura di Zynq-7000 L'immagine risulta molto simile allo schema visto quando ho parlato delle SOC in generale rifacendomi al diagramma a blocchi di una SOC Altera Cyclone V. Sulla base delle componenti studiate nel capitolo 3 cerchiamo di definire i parametri di questa SOC. 4.2.1 Application Processor Unit L'application Processor Unit (APU) parte fondamentale del Processing System (HPS) , è formato da due processori ARM-Cortex A9, con un coprocessore NEON per l'accelerazione hardware per elaborazione di segnali multimediali, ed entrambi condividono una cache L2 di 512 KB. Ogni processore in accordo con i processori ARM fornisce prestazioni molto alte con un consumo molto limitato , e possiede due memorie cache di livello 1 di 32 KB. Le due cache hanno ruoli diversi , una è utilizzata per le istruzioni da eseguire , l'altro per i dati. I processori Cortex-A9 implementano l'architettura ARM v7-A e possono eseguire istruzioni ARM standard a 32 bit , istruzioni Thumb a 16 e 32 bit e java bytecode a 8 bit. Cosa significa? Negli ultimi processori ARM sono presenti un set di istruzioni a 16 o 32 bit chiamato Thumb che utilizza quattro bit per ogni istruzione . Questo è più leggero ma implementa meno funzionalità . E' stato introdotto 39 perchè molti sistemi embedded seppur dotati di processori in grado di indirizzare 32 bit possiedono bus verso la memoria limitato a 16 bit. In situazioni di questo genere conviene utililizzare per la maggior parte codice Thumb semplice ed ottimizzato e il set di istruzioni completo dove serve potenza computazionale più alta . Le istruzioni a 32 bit possono essere eseguite grazie a Thumb 2 un estensione del primo set di istruzioni. ARM ha implementato inoltre una tecnologia chiamata Jazelle che permette ai processori di eseguire nativamente il java bytecode. I due processori sono organizzati in una architettura multicore attraverso un Snoop Control Unit (SCU) , dispositivo responsabile di mantenere la coerenza della cache L1 tra i processori e di fornire un interfaccia verso la cache L2 e l'Accelerator Coherency Port (ACP) . La cache L2 è di 512 KB sia per i dati che per le istruzioni, è condivisa dai processori e ha lo scopo di incrementare le prestazioni. E' presente inoltre una on chip memory (OCM) di 256 KB che permette di ridurre ulteriormente la latenza dovuta all'accesso ai dispositivi di memoria esterni . L'ACP facilita la comunicazione dell'APU con la logica programmabile. L'accesso alla memoria cache L2 è come sempre gestita dallo SCU, ed è direttamente collegato ad essa tramite una porta privilegata una memoria DDR . Quando l'APU vuole comunicare con la memoria esterna può accedervi direttamente tramite la sua porta privilegiata senza dover passare per il sistema di interconnessione condiviso con gli altri master. Questo aiuta a ridurre la latenza. L'APU inoltre contiene un timer watchdog a 32 bit e un 64 bit global timer che possono essere utilizzati come general-purpose timer o come timer speciali per far uscire il processore dalla stand-by mode. E' presente oltre al NEON, un coprocessore FPU VFPv3 per le operazioni in virgola mobile che è stato stimato raggiunga il doppio delle prestazioni rispetto alla precedente versione. Zynq-7000 utilizza un sistema di interconnessione ARM AMBA AXI Based e un sistema High-Bandwidth tra la logica programmabile e il processor system. E' dotato inoltre di un numero alto di periferiche di supporto ed interfaccia come quelle descritte nello scorso capitolo. 40 4.2.2 FPGA Come accennato in precedenza sulla famiglia Zynq-7000 sono montate le FPGA proprietarie Xilinx che attualmente probabilmente sono le migliori presenti sul mercato. In particolare nella famiglia Zynq-7000 è presente la serie 7 formata dal terzetto Artix-7, Kintex-7 e Virtex-7. Si differenziano per moltissime caratteristiche che le dividono in tre fasce di mercato diverso. Senza entrare eccessivamente nel dettaglio mostro una semplice tabella che ne elenca le principali differenze tecniche. 41 Si nota senza dubbio la differenza in numero delle celle logiche che dalla versione di fascia bassa a quella di fascia alta cambiano di circa 4 volte . Inoltre com'è logico immaginare aumentano il numero di look-up tables e flip flop e di conseguenza la complessità della logica programmabile che si può prevedere per questi sistemi. I DSP presenti nella FPGA sono dei dispositivi in grado di eseguire in maniera estreamamente efficiente l'analisi di segnali digitali e istruzioni ricorrenti quali somma, moltiplicazione e traslazione , incrementando notevolmente le prestazioni. 42 Conclusioni Durante la trattazione ho descritto le componenti principali che compongono un System on Chip basato su logica riconfigurabile. Voglio rimarcare l'idea che senza l'architettura ARM le SOC non avrebbero avuto lo sviluppo che hanno avuto . Inoltre voglio mettere ulteriormente in luce perchè i SOC sono secondo me il futuro dei sistemi informatici. • Costo Unitario : Il costo del sistema non è un fattore da ignorare , grazie all'integrazione su un singolo chip , si ottiene un significativo decremento delle dimensioni e dei costi dei componenti . Nei System on Chip il costo di progetto è abbastanza elevato , ma se si considera un volume di produzione molto alto questi costi vengono spalmati su un numero elevato di componenti , e i costi hanno un influenza molto minore. Inoltre è vero che i costi di progetto sono più alti , ma l'utilizzo della logica riconfigurabile comporta risparmio in altre area del ciclo di vita del dispositivo (come una eventuale fase di aggiornamento). • Prestazioni : Integrando tutti i componenti su un singolo chip è possibile ignorare le linee di collegamento di componenti esterni che sono molto più lente rispetto ad un interconnessione interna. • Consumo energetico: Il consumo è ottimizzato grazie all'architettura all in one chip, all'architettura ARM ottimizzata per il risparmio energetico, ed a tutte delle procedure atte al risparmio presenti nel sistema . • Alta Scalabilità , dinamicità e flessibilità : I vari produttori possono sfruttare la riprogrammabilità delle FPGA per differenziare in maniera più semplice i loro prodotti, evitare problematiche come l'obsolescenza e creare una serie di prodotti che siano caratterizzati da alta scalabilità , convenienza e semplicità di manutenzione. I SOC stanno diventando sempre più piccoli e sempre più potenti, seconda quella che sembra essere un evoluzione della legge di Moore . Con l'avanzare della tecnologia i costi calano e penso che in prospettiva futura potremmo vedere un SOC in qualsiasi tipo di dispositivo elettronico. Da poco si sono aggregati alla schiera gli orologi (SmartWatch) e i gli occhiali (google glass) . Quale sarà il prossimo? 43 Bibliografia [1] Mariagiovanna Sami - Politecnico di Milano, Principi di architettura dei calcolatori : L'architettura ARM [2] http://www.cyanogenmoditalia.it/2015/02/guida-alle-cpu-con-architettura-armedizione-2015/ [3] Xilinx, What's a FPGA, http://www.xilinx.com/fpga/index.htm [4] Primiano Tucci -Università di Bologna, Introduzione a FPGA, principi di Design e VHDL [5] Rodolfo Zunino - Università degli Studi di Genova , Introduzione ai Dispositivi FPGA [6] Altera , Altera's User Customizable ARM-Based SOC.pdf [7] Altera , Cyclone V Hard Processor System Techinal Reference Manual [8] Wikipedia , DMA , http://it.wikipedia.org/wiki/Direct_Memory_Access [9] ARM technology A-series , http://memonex.com/news/item/69-arm-technology-aseries-processors-cortex-a9#specifications [10] Xilinx , Zynq-7000 - All programmable SOC - Technical Reference Manual [11] Serial Peripheral Interface, http://www.microcontroller.it/Tutorials/Elettronica/ SPI.htm [12] White Paper The ARM Cortex-A9 Processors [13] Altera , Increasing Efficency with Hard memory Controllers in Low Cost 28nm FPGAs [14] Xilinx, Zynq-7000 All Programmable SoC Overview [15] Xilinx , 7-series FPGAs Overview [16] Marcus Harnisch , Migrating from AHB to AXI based SOC Design , https://www.doulos.com/knowhow/arm/Migrating_from_AHB_to_AXI/ 44 [17] UART : una panoramica sul funzionamento del dispositivo http://programmazione.it/index.php?entity=eitem&idItem=46060 45