Liberare la potenza dell’emulazione

La potenza e l'utilità dell'emulazione non sono più vincolate dai limiti fisici. Fino a poco tempo fa tutte le interazioni tra un progetto compilato all'interno di un emulatore e le sue periferiche dovevano avvenire tramite appositi dispositivi hardware che rappresentassero tali periferiche. Da un punto di vista funzionale ciò non costituisce un problema; tuttavia, impone ai team di progetto due importanti limitazioni, entrambe derivanti dall'elevato numero di connessioni hardware necessarie. Anzitutto, il tempo e l'attenzione che devono essere investiti per l'intricata connessione all'emulatore di un'elevata quantità di hardware esterno fanno sì che tale attività possa essere dedicata solo ad un singolo progetto, identificato da quel particolare insieme di periferiche. Capita così che anche se l'emulatore avesse a disposizione del tempo-macchina in eccesso, potenzialmente dedicabile ad un altro progetto, il secondo team di sviluppo sarebbe costretto a scollegare tutte le periferiche per collegare le proprie, e naturalmente alla fine rimettere tutto a posto per il progetto originale. Nella realtà, tutto ciò semplicemente non si fa. Alla fine, quindi, l'emulatore rimane inutilizzato per ampi periodi mentre ci sono altri team di progetto che, pur avendo un disperato bisogno di tempo-macchina per l'emulazione, non lo possono ottenere. In secondo luogo, maggiore è il numero delle connessioni fisiche, più sono le cose che possono andare storte. Quando le connessioni da realizzare cominciano ad essere molte, l'affidabilità cala rapidamente. Capiterà di piegare qualche pin, di incappare in cavi difettosi o in connettori malfunzionanti, avere qualche collegamento un po' allentato, e via di questo passo. E se alla fine c'è qualcosa che non funziona, individuarne la causa è come tentare di disfare il nodo di Gordio.

La virtualizzazione delle periferiche
Una soluzione promettente consiste nel virtualizzare le periferiche. La virtualizzazione elimina l'aspetto hardware dalla rappresentazione delle periferiche. Al posto dell'hardware, si modellizza una parte della periferica nell'emulatore, mentre la parte rimanente viene modellizzata sotto forma di un'applicazione eseguita in una workstation, utilizzando elementi come co-modeling channels e transactors, al posto dei cavi fisici e di veri dispositivi. In tal modo l'intero ambiente
è costituito da una virtualizzazione, e può essere configurato via software. L'emulatore diventa dunque una risorsa flessibile e di utilizzo del tutto generico, all'interno della quale ogni team di progetto è in grado di schedulare o di allocare tempo di elaborazione. I progettisti possono configurare le caratteristiche dell'emulazione in modo istantaneo, eseguire i propri job, e lasciare la risorsa a disposizione del prossimo team che con altrettanta facilità la riconfigurerà nel modo più adeguato al proprio progetto. È già possibile realizzare in modo virtuale controller per multimedia e video, Ethernet, Sata e Pci Express, la cui configurazione risulta anche piuttosto semplice. I produttori di soluzioni di emulazione continueranno a espandere la propria offerta, estendendola al supporto di altri protocolli per i drive dei dischi, come Sas, e di qualsiasi altra periferica immaginabile. La virtualizzazione delle periferiche consente di massimizzare il tasso di utilizzo dell'emulatore. Non è infatti più necessario recarsi fisicamente nel laboratorio, per riconfigurare il sistema utilizzando soluzioni hardware esterne. L'emulatore può essere riconfigurato remotamente via software, mediante le soluzioni virtuali descritte, da qualsiasi luogo del pianeta. In tal modo, si può consentire ad un maggior numero di persone di condividere i numerosi vantaggi offerti dall'emulazione: prestazioni elevate, capacità, progettazione e verifica system-level, e così via.
L'emulazione è sempre stata caratterizzata da doti di performance e di capacità - più veloce della simulazione, capiente a sufficienza anche per i progetti più estesi - e lo è tuttora. Ma l'evoluzione tecnologica la sta proiettando ben oltre queste due dimensioni fondamentali, con un approccio focalizzato su “tutto ciò che ora si può fare virtualmente, mentre prima richiedeva un collegamento hardware di tipo fisico”. Alla base di questo cambio di paradigma vi è la tecnologia dei co-model channels, che sottende tutte le tecniche di virtualizzazione. Questa tecnologia ha già prodotto dei mutamenti radicali nello scenario dell'emulazione, mediante l'introduzione di tre potenti soluzioni: l'accelerazione della simulazione, il debugging dell'esecuzione software e, naturalmente, la realizzazione delle periferiche virtuali.
La tecnologia di co-model channeling è stata sviluppata per velocizzare i testbench di tipo transaction-level, bombardando i transactor di un emulatore con dati di stimolo generati da una workstation e veicolati attraverso i co-model channel. Le periferiche virtuali utilizzano questo stesso meccanismo di trasporto per sollecitare adeguatamente un progetto.

