Simulazione verilog - Dipartimento di ingegneria elettrica ed
by user
Comments
Transcript
Simulazione verilog - Dipartimento di ingegneria elettrica ed
Simulazione verilog Lucidi del Corso di Elettronica Digitale Modulo 8 Università di Cagliari Dipartimento di Ingegneria Elettrica ed Elettronica Laboratorio di Elettronica (EOLAB) Simulazione Il verilog come prima cosa è un linguaggio per la simulazione dei sistemi digitali: viene usato come design entry per software di simulazione (noi useremo ModelSim) che simulano, simulano appunto, il comportamento del sistema nel tempo Per simulare un sistema è necessario per prima cosa descriverlo d i l (descrivere (d i il modulo d l che h lo l implementa) e poi definire un insieme di stimoli esterni t i opportuni t i per validarne lid il funzionamento f i t 17 Novembre 2009 ED - Verilog: simulazione Massimo Barbaro Testbench Concetto base per la simulazione è il testbench (letteralmente banco di prova) Il testbench non è altro che un modulo ad alto li ll che livello h contiene ti all suo interno: i t L’istanziazione del modulo da testare La generazione degli stimoli Eventuali strumenti di visualizzazione dei risultati Gli stimoli possono essere generati dal testbench stesso (con blocchi initial ed always) oppure da sottomoduli istanziati nel testbench 17 Novembre 2009 ED - Verilog: simulazione Massimo Barbaro Testbench Generazione degli stimoli ti li TESTBENCH UUT (Unit Under Test) Visualizzazione o verifica dei risultati 17 Novembre 2009 ED - Verilog: simulazione Massimo Barbaro Testbench Il testbench non ha né ingressi né uscite C ti Contiene sempre all suo interno i t il modulo d l da d testare (UUT) Gli ingressi del UUT, all’interno del modulo testbech sono definiti come reg perché devono essere imposti dal testbench stesso (a meno che non vengano generati da moduli istanziati nel testbench, nel qual caso sono wire) Le uscite del UUT, dentro il testbench sono sicuramente wire perché devono essere imposte p dal UUT e NON dal testbench 17 Novembre 2009 ED - Verilog: simulazione Massimo Barbaro Esempio Ovviamente my_and è un modulo che va definito a parte module tb_and; reg A,B; wire Z; my_and UUT(A,B,Z); initial begin A=0; B=0; #5 A=1; A=1 #5 A=0; B=1; #5 A=1;; #5 $stop; end initial $monitor($time,, A,B,,Z); Istanziazione del modulo da testare Generazione degli stimoli Visualizzazione delle uscite endmodule 17 Novembre 2009 ED - Verilog: simulazione Massimo Barbaro Funzioni di visualizzazione e controllo In verilog le espressioni che iniziano con $ sono funzioni di sistema (che vengono usate SOLO nei testbench per opportune verifiche e visualizzazioni). ) Fra queste: $ $monitor(“Qualsiasi ( Q stringa”,,var1,”str2”,var2) g ,, , , ) Serve per visualizzare i risultati, viene stampato ciò che compare fra parentesi ogni volta che i segnali del sistema cambiano. cambiano Si può usare la stessa formattazione del C $stop $ p Serve per interrompere la simulazione dopo un certo tempo (altrimenti continuerebbe all’infinito soprattutto se ci fossero dei blocchi always) 17 Novembre 2009 ED - Verilog: simulazione Massimo Barbaro Accesso ai file Il verilog mette a disposizione due costrutti (fra gli altri) per leggere dati da un file $readmemb (per leggere dati in forma binaria) $readmemh (per leggere dati esadecimali) L’uso di dati da file può essere utile in un t tb testbench h per prelevare l glili stimoli ti li da d un file fil precedentemente preparato, oppure per i i i li inizializzare il contenuto t t di una memoria i (per ( esempio con un programma) 17 Novembre 2009 ED - Verilog: simulazione Massimo Barbaro Accesso ai file $readmemb(“nomefile”,memory_name [,indirizzo iniziale [,indirizzo_finale]]) [,indirizzo_iniziale [,indirizzo finale]]) “nomefile” è evidentemente il nome del file da cui leggere i dati memory_name è il nome del array dove inserire i dati letti dal file i di i indirizzo_iniziale i i i l (opzionale) ( i l ) è l’indirizzo l’i di i d cuii da iniziare a scrivere (l’elemento dell’array da cui si inizia a riempire ll’array array stesso con il contenuto del fie) indirizzo_finale (opzionale) è l’ultimo elemento d ll’ dell’array che h viene i riempito i it La sintassi di $readmemh è uguale, ma i dati sono esadecimali e non binari 17 Novembre 2009 ED - Verilog: simulazione Massimo Barbaro Accesso ai file: esempio module testbench; reg [7:0] mem [0:9]; reg [7:0] outbus; integer kk; … initial a $readmemb("prova.txt",mem); … “prova.txt” 00000000 00000001 00000010 00000011 00000100 00000101 00000110 00000111 00001000 00001001 endmodule Nel testbench mem è un array di 10 posizioni, ciascuna di 8 bit. I valori da assegnare a ciascun bit vengono presi dal file prova.txt prova txt che è un semplice file di testo 17 Novembre 2009 ED - Verilog: simulazione Massimo Barbaro Accesso ai file: esempio “prova.txt” 00000000 00000001 00000010 // Il file può contenere commenti che verranno // ignorati i ti 00000011 // Si può esplicitare la posizione in cui inserire // il dato utilizzando la sintassi // @posizione dato // come q qui sotto @4 00000100 00000101 00000110 00000111 00001000 00001001 17 Novembre 2009 ED - Verilog: simulazione Massimo Barbaro VERILOG Modello fisico Università di Cagliari Dipartimento di Ingegneria Elettrica ed Elettronica Laboratorio di Elettronica (EOLAB) Verso un modello fisico Le rappresentazioni verilog viste finora sono tutte equivalenti fra loro perché danno solo una rappresentazione funzionale del blocco logico Si l Simulare una rappresentazione t i strutturale, t tt l dataflow od algoritmica di uno stesso blocco quindi i di fornisce f i glili stessi t i risultati i lt ti Per potere realizzare fisicamente un sistema è però necessario arrivare fino ad una descrizione circuitale dello stesso: la descrizione circuitale aggiunge informazioni (le prestazioni fisiche del circuito) 17 Novembre 2009 ED - Verilog: simulazione Massimo Barbaro Verilog: simulazione fisica Il verilog può essere utilizzato anche per una simulazione del comportamento reale dei circuiti, in sostituzione di spice L simulazioni Le i l i i spice i i f tti richiedono infatti i hi d molto lt tempo e sono ragionevoli solo per singole porte l i h (di cuii bisogna logiche bi d t determinare i i parametri) t i) Le simulazioni di sistemi costituiti da molte porte logiche, invece, vengono fatte a livello di descrizione verilog, pur tenendo conto delle informazioni fisiche (tempi di propagazione) sulle singole porte ricavate con spice 17 Novembre 2009 ED - Verilog: simulazione Massimo Barbaro Verilog: ritardi In verilog è possibile rappresentare in tempo di propagazione di una primitiva logica (porta logica) per mezzo dell’operatore # and #2 g1(Z,A,B); Tempo di propagazione di 2nsec 17 Novembre 2009 ED - Verilog: simulazione Ha senso definire un tempo p di propagazione per le singole porte logiche ( h (che saranno implementate circuitalmente in CMOS) Massimo Barbaro Timescale La direttiva timescale viene usata per determinare l’unità l unità di tempo usata nelle simulazioni. Viene inserita all’inizio di un file verilog g ((al di fuori della definizione dei moduli)) `ti `timescale l <unità ità di tempo>/<precisione> t / i i L’unità L unità in cui sono espressi i tempi La precisione con cui vengono approssimati i t tempi i inseriti i iti Es. `timescale 1ns/1ns 17 Novembre 2009 ED - Verilog: simulazione Massimo Barbaro Esempio: porta AND Rappresentazione di una porta AND con un tempo di propagazione di 2ns `timescale 1ns/1ns module my_and(A,B,Z); y_ ( ) input A,B; output p Z;; wire A,B,Z; Timescale (fuori dal modulo) and #2 a1(Z,A,B); L’apice (`) si scrive con ALT+96, NON è l’apostrofo (‘) che c’è nella tastiera endmodule 17 Novembre 2009 Primitiva con ritardo ED - Verilog: simulazione Massimo Barbaro Definizione dei ritardi Ogni ritardo inserito può essere costituito da una tripletta (minimo, tipico, massimo) i cui elementi sono separatiti d dall simbolo i b l : (due (d punti) ti) and #(1:2:3) ( )g g1(Z,A,B); ( , , ); Si possono inserire separatamente i tempi di propagazione LH e HL separandoli con virgole and #(2,3) #(2 3) g1(Z,A,B); g1(Z A B); (tpLH (tpLH=2ns 2ns, tpHL tpHL=3ns) 3ns) Si p possono mettere le due cose insieme ((min:typ:max yp per tpLH e tpHL) and #(1:2:3, #(1:2:3 2:3:4) g1(Z g1(Z,A,B); A B); 17 Novembre 2009 ED - Verilog: simulazione Massimo Barbaro Esempio A and #2 g1(Z,A,B); g1(Z A B); B tpLH Rigettato Z tpHL t 17 Novembre 2009 ED - Verilog: simulazione Massimo Barbaro Ritardo inerziale Una combinazione che dà luogo ad una commutazione dell’uscita dell uscita viene rigettata (inerzia) se dura per un tempo più breve del ritardo della porta Nell’esempio precedente la seconda combinazione bi i A 1 B=1 A=1, B 1 dura d solo l 1ns 1 contro t un ritardo complessivo della porta di 2ns, quindi l’ l’uno l i logico che h dovrebbe d bb risultare i lt d tale da t l combinazione non riesce mai ad arrivare in uscita it (ritardo ( it d inerziale) i i l ) 17 Novembre 2009 ED - Verilog: simulazione Massimo Barbaro Circuiti reali Se le primitive logiche contengono un ritardo due diverse implementazioni di una stessa funzione non sono più equivalenti ma avranno tempi di risposta complessivi differenti a seconda di come sono state implementate. 17 Novembre 2009 ED - Verilog: simulazione Massimo Barbaro Esempio `timescale 1ns/1ns module my_and(A,B,Z); my and(A B Z); input A,B; output Z; wire A,B,Z; `timescale 1ns/1ns module my_and2(A,B,Z); my and2(A B Z); input A,B; output Z; wire A,B,C,Z; and #3 a1(Z,A,B); nand #1 a1(C,A,B); not #1 b1(Z b1(Z,C); C); endmodule endmodule Ritardo complessivo p 3ns 17 Novembre 2009 Ritardo complessivo p 2ns ED - Verilog: simulazione Massimo Barbaro