Tesi Robotica Analisi, progettazione e implementazione... | Page 137

i i “LP_Tesi” — 2013/10/17 — 18:27 — page 137 — #137 i 6.2. IMPLEMENTAZIONE i 137 una forma quadrata, ma bensì triangolare, ogni volta che il registro di indirizzo addr raggiunge la diagonale della matrice dei punteggi è necessario fare un salto alla prima colonna della riga successiva per impedire la scrittura in settori che fisicamente non esistono. Volendo essere più precisi le tre regole gestiscono tre situazioni complementari, pre1 gestisce il caso in cui l’indirizzo di lettura è arrivato alla fine della matrice in modo da resettare tutto ciò che deve essere usato nella prossima esecuzione, pre2 invece gestisce il caso in cui l’indirizzo è arrivato sulla diagonale e quindi performa il salto alla riga successiva, la regola pre3 invece gestisce tutti gli altri casi. Contemporaneamente altre 6 regole possono sparare (Alg:6.12), queste regole riempiono la FIFO result con le direzioni calcolate, un numero così grande di regole è dovuto al numero di casi particolari che possono accadere durante la computazione. Queste regole possono sparare se e solo se il registro step segna 0, il compito di questo registro è quello di segnare la stato dell’elaborazione, solo nel momento in cui questa finisce il val ore di step cambia. La rule r1 considera il caso in cui l’indirizzo di lettura è all’inizio della BRAM, in questo caso viene estratto uno dei valori dalla FIFO delta e impostati i valori di top e left per il prossimo ciclo di clock, una direzione viene calcolata e messa in result, un altro valore viene inserito in ramNorth, questa FIFO simula come detto la BRAM score, il nome deriva dal fatto che viene letta ogni qualvolta è necessario sapere il valore di north di una certa casella. A questo punto è stato utilizzato un accorgimento per diminuire il numero di cicli di clock impiegati per la computazione e aumentare la frequenza di lavoro, infatti ogni volta che si vuole calcolare una nuova cella è necessario confrontare i tre valori delle celle adiacenti. La ricerca del massimo fra tre elementi in hardware è un operazione che fa perdere un sacco di tempo se fatta tutta in un ciclo di clock, sono necessari infatti due confronti, il primo ritorna il massimo fra due elementi, il secondo confronta il terzo con il massimo precedente. Qualsiasi operazione che dipende dal risultato deve aspettare, questo cala di molto la frequenza di lavoro. Per questo motivo in ogni ciclo di clock si cerca di portarsi avanti del lavoro per il prossimo ciclo, più precisamente si usa la funzione maxnwn() che appunto ritorna il massimo fra due valori richiedendo in input la cella di north e quella di nothwest. Il risultato viene quindi salvato nel registro maxu, pronto per essere confrontato con il valore di west nel ciclo successivo evitando di dover fare tutto in un unico ciclo. La regola r2 invece agisce nel momento in cui l’indirizzo è diverso da zero e allo stesso tempo presente nella prima colonna. Per come è struttura la matrice triangolare più diagonale questa condizione viene verificata subito dopo i i i i