Tesi Robotica Un co-processore per Stereo-Matching: Architettura | Page 31
i
i
“LP_Tesi” — 2011/9/9 — 21:20 — page 31 — #31
i
2.1. COSTRUTTI PRINCIPALI
i
31
prima e dopo l’incremento, il valore di y prima e dopo l’incremento, e la stringa
“Hello World!”.
Adesso scriviamo il testbench per provare il modulo appena creato:
Algoritmo 2.2 Testbench
1
package Tb;
2
3
4
(* synthesize *)
module mkTb (Empty);
5
6
Hello_Ifc test <- mkHello;
7
8
9
10
11
rule greet;
$display ("Value of x:",test.valueX());
$display ("----------------");
endrule
12
13
14
endmodule: mkTb
endpackage: Tb
Il testbench non fa altro che istanziare una variabile di nome test di tipo Hello_Ifc [riga 6] e chiamare il metodo valueX del modulo appena istanziato. In
output avremo quindi la stampa a schermo di questo nuovo modulo più quella
del modulo Hello. Dopo 3 cicli di clock avremo quindi il risultato presente in
Fig:2.1.1.
Come si vede, il valore di x, definito come registro a 2 bit (Reg#(Bit#(2))), prima e dopo l’incremento non cambia, questo perché appunto si tratta di un registro, e per modificare il contenuto di un registro è necessario utilizzare l’assegnatore non bloccante “<=” che aggiorna il valore al successivo ciclo di clock
esattamente come succede in un circuito elettrico, mentre il valore di y (definito
semplicemente su 2 bit) si aggiorna ogni volta dato che si tratta di una variabile che contiene al suo interno una semplice etichetta di ciò che è il risultato e
quindi può variare all’interno di un singolo ciclo di clock. Anche la chiamata del
metodo valueX dimostra come il contenuto aggiornato del registro possa essere
letto solamente dopo che il ciclo di clock attuale sia finito.
Un’altra cosa importante da notare è il $ prima dell’istruzione display, questo
indica che si sta effettuando una chiamata di sistema che verrà ignorata durante
i
i
i
i