
Getting started: Test benching MyHDL con ISE Simulator
Un sistema descritto in VHDL viene solitamente simulato per analizzarne il comportamento, stimolando i possibili ingressi e verificando se i segnali in uscita sono quelli attesi. Si crea quindi un file di testbench che fornirà gli stimoli necessari. Ora non ci resta che verificare la risposta in uscita del Multiplexer con Xilinx ISim. Tech Stack[1] Utilizzo di Ise Project Navigator e ISE Simulator.Step 1 - Creare un nuovo progettoQuesta volta non utilizzeremo come Top Module lo schematico come avevamo già visto in questo tutorial , ma lavoreremo direttamente sul codice VHDL. Dopo aver importato i files .VHD la prima cosa che dobbiamo fare è controllarne la sintassi selezionado da Synthesize -XST (1) la voce Check Syntax (2) ed infine Run (3). Se il controllo della sintassi va a buon fine apparirà il check mark verde: Step 2 - VHDL Test BenchPrima di procedere con la simulazione comportamentale dobbiamo creare un nuovo file Test Bench che fornisca gli stimoli necessari per la simulazione quindi click destro e selezioniamo New Source. Scegliamo VHDL Test Bench (1) e gli diamo un nome sognificativo (2) come tb_mux e premiamo Next (3). Associando nella schermata successiva il testbench con il source mux premendo Next e poi Finish. Step 3 - Inizializzazione della simulazioneIn automatico verrà creato un template di codice VHDL con il componente che andremo a testare. Come nei linguaggi di programmazione nell'intestazione possiamo importare delle librerie e dei packages che aggiungendo funzionalità al VHDL standard, infatti come possiamo vedere utilizziamo il package IEEE 1164.
In fase di inizializzazione (tempo 0+0δ) della simulazione vengono assegnati ai segnali in input dei valori attraverso l'operatore :=
La fase di inizializzazione termina quando tutti i processi raggiungono lo stato di sospensione. Ora la simulazione è pilotata dagli eventi che vanno indicati negli stimoli. Step 4 - Generazione degli stimoliPer simulare un sistema descritto in VHDL abbiamo bisogno di fornire degli stimoli (stimulus) all'entità sotto verificia (UUT, unity under test) per controllare se i segnali di uscita erano quelli attesi.
Assegno manualmente una serie di valori opportuni ai segnali e di istruzioni wait per descrivere gli stimoli. Quando assegniamo '0' ad un segnale dopo di 20 ns, in realtà stiamo producendo un evento che avrà luogo entro 20 ns.
Va ribadito che nella dichiariazione di un processo non si può utilizzare sia wait che una sensitivity list questo perché le modalità di esecuzione e sospensione di un processo sono molto differenti. Infatti nel caso di una sensitivity list un processo entra in esecuzione solo se uno dei segnali elencati cambia il proprio stato a causa di un evento e viene sospeso quando raggiunge l'end process.
Se volessimo ottenere un comportamento analogo ad una sensitivity list con l'istruzione wait dovremmo scrivere alla fine del processo:
Step 5 - SimulationSelezioniamo il toggle button con la scritta Simulation (1) e il testbench (2) che abbiamo creato e ne controlliamo sintassi (3). Se il check syntax va a buon fine apparirà il check mark di colore verde e potremo selezionare Simulate Behavioral Model (4) e premere Run. Step 6 - Output waveformOra non ci resta che controllare i valori del diagramma temporale e confrontarli con la Truth Table per sapere se il nostro MUX descritto in Python con MyHDL funziona correttamente.
Dalla Truth Table sappiamo che se Bibliografia |