Tesi Robotica Analisi, progettazione e implementazione... | Page 97
i
i
“LP_Tesi” — 2013/10/17 — 18:27 — page 97 — #97
i
4.2. BLUESPEC
i
97
Algoritmo 4.7 Interfaccia FIFOF
1
2
3
4
5
6
interface FIFO #(type element_type);
method Action enq(element_type x1);
method Action deq();
method element_type first();
method Action clear();
endinterface: FIFO
Package FIFO
Il package FIFO definisce molte interfacce utili e moduli che fungono da code
FIFO. L’interfaccia FIFO pur non presentando metodi espliciti per l’analisi dello
stato della coda quali notFull e notEmpty, consente il deque e l’enque rispettivamente solo nel caso in cui la FIFO sia non vuota o non piena, questo grazie
alle condizioni di fire implicite.
Nella prima release del progetto si era deciso di utilizzare invece l’interfaccia
FIFOF con i segnali di notFull e notEmpty esplicitati, tuttavia nelle varie fasi
di revisione del codice si è visto come questi non siano necessari dato l’ottimo
lavoro svolto dalle regole implicite.
Per rendere i moduli del progetto asincroni fra di loro è stata interposta quindi
una coda di tipo FIFO in modo da bloccare e riprendere la pipeline di processazione quando una parte del circuito è troppo lenta o troppo veloce rispetto
alle altre.
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.
Package BRAM
Il package BRAMCore fornisce tipi, interfacce e moduli per l’utilizzo delle BlockRam presenti all’interno dell’FPGA. L’implementazione in Verilog consiste in un
i
i
i
i