Tool per il debug in-circuit di Fpga


I continui progressi della tecnologia nel settore dei semiconduttori hanno consentito una crescita esponenziale della capacità logica dei moderni dispositivi programmabili. In fase di design, tale tendenza ha creato un gap di produttività (inteso come divario tra le risorse rese disponibili e la reale capacità di utilizzarle) risolto mediante un approccio alla progettazione basato sul riutilizzo di componenti hardware e software. La crescente complessità logica dei circuiti che ne è seguita ha tuttavia ben presto evidenziato, rispetto ai nuovi scenari, un'inadeguatezza di fondo dei tradizionali metodi di simulazione funzionale; tale inadeguatezza nasce, in definitiva, dalla naturale difficoltà di prevedere tutte le possibili condizioni operative prima della messa in funzione del prototipo.

La fase di verifica funzionale in-circuit ha pertanto acquisito un peso sempre maggiore nel ciclo di sviluppo di un prodotto, finendo per diventare uno dei fattori determinanti del time-to-market. Produttori di logiche programmabili e terze parti hanno quindi iniziato a sviluppare tool di debug che consentano una più rapida identificazione dei malfunzionamenti dei sistemi. Di seguito sono descritte alcune delle più interessanti soluzioni oggi disponibili; nella maggior parte dei casi, come avremo modo di vedere, probe ed analizzatori logici di stato virtuali sottoforma di core IP sono integrati nelle logiche programmabili, consentendo l'accesso ai segnali interni del dispositivo, analogamente a come procedeva, in passato, la verifica funzionale a livello di scheda. Una semplice applicazione host su Pc controlla il debug e consente la visualizzazione dei segnali acquisiti.

Actel

