...

Simulazione verilog - Dipartimento di ingegneria elettrica ed

by user

on
Category: Documents
24

views

Report

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
Fly UP