System on Chip : Architetture di calcolo basate su logica riconfigurabile
←
→
Trascrizione del contenuto della pagina
Se il tuo browser non visualizza correttamente la pagina, ti preghiamo di leggere il contenuto della pagina quaggiù
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 medio- bassa,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 semi- automatico 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 Cortex- A9. 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
Puoi anche leggere