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