linguaggi non correlati. Fino a pochi anni fa, le tecniche classiche di design a livello RTL hanno consentito di supportare interamente la progettazione di sistemi digitali anche complessi. Con l'avvento dei sistemi NoC, la stretta interazione tra blocchi HW e SW e la crescente complessità di questo tipo di sistemi hanno però dimostrato che nessuna delle tecniche classiche è piu' adatta a progettare questo tipo di sistemi. In questo scenario, uno tra i task piu' importanti e problematici è costituito proprio dal partizionamento HW/SW, in cui i progettisti mirano a soddisfare congiuntamente piu' obiettivi di diversa tipologia, quali (i) rispettare i vincoli in termini di prestazioni, costi e consumo di potenza, (ii) il massimo riutilizzo di blocchi esistenti, e (iii) la riduzione dei tempi di immissione sul mercato dei nuovi prodotti.
La ricerca di alte prestazioni con ridotti consumi di potenza portano spesso i progettisti di sistemi NoC a scegliere l'uso di processori per eseguire funzionalità di sistema piuttosto di ricorrere ad HW embedded. Allo stesso tempo, il riuso di blocchi IP, già sviluppati e interamente verificati, consentono di accorciare i tempi di design riducendo la probabilità di inserire errori durante la progettazione. Per questi motivi, diventa conveniente trasformare descrizioni esistenti di blocchi IP, implementati a livello RTL o TLM, in SW (ad esempio, C++) pronto per essere eseguito su uno o più processori dedicati della piattaforma NoC. In aggiunta, integrare un modulo HW ad una piattaforma dedicata implica la generazione di device driver che rispettino sia il protocollo di comunicazione del modulo che i vincoli imposti dalla particolare architettura della CPU (monoprocessore, multiprocessore simmetrico o multiprocessore asimmetrico). Riutilizzare un device driver sviluppato per una CPU con architettura diversa rispetto a quella per cui è stato scritto richiede modifiche manuali per adattare il codice alla nuova CPU. Questa operazione è tuttavia molto costosa in termini di tempo e porta facilmente all'introduzione di errori nel codice. Come risultato, l'esplorazione delle possibili architetture finali viene considerata troppo costosa e quindi fortemente limitata.
L'obiettivo di questa unità di ricerca è sviluppare una metodologia e il corrispondente ambiente di progettazione per generare e verificare SW embedded per
architetture NoC riconfigurabili. La metodologia proposta è composta da cinque attività strettamente correlate:
1. Astrazione di moduli RTL in SW embedded.
2. Generazione automatica di SW embedded partendo da moduli TLM.
3. Ottimizzazione di SW embedded per architetture NoC.
4. Generazione automatica di device driver per moduli HW adattati a diverse configurazioni architetturali.
5. Verifica del SW attraverso tecniche di verifica semi-formale.
Le tecniche di generazione e verifica di SW embedded saranno implementate in tre prototipi: H2C++ (per la generazione di SW embedded a partire da moduli RTL e TLM, con il conseguente adattamento all'architettura finale), D2Gen per la generazione di device driver e MULTICOVER per la verifica semiformale del SW generato.