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