Tesi Robotica Analisi, progettazione e implementazione... | Page 166

i i “LP_Tesi” — 2013/10/17 — 18:27 — page 166 — #166 i 166 i 7. TERZA RELEASE Prima di spiegare la parte parallelizzata è necessario introdurre le regole per l’aggiornamento dell’indirizzo della matrice triangolare (Alg:7.6). La rule pre1 si occupa del primo indirizzo esattamente come faceva nella release precedente. La rule pre invece si occupa dell’aggiornamento dell’indirizzo in tutti gli altri casi, inoltre fa in modo che quest’ultimo vada abbastanza avanti dopo il raggiungimento della diagonale (addrr==row) per completare tutte le righe occupate dai riempitori, una volta che tutte le righe sono complete, l’indirizzo viene riportato alla prima colonna. Algoritmo 7.6 rule per l’aggiornamento dell’indirizzi 1 2 3 4 5 6 7 8 9 10 rule pre1(step==0 && addr==0); addr<=addr+slack; slack<=slack−1; row<=row+size+1; col<=0; top<=top+egap; left <=left+egap; result [intParDeep−1].enq(BitScoreDir{dir:WEST,score:gap∗2}); ramNorth[0].enq(BitScoreDir{dir:WEST,score:gap∗2}); endrule 11 12 13 14 15 16 17 18 19 20 21 22 23 rule pre (step==0 && addr>0); en.deq(); if (addr==row+(2∗fromInteger(intParDeep−1))) begin addr<=addr−(2∗fromInteger(intParDeep−1))+slack; slack<=slack−fromInteger(intParDeep); row<=row+size+fromInteger(intParDeep); col<=0; end else begin addr<=addr+1; col<=col+1; end endrule L’input del modulo proviene dal metodo put (Alg:7.7). Questo metodo spacchetta le coppie di pixel e fornisce ognuno ad una FIFO delta[i] relativa. Ogni coda corrisponde ad un riempitore, e per ognuna di queste è necessario calcolare il punteggio di match attraverso la ben nota formula. Come per la seconda release, anche la nuova sfrutta un insieme di regole per il riempimento della matrice, per la precisione le regole possono essere divise in tre gruppi, ci sono le regole che si occupano nel riempimento della matrice i i i i