Tesi Robotica Un co-processore per Stereo-Matching: Architettura | Page 74

i i “LP_Tesi” — 2011/9/9 — 21:20 — page 74 — #74 i 4.4. MODULO RASTER i 74 Algoritmo 4.17 Raster: storage 1 BitC bound = fromInteger(width-1); 2 3 4 BRAM_DUAL_PORT#(BitC, Pixel) raster <- mkBRAMCore2(width, False); FIFOF#(Pixel) fout <- mkSizedFIFOF(width); 5 6 7 8 9 10 11 12 RegBitC addrw <- mkReg(0); RegBitC addrr <- mkReg(0); Reg#(Bool) start <- mkReg(False); Reg#(Bit#(1)) step <- mkReg(0); Reg#(Bit#(1)) preStep <- mkReg(0); RegBitC rip <- mkReg(0); RegBitC loop <- mkReg(0); step,prestep: flag che indica quando la richiesta di lettura è stata eseguita, il prestep contiene il valore di step al ciclo di clock precedente, lo shift è reso necessario per un fatto di sincronia; rip,loop: registri necessari al funzionamento del meccanismo per la ripetizione programmata degli elementi; Abbiamo a disposizione tre method, di cui solo uno è di tipo Action, il metodo write (r:1 Alg4.18) non fa altro che scrivere nella RAM raster ciò che arriva dall’esterno e incrementare l’indirizzo di scrittura secondo la funzione incr() che azzera addrw quando si arriva alla fine della riga. Una volta che la scrittura è completa (addrw==bound) questa termina lasciando pieno spazio alla lettura. Algoritmo 4.18 Raster: method 1 2 3 4 5 6 method Action write(Pixel data); raster.a.put(True, addrw, data); addrw<=incr(addrw); if(addrw==bound) start<=False; else start<=True; endmethod: write 7 8 9 method Pixel get() if(fout.notEmpty) = fout.first(); method Bool getFoutNotEmpty() = fout.notEmpty; i i i i