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