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

i i “LP_Tesi” — 2013/10/17 — 18:27 — page 130 — #130 i 130 i 6. SECONDA RELEASE e le risposte in fifo di uscito ed entrata dalla BRAM cache è stato necessario utilizzare l’oggetto wire all’interno del codice, Logicamente parlando il modulo espone all’esterno le seguenti porte: • INPUT: – Method put: questo metodo non fa altro che ricevere in ingresso coppie di pixel. I pixel trasmessi verranno poi inviati ai Raster (rasterL, rasterR). Alla fine della trasmissione/scrittura nei due Raster si avrà a disposizione per la lettura le intere righe omologhe. • OUTPUT: – Method get: collega il modulo per il calcolo della disparità all’esterno; – Method isFull: ogni Processor presente nel Top può ricevere pixel con il metodo put solo nel momento in cui questo non è occupato nella computazione e le memorie dei Raster sono state utilizzate, a questo scopo il segnale isFull indica che la possibilità di scrivere o meno nuovi pixel nei Raster. Implementazione Come è noto dalla prima release il modulo Processor non fa altro che istanziare i sotto moduli e interconnetterli fra di loro, come si può ben notare da Alg:6.6 ci sono 2 Raster (rasterL, rasterR), 1 Scoring (scoring), 1 Tracking (tracking) e 1 Disparity (disparity). In fine è presente anche una BRAM1Port denominata cache contenente al suo interno la matrice delle direzioni, si può notare infatti che la taglia definita in cfg è definita come (((width∗width/2)+width/2)∗ 2)/32+1. Ovviamente la variabile width è definita nel package Struct come nella prima release. Questa taglia però non è del tutto chiara al momento, infatti mentre (width ∗ width/2) + width/2) ∗ 2 rappresenta palesemente, per quanto detto nel capitolo sullo spazio utilizzato nelle BRAM, il numero di elementi di una triangolare inferiore più la diagonale, la divisione per 32 e la successiva somma a 1 non risultano chiare. Questo cambiamento è stato dovuto al modo in cui si è definita la BRAM cache, infatti osservandola bene si vede che la grandezza di parole che si è scelto è Bit#(32), quindi al posto di memorizzare x parole a 2 bit si è preferito utilizzare il formato x/16 parole a 32 bit, creando quindi la pacchettizzazione di 16 parole a 2 bit in una sola da 32. Con questa i i i i