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

i i “LP_Tesi” — 2011/9/9 — 21:20 — page 95 — #95 i 4.8. MODULO LOADER i 95 Implementazione La parte di storage del modulo Loader viene principalmente occupata da una RAM, una FIFO e tanti flag di segnalazione, in ordine si vedono: Algoritmo 4.30 Loader: storage 1 BitHF size = fromInteger(width); 2 3 4 FIFOF#(Pixel) fin <- mkSizedFIFOF(width); BRAM_DUAL_PORT#(BitHF, Pixel) ram <- mkBRAMCore2(width*height,False); 5 6 7 8 9 10 11 12 13 14 15 16 RegBitHF addrWrite <- mkReg(0); RegBitHF addrRead <- mkReg(0); RegBitC modulus <- mkReg(0); Reg#(Bool) storeRam <- mkReg(False); Reg#(Bool) readyToRead <- mkReg(False); Reg#(Bit#(1)) step <- mkReg(0); Reg#(Bool) readLine <- mkReg(False); let fh <- mkReg(InvalidFile); Reg#(Bool) cnt <- mkReg(True); Reg#(Pixel) pixel <- mkReg(Pixel{red:0,green:0,blue:0}); Reg#(int) c <- mkReg(0); size: la variabile width contiene le dimensioni dell’immagine ed è definita nel Package Struct, questa variabile risulta utile per certi controlli; ram: RAM che andrà a contenere l’intera immagine una volta finito il processo di scrittura. fin: FIFO per mantenere il modulo asincrono; addrWrite: registro contenente l’indirizzo di scrittura della RAM, utilizza la porta a; addrRead: registro contenente indirizzo di lettura della RAM, utilizza la porta b; modulus: registro ausiliario per eseguire operazioni in modulo non potenza di 2; storeRam, readyToRead: rispettivamente flag che segnalano possibilità di scrittura e possibilità di lettura della ram RAM; i i i i