La tecnologia Fpga rappresenta oggi una delle più interessanti piattaforme di prototipazione rapida, grazie alla sua elevata densità di integrazione e soprattutto alla disponibilità di ambienti integrati come Matlab/Simulink di MathWorks che consentono di modellare e prototipare in tempi brevissimi una applicazione anche molto complessa. La Fpga è una piattaforma di prototipazione ideale in quanto consente allo sviluppatore di definire e implementare l’architettura di sistema di cui esso necessita in completa libertà. L’elevata densità di logica che questi dispositivi mettono a disposizione dello sviluppatore è tale da consentire lo sviluppo di sistemi embedded complessi con un approccio di natura System-on-Chip. La possibilità di trasformare la Fpga in un Asic rende ancora più interessante questo approccio in quanto, se la Fpga rappresenta la piattaforma di prototipazione, l’Asic è la piattaforma di produzione. La disponibiltà di un ambiente di modellazione come Matlab/Simulink che si interfaccia direttamente con la piattaforma Fpga, rende la combinazione modellatore/Fpga/Asic uno strumento di progettazione rapida particolarmente effettivo.
L’ambiente di modellazione
L’ambiente di modellazione, oltre a consentire la creazione e verifica di un modello del progetto a livello di sistema, garantisce anche che il medesimo possa essere orientato all'implementazione hardware. Per esempio, Simulink Hdl Coder consente di generare automaticamente il codice Hdl per programmare la Fpga, rendendo non solo possibile un trasferimento coerente dell’applicazione modellata e simulata su tale hardware programmabile, ma anche che l’implementazione su Fpga del modello sia eseguita con la massima efficienza possibile. Inoltre, per la verifica funzionale del codice Hdl è disponibile Eda Simulator Link che collega il testbench Simulink all'implementazione Fpga eseguita in un simulatore Hdl. Con Simulink Hdl Coder è infatti possibile generare automaticamente codice Vhdl e Verilog personalizzabile e indipendente dal target partendo dai modelli. Questo può essere sintetizzato per l'implementazione Fpga e consentire un perfetto collegamento tra modello e prototipo che permette di eseguire l’intero ciclo di sviluppo in maniera completamente integrata. Le modifiche, le ottimizzazioni e le verifiche funzionali vengono effettuate sul modello, mentre la funzionalità real-time e in campo sul prototipo. È quindi possibile operare sul modello, trasferendo in maniera coerente le modifiche sul prototipo. L’ambiente di modellazione è infatti integrato con quello di emulazione. È infatti possibile aggiornare il modello per modificare velocemente il codice e quindi rigenerare il codice e trasferirlo a strumenti a valle per la sintesi, il posizionamento, il reindirizzamento e il download del bitstream in una Fpga. È anche possibile riutilizzare un modello Simulink come testbench per verificare un'implementazione Fpga attraverso la cosimulazione. Eda Simulator Link consente di simulare l'implementazione in simulatori Hdl, ad esempio ModelSim. Simulink può essere utilizzato per creare i test pattern, simulare il modello di riferimento e confrontare i risultati attesi con quelli effettivamente prodotti dalla simulazione. Eda Simulator Link consente di eseguire test di regressione in batch e sessioni di debug interattive sia in Simulink che in un simulatore Hdl. Questo approccio elimina la necessità di trasferire manualmente i vettori di test e consente di identificare gli errori progettuali già nelle prime fasi dello sviluppo. La possibilità di anticipare gli errori prima che il prototipo sia realizzato, è uno dei vantaggi più importanti della modellazione integrata con la prototipazione. La prototipazione può essere infatti molto onerosa e quindi la soluzione dei problemi in fase di modellazione, oltre ad essere particolarmente veloce è anche economica, è anche efficiente in quanto minimizza i cicli di rifacimento del prototipo.
Dal modello alla produzione
La modellazione consiste nella descrizione del sistema in termini grafico/simbolici di componenti funzionali che interagiscono tra loro secondo il modello funzionale dell’applicazione target. I risultati delle ricerche precedentemente condotte e i requisiti applicativi vengono combinati nelle specifiche di progetto per lo sviluppo dei modelli di interazione, dei componenti fisici e degli algoritmi del sistema. Definito il progetto del sistema si passa alla implementazione, scegliendo il modello implementativo più opportuno rispetto alle prestazioni desiderate per il sistema target. Nel caso di scelta della piattaforma Fpga per la prototipazione rapida del sistema finale, vengono scelti i linguaggi e le architetture più opportune, per esempio scegliendo tra Vhdl e Verilog. L’integrazione segue quindi la fase di implementazione quando questa è completamente verificata tramite test. Tutte le fasi sono collegate tra loro in modo coerente in modo da consentire di modificare i livelli precedenti in funzione dei risultati di test dei livelli seguenti. L’implementazione sul target, che sia un prototipo, che sia il target finale, è sovrastata da un livello di astrazione che consente allo sviluppatore di gestire in maniera molto efficiente il progetto. Una delle opportunità più interessanti di questo processo integrato di sviluppo è quella che nell’implementazione il progettista puà scegliere liberamente una piattaforma di prototipazione, indipendentemente dalle scelte eseguite al livello superiore, quello di design. La piattaforma implementativa può essere quindi software programmabile (Mcu, Dsp, Plc, ecc.) oppure hardware programmabile (Fpga, Asic, ecc.). Ciò è possibile in quanto sono disponibili nell’ambiente di modellazione i code generator per le piattaforme di elaborazione utilizzate. Generando automaticamente il codice per il target processor non si introducono errori di codifica e soprattutto incoerenze tra il modello e il prototipo.
Prototipare con Matlab e Simulink:
Equalizzatore audio su Fpga/Asic
La realizzazione di un equalizzatore audio digitale completamente implementata su Fpga (Xilinx ML506) è un emblematico esempio della metodologia del model system design integrata in un processo che parte dalle specifiche e arriva all’integrazione in un sistema pronto per la produzione.
Il processo di sviluppo inizia con la definizione delle specifiche:
• Banco di 10 filtri controllabili a passi di 6 dB in amplificazione e in attenuazione
• 5 configurazioni di equalizzazione pre-programmate:
Rock, Pop, Jazz, Classica, Vocale
• Visualizzazione dei modi selezionati su display
• Completa inclusione su singola Fpga
• Qualità audio buona
L’algoritmo di elaborazione numerica del segnale è in aritmetica floating-point e conseguentemente ne viene eseguita la sua modellazione. La sua implementazione su singola Fpga impone però una conversione in aritmetica fixed-point. Il modello fixed-point deve avere comunque le stesse prestazioni di precisione di quello floting-point.
Il modello fixed-point viene quindi confrontato con quello floating-point utilizzando le possibilità di simulazione offerte dall’ambiente. Dopo la validazione, il modello fixed-point viene ottimizzato prima in ambiente Simulink, poi in quello offerto dal fixed-point tool. È importante, in questa fase, utilizzare gli strumenti di modellazione per valutare anticipatamente (prima della creazione del codice Hdl per la programmazione della Fpga) le problematiche implementative dell’equalizzatore in accordo con le specifiche di prodotto. Dopo queste fasi di modellazione, simulazione e ottimizzazione, la generazione automatica del codice completa il ciclo di progettazione con la prototipazione su Fpga dell’equalizzatore. La parte peculiare della implementazione sta nella tracciabilità bidirezionale tra modello e codice Hdl. In questa tracciabilità, sia la parte di segnali che quella di assegnazione dei nomi viene preservata nel collegamento tra modello e codice, finanche i commenti. Epossibile eseguire prove funzionali sul modello, apportare modifiche e correggere errori direttamente sul modello, quindi riportare in maniera coerente le modifiche sul prototipo.
Utilizzando una serie di opzioni di ottimizzazione, come per esempio l’opzione streaming, è possibile ottenere una significativa riduzione dei moltiplicatori. In tal modo la parte più impegnativa del dispositivo viene drasticamente ridotta, a vantaggio di altre funzionalità non strettamente legate al real-time che potrebbero non avere spazio sufficiente per la loro realizzazione.