Hardware acceleration
Microprocessor and FPGA
Il progetto di seguito illustrato è stato svolto con la colaborazione dell’azienda Dave SRL di Pordenone. L’azienda si occupa di progettazione, produzione e commercializzazione di sistemi elettronici embedded. Maggiori informazioni sono disponibili sul loro sito www.dave.eu.
La stesura è frutto di un progetto di tesi di laurea triennale in ingegneria elettronica presso l’Università degli studi di Trieste.
EMBEDDED
I sistemi elettronici embedded sono di fatto dei computer progettati per risolvere problemi specifici, come ad esempio il controllo di un forno industriale o di una macchina CNC, con risorse hardware e software specifiche e realizzate secondo l’impiego e le esigenze dei clienti. Normalmente, tali sistemi costituiscono il centro di calcolo di un sistema più articolato che si compone anche di ulteriore componentistica e talvolta di anche parti meccaniche.
Il cuore di un sistema embedded è costituito da un microprocessore, la cui attuale configurazione unita al loro incremento prestazionale ha permesso agli stessi di eseguire, oltre a programmi ad un singolo task, sistemi operativi multi-task.
ZYNQ
La scheda utilizzata in questo progetto contiene come elemento principale un SoC – System On Chip – Zynq 7000 prodotto da Xilinx. La peculiarità di questo avanzato SoC è quella di integrare sullo stesso pezzo di silicio un microprocessore insieme ad una FPGA, ovvero una parte di logica programmabile.
L’FPGA può trovare applicazione ad esempio nell’esecuzione di algoritmi ripetitivi che, se opportunamente implementati, riescono a essere svolti in modo più efficiente, oltre che in parallelo, rispetto a quanto farebbe il solo microprocessore. In questo SoC l’FPGA e il microprocessore sono progettati per poter scambiare dati tra loro usando dei canali di comunicazione dedicati standard per queste architetture.
TARGET
L’obiettivo del progetto proposto è la realizzazione e la messa a punto di un sistema di calcolo che coinvolgesse simultaneamente sia il microprocessore che l’FPGA.
Si sono voluti osservare due casi di impiego concreto:
Il primo caso prevede un sistema operativo Linux in esecuzione sul microprocessore e l’implementazione di alcune funzioni di calcolo specifiche in FPGA. Il processore ha il compito di fornire all’FPGA una grossa mole di dati da elaborare, ricevendo il risultato ad elaborazione terminata. L’esempio è documentato anche in una pagina dedicata della loro Wiki.
Nel secondo caso vengono eseguiti compiti distinti dal processore e dall’hardware implementato in FPGA. Nell’esempio trattato, l’FPGA viene programmata per eseguire in autonomia un controllo di temperatura, lasciando al processore il solo compito di decidere la temperatura desiderata.
RESULT
Nel primo caso di impiego si è potuto osservare che l’integrazione dell’FPGA nel sistema di calcolo ha portato a un netto miglioramento della prestazione di elaborazione offerta dal SoC, dell’ordine di migliaia di volte superiore a quella ottenuta dall’esecuzione di codice Python ad alto livello. Sfruttando invece il coprocessore matematico NEON, anche tramite la programmazione in Python si ottengono prestazioni di calcolo circa 4 volte inferiori equiparate a quelle dell’FPGA.
Nel secondo caso è stato dimostrando che un sistema embedded che dispone di una FPGA oltre al microprocessore, si possano utilizzare in maniera indipendente entrambi i centri di calcolo.