Tesi Robotica Un coprocessore per Stereo-Matching: Profiling ... | Page 74
i
i
“MF_Tesi” — 2011/9/12 — 11:39 — page 74 — #74
i
5.6. LIBRERIE UTILIZZATE
5.6
i
74
Librerie utilizzate
Fra i package importati durante la scrittura del codice possiamo principalmente
annoverarne due: FIFOF e BRAMCore, nelle librerie di default è possibile trovare
queste due classi scritte sia in Verilog che BSV.
Package FIFOF
Il package FIFOF definisce molte interfacce utili e moduli che fungono da code
FIFO. L’interfaccia FIFOF è molto simile a quella FIFO (First In First Out), ma
al suo interno definisce metodi per controllare lo stato attuale della coda, i due
metodi sono notFull e notEmpty, che rispettivamente indicano che la FIFO è
non piena o non vuota.
Per rendere i moduli del progetto asincroni fra di loro è stata interposta una
coda di tipo FIFOF in modo da sapere quando è possibile la scrittura e quando la
lettura, rendendo così i moduli indipendenti, come esempio basta pensare ad una
regola che al posto di sincronizzarsi con il modulo connesso testa il contenuto
di una coda, e fino a quando questa rimane vuota la regola rimane inattiva.
4
interface FIFOF#(type a);
method Action enq (a x);
method Action deq;
method a first;
method Action clear;
method Bool notFull;
method Bool notEmpty;
endinterface: FIFOF
Per istanziare l’interfaccia è necessario specificare il tipo di elementi utilizzati
passando questo parametro al costruttore (type a). Una volta istanziato il
modulo abbiamo a disposizione vari metodi: il metodo enq (enque) inserisce
un elemento nella coda mentre il metodo deq (deque) lo toglie, first invece
ritorna il primo elemento presente in coda senza toccarlo. Il metodo clear
invece pulisce la coda. A questo punto troviamo notFull e notEmpty che come
detto prima descrivono lo stato della coda.
i
i
i
i