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