System on Chip : Architetture di calcolo basate su logica riconfigurabile

Pagina creata da Gabriele Fazio
 
CONTINUA A LEGGERE
System on Chip : Architetture di calcolo basate su logica riconfigurabile
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
System on Chip : Architetture di calcolo basate su logica riconfigurabile
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.
System on Chip : Architetture di calcolo basate su logica riconfigurabile
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
System on Chip : Architetture di calcolo basate su logica riconfigurabile
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
System on Chip : Architetture di calcolo basate su logica riconfigurabile
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
System on Chip : Architetture di calcolo basate su logica riconfigurabile
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
System on Chip : Architetture di calcolo basate su logica riconfigurabile
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
System on Chip : Architetture di calcolo basate su logica riconfigurabile
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
System on Chip : Architetture di calcolo basate su logica riconfigurabile
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
System on Chip : Architetture di calcolo basate su logica riconfigurabile
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