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