Comunicazioni seriali ad alta velocità

FPGA –

Grazie anche alla disponibilità di Fpga a basso costo economicamente ottimizzati dotati di transceiver embedded, il protocollo PCIe può essere largamente utilizzato dai progettisti anche in applicazioni sensibili ai costi.

Negli ultimi sette anni, le comunicazioni seriali ad alta velocità hanno rappresentato un fenomeno di moda nell'arena delle interconnessioni. Oggi, questa tecnologia sta diventando sempre più pervasiva nelle applicazioni chip-to-chip, chip-modulo e backplane. Attualmente le interconnessioni seriali ad alta velocità stanno guadagnando consensi anche nelle applicazioni più sensibili ai costi, costringendo i progettisti ad allinearsi rapidamente a questa tecnologia in fulminea evoluzione.

Il protocollo PCI Express
Il PCI Express (PCIe) è un protocollo ad alta velocità che ha ottenuto molto consenso soprattutto nello spazio multi-gigabit. PCIe è stato sviluppato nel 2002 da Intel per mitigare le problematiche imposte dall'incremento delle prestazioni dei processori, incremento mai seguito da un analogo miglioramento delle prestazioni di I/O. Dal 2002, PCIe ha beneficiato di una rapida diffusione, uscendo man mano dai confini delle applicazioni PC per spingersi nel mondo degli apparati per comunicazioni, dei sistemi radar militari e delle unità medicali di fascia alta. Nelle applicazioni più sensibili ai costi però, come ad esempio i controller per stampanti, i dispositivi di video sicurezza o gli apparati medicali portatili di imaging, PCIe rappresenta ancora uno standard emergente. I costi legati all'hardware cominciano infatti solo ora a essere abbastanza contenuti da rendere le comunicazioni seriali ad alta velocità una tecnologia conveniente. Le funzionalità un tempo offerte in un dispositivo Phy (Physical layer) esterno da più di 10 euro con supporto per una sola corsia (x1) PCIe Gen 1 (data rate 2.5 Gbps) sono oggi integrabili sotto forma di IP hard in un Fpga a basso costo. Questa soluzione è in grado di supportare addirittura fino a 8 lane PCIe Gen 1, assicurando - praticamente gratis - più banda e più prestazioni. La domanda che sorge è: come sfruttare i vantaggi offerti da queste funzionalità gratuite in un nuovo progetto transceiver ad alta velocità?

I vantaggi dell'Fpga
Benché alcuni Asic e Assp offrano delle soluzioni PCIe integrate, è stato scelto un Fpga in virtù dei benefici legati alla rapidità d'innovazione, alla convenienza, alle capacità di integrazione e differenziazione, alla riutilizzabilità e alle migliori possibilità di gestione dei rischi. La natura programmabile degli Fpga - unitamente alla presenza di una circuiteria dedicata alle interconnessioni seriali ad alta velocità e al PCIe in particolare - consentono agli sviluppatori di reiterare rapidamente i progetti nell'hardware senza dovere alterare i layout della scheda e senza sostenere gli oneri Nre (Non-recurring engineering) associati agli Asic. Gli Assp, d'altro canto, offrono solamente funzionalità fisse e di conseguenza limitano le possibilità di differenziare i progetti integrando nel dispositivo dotazioni all'avanguardia o funzioni di sistema. Oltre a questo, una volta completato, il progetto può essere orientato a vari Fpga, rendendo il tutto riutilizzabile per le future applicazioni e riducendo i rischi associati alla dismissione dei singoli dispositivi. Questo esempio specifico è implementato su un dispositivo Arria II GX appartenente alla più recente famiglia di Fpga transceiver-based a basso consumo ed economicamente ottimizzati di Altera. Per dimostrare la rapidità e la facilità con cui è possibile realizzare il progetto, l'esempio contempla l'uso del software Quartus II, comprendente i tool Sopc Builder e PCIe Compiler.

Implementare su Fpga
un sistema terminale PCIe Gen 1

