Tesi Robotica Un coprocessore per Stereo-Matching: Profiling ... | Page 73
i
i
“MF_Tesi” — 2011/9/12 — 11:39 — page 73 — #73
i
5.5. COSTRUTTI PRINCIPALI
i
73
Value after-y:1
Hello World!
Value of x:1
-------------Value before-x:2
Value after-x:2
Value before-y:0
Value after-y:1
Hello World!
Value of x:2
--------------
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
il processo di sintesi dato che ovviamente l’FPGA non ha modo di stampare
a schermo delle stringhe. Un’altra chiamata importante è $finish(0), che
combinata con un contatore di cicli di clock permette agilmente l’interruzione
della simulazione evitando così di bloccare la macchina su cui gira bluespec.
Ogni modulo deve essere preceduto dalla parola chiave: (* synthesize *) nel
caso in cui lo s