Actel è leader mondiale nel settore delle logiche programmabili in tecnologia antifuse; attualmente produce Fpga non-ripogrammabili di capacità logica equivalente fino a 4 milioni di gate disponibili anche in versione qualificata per applicazioni aerospaziali.
Silicon Explorer-II è il tool hardware per il debug in-circuit di tali componenti; basato su una tecnologia proprietaria, è un semplice analizzatore di stati che consente l'accesso a un qualsiasi nodo interno della Fpga. È connesso mediante un cavo standard alla porta Jtag della Fpga che utilizza per controllare la selezione dei nodi; è collegato invece mediante porta seriale al Pc host dove risiede il software di configurazione e visualizzazione dei segnali. Supporta fino a 18 canali di acquisizione, di cui 2 (4 nel caso dei dispositivi Axcelerator) associati a nodi interni dell'Fpga e 16 a segnali esterni; l'applicazione host sul Pc consente la selezione a run-time dei nodi della Fpga da visualizzare. Il campionamento è di tipo asincrono ad una frequenza configurabile tra 10 kHz e 100 MHz; il buffer di acquisizione è di 64k campioni per segnale. Per ognuno di questi è configurabile una condizione di trigger legata al livello od al fronte attivo; un trigger generale viene generato come AND logico di tutte le condizioni. La sua posizione temporale può essere configurata al 25%, 50% e 75% del buffer di campioni acquisiti.
Nel 2001 Actel ha iniziato la produzione di Fpga riprogrammabili in tecnologia Flash; i dispositivi ProAsic3 attualmente disponibili raggiungono una capacità logica equivalente di 3 milioni di gate e integrano il core di un processore ARM-7 compatibile. Per i dispositivi Flash, sono rese disponibili due soluzioni per il debug in-circuit: una versione vendor-limited di Synplicity Identify (inclusa anche nella versione gratuita dell'ambiente di sviluppo Libero IDE) e il Logic Navigator di First-Silicon Solution. Entrambe le soluzioni sono descritte in seguito nei paragrafi che presentano le offerte dei vendor di terze parti.

Altera

Cyclone, Stratix e Arria sono le tre serie di Fpga che oggi Altera propone nel mercato delle logiche programmabili. Basso costo e ridotta dissipazione di potenza sono le caratteristiche principali delle prime; elevata densità e transceiver GX integrati rendono ideali i dispositivi Stratix per applicazioni system-on-chip. Semplici soluzioni di bridging ottimizzate, ad esempio, per PCIExpress e GigabitEthernet definiscono i campi di utilizzo delle Fpga Arria.
Quartus-II è l'ambiente di sviluppo fornito da Altera per la programmazione di tutti questi dispositivi; la versione web è disponibile gratuitamente sul sito dell'azienda. Include, senza alcun costo aggiuntivo, le seguenti soluzioni per il debug in-circuit: Signal Probe, SignalTap II Logic Analyzer, Logic Analyzer Interface, con complessità e caratteristiche diverse tra loro, da utilizzare a seconda delle reali necessità. Tutti i tool supportano l'esecuzione di script TCL per l'automazione delle operazioni di configurazione e controllo.
Signal Probe è la soluzione più semplice; consiste di un'interfaccia grafica che consente di selezionare i nodi interni che si intende monitorare e di eseguire il routing automatico di questi verso pin di I/O della Fpga riservati dall'utente per scopi di debug. Le modifiche al design sono implementate come ECOs, introducendo un effetto minimale che non altera funzionalità e timing del progetto. Per i dispositivi Stratix, Cyclone e MAX-II il routing può essere fatto in maniera incrementale a partire da un progetto interamente compilato (al termine quindi della fase di place&route); è inoltre possibile specificare l'inserzione di registri sui path di connessione dei nodi interni verso i pin di probe.
Signal Probe richiede l'utilizzo di strumento esterno (ad esempio un oscilloscopio) per l'acquisizione dei segnali; SignalTap II Logic Analyzer, invece, è a tutti gli effetti un analizzatore di stato integrato nell'Fpga e controllabile da Pc remoto connesso alla porta Jtag del dispositivo mediante cavo proprietario. Supporta fino a 1024 canali di acquisizione con fino a 128 K campioni per canale e una frequenza di campionamento fino a 270 MHz; è in grado di gestire buffer di acquisizione di tipo circolare o segmentato, utile nel campionamento di eventi relativamente poco frequenti. Rende disponibile una funzione che consente di esportare i campioni in una matrice di interi compatibile con il formato dei dati gestito da Matlab. Supporta fino a 10 diverse condizioni di trigger di tipo fondamentale (livello o transizione del segnale) o avanzate (operatori relazionali, and/or/not logici, rigth o left shift, complemento bit-a-bit...); queste possono essere combinate in trigger complessi di tipo sequenziale o basati su macchine a stati. È inoltre possibile configurare la generazione di un trigger di power-up per l'acquisizione dello stato dei segnali immediatamente dopo la configurazione del sistema; sono supportati l'utilizzo di un segnale di trigger esterno in ingresso e la generazione del trigger in uscita nel caso di strumenti connessi in cascata. SignalTap II consente, ad esempio, l'inclusione di fino a 127 diverse istanze contemporaneamente all'interno dello stesso dispositivo o di dispositivi diversi presenti nella stessa catena Jtag. In MegaWizard è disponibile un plug-in per la configurazione di SignalTap II; viene generata automaticamente una descrizione HDL da inserire nel progetto utente. In alternativa è disponibile un editor dedicato che permette di selezionare mediante interfaccia grafica i segnali da acquisire in fase di pre-sintesi (riflettendo quindi la descrizione RTL del proprio progetto) o post-fitting; in questo caso è supportata la compilazione incrementale così da rendere più veloce la riprogrammazione del dispositivo a seguito di modifiche della configurazione dell'Analyzer.
Logic Analyzer Interface è un core che consente la selezione di nodi interni da acquisire mediante un analizzatore di stato esterno. Rispetto a SignalTap II offre il vantaggio di una maggiore capacità di memoria insita nello strumento esterno e, in alcuni casi, capacità di trigger più avanzate, oltre ad una minore occupazione di risorse nella Fpga; tuttavia, il numero di segnali che possono essere acquisiti simultaneamente dipende dai pin liberi a disposizione e la frequenza di campionamento in molti casi è limitata da problemi di integrità di segnale. In fase di compilazione, è possibile configurare diversi banchi di segnali che, a run-time, possono essere selezionati per l'acquisizione; il segnale di campionamento può essere scelto tra il clock interno dell'analizzatore (nel caso si sia interessati, ad esempio, ad una visione timing con possibilmente informazioni sullo skew delle linee) o il clock interno dell'Fpga (nel qual caso si ha una visione puramente funzionale).

Xilinx

Xilinx è insieme ad Altera uno dei due principali produttori mondiali di logiche programmabili. Nel 2002 ha introdotto i primi dispositivi Platform Fpga; i nuovi chip della serie Virtex-5 integrano processori PowerPC, transceiver MGT, core Ethernet TriMAC, end-point PCI Express, circuiti per la generazione del clock, logica configurabile in funzione delle esigenze dell'utente.
Chipscope Pro è la soluzione di debug in-circuit proposta dall'azienza ai propri clienti. La suite include:
- Generator, l'interfaccia grafica per la generazione dei core di debug da includere nel progetto;
- Inserter, l'interfaccia grafica di supporto nell'inserzione automatica dei core;
- Analyzer, l'interfaccia utente di controllo e visualizzazione dati;
- CseJtag TCL scripting Interface, una libreria di script per controllare da shell TCL mediante cavo proprietario Xilinx un dispositivo presente nella catena Jtag;
Supporta i seguenti core:
- ICON (Integrated Controller);
- ILA (Integrated Logic Analyzer);
- VIO (Virtual I/O);
- ACT2 (Agilent Trace Core 2);
- IBERT (Integrated Bit-Error Ratio).
I core sono generati dal Generator in formato netlist; devono essere inclusi dall'utente come componenti HDL nel progetto. Per il solo ICON/ILA, l'Inserter consente l'inserzione automatica mediante interfaccia grafica direttamente nella netlist sintetizzata.
L'ICON è il controller della comunicazione su porta Jtag con l'applicazione host; rende disponibili fino a 15 porte di controllo per ILA, VIO, ACT2 e IBERT. VIO, ad esempio, è un simulatore di linee di Input/Output, di tipo sincrono e asincrono, utilizzabile per monitorare porte di controllo e generare segnali di stimolo; è possibile creare semplici impulsi, treni di impulsi o segnali a livello. Applicazioni interessanti sono, ad esempio, la generazione single-cycle di un segnale di clock o l'abilitazione di gated clock.
L'ILA è invece un analizzatore di stato integrato; supporta fino a 16 diverse porte di trigger con fino a 256 segnali per porta. Possono essere previste fino a 16 condizioni di trigger sulle diverse porte, ognuna configurabile in tempo reale e combinabili poi tra loro; possono essere definiti sequencer di trigger fino a 16 stati. Sono supportati condizioni di trigger basate sul valore di verità di equazioni booleane sui segnali della porta in oggetto o transizioni di livello. Possono essere acquisiti fino a 1024 canali (da selezionare nella fase di inserzione e connessione dell'ILA prima del place&route del design) in un buffer di dimensione massima di 128 K campioni; la frequenza di campionamento è dettata dal segnale di clock connesso internamente al core (tipicamente il clock di sistema in modo da avere campionamento sincrono). L'acquisizione dei campioni può essere continua o legata ad eventi particolari (si pensi ad esempio alla necessità di acquisire le sole operazioni di accesso in lettura in memoria seppur separate temporalmente tra loro). In corrispondenze dell'evento di trigger il buffer viene letto dall'Analyzer; la posizione temporale del trigger rispetto al buffer di acquisizione è configurabile in tempo reale e con la risoluzione del singolo campione come per i tradizionali analizzatori di stato.
L'ILA/OPB e l'ILA/PLB sono versioni particolari del core ILA per il monitoring, rispettivamente, dei bus IBM CoreConnect OPB e PLB utilizzati dai processori embedded MicroBlaze e PowerPC405. Oltre alla funzionalità di monitoring, l'ILA/OPB include inoltre un protocol checker in grado di rilevare fino a 32 violazioni della specifica, tra le quali, ad esempio, una variazione del campo dati durante un'operazione di scrittura prima del completamento del ciclo di bus.
Qualora le capacità di debug dell'ILA non siamo sufficienti, è possibile utilizzare un analizzatore di stato esterno od un oscilloscopio mixed-signal di Agilent connesso mediante core ACT2. Sono supportate tutte le tecnologie di probing previste da Agilent; I/O standard, capacità di driving e slew-rate di uscita sono configurabile sulla base del singolo pin. Si è in grado in questo modo di acquisire selettivamente fino a 64 gruppi di segnali di ingresso con fino a 128 segnali per gruppo (256 segnali se si utilizzano una tecnica TDM 2x).
IBERT, infine, è un core disponibile attraverso il Serial I/O Toolkit, un add-on per Chipscope che consente il controllo e la caratterizzazione dei transceiver MGT integrati nei dispositivi Virtex-4 e Virtex-5; include un pattern generator/checher per misure di bit-error rate. Supporta tutti i principali standard di I/O seriale, includendo PCIExpress, Gigabit Ethernet, XAUI, Fibre Channel; il costo è tipicamente inferiore all'1% di quello delle apparecchiature di BERT tradizionali sviluppate da terze parti.