La famiglia Arria II GX rappresenta una linea di seconda generazione di Fpga a basso costo dotati di transceiver. Questi prodotti offrono densità di fascia bassa e media e prevedono fino a sedici transceiver embedded full-duplex che girano a un data rate massimo di 3.75 Gbps. I dispositivi sono focalizzati sulla riduzione degli assorbimenti: essi infatti integrano dei transceiver a basso consumo e sono realizzati sulla base di un processo da 40nm con tensione di core pari a 0.9 V. Con i transceiver funzionanti a 3.125 Gbps il consumo è inferiore ai 100 mW. I blocchi di hard IP PCIe integrati nei dispositivi semplificano lo sviluppo delle applicazioni che utilizzano link PCIe. La famiglia Arria II GX è stata disegnata per i clienti che desiderano incrementare la banda e le funzionalità di sistema riducendo parallelamente i costi: i prodotti della famiglia sono ideali in applicazioni quali apparati di sorveglianza video, Gpon, IP Dslam e terminali radio remoti. Il primo elemento del sistema terminale PCIe dell'esempio è il blocco transceiver che s'incarica della parte di livello fisico (Phy) nell'architettura di interconnessione seriale ad alta velocità. Esso è costituito da quattro canali transceiver full-duplex, da una Ccu (Central control unit) e da due unità di gestione delle temporizzazioni (Cmu). Il dispositivo con due blocchi transceiver offre in tutto otto canali transceiver full-duplex. I canali transceiver all'interno e tra blocchi possono essere connessi per operare in modalità “bonded”, arrivando per esempio a una configurazione PCIe x8. Il Ccu contiene delle macchine a stati dedicate a funzioni quali l'inizializzazione, lo stato e il de-skew: ogni blocco Cmu contiene invece un Pll (Phase-lock loop) che genera il clock per il blocco transceiver.
Dietro al blocco transceiver troviamo un blocco embedded di hard IP PCIe sempre posizionato nella parte sinistra inferiore del dispositivo. Il blocco di hard IP PCIe è connesso al blocco transceiver attraverso un'interfaccia fisica interna dedicata a PCIe (Pipe). Il blocco di hard IP PCIe supporta PCIe Gen1 in configurazioni x1, x2, x4 e x8. Esso supporta anche applicazioni complesse sia di tipo “origine” sia di tipo terminale. Un dispositivo complesso d'origine connette i sistemi di memoria e di elaborazione alla struttura di commutazione PCIe e genera le richieste di transazione a nome del processore; i dispositivi terminali invece completano o richiedono delle transazioni PCIe (per esempio un controller Gigabit Ethernet con interfaccia di sistema PCI Express).
L'IP hard PCIe è costituita da uno stack di protocollo PCIe, da un blocco adattatore, da un blocco Lmi (Local management interface), da un'interfaccia di test e debug, dal un circuito di selezione clock/reset e da vari buffer dedicati. Lo stack di protocollo PCIe nel blocco hard IP contiene le funzionalità di livello PhyMac per transazioni e data link. Le funzioni dello stack di protocollo PCIe assemblano e disassemblano i rispettivi pacchetti mentre nella logica Fpga vengono eseguite le funzionalità del livello applicativo. Il blocco adattatore offre varie opzioni d'interfacciamento per la connessione alla logica applicativa mentre la Lmi consente all'applicazione di accedere allo spazio di configurazione del livello di transazione. Infine, il blocco hard IP PCIe mette a disposizione due bus - denominati test-in e test-out - che possono essere utilizzati per osservare e controllare le funzionalità core. Questa dotazione è molto utile, specialmente durante il debugging. Esempi d'uso dei bus test-in/test-out comprendono l'abilitazione/disabilitazione dello scrambling, la forzatura dello stato di rilevamento in ricezione e il monitoring dello stato del power management e del comportamento dei livelli relativi all'hard IP. Ulteriori dotazioni e caratteristiche dell'hard IP PCIe dell'Arria II GX comprendono:

  • Dimensioni massime payload configurabili (128, 256 o 512 byte)
  • 1 Virtual Channel
  • Buffer ricezione da 16-Kbyte
  • Buffer ritrasmissione da 2-Kbyte
  • Ampiezza del cammino dati applicazione di 64-bit
  • Supporto interrupt (legacy, MSI & MSI-X)
  • Supporto Aer (Advanced error reporting)
  • Supporto power management


