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