Tesi Robotica Analisi, progettazione e implementazione... | Page 136
i
i
“LP_Tesi” — 2013/10/17 — 18:27 — page 136 — #136
i
136
i
6. SECONDA RELEASE
queste code è presente delta. Tale FIFO è destinata alla gestione dell’input,
all’interno è possibile trovare il valore delta appunto calcolato come misura di
dissimilarità fra i due pixel. Successivamente viene istanziata la FIFO ramNorth
il cui compito è quello di simulare la BRAM score nello stesso modo in cui viene
mostrato in Fig:6.1.1. La coda result invece tiene memoria delle direzioni appena calcolate e aspetta fino a che non è possibile scriverle in memoria tramite
il filo req. I restanti registri verranno spiegati mano a mano che li si useranno
nel codice, a parte qualcuno il cui nome è autoesplicativo come col e row.
A questo punto si può passare a descrivere le regole (Alg:6.11), il primo gruppo che viene affrontato è quello delle rule preX. Queste vengono attivate ogni
qualvolta il registro step segna 0 ed è presente qualcosa nella coda en (enable).
Tale coda viene riempita ogni volta che arriva un nuovo elemento nella FIFO
delta come vedremo dopo nel method put. Lo scopo principale di queste regole
(soprattutto per quanto riguarda pre2) è quello di aggiornare il valore del registro di indirizzi nel modo corretto, questo perché non è più possibile aggiornare
incrementando semplicemente la posizione di 1, infatti ora la BRAM non ha più
Algoritmo 6.11 Regole pre di Scoring
1
2
3
4
5
(* descending_urgency="pre1,pre2,pre3" *)
rule pre1 (step==0 && addr==(size*size-2));
en.deq();
step<=1; slack<=size; row<=0;
endrule
6
7
8
9
10
11
12
13
rule pre2 (step==0 && addr==row);
en.deq();
addr<=addr+slack;
slack<=slack-1;
row<=row+size+1;
col<=0;
endrule
14
15
16
17
18
19
rule pre3 (step==0);
en.deq();
addr<=addr+1;
col<=col+1;
endrule
i
i
i
i