System on Chip : Architetture di calcolo basate su logica

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