Il Compiler Wizard PCIe

L'elemento successivo è il Compiler Wizard PCIe, che si trova nel software Quartus II. Questo tool è utile per configurare il blocco hard IP PCIe. Oltre a quelle dei transceiver embedded, il Compiler Wizard PCIe configura tutte le predisposizioni dell'hard IP PCIe e lega il tutto nell'ambito di un unico blocco di progetto. Il Compiler Wizard PCIe genera un file “wrapper” che replica il blocco hard IP PCIe e i transceiver, un file di vincoli Tcl per trasferire i relativi limiti al progetto Quartus II, un file Sdc (Synopsis design constraints) per trasferire i vincoli di temporizzazione al tool di progetto e al tool di analisi delle temporizzazioni statiche TimeQuest: a questo si aggiunge un esempio di progetto relativo al livello applicativo e un testbench conforme alle predisposizioni scelte durante l'attivazione del compiler.  I file di testbench creati dal Compiler Wizard PCIe possono essere utilizzati per stimolare il progetto PCIe. I testbench eseguono task quali l'inizializzazione del link e generano messaggi di verifica nel simulatore che permettono di osservare come lavora il core. Oltre a questo viene creato anche un modello funzionale del bus per emulare le funzionalità della terminazione opposta del link PCIe. Per personalizzare la simulazione ed eseguire altre task è possibile modificare i file Bfm (Bus functional model). Le task che si trovano nel Bfm sono ben documentate nella PCIe Compiler User Guide.

Il tool Sopc Builder
La parte successiva utilizzata nel progetto è il tool di generazione sistema Sopc Builder, presente nel software Quartus II. Sopc Builder è un tool utilizzato per costruire graficamente i sistemi embedded in tempi molto rapidi e in modo molto efficiente, componente per componente. Basato su definizioni di sistema mostrate graficamente, Sopc Builder genera una struttura di interconnessione personalizzata. In pratica si tratta di una struttura “bus” che lega tra loro tutti i componenti. La struttura di interconnessione di sistema - denominata Avalon - automatizza la connessione gestendo aspetti quali i decoder indirizzi, i mux dei cammini dati e la logica di arbitraggio. Nell'interfaccia utente di Sopc Builder è disponibile una lista di componenti organizzati per categoria. La lista include il soft core di elaborazione embedded Nios II. Con un doppio click, il componente può essere aggiunto al sistema embedded. Il sistema prevede delle finestre in cui sono visualizzati tutti i componenti inseriti e le relative connessioni master-to-slave o source-to-sink. Il tutto può essere modificato in funzione delle specifiche di sistema. Sopra la finestra sono definiti i clock utilizzati nel sistema, sia quelli provenienti da fonti esterne sia quelli provenienti dal Pll eventualmente aggiunto al sistema. Nei dati è specificato quale clock pilota un determinato componente del sistema. Le colonne rimanenti della finestra consentono la definizione dell'indirizzo nello spazio di memoria di ciascuno slave Avalon che compone il sistema e le priorità di interrupt tra i componenti che inviano e ricevono gli interrupt stessi. Utilizzando Sopc Builder è possibile ridurre di varie settimane il ciclo di sviluppo: il tool consente infatti di generare automaticamente un file HDL che rappresenta il sistema e che connette tutti i componenti necessari. Per creare un sistema terminale PCIe è possibile utilizzare il tool Sopc Builder del software Quartus II e dare vita a un sistema embedded semplicemente cliccando sui componenti della lista, come descritto in precedenza. Per aggiungere funzionalità PCIe al sistema, il PCIe Compiler viene chiamato dal Sopc Builder per configurare e aggiungere l'hard IP necessaria.

Pubblica i tuoi commenti