First-Silicon Solution

First-Silicon Solution (FS2) è una azienda nata nel 1998 e specializzata nello sviluppo di metodi di test e verifica basati sulla tecnologia proprietaria OCI (On-Chip Instrument) per la generazione di core IP per il probing di segnali interni.
Logic Navigator è la soluzione offerta per Fpga Actel della serie ProAsic e SX/AX. Include un OCI generator per la generazione ed inserzione automatica del core OCI nel progetto; l'interfaccia grafica consente di configurare il core e specificare direttamente nel codice sorgente i segnali da connettore ai probe. Una seconda interfaccia permette di visualizzare i campioni acquisiti e controllare il debug; come negli altri casi visti in precedenza, è previsto il supporto per comandi da shell Tcl. L'applicazione host risiede su Pc connesso alla Fpga target mediante cavo Jtag proprietario Actel; un'interfaccia OCI Jtag è disponibile per i dispositivi Flash. Supporta l'acquisizione di fino a 4096 segnali divisi in 16 gruppi di 256; sono gestiti fino a 16 eventi di trigger indipendenti definibili a run-time e sequencer di trigger fino a 16 stati, contatori per timestamp fino a 48 bit e due interfacce di trigger esterne opzionali fino a 32 bit. La profondità di memoria per l'acquisizione dei campione è fino a 64k.
FpgaView è invece il software per il debug in-circuit dei dispositivi Fpga Altera e Xilinx. Nel primo caso utilizza direttamente il Logic Analyzer Interface incluso in Quartus II. Nel secondo, si basa invece su una versione dedicata dell'OCI generator; le funzionalità sono del tutto simili a quanto disponibile in Logic Navigator per Actel con modalità di acquisizione sincrona (con la possibilità di specificare il fronte attivo del clock) e asincrona, fino a 64 banchi ognuno composto al più da 128 segnali, general purpose I/O fino a 64 bit per acquisire informazioni di tipo statico o pilotare segnali di controllo. L'applicazione host di FpgaView rende disponibile un plug-in per il controllo da remoto mediante porta Ethernet o Usb di un oscilloscopio Tektronix della serie MSO4000; può risiedere, inoltre, sia su un tradizionale Pc che direttamente su un TLA connesso, al solito, alla Fpga target mediante cavo Jtag proprietario (o FS2 System Navigator Probe nel caso di Fpga Altera); sono supportati i modelli Tektronix TLA600, TLA5000, TLA700, TLA7000.
Oltre alle soluzioni presentate sviluppate espressamente per Fpga, FS2 rende disponibile numerosi tool basati sulla tecnologia OCI per il debug in-circuit di system-on-chip complessi; System Navigator Pro, ad esempio, è una piattaforma hardware che supporta funzionalità di tracing per processori embedded (come i modelli della serie MIPS32 di MIPS Technologies) e bus on-chip (come AMBA od OCP).

