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