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