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