Synplicity

Synplicity è il leader mondiale nell'ambito dei tool Eda per il design di Fpga e Asic. Identify, basato sulla tecnologia proprietaria TotalRecall, è la soluzione offerta dall'azienda per il debug in-circuit di Fpga. Come negli esempi mostrati in precedenza, il tool include un core IP che implementa un analizzatore di stati logici integrato in Fpga e un'interfaccia grafica per il controllo del test e la visualizzazione dei segnali acquisiti.
L'IICE (Intelligent In-Circuit Emulator) è il controller dedicato al campionamento dei segnali interni e la generazione delle condizioni di trigger; è controllato mediante porta Jtag. Per i dispositivi che non abbiano un controller TAP built-in (o laddove questo non possa essere utilizzato), è resa disponibile all'interno dell'IICE una versione generica utilizzabile su qualunque piattaforma. È prevista la possibilità di configurare istanze multiple dell'IICE all'interno dello stesso dispositivo.
Oltre alle normali modalità di acquisizione, sono supportate funzionalità di campionamento di tipo qualified sampling (viene acquisito un campione in corrispondenza di ogni trigger) o always-armed trigger (viene acquisito l'intero buffer in corrispondenza di ogni trigger, ma il sistema continua a restare armato). Non sono previsti limiti (se non quelli strettamente legati all'architettura dell'Fpga target e alla quantità di risorse disponibili) al numero di segnali che è possibile campionare e alla dimensione del buffer; in funzione della configurazione selezionata viene automaticamente generato un report delle risorse necessarie all'implementazione. Sono supportate condizioni di trigger legate al valore o alle transizioni dei segnali acquisiti (genericamente chiamati watchpoint) o al raggiungimento, ad esempio, di uno dei rami di una istruzione condizionale presente nel codice sorgente (si parla in questo caso di breakpoint per analogia con i debugger utilizzati in simulazione); le diverse condizioni possono essere combinate in trigger complessi basati su macchine a stati. È prevista una modalità di cross-trigger.
La gestione dei breakpoint in Identify è una funzionalità unica nel suo genere; tutti gli esempi visti in precedenza legano infatti le condizioni di trigger al campionamento di segnali già presenti nel progetto utente. Identify è invece in grado di generare automaticamente circuiti accessori che consentono di produrre eventi in corrispondenza dell'attivazione della parte di logica corrispondente all'istruzione condizionale del codice RTL definita come breakpoint. In questo modo si offre all'utente un livello di astrazione più alto nella gestione del debug in-circuit; si ha in un certo senso la sensazione che il sistema sia triggerato nel momento in cui l'istruzione del codice sorgente viene eseguita. Allo stesso modo, il valore dei segnali acquisiti viene riportato all'interno del Debugger (l'interfaccia host di controllo sul Pc remoto) direttamente nel codice sorgente; è quindi possibile scorrere l'intero buffer di campioni seguendo l'evoluzione temporale del proprio sistema. In alternativa è possibile esportare i dati in formato compatibile con i principali viewer di forme d'onda come GTKWave o Modelsim. È prevista la possibilità di eseguire script TCL per l'automazione delle procedure di configurazione e debug.
Identify supporta il codice in linguaggio Verilog, VHDL o mixed. Si integra semplicemente in Synplify, il motore di sintesi di Synplicity, rendendo piuttosto agevole la configurazione e il mantenimento del progetto. È inoltre incluso in ValuePack, l'ambiente di sintesi e debug a basso costo reso disponibile da Synplicity per la programmazione dei dispositivi Cyclone di Altera e Spartan di Xilinx.

LASCIA UN COMMENTO

Inserisci il tuo commento
Inserisci il tuo nome