VHDL for beginners: Testbench

Nelle prime tre lezioni di questo corso base per il VHDL abbiamo affrontato tutti gli elementi base che consentono la progettazione di un componente in piena autonomia. Tali conoscenze hanno permesso di acquisire le competenze necessarie anche per prendere confidenza con la suite di sviluppo Xilinx ISE e osservare il risultato della sintesi di circuiti che, per quanto semplici, ci hanno permesso di ottenere una panoramica completa dell'attività di sviluppo di un nuovo componente. L'attività di design di un componente non prevede solo lo sviluppo dello stesso ma anche la verifica che tale componente implementi correttamente le funzionalità per le quali è stato progettato. Il VHDL prevede la possibilità di verificare un componente mettendo a disposizione una serie di costrutti e tecniche che saranno oggetto di studio in questo articolo. Quando il risultato della progettazione di un sistema inizia a diventare molto complesso e articolato, l'attività di test e verifica diviene un passo estremamente fondamentale della progettazione. Dunque risulta importante acquisire le competenze per testare in modo rapido ed efficace il proprio lavoro.  Quando si parla di test nel contesto VHDL lo si fa utilizzando il termine tecnico Testbench, ossia tavolo di prova.

Introduzione

In questa lezione, rispetto alle precedenti, invertiamo un po' la didattica in quanto partiremo fin da subito con un esempio pratico, mentre introdurremo i concetti e gli aspetti teorici necessari di volta in volta. Tale scelta deriva dal concetto di testbench in VHDL, in quanto esso viene progettato con la stessa metodologia dei componenti.  Dunque, per questa lezione partiremo dall'esempio del multiplexer a 4 canali sviluppato nella precedente, e procederemo nella realizzazione del tavolo di prova per valutarne il corretto comportamento osservando i principali costrutti che il VHDL ci mette a disposizione per i test.

Creazione del Testbench

Per mettere alla prova il nostro componente andiamo a creare un modulo di testbench che successivamente progetteremo in modo da poter controllare gli input e le relative temporizzazioni da dare al test. Iniziamo con l'aprire il progetto del Mux4 sviluppato nella precedente lezione. Nella finestra principale della suite si può osservare che, come riportato in figura 1, nell'area di progetto è selezionata la voce "Implementation", mentre è anche disponibile una voce "Simulation". Selezionando la spunta relativa a questa voce non si notano sostanziali cambiamenti dell'area progetto, ma si aggiunge un ulteriore menù a tendina in cui è possibile scegliere una tra le 4 voci disponibili, ossia: Behavioral; Post-Translate; Post-Map e Post-Route. Ognuna di queste voci consente la scelta del livello di astrazione per il modello di simulazione, ossia in quale fase testare il proprio componente. La prima andrà a testare il solo comportamento del componente senza tener conto di eventuali vincoli dovuti alla tecnologia scelta (modello di FPGA) e all'implementazione (posizionamento). Gli altri livelli di astrazione, invece, introdurranno di volta in volta nuove caratteristiche dovute ai diversi processi di sintesi del componente VHDL. Dunque l'attività di test può essere condotta a diversi livelli di sviluppo del componente ma in questa lezione ci occuperemo solo della prima, anche se risulta molto astratta in quanto non tiene conto di tutta una serie di fattori che influiranno poi sul comportamento del dispositivo, come ad esempio ritardi o effetti dell'ambiente esterno (temperatura, segnali affetti da rumore, dinamiche dei segnali di ingresso, etc). Effettuare un test a livello comportamentale, e quindi una simulazione sul solo comportamento consentirà di intervenire tempestivamente su eventuali malfunzionamenti del componente e/o sistema ed evitare la ri-esecuzione dei tool di Place&Route che in genere chiedono molto più tempo e risorse per ottenere il risultato finale.
Figura 1. Ambiente Xilinx ISE e sezioni di implementazione e simulazione

Figura 1: Ambiente Xilinx ISE e sezioni di implementazione e simulazione

Per il momento selezioniamo la voce "Behavioral" e proseguiamo ad aggiungere il nostro file di testbench. Per farlo aggiungiamo un nuovo sorgente al progetto (come abbiamo fatto la prima volta per creare il modulo VHDL) ma questa volta selezioniamo "VHDL Test Bench" anzichè "VHDL Module". Per semplicità diamo lo stesso nome aggiungendo "_test" alla fine, come si vede in figura 2. Cliccando su Next si accede alla seconda finestra della pagina di wizard dove è possibile selezionare l'unità da testare (unit under test - UUT). In questa finestra saranno riportati i nomi di tutte le entità definite nell'area di progetto, ma in questo caso nella lista vi è solo l'entità del mux4 e la scelta è semplice e immediata, per non dire obbligatoria. In genere la finestra mostra la disponibilità di tutti i componenti presenti nel workspace aperto del progetto in modo tale da consentire di poter scegliere il componente giusto su cui progettare [...]

ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 2505 parole ed è riservato agli abbonati PRO. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici MAKER e PRO inoltre potrai fare il download (PDF) dell'EOS-Book e di FIRMWARE del mese. ABBONATI ORA, è semplice e sicuro.

Abbonati alle riviste di elettronica

3 Commenti

  1. Maurizio Di Paolo Emilio Maurizio Di Paolo Emilio 29 novembre 2017
  2. Valter Valter 4 dicembre 2017

Scrivi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *