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