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