Table of Contents
I banchi di prova VHDL sono strumenti indispensabili per simulare e verificare i disegni digitali prima di impegnarsi in silicio. Un banco di prova efficace cattura errori funzionali, violazioni dei tempi e bug di caso d'angolo all'inizio del ciclo di progettazione, risparmiando mesi di rielaborazione e riducendo i costi di sviluppo complessivi. Questo articolo fornisce una guida completa per creare ambienti di test robusti per i test FPGAHD e ASIC.
Cos'è un banco di prova VHDL?
A differenza di VHDL sintetizzabile, che deve mappare su hardware reale, un banco di prova non ha vincoli di sintesi. Il suo scopo è quello di generare stimoli di ingresso per il design sotto test (DUT), applicare quegli stimoli nel tempo, monitorare le uscite di DUT e verificare automaticamente se tali uscite corrispondono a risultati semplici.
La differenza fondamentale tra un banco di prova e un modulo sintetizzabile è che i banconi di prova non devono mai essere implementati su un FPGA o fabbricati come ASIC. Si eseguono interamente in un simulatore come Siemens EDA ModelSim/This, Aldec Riviera-PRO o Vivado Simulator. Questa libertà consente agli ingegneri di utilizzare costrutti come file I/O, output di testo e strutture di dati complesse che sarebbero impraticabili.
Perché i banconi di prova sono critici per la convalida FPGA e ASIC
Molti ingegneri di verifica spendono il 60-80% del tempo di progetto per la prova. Senza un banco di prova, la convalida di un progetto richiede un controllo manuale delle forme d'onda, che è privo di errori e lento.
- Early Bug Detection:[ Gli insetti trovati durante la simulazione costano una frazione di quelli trovati dopo la fabbricazione in ASIC o dopo il lancio del bordo in FPGAs.
- Ricorso di regressione:[ Quando vengono apportate modifiche di progettazione, i banchi di prova possono essere riprodotti per garantire che la funzionalità esistente non sia rotta.
- Copertina di cornicione:[ I banchi di prova possono generare molte più combinazioni di input rispetto alla modifica manuale delle forme d'onda possono raggiungere.
- Documentazione:[] Un banco di prova ben scritto funge da riferimento per come il DUT è destinato ad operare.
Per i progetti ASIC, un banco di prova è spesso il primo pezzo di codice scritto dopo che le specifiche sono finalizzate, a volte prima che la RTL stessa sia completa, questa pratica, conosciuta come sviluppo test-driven, assicura che il design sia convalidato dall'inizio.
Componenti chiave di un banco di prova VHDL efficace
Ogni banco di prova, indipendentemente dalla complessità, contiene diversi blocchi fondamentali di costruzione, comprendendo questi componenti è il primo passo verso la scrittura di test efficaci.
1. Generazione di orologio e reset
La maggior parte dei modelli digitali sincrono richiedono un orologio e un reset. I testbenches tipicamente includono un processo che attiva un segnale di orologio a una frequenza specificata. La generazione di reset dovrebbe affermare il reset per alcuni cicli poi rilasciarlo.
- Assert reset basso per 100 ns.
- Risistemazione di de-assert durante l'esecuzione dell'orologio.
- Permettere alcuni cicli di orologio prima di applicare vettori di prova.
2. Generazione di Stimulus
Questo componente crea segnali di input che rappresentano condizioni reali. Lo Stimulus può essere diretto (ogni vettore di prova esplicitamente definito) o casuale (utilizzando la generazione di numeri pseudo-radi). Lo Stimulus è spesso organizzato in uno o più processi[]] o ]]procedure] che guidano le porte DUT.
3. DUT Istantaneità
Il design sotto test è istantaneo all'interno dell'architettura del banco di prova. I suoi porti sono collegati ai segnali locali che il banco di prova guida o monitor. Convenzioni di nomina dei segnali (ad esempio , ]) aiutano a distinguere i segnali del banco di prova dalle reti interne DUT.
4. Monitoraggio e Checkers
I monitor osservano le uscite DUT e catturano i loro valori in tempi di simulazione specifici. I controllori confrontano le uscite effettive contro i valori attesi, immediatamente o dopo un ritardo noto. I banchi prova di autocontrollo utilizzano le dichiarazioni di asserzione () per contrassegnare automaticamente gli errori.
5. Sequencer di prova
Per scenari di test multipli, un sequencer controlla l'ordine di esecuzione, applica gli stimoli in fasi definite e può includere le barriere di sincronizzazione (ad esempio, in attesa di una risposta specifica prima di inviare l'ingresso successivo).
6. Rapporto e registrazione
I banchi di prova devono inviare messaggi di progresso e risultati finali alla console simulatore o a un file di registro. Questo consente di eseguire simulazioni batch senza dover visualizzare le forme d'onda manualmente.
Passi per creare un banco di prova VHDL
La costruzione di un banco di prova da zero segue un approccio sistematico, i passi sottostanti si applicano sia agli ambienti semplici che avanzati.
Passo 1: Capire l'interfaccia e la specificazione DUT
Prima di scrivere una singola riga, rivedere l'elenco delle porte di DUT, i requisiti di protocollo, i diagrammi di tempo e le specifiche funzionali. Identificare tutte le porte di ingresso e di uscita, le loro larghezze di dati e handshakes. Ad esempio, se il DUT è un AXI Stream FIFO, annotare il handshake pronto/valida, il comportamento di backpressure e le impostazioni di soglia.
Passo 2: Scrivere il banco di prova scheletro
Creare un file VHDL con un'entità vuota (senza porte) e un'architettura. Segnali di disattivazione che si collegano alle porte DUT.
entity tb_fifo is
end entity tb_fifo;
architecture sim of tb_fifo is
signal clk : std_logic := '0';
signal rst_n : std_logic := '0';
signal data_in : std_logic_vector(7 downto 0);
signal wr_en : std_logic;
signal full : std_logic;
-- ... other signals
begin
DUT: entity work.fifo
port map (
clk => clk,
rst_n => rst_n,
data_in => data_in,
wr_en => wr_en,
full => full
);
-- Clock generation process
clk <= not clk after 5 ns;
end architecture sim;
Passo 3: Creare processi di stimolazione
Per un semplice FIFO, si potrebbe scrivere un processo che scrive i dati nel FIFO fino a quando non diventa pieno, poi lo legge.
Passo 4: Monitor di implementazione e Checkers
Includere processi che osservano i segnali di uscita e li confrontano ai valori attesi. Le banconi di prova autocontrollo utilizzano le affermazioni.
assert dout = expected_data
report "Data mismatch at time " & time'image(now)
severity error;
Per i DUT complessi, consideri la costruzione di un modello di riferimento, una descrizione comportamentale che prevede il corretto comportamento, e confronta la sua uscita con il ciclo di uscita di DUT per ciclo.
Passo 5: Eseguire Simulazioni e Analyze risultati
Compila il banco di prova e DUT nel simulatore scelto. Eseguire la simulazione ed esaminare la trascrizione per i guasti di assente. Utilizzare gli spettatori delle forme d'onda per debug comportamenti imprevisti.
Tipi di strategie di test in banchi di prova VHDL
I diversi obiettivi di verifica del design richiedono metodologie di test differenti. Le strategie più comuni sono:
Test diretto
Nel test diretto, ogni caso di prova viene realizzato manualmente per controllare una caratteristica specifica: è facile da scrivere e debug ma non scala a disegni complessi. I test diretti sono i migliori per i controlli di sanità e le suite di regressione iniziali dove esistono casi di angolo conosciuti.
Test casuali
Il banco di prova controlla automaticamente le uscite, spesso contro un modello di riferimento. Questo approccio scopre i casi di angolo che lo specifier umano potrebbe mancare. VHDL fornisce la funzione per generare numeri casuali. Il test casuale può essere combinato con tecniche casuali limitate a bias stimuli verso regioni interessanti.
Testing coperto-drive
Le metriche di copertura (copertura, copertura di gioco, copertura funzionale) indicano quali parti del progetto sono state esercitate. Molti simulatori possono segnalare la copertura. La copertura funzionale può essere implementata utilizzando i pacchetti di copertura VHDL (ad esempio, OSVVM o UVVM). L'obiettivo è quello di ottenere una copertura del 90-100% sui percorsi critici.
Test di regressione
Poiché il design si evolve, una suite di regressione esegue tutti i banchi di prova in precedenza per evitare regressioni, ciò richiede un'imbracatura automatica di test.
Tecniche avanzate per le banconi robuste
Oltre agli stimoli di base e al controllo, gli ingegneri esperti di verifica impiegano diverse tecniche avanzate per migliorare la produttività e la qualità dei test.
Utilizzo di procedure e funzioni
Ad esempio, una procedura che scrive una sola parola ad un'interfaccia AXI Stream può essere riutilizzata per molti test, riducendo la duplicazione del codice e facilitando la manutenzione del banco di prova.
Entity Instantiation vs. Component Instantiation
Immediazione dell'entità diretta[[] (VHDL-93 e successive) è consigliato perché evita dichiarazioni dei componenti separate.
Caratteristiche VHDL-2008
VHDL-2008 ha introdotto diversi costrutti che migliorano lo sviluppo del banco di prova:
- Tipi generici potenziati:[ Permette parametri generici di essere più flessibili.
- Espressioni booleane nei porti:[ Semplifica la connessione dei segnali non risolti.
- Assegnazioni di segnale tradizionali e selezionate:[ Ridurre la necessità di blocchi di processo.
- Pacchetto standard :] Fornisce e []] procedure per terminare la simulazione in modo pulito.
- I miglioramenti della tesi:[] ] le dichiarazioni possono includere per fermare la simulazione.
L'adozione di VHDL-2008 in banchi di prova (anche se il DUT deve essere scritto in standard più vecchi) migliora la leggibilità e riduce il volume del codice.
File I/O per i vettori di prova
Per i progetti che elaborano grandi set di dati (ad esempio, filtri di immagini o processori di pacchetti), la lettura di vettori di prova da file di testo o binario è essenziale. Il pacchetto di VHDL fornisce e procedure.
Valutazione e Predizione
Un tabellone di valutazione è una struttura dati che traccia transazioni eccezionali e le controlla quando arrivano le risposte. Questo è comune nei modelli di funzionamento del bus. Ad esempio, in un banco di prova del controller DMA, un tabellone di lettura può monitorare ogni richiesta di scrittura e verificare che i dati appaiono nella posizione di memoria corretta.
Migliori Pratiche per i banchi di prova VHDL
Le buone pratiche di banco di prova pagano come il design cresce. Le seguenti linee guida aiutano a mantenere i banchi di prova robusti e adattabili.
Modularità e Riutilizzo
Interrompere il banco di prova in file separati: uno per la generazione di istanza e clock/reset DUT, un altro per procedure comuni, un terzo per sequenze di test.
Convenzioni di denominazione
Utilizzare il nome chiaro e coerente. Ad esempio:
- prefisso per i segnali del banco di prova.
- per i generatori.
- per i checkers.
- per costanti specifiche di prova.
Parametrizzazione attraverso i farmaci generici
Passare i parametri generici DUT (ad esempio, la larghezza dei dati, la profondità FIFO) all'entità del banco di prova tramite mappe generiche, permettendo allo stesso banco di prova di verificare più configurazioni senza modifiche di codice.
Autocontrollo e tolleranza zero
Ogni banco di prova deve fallire automaticamente se non viene eseguita alcuna affermazione. Utilizzare [] per errori catastrofici e [ per errori. Evitare simulazioni che finiscono con un messaggio "successo" se non si verificano guasti - che è ambiguo.
Documentazione e commenti
Documentare lo scopo di ogni prova, il comportamento atteso e qualsiasi particolare esigenza di tempistica. Buoni commenti aiutano gli ingegneri futuri (inclusi voi sei mesi dopo) a comprendere le intenzioni di prova.
Integrazione dei banconi di prova VHDL con strumenti di simulazione moderni
Utilizzando un banco di prova in modo efficace richiede la comprensione di come interagire con il simulatore.
Simulatore Scripts
La maggior parte degli strumenti di simulazione supporta lo scripting Tcl (ModelSim, Vivado, Riviera-PRO). Scrivere un script di compilazione che compila tutti i file sorgente nell'ordine corretto, imposta le librerie di simulazione e gestisce il banco di prova.
vlib work
vcom -2008 dut.vhd
vcom -2008 tb_fifo.vhd
vsim -voptargs=+acc work.tb_fifo
run -all
Modalità Batch e Regressione
Per il test di regressione, eseguire simulazioni in modalità batch (nessuna GUI) per risparmiare tempo. Il banco di prova dovrebbe emettere un chiaro messaggio di passaggio/faccia che può essere parsed da uno script esterno.
Forma d'onda Dumping e Debug
Durante lo sviluppo, abilitare il log delle forme d'onda per i segnali di debug. Usa in ModelSim per registrare tutti i segnali gerarchici.
Collezione di copertine
Abilitare le opzioni di copertura del codice nel simulatore. In ModelSim, utilizzare [ e poi [ per scrivere report di copertura.
Pitfalls comune e come evitare di loro
Trascurare la sequenza di reset
Molti progetti richiedono il ripristino per un numero specifico di cicli di clock. Seguire sempre le specifiche DUT; i banco di prova generici spesso falliscono perché il reset è stato smontato troppo presto.
Sincronizzazione dell'improperato
Segnali di guida nel ciclo dell'orologio sbagliato è una frequente fonte di errori di simulazione.
Copertura incompleta
È facile testare il normale funzionamento ma saltare le condizioni di errore (ad esempio, FIFO completo, backpressure, input non valido).
Ignorando il tempo
La simulazione di RTL sintetizzabile è tipicamente ciclico-accurata, ma i banchi di prova possono facilmente modellare i percorsi combinati in modo errato.
Ritardi con codice
Evitare ] a meno che la modellazione di comportamento puramente asincrono. Tali ritardi rendono i banchi di prova sensibili alle variazioni di frequenza dell'orologio.
Strumenti e risorse esterne
Per approfondire la vostra esperienza di banco di prova, esplorare le seguenti risorse:
- VVM: Metodologia di verifica VHDL universale[[] – Un framework di verifica VHDL open-source che fornisce procedure per la gestione di interfacce comuni come AXI, SPI e UART.
- OSVM: Metodologia di verifica VHDL a sorgente aperta[[] – Offre funzionalità di randomizzazione, copertura e di tabellone di valutazione per aumentare i banchi di prova VHDL standard.
- VHDL-2008 Designers Guide[[] – Riferimento completo per le caratteristiche linguistiche particolarmente utili nelle banchi di prova.
Conclusioni
Grazie alla padronanza dei componenti principali, la generazione dello stimolo, il monitoraggio, l'autocontrollo e la copertura, è possibile creare ambienti di prova che catturano i bug in anticipo e garantire che i progetti soddisfino le specifiche prima della costruzione dell'hardware.