System-Level Design: preservare la potenzialità applicativa

Un sistema embedded è tutto o una parte di un prodotto con cui l'utilizzatore non interagisce e che non controlla direttamente. A questa categoria appartengono numerosi prodotti comuni come i modem, i telefoni cellulari, i dischi fissi e rimovibili dei computer, i riproduttori Mp3, le webcam, o di uso professionale, come radar, microscopi elettronici, sistemi di imaging medicale, sistemi di imaging 3D industriali, ecc. La particolarità di questi sistemi embedded emerge proprio dall'ampissima varietà funzionale che li caratterizza. Si tratta di sistemi estremamente eterogenei, sia dal punto di vista software che da quello hardware. Tecnologie software e tecnologie hardware si intrecciano e si influenzano reciprocamente. Per esempio, i linguaggi di programmazione utilizzati nella progettazione di un sistema embedded possono essere contemporaneamente orientati alla microprogrammazione (basati cioè su linguaggi imperativi come il C) e alla programmazione dell'hardware (basati cioè su linguaggi di definizione dell'hardware come Vhdl), oppure, una fusione dei due (SystemC). Anche il software di sistema, nei sistemi embedded assume connotati specificamente connessi alla natura applicativa, per esempio i sistemi operativi hanno una connotazione in sintonia con la natura del sistema embedded (real-time operating system). Il software di sistema sta infatti acquisendo un ruolo sempre più rilevante, man mano che la complessità dei sistemi embedded cresce.

La modellistica di elaborazione dell'informazione nei sistemi embedded (algoritmi) è molteplice (digital signal processing, comunicazione, controllo, logica fuzzy, reti neurali, ecc.). Conseguentemente, per l'implementazione, gli algoritmi richiedono tecnologie elettroniche molto differenti tra loro (digital signal processor, microcontrollori, logica programmabile, field-application gate array, ecc.), spesso integrate o livello di scheda o a livello di chip (microcontrollori-Dsp, system-on-chip, ecc.). In questo scenario, un ruolo fondamentale viene svolto da chi sviluppa sistemi embedded destinati a essere integrati in altri sistemi embedded di natura end-user. Si tratta di un ampio campo di sviluppo di sistemi per applicazioni di controllo, di automazione, di comunicazione, ecc. in cui il sistema embedded risolve in maniera efficiente ed essenziale la maggior parte delle problematiche di base da cui dipende l'applicazione finale (per esempio il kernel di un modem, il sistema di integrazione in rete di sensori intelligenti, il sistema di scansione tridimensionale delle immagini, ecc.). Chi sviluppa sistemi embedded per gli Oem, nell'approccio alla progettazione, ha come obiettivo fondamentale quello di preservare la potenzialità applicativa. L'approccio system-level design, e la scelta opportuna delle tecnologie hardware e software, sono le strategie chiave del successo per un prodotto di natura embedded.

Progettazione a livello di algoritmi, architettura o sistema?
L'approccio alla progettazione a livello di sistema non è ancora perfettamente chiaro, essendo questa il risultato di un'evoluzione iniziata da circa un decennio, soprattutto nel campo della progettazione microelettronica integrata, denominata appunto "Electronic-system-level Design". Sviluppata internamente come modellistica di progettazione per affrontare le problematiche tipiche dei sistemi microelettronici di elevata complessità, ha portato alla messa in campo di strumenti di progettazione system-level di notevole astrazione, quindi con scarsa connessione con la piattaforma target dell'applicazione, soprattutto quella di natura embedded. La prototipazione virtuale è allo stato attuale l'obiettivo verso cui, la maggior parte dei protagonisti di questa evoluzione della modellistica di progettazione, sta puntando. Il Tlm (Transaction-level modeling) ha rappresentato un importante passo avanti in questa direzione, essendo questo un approccio ad alto livello alla modellazione di sistemi digitali, dove i dettagli della comunicazione tra i moduli vengono separati da quelli relativi all'implementazione degli stessi. I meccanismi di comunicazione vengono modellati come canali utilizzando moduli programmati come classi di interfaccia in SystemC. SystemC (standard Ieee 1666) è una estensione del linguaggio C++ tramite le librerie delle classi. In particolare, SystemC consente la modellazione partizionata del sistema. Inoltre, consente la progettazione e la verifica a livello di sistema, indipendentemente dai dettagli hardware e software, oltre a consentire la coverifica a livello di progettazione Rtl (Register transfer language).