La velocità dell'emulazione
Quanto è più veloce l'emulazione? Proviamo a calcolarlo da soli, ignorando le affermazioni pubblicitarie dei produttori. Assumiamo che l'emulatore elabori il progetto ad una frequenza di 1 MHz, più o meno qualche centinaio di KHz. Questa è la frequenza del clock più veloce del progetto. Ora determiniamo quante volte quel clock commuta, per ogni secondo di orologio, durante la simulazione. Se la simulazione può girare a 100 clocks/sec, allora l'emulatore girerà 10'000 volte più veloce. Questo valore rappresenta un rendimento massimo teorico, che deve essere opportunamente decrementato per tener conto dell'overhead del testbench. Per dei testbench ben costruiti non è raro rilevare fattori di decremento intorno al 20%, il che porta ad un fattore finale di accelerazione pari a 8'000X. Per testbench che devono eseguire molti calcoli per ogni vettore di test inviato al progetto, il fattore di decremento potrebbe essere peggiore. I transactor accelerati vengono eseguiti all'interno dell'emulatore ed espandono ogni transazione del testbench, trasformandola in segnali di stimolo a livello dei singoli pin. Un transactor accelerato ben concepito può girare alla piena velocità di emulazione e sviluppare un fattore di espansione tipicamente pari a ~10X, per un protocollo piuttosto semplice. Per riuscire ad alimentare ininterrottamente l'emulatore, consentendogli di girare sempre a velocità piena, il testbench deve produrre le transazioni a un ritmo di 100 KHz. Ogni rallentamento al di sotto di questa soglia costringe l'emulatore a restare in attesa, generando di fatto il fattore di decremento menzionato in precedenza. I fattori di espansione reali variano lungo un'ampia gamma di valori, in funzione della complessità del protocollo dell'interfaccia. Con Ethernet, per esempio, un pacchetto viene espanso in centinaia o migliaia di cicli del clock di emulazione, a seconda del frame. Con i simulatori tradizionali è possibile, utilizzando l'emulazione, ridurre a pochi minuti il tempo di simulazione di progetti che avrebbero normalmente richiesto giorni o intere settimane: tipicamente, l'emulazione esegue una simulazione di due settimane in cinque minuti. Mediante i transactor e i co-model channel è anche possibile collegare a un emulatore degli strumenti software per il debugging dell'esecuzione, consentendo il prelievo dall'emulatore di informazioni che possono alimentare un debugging off-line del software. Non è necessario disporre di una sonda hardware per ogni tipo di processore utilizzato. È sufficiente utilizzare un co-model channel e la possibilità di effettuare in modo virtuale lo stesso tipo di debugging che in precedenza si sarebbe fatto mediante Jtag. Il tutto in modo completamente riconfigurabile. In questo modo, con la stessa quantità di hardware, è possibile dare supporto a un numero molto più elevato di ingegneri software. Un dato da sempre osservato con preoccupazione dai clienti è il numero di pin di I/O presenti sull'emulatore. In prospettiva futura, l'evoluzione architetturale delle soluzioni di emulazione porrà invece l'enfasi sul miglioramento del throughput dei co-model channel, poiché essi veicoleranno una quantità sempre crescente di attività. Ciò anche per garantire che, man mano che gli emulatori diventeranno più veloci e crescerà il numero delle applicazioni eseguite in parallelo, i co-model channel non rappresentino il collo di bottiglia.

Un nuovo approccio all'emulazione
Le tecnologie appena descritte sono destinate a modificare il modo in cui le persone lavoreranno nel prossimo futuro. Esse favoriranno senza dubbio un maggiore utilizzo dell'emulazione, poiché molte delle aziende che potrebbero trarne indubbi benefici sono state fino ad ora spaventate e dissuase dagli ingenti requisiti in termini di hardware esterno e dalla mancanza di un modello d'uso sufficientemente flessibile. Con il co-modeling e la virtualizzazione, l'emulatore diventa un distributore di emulazione, una sorta di armadio pieno di workstation dedicate. L'ambiente è inoltre completamente configurabile via software, facile da impostare per un progetto specifico e altrettanto rapidamente riconfigurabile per consentire il collegamento di periferiche diverse e di diverse tecnologie di debugging del software - il tutto tramite un'interfaccia utente grafica. Tutto ciò permette di proporre ai team di ingegneri un approccio pratico e familiare, in grado di rendere molto semplice lo sfruttamento completo ed efficace di tutta la potenza offerta dell'emulazione, finalmente svincolata dai limiti del mondo fisico.

LASCIA UN COMMENTO

Inserisci il tuo commento
Inserisci il tuo nome