Tesi Robotica Analisi, progettazione e implementazione... | Page 89
i
i
“LP_Tesi” — 2013/10/17 — 18:27 — page 89 — #89
i
4.1. VERILOG
i
89
Algoritmo 4.3 Test Bench per il contatore
1
2
3
module tb;
reg clk, rst, enable;
wire[3:0] out;
4
5
counter cnt(clk, rst, enable, out);
6
7
8
9
10
11
12
13
14
15
16
17
18
initial begin
$monitor ("clock=%b, reset=%b, enable=%b, count=%d", clk, rst,
enable, out);
clk=0; rst=0; enable=0;
#3 rst=1;
#1 rst=0;
#1 enable=1;
#2 enable=0;
#2 enable=1;
#2 rst=0;
#1 rst=1;
#3 $finish();
end
19
20
21
22
23
always begin
#1 clk <= ~clk;
end
endmodule
A questo punto non resta che simulare il modulo appena scritto utilizzando il
test bench in Alg:4.3.
Nel blocco intial viene utilizzata la funzione di sistema $monitor(), questa
funzione è molto simile a $display(), con un unica differenza, mentre la funzione $display() deve essere chiamata esplicitamente per essere invocata, la
funzione $monitor() una volta chiamata stamperà a schermo la stringa formattata ogni volta che uno dei parametri cambia valore, ad esempio un registro
passa da 0 a 1 e viceversa. Inoltre è ovviamente necessario istanziare il modulo
contatore e collegare la sua interfaccia ai registri e fili presenti nel test bench.
Da notare l’utilizzo dell’operatore di scheduling #num, il quale consente di dire al
simulatore in che ciclo di clock devono essere esegu