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