Oltre la programmabilità

Pochi dispositivi hanno rivoluzionato il mondo dell'elettronica come le logiche programmabile. Inventate nel 1985 le Fpga si apprestano a celebrare, entro un paio di anni, i primi 3 decenni della loro storia ma pur rappresentando una tecnologia ormai matura continuano a proporre innovazione. Una panoramica completa di tutte le attività del settore è evidentemente improponibile. Di seguito abbiamo piuttosto provato a raccogliere qualcuno degli spunti più interessanti segnalatisi nell'ultimo periodo, cercando soprattutto negli ambienti di ricerca o il mondo open-source, evitando di riproporre quindi le novità ampiamente segnalate dai relativi vendor sui propri siti web.

Accelerazione hardware
La programmabilità delle logiche programmabile ha sempre reso questi dispositivi delle piattaforme ideali per l'accelerazione hardware di funzioni complesse. Nel Dicembre 2008 il Khronos Compute Working Group ha definito la prima versione delle specifiche dell'OpenCL per la programmazione parallela su piattaforme eterogenee. Il linguaggio si basa sulla definizione di kernel utente per l'esecuzione, sull'architettura target di accelerazione hardware, dei task intensivi dal punto di vista computazionale e di Api, per l'accesso ad essi ed il loro controllo. Era quindi naturale attendersi che i due mondi, Fpga e OpenCL, si incontrassero. Diversi sono i lavori presentati in ambito accademico. Tra questi si segnala ad esempio SOpenCL, che consiste di un compilatore che esegue la trasformazione da codice a codice delle funzioni di kernel OpenCL (realizzando queste in una serie di loop innestati) e di un template per il back-end e la configurazione dei diversi acceleratori sulla base delle funzionalità dell'applicazione utente. Interessante è anche un lavoro di tesi presentato presso il Politecnico della Virginia, che adotta un approccio simile ma utilizza direttamente il tool di sintesi di alto livello AutoELS (ora Vivado HSL) di Xilinx. In ambito commerciale, invece, nel 2010 Altera aveva annunciato la disponibilità di un Sdk per il supporto di applicativi OpenCL sulle proprie Fpga; nel 2012 sono state mostrate le prime demo. La soluzione messa in piedi da Altera prevede l'implementazione in Fpga dell'array di kernel definiti dall'utente. Il codice dei kernel è compilato per l'implementazione hardware e l'architettura risultante è ottimizzata per supportare l'esecuzione in pipeline di diversi thread. I kernel sono interconnessi tra loro da una matrice di switching locale e a risorse esterne di memoria; la connettività con l'host dove è eseguito l'applicativo è di tipo PCIe. Secondo le stime fornite da Altera, l'implementazione di tipiche applicazioni OpenCL in Fpga richiede tipicamente una settimana di lavoro a fronte dei 3-6 mesi necessari con un approccio HSL tradizionale C-to-HDL.

Soluzioni Hsl open-source
L'ultimo periodo ha visto un crescente interesse verso i tool di sintesi di alto livello. Agli inizi, aldilà delle difficoltà tecnologie, la diffusione su larga scala è stata in parte frenata dai costi elevati delle prime soluzioni, che ne hanno consentito l'adozione soltanto alle grandi compagnie. Più di recente, l'integrazione dei tool Hsl a più basso costo all'interno della suite di progetto offerte diversi vendor ha certamente migliorato lo situazione. Una spinta ulteriore potrebbe venire dal mondo open-source. Una iniziativa interessante da segnalare in questo ambito è il tool LegUp sviluppato dall'Università di Toronto a partire dal 2010. La soluzione proposta si basa su di un approccio ibrido con partizionamento hw/sw dell'applicativo da eseguire. Questo viene compilato ed eseguito su una implementazione per la Fpga target di un processore Tiger Mips (sviluppato dalla Università di Cambridge); al momento sono supportati solo dispositivi Altera anche se, secondo i ricercatori, il supporto per fabric diverse, come nel caso dei dispositivi Xilinx, richiederebbe modifiche marginali. Il processore è modificato per supportare il profiling hardware delle funzioni. Le funzioni intensive sono così identificate e accelerate in hardware impiegando un apposito compilatore da C a Verilog che produce codice Hdl sintetizzabile. Ovviamente è prevista la possibilità di accelerare l'intero applicativo, eliminando l'impiego della Cpu, in una implementazione completamente hw di questo. Acceleratori hardware e Cpu comunicano mediante bus Avalon; il sistema dispone di cache on-chip accessibile ad entrambi mediante opportuno controller di memoria. Prove sperimentali riportate dai ricercatori mostrano una riduzione della latenza di esecuzione di un applicativo tipico nell'approccio ibrido di fino anche al 75% a fronte di una riduzione della massima frequenza di clock di sistema di solo il 12% (per una riduzione effettiva della latenza, quindi, di fino al 71%). Dal punto di vista delle funzionalità di sintesi di alto livello, in termini ad esempio di area o di tempo di esecuzione (dato dal numero di cicli di clock necessari moltiplicato per la massima di frequenza di funzionamento del circuito), le prestazioni sono invece confrontabili con quelle di eXCite.

