Tesi Robotica Un co-processore per Stereo-Matching: Architettura | Page 57
i
i
“LP_Tesi” — 2011/9/9 — 21:20 — page 57 — #57
i
i
57
Algoritmo 4.4 Storage programma
1
2
BitF size = fromInteger(width);
Bit#(32) gap=69, egap=98, bound=255;
3
4
5
6
7
8
9
10
11
12
BRAM_DUAL_PORT#(BitF, Bit#(32)) score
<- mkBRAMCore2(width*width,
BRAM_DUAL_PORT#(BitF, Bit#(1)) gapNorth
<- mkBRAMCore2(width*width,
BRAM_DUAL_PORT#(BitF, Bit#(1)) gapWest
<- mkBRAMCore2(width*width,
BRAM_DUAL_PORT#(BitF, Bit#(1)) diag
<- mkBRAMCore2(width*width,
FIFOF#(DirAddr) fout <- mkSizedFIFOF(width);
False);
False);
False);
False);
13
14
15
16
17
18
19
RegBitF addr <- mkReg(0);
Reg#(Bit#(3)) step <- mkReg(1);
Reg#(Bit#(32)) west <- mkReg(0);
Reg#(Bit#(32)) top <- mkReg(gap);
Reg#(Bit#(32)) left <- mkReg(gap);
Reg#(Channel) preDir <- mkReg(RED);
Funzioni
Le funzioni, a differenza dei metodi, non devono essere presenti nell’interfaccia,
non sono visibili dall’esterno del modulo, e vengono utilizzate per rendere il
codice più snello e leggero, la loro dichiarazione è molto simile a quella dei
metodi, tranne per la parola chiave iniziale e finale. Esempio in Alg:4.5.
Regole
Le regole sono la parte principale di ogni modulo, una prassi importante da
seguire è che le regole siano scritte sempre prima dei metodi. Il nome delle
regole è stato scelto cercando di delineare la funzionalità che la regola stessa
descrive, nel caso non sia stato possibile sono state chiamate semplicemente
r_#. Un esempio di insieme di regole proveniente da Raster.bsv può essere
trovato in Alg:4.6.
i
i
i
i