Oltre il system-level design
La complessità è il problema principale che affligge i costi dello sviluppo dei sistemi embedded, soprattutto in termini di immediatezza nella risposta alle opportunità del mercato. Il system-level design è conseguentemente evoluto in quello che viene chiamato il model-based design, un ambiente di progettazione che consente allo sviluppatore di utilizzare un singolo modello di riferimento per tutto il sistema, dalla fase di analisi dei dati alla generazione automatica del codice. Questo processo unificato di sviluppo prevede varie fasi come l'analisi dei dati, il testing e la validazione che, una volta completate, consentono di ottenere in maniera automatica e consistente la progettazione del sistema embedded. La prototipazione rapida è una delle possibili opzioni di sviluppo che consentono di anticipare le problematiche inerenti il real-time e di minimizzare le problematiche intrinsecamente legate alla implementazione dell'hardware. Il ciclo di sviluppo del prodotto copre varie fasi:

  • pianificazione dei requisiti;
  • modellazione dei dati;
  • progettazione;
  • simulazione;
  • generazione del codice;
  • prototipazione rapida;
  • integrazione e test.


Tranne la prima e l'ultima fase, tutte le altre fasi sono ormai consolidate in ambienti di sviluppo come, per esempio, quello offerto da The Mathworks attraverso i suoi due principali ambienti di sviluppo (Matlab e Simulink) e i vari toolbox e blockset, ognuno in grado di coprire una o più fasi del ciclo di sviluppo del prodotto. Il model-based design offre una serie di vantaggi distintivi sia rispetto alle tecniche tradizionali di sviluppo, sia rispetto al system-level design, soprattutto per il livello di integrazione dell'ambiente di sviluppo, costituito da numerosi moduli o sub-ambienti di modellazione e di sviluppo, perfettamente integrati tra loro. La capacità di eseguire funzioni di validazione del progetto e di verifica funzionale, anche di natura real-time (grazie alla prototipazione rapida), porta il progettista a pervenire a risultati di sviluppo consistenti, diminuendo enormemente il rischio di inconsistenza tra sviluppo software e sviluppo hardware. Il model-based design permette di concretizzare il concetto di riutilizzabilità del progetto, sia grazie al livello di astrazione che caratterizza la fase di modellazione, sia grazie alla modularità dello sviluppo e delle sue fasi che consente di intervenire in termini di modifica ai vari livelli della sequenza di sviluppo. La generazione automatica del codice rappresenta infine una duplice opportunità. Quella di ottenere, ogni volta che il ciclo di sviluppo si ripete, la rapida generazione del codice e di disporre di un codice perfettamente congruente con lo sviluppo, oltre all'implicito aggiornamento della funzionalità del sistema.

Accelerare il processo di progettazione
La disponibilità di strumenti capaci di lavorare efficientemente insieme semplifica il processo di progettazione. Un esempio di un'integrazione di strumenti finalizzata all'accelerazione del processo di progettazione è l'Embedded Development Kit di Xilinx che combina una piattaforma Fpga flessibile con una serie di strumenti di progettazione per l'hardware e il software, di verifica e configurazione di entrambi, oltre a strumenti di simulazione esterna correlati alla verifica. La Xilinx Platform Studio integra questi strumenti creando, insieme al Software Development Kit, un contesto completo per la progettazione e la verifica della correttezza funzionale attraverso un simulatore esterno che consente di eseguire il codice Hdl per la verifica comportamentale, strutturale e di temporizzazione.

Gestire la complessità
La complessità non può essere evitata, può essere solo gestita. Basata su questo principio, Genode è una nuova architettura di sistema operativo fondata sul concetto di gestione della complessità attraverso l'applicazione di una rigorosa struttura a tutte le componenti del software, inclusi anche i driver, i servizi di sistema e le applicazioni. L'interfaccia grafica d'utente è un esempio di complessità di natura system-level di cui il progettista necessita quando deve affrontare problematiche su architetture system-on-chip. Genode FX, un insieme di componenti hardware e software che consentono la creazione di interfacce grafiche d'utente come soluzione system-on-chip utilizzando Fpga, è un esempio di approccio alla soluzione della complessità di sistema inteso a favorire il compito del progettista. Genode FX esegue un completo Gui stack software su una Cpu sotto forma di soft-core (per esempio Microblaze) oppure su una hard-wired Cpu (per esempio le Fpga Virtex4).

LASCIA UN COMMENTO

Inserisci il tuo commento
Inserisci il tuo nome