L’elaborazione dei segnali digitali costituisce una tecnologia abilitante critica per gli apparecchi e i servizi finali, essenziali nel mondo odierno, come le reti telecom, le comunicazioni mobili, l’audio digitale, lo streaming video, il controllo dei motori industriali e la visione artificiale, i sistemi di guida assistita, i radar ad alte prestazioni. Per soddisfare l’esigenza di sistemi con funzionalità sempre più sofisticate, con latenza ridotta e con maggiore capacità di canale, i processori dei segnali digitali dedicati si sono evoluti in dispositivi multicore, che offrono prestazioni che raggiungono le decine di Gflop e possono essere usati come un Dsp singolo o in una scheda multi-Dsp di grandi dimensioni. Inoltre, la necessità di ulteriori progressi è continua, e i progettisti di apparecchi di oggi si sforzano di ottenere una maggiore integrazione a livello di sistema, un numero più ridotto di componenti, maggiore affidabilità e costi più contenuti. Per rispondere a queste esigenze, le estensioni Dsp si trovano ora integrate in una varietà di piattaforme, che vanno dai piccoli microcontrollori embedded come i dispositivi Arm Cortex-M4 agli Fpga e ai System-on-Chip programmabili. Questi dispositivi programmabili ad alte prestazioni sono diventati la prima scelta del progettista quando deve far fronte a grandi esigenze di elaborazione che possono essere soddisfatte solo attraverso un alto grado di parallelismo, o quando il sistema richiede interfacce ad alte prestazioni o acceleratori su misura.
Piattaforme Dsp emergenti
I SoC configurabili integrano grandi numeri di blocchi Dsp con funzioni di sistema che includono processori, memorie, periferiche e logica programmabile. I SoC interamente programmabili Zynq-7000 di Xilinx presentano fino a 2020 slice Dsp, ciascuna contenente un moltiplicatore 25x8, un accumulatore a 48 bit e delle funzioni ad esso associate. Vi sono inoltre, integrate on-chip, un’unità processore applicativo Arm Cortex-A9 MPCore dual-core, periferiche standard ad alta velocità quali Usb 2.0 e Gigabit Ethernet ed interfacce di memoria dinamiche quali Lpddr2 e Ddr3. D’altra parte, MPSoC Zynq multiprocessore possiede risorse aggiuntive che includono fino a 3520 slice Dsp realizzate con un moltiplicatore 27x18, oltre ad ulteriori periferiche di tipo PCIe Gen2, Usb3.0, Sata 3.1 e DisplayPort e il supporto alla memoria dinamica Ddr4. L’architettura MPSoC integra anche un’unità processore dual-core in tempo reale Arm Cortex-R5 MPCore, un’unità quad-core A53, un’unità processore grafico e un codec video H.264/H.265. I processori Arm MPSoC ad alte prestazioni Zynq-7000 traggono vantaggio anche dalla tecnologia integrata di accelerazione multimediale Neon, oltre che dalle slice Dsp presenti su Fpga, dalle periferiche integrate e da un massimo di 1.143.000 celle logiche. Con queste risorse i dispositivi forniscono l’opportunità di effettuare l’elaborazione altamente parallela e un’integrazione completa a livello di sistema al di là delle potenzialità dei Dsp multicore convenzionali. È giunto il momento per i gruppi di progettazione che stanno attualmente spingendo i limiti di grandi schede multi-Dsp di considerare l’opportunità di passare dai Dsp convenzionali ad una piattaforma SoC interamente programmabile. Grazie a questa tecnologia, gli ingegneri Xilinx hanno aiutato un cliente a riprogettare una scheda radar contenente 32 chip Dsp convenzionali, creando una nuova piattaforma che contiene appena due dispositivi programmabili sul campo.
Sintesi dell’hardware a livello C/C++
Storicamente, la progettazione basata su Fpga e SoC programmabili ha richiesto ingegneri con competenze nell’ambito della progettazione hardware per gestire l’attività di progettazione a livello di registro di trasferimento. Ciò ha scoraggiato i gruppi di progettazione dotati in prevalenza di competenze software dal trarre vantaggio dalle ulteriori funzionalità e dalle possibilità di integrazione a disposizione. La Fig. 1 mostra una rappresentazione grafica del compromesso necessario fra la semplicità dello sviluppo software, l’efficienza e la flessibilità. Il diagramma confronta i processori convenzionali programmabili via software con i dispositivi programmabili a un livello di registro di trasferimento o attraverso un flusso di progettazione definito via software. La progettazione di una soluzione basata su Dsp tradizionali è percepita come un approccio sicuro. Tuttavia, man mano che crescono le richieste di applicazioni in grado di offrire le massime prestazioni e che risulta più difficile progettare con Dsp ad alte prestazioni per via delle loro architetture multicore, emerge una chiara esigenza di un ambiente di progettazione C/C++ che fornisca un’esperienza di programmazione di tipo Assp per aiutare gli ingegneri di sistema e gli sviluppatori di software embedded a realizzare sistemi multi-processore usando i SoC interamente programmabili.
Programmazione di tipo Assp
L’SDSoC di Xilinx è un esempio di ambiente di sviluppo di questo tipo, che consente agli ingegneri software di iniziare a sviluppare applicazioni C/C++ per dispositivi programmabili, senza doversi cimentare nell’uso dei tool Fpga tradizionali o di linguaggi di progettazione hardware. L’ambiente si occupa dell’organizzazione degli aspetti legati all’elaborazione on-chip e alle risorse Dsp, oltre che dell’hardware programmabile e delle memorie, per massimizzare le prestazioni a livello di sistema. L’ambiente incorpora un profilatore a livello di sistema, che fornisce una prima serie di informazioni sulle prestazioni del sistema complessivo e sul consumo di potenza. La Fig. 2 illustra come il profilatore trova posto all’interno del flusso SDSoC. Il profilatore stima rapidamente le prestazioni del sistema, per aiutare a identificare le funzioni C/C++ che possono essere accelerate usando la logica programmabile. L’ambiente SDSoC quindi opera sul codice per registrare i cicli di software, per stimare i tempi di trasferimento dati e per monitorare l’utilizzo di risorse hardware come cache, memoria e bus. Questa funzionalità è basata sulle capacità di profilazione del collaudato kit di sviluppo di Xilinx, che consente di effettuare misure delle prestazioni hardware-software di un progetto completo che gira su una piattaforma Zynq. I tool di stima rapida aiutano gli utenti a valutare rapidamente l’impatto sulle prestazioni dovuto allo spostamento di una o più funzioni dal software all’hardware. La possibilità per gli sviluppatori di software di accelerare indipendentemente le funzioni C/C++ elimina così la macchinosa interazione fra i gruppi di progettazione hardware e software e contribuisce a minimizzare il numero di iterazioni necessarie per trarre pieno vantaggio dalla logica programmabile per l’accelerazione software. L’impatto di qualsiasi modifica può essere valutato nel giro di pochi minuti, anziché diverse ore o più, tipicamente necessarie per generare dell’hardware vero e proprio. È anche presente un compilatore C/C++ completo per l’ottimizzazione a livello di sistema, che è il primo tool di questo tipo sul mercato e in grado di supportare i processori Arm del SoC, così come la logica programmabile e la connettività. Il compilatore genera il codice Hdl, ottimizzato per la latenza, la banda e l’utilizzo dell’hardware. Insieme, il profilatore a livello di sistema e il compilatore per l’ottimizzazione a livello di sistema possono incrementare le prestazioni complessive anche di un fattore 100, rispetto alla soluzione software-centrica priva di accelerazione hardware. Gli architetti di sistema e gli sviluppatori di piattaforme con competenze nella progettazione Fpga possono sfruttare SDSoC per creare piattaforme applicative ottimizzate per semplificare il lavoro degli sviluppatori di software embedded. Con caratteristiche quali la generazione di funzioni automatiche per la connettività di sistema, questo tool aiuta gli architetti ad operare rapidamente per determinare l’architettura di interconnessione ottimale fra il sistema di elaborazione Zynq, la memoria e gli acceleratori basati su logica programmabile. Inoltre, gli architetti possono usare SDSoC con la Vivado Design Suite per creare piattaforme specifiche per un’applicazione e per configurare blocchi IP proprietari, come ad esempio le descrizioni Rtl, sotto forma di librerie invocabili in ambiente C, accelerando così la produttività del progetto attraverso il riuso.