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