Processori multicore in Fpga
L'elevata capacità logica dei moderni dispositivi logici programmabili rende tale piattaforma ideale per la realizzazione di architetture multi-core, supportando l'integrazione, in un singolo chip, di core di processing, blocchi di memorie, moduli di accelerazione harwdare e protocolli di comunicazione NoC (Network-on-chip). Tuttavia l'ottimizzazione (in termini, ad esempio, di area occupata, massima frequenza di funzionamento, dissipazione di potenza) della architettura di base per una specifica applicazione è tipicamente una procedura laboriosa basata sulla simulazione software dei diversi elementi funzionali o emulazione hardware. Heracles è un ambiente di sviluppo completo per la progettazione di architetture multi-core in Fpga. Include core sintetizzabili in hardware, una catena di compilazione con supporto per applicativi C standard e l'interfaccia grafica. Supportate 4 diverse processing unit (denominate come Injector Core, Single Hardware-Threaded Mips Core, Two-way Hardware-Threaded Mips Core e Two-way Hardware-Threaded Mips Core with Migration) con frequenze di funzionamento comprese (circa) tra 500 e 100 MHz. Lo spazio di memoria può essere organizzato con architetture centralizzata (Centralized Shared Memory) o distribuita (Distributed Shared Memory) con supporto per memoria di cache di livello 1 e 2. L'infrastruttura NoC implementa controllo di flusso buffered e bufferless con algoritmo di routing oblivious e dinamico. Sono previsti modelli di programmazione sequenziale e parallela. L'intero ambiente di sviluppo è open-source.

Compressione del bitstream
La crescente complessità dei moderni dispositivi logici programmabili è stata accompagnata da una analoga significativa crescita della dimensione del bitstream di configurazione. Ciò ha evidentemente impatto sulla quantità di memoria esterna necessaria alla sua memorizzazione e ai tempi di configurazione del dispositivo, soprattutto nelle applicazione multi-configurazione. Tutti i vendor supportano la compressione del bitstream per ridurre in parte i problemi elencati, ma la necessità di implementare il decoder in hardware (direttamente nella Fpga mediante circuiti dedicati) ha spinto ad adottare soluzioni semplici (come ad esempio l'algoritmo LZ77) che non consentono elevata efficienza di compressione. Diversi sono gli studi proposti in questo ambito nell'ultimo periodo. Tra questi si segnala ad esempio il lavoro di alcuni ricercatori del Dhanalakshmi Srinivasan Engineering College che hanno messo a punto un algoritmo decoder-aware che combina tecniche basate codici di Golomb (impiegati ad esempio anche nell'encoder entropico adottato dal H264) con parametri a lunghezza fissa e variabile con metodi bit-masked con selezione mediante dizionario. Per ridurre la complessità del decoder, l'algoritmo è strutturato in modo da consentire la memorizzazione del bitstream compresso a lunghezza variabile sotto forma di serie di stream a lunghezza fissa e più piccola.

Astrazione dall'architettura target
Una delle difficoltà principali che ci si trova ad affrontare nel progetto di architetture complesse in logiche programmabili è l'assenza di un adeguato livello di astrazione che favorisca l'indipendenza dalla architettura target, così da semplificare l'eventuale migrazione tra vendor e tecnologie differenti. Lo sviluppo dei linguaggi HDL e l'affermazione delle metodologie Hsl ha in parte ridotto il problema ma resta pur sempre la questione dell'astrazione dalle peculiarità hardware dei dispositivi. Uno degli aspetti in cui si sente il problema è ad esempio quello delle architetture di memorie, laddove le Fpga mancano in genere di soluzioni altamente scalabile e comuni. Coram è un progetto di ricerca condotto presso il Calcm (Computer Architecture Lab at Carnegie Mellon) e volto appunto alla implementazione di una architettura astratta di accesso, dalla fabric della Fpga, alla memoria off-chip ed alle risorse di I/O. L'architettura definisce, per tale comunicazione, moduli dedicati, parametrizzabili e basati su memorie Sram on-die che dispongono di funzionalità (thread), programmabili in software, per la gestione dinamica del flusso di dati. Obiettivo è la netta separazione degli aspetti di data processing, implementati nella fabric dalla logica utente, e data marshalling, demandati invece ai thread eseguiti dai moduli Coram. Su una falsariga simile al progetto Coram, si pone pure il programma di ricerca Zuma, condotto dai ricercatori della Università di Vancouver. In questo caso lo scopo è la creazione di una sorta di Fpga sulla Fpga o, in altro modo, di una Fpga embedded, ovvero una matrice di blocchi logici elementari e programmabili, implementati sulle Lut di base della Fpga target, dotata di una specifica architettura di interconnessione, anch'essa programmabile. Come i dispositivi Fpga nativi, anche tale architettura è programmabile mediante un bitstream di configurazione che definisce la funzione logica implementata da ogni blocco elementare e le interconnessioni di questi tra loro; è prevista per questo apposita logica di configurazione. Tale bitstream è ovviamente indipendente dalla tecnologia della Fpga target perché si riferisce all'overlay fornito dalla architettura Zuma. Lo scopo del progetto Zuma è supportare lo sviluppo di un flusso di sviluppo open-source e indipendente dalla Fpga target, per scopi di ricerca e valutazione. Attualmente Zuma è supportata, per le fasi di sintesi e place&route, dall'ambiente, anch'esso open source, VTR (Verilog-to-Routing) di tipo tradizionale ma nulla vieta che possano essere sviluppati flussi di progetto diversi basati ad esempio su JHDL, Lava, Torc, OpenRC o RapidSmith.

Sotto i 28 nanometri
I moderni dispositivi Fpga, come la serie 7 di Xilinx o la famiglia Stratix V di Altera, sono realizzati con processo bulk Cmos planare a 28 nm. Nel novembre del 2010 Achronix aveva annunciato la collaborazione con Intel per la produzione delle nuova Speedster 22i nella tecnologia 3D Tri-gate a 22 nm del colosso americano; tuttavia, ad oggi, non sono ancora stati rilasciati i primi campioni e i più recenti cambiamenti di strategia della start-up californiana lasciano qualche dubbio sulle reali prospettive future. Il 2013 dovrebbe vedere i primi sviluppi per la migrazione verso le geometrie a 20 nm, sebbene l'elevata potenza dissipata rappresenti in questo caso un nodo ancora da sciogliere. Se da un lato, quindi, la tecnologia Cmos sembra aver saturato le sue potenzialità per il mercato delle Fpga, dall'altro interessanti prospettive arrivano dai processi Fdsoi (Fully-depleted silicon on insulator). STMicroelectronics ha già disponibile la tecnologia a 28 nm e si inizia a parlare della migrazione verso il nodo dei 14 nm. A margine dell'International Electron Devices Meeting tenutosi recentemente a San Francisco è stato presentato uno studio comparativo sui miglioramenti previsti per l'adozione di questa tecnologia per le logiche programmabili. Si stima di ottenere una riduzione un incremento delle prestazioni del 35% a parità di potenza dissipata rispetto ai dispositivi Cmos a 28 nm ed una riduzione della potenza attiva del 32% a parità di ritardo di linea. Interessanti novità potrebbero venire anche dal mondo delle nanotecnologie. Uno studio recente, condotto a partire dal 2010, ha proposto, ad esempio, una architettura di base per le logiche programmabili basata su transistor Cnfet (Carbon-nanotube field effect transistor) invece che delle tradizionali strutture in ossido metallo-silicio. Le stime parlano di un incremento delle prestazioni del 30% e riduzione dell'area del die, della potenza dissipata e delle correnti di leakage nell'ordine rispettivamente del 20%, del 6% e di fino al 98%.

LASCIA UN COMMENTO

Inserisci il tuo commento
Inserisci il tuo nome