Tesi Robotica Analisi, progettazione e implementazione... | Page 144
i
i
“LP_Tesi” — 2013/10/17 — 18:27 — page 144 — #144
i
144
i
6. SECONDA RELEASE
Algoritmo 6.16 Registri, fili e FIFO di Tracking
1
2
3
FIFO#(DirAddr) fout <− mkSizedFIFO(3);
RWire#(BRAMRequest#(BitF, Direction)) req <− mkRWire();
RWire#(Direction) resp <− mkRWire();
4
5
6
7
8
9
RegBitF addr <− mkReg(fromInteger((width∗width)/2+width/2−1));
RegBitF row <− mkReg(fromInteger(width−1));
RegBitF col <− mkReg(fromInteger(width−1));
Reg#(BitF) modC <− mkReg(fromInteger(width−1));
Reg#(BitF) divC <− mkReg(fromInteger(width−1));
attualmente raggiunta nella fase di Backtrack, i registri modC e divC consentono
di sapere in ogni momento, opportunamente aggiornati, la riga e la colonna attuale, questo per evitare di dover fare ogni volta una divisione e un’operazione di
modulo solo per sapere informazioni che possono essere ottenute con addizioni
successive, row e col invece mantengono registrate la riga e la colonna precedente.
Come detto in precedenza la fase di Backtrack impiega due cicli di clock per
ogni elemento che capita nel percorso, questo perché nel primo ciclo viene effettuata una richiesta mentre il secondo riceve il risultato della richiesta e si
regola di conseguenza. A questo scopo in Alg:6.17 è possibile vedere il codice
che permette la richiesta alla matrice delle direzioni. A dimostrazione di quanto
detto prima si può osservare come il valore di col e row divengano la riga e
Algoritmo 6.17 Regola per le richieste di lettura
1
2
3
4
5
6
7
8
9
rule read (step==1);
if (row