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

i i “LP_Tesi” — 2011/9/9 — 21:20 — page 83 — #83 i 4.5. MODULO SCORING i 83 Algoritmo 4.23 Scoring: rule preRead 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 rule preRead (step==0); if(addr==size) begin score.a.put(False, addr-size, 0); score.b.put(False, addr-size, 0); gapNorth.a.put(False, addr-size, 0); gapWest.a.put(False, addr-1, 0); end else if(addr>size) begin score.a.put(False, addr-size-1, 0); score.b.put(False, addr-size, 0); gapNorth.a.put(False, addr-size, 0); gapWest.a.put(False, addr-1, 0); end step<=1; endrule: preRead rizzo della testina di lettura/scrittura corrisponde all’ultimo indirizzo disponibile per la RAM (r:11 Alg:4.22), step viene così settato a 3 permettendo alla fase di backtracking di cominciare. Backtracking Durante questa seconda fase si ha di nuovo una sorta di ping-pong, questa volta fra due regole, ovvero backTrack (Alg:4.24) e read, il meccanismo è sempre quello di eseguire richieste di lettura per poi effettuare letture effettive al ciclo di clock successivo, data per quasi ovvia la regola read, che esegue una lettura su tutte le RAM all’indirizzo puntato da addr, passiamo ora alla descrizione della ben più consistente regola backTrack. In linea di principio non fa altro che istanziare una variabile blank di tipo DirAddr (direzione + indirizzo) e riempirla mano mano durante l’esecuzione. In linea di massima l’algoritmo opera così: Partendo dalla cella più in basso a destra, legge i valori delle tre matrici delle direzioni secondo l’ordine gapNorth, diag e gapWest, alla prima che trova piena, cioè con il valore 1 in quella posizione, segue la specifica direzione fino a ritrovarsi in una casella in cui quella stessa direzione è assente, a questo punto controlla i i i i