Tesi Robotica Analisi, progettazione e implementazione... | Page 172
i
i
“LP_Tesi” — 2013/10/17 — 18:27 — page 172 — #172
i
172
7.1.3
i
7. TERZA RELEASE
Modulo Tracking
Il modulo Tracking ha subito leggere variazioni, l’unica differenza dalla release
precedente consta nella modifica dell’aggiornamento degli indirizzi. Come spiegato precedentemente, ora la BRAM è suddivisa in blocchi, ognuno associato ad
un riempitore, si rendere quindi necessario costruire una dipendenza fra i blocchi che permetta di sapere a che indirizzo andare se ci si vuole muovere nelle
direzioni verso l’altro. L’unico modo per ottenere un risultato simile e quello
di calcolarsi a priori un array di scostamenti, questo array istanziato nel codice
come slack, consente di sapere in ogni momento di quanto bisogna muoversi
per cambiare riga. Se per esempio ci si trova nella riga i e si vuole andare alla
riga i − 1 con una mossa di north basterà sottrarre all’indirizzo attuale il valore
di slack[i-1], se invece ci si muove tramite una mossa di northwest all’indirizzo andrà sottratta la quantità slack[i-1]-1. I movimenti verso il west sono
rimasti inalterati in quanto le celle delle righe vengono comunque memorizzare
una di seguito l’altra.
Una piccola nota a margine riguarda il caso in cui il blocco riguardante una riga
sia il primo della BRAM, in questo caso infatti bisognerà tornare alla fine della
BRAM dove sono conservate tutte le righe appartenenti all’ultimo riempitore,
per evitare di dover eseguire controlli sul segno dell’operazione con le variabili
di slack dato che al posto di dover andare verso l’alto si deve andare verso il
basso, si è deciso semplicemente di mandare in underflow il registro in modo che
l’operazione con le variabili di slack sia sempre una sottrazione.
In Alg:7.13 è possibile osservare come le regole siano state modificate, viene
mostrata quindi quella che gestisce il Backtrack di north, alla fine della regola
è presente il meccanismo che aggiorna il valore dell’indirizzo, per questione di
semplicità si è deciso di usare sempre la variabile slack[0], facendo scorrere l’array
delle slack come in un array ciclico, alla fine della regola invece il valore di slack[0]
viene decrementato di 1 dato che ogni riga è più corta di quella precedente di
una sola cella.
7.2
Risultati
In Tab:7.2 è mostrato il modo in cui la parallelizzazione agisce sul numero di cicli
di clock per il calcolo della mappa di disparità delle immagini “cones”. Come
si può vedere i valori sulla sinistra che rappresentano il valore di simulazione
i
i
i
i