Tesi Robotica Un co-processore per Stereo-Matching: Architettura | Página 33
i
i
“LP_Tesi” — 2011/9/9 — 21:20 — page 33 — #33
i
2.2. LIBRERIE UTILIZZATE
2.2
i
33
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 il 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.
Algoritmo 2.3 Interfaccia FIFOF
1
2
3
4
5
6
7
8
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. 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