Tesi Robotica Analisi, progettazione e implementazione... | Page 156
i
i
“LP_Tesi” — 2013/10/17 — 18:27 — page 156 — #156
i
156
i
7. TERZA RELEASE
è comunque necessario capire come fornire uno stream di m coppie di pixel, il
cuore dei Raster è composto da BRAM, che al più possono leggere su due porte
diverse, un limite enorme se si vuole parallelizzare di più, infatti per molto
tempo questo è stato l’ostacolo principale alla nuova release, ma alla fine si è
riusciti a trovare una tecnica che consentisse ad ogni ciclo di clock di inviare
m coppie di bit a piacere in modo che queste fossero utili al riempimento della
matrice dei punteggi. Come detto prima ogni riga deve attendere un ciclo di
clock rispetto alla precedente prima di poter cominciare, e il segreto sta tutto
qui, infatti cacheando i valori volta per volta, e leggendo ad ogni ciclo di clock
è possibile creare le m coppie.
Volendo quindi creare una cronologia degli eventi per la generazione delle coppie bisogna distinguere il Raster di destra da quello di sinistra. Il Raster di
destra legge pixel uno di fila all’altro. Nel primo ciclo di clock in cui un pixel
è disponibile questo viene inviato, e andrà a riempire la prima cella della prima riga, nello stream le m − 1 coppie di pixel non ancora letti sono irrilevanti
perché il ritardo di un ciclo di clock fa in modo che all’inizio solo la prima riga
possa essere letta, nel ciclo successivo è disponibile anche la seconda lettura dal
Raster, questo permette di poter inviare 2 coppie, le restanti m − 2 vengono ignorate perché in questo istante possono essere riempite solo le prime due righe,
dopo n cicli di clock sarà possibile inviare m − n coppie contemporaneamente,
il discorso prosegue fino a quando m = n e tutti i riempitori sono attivi, lo stesso procedimento può essere fatto con il Raster di destra, l’unica differenza sta
nel fatto che quest’ultimo assomiglia molto ad uno shift-register, infatti i pixel
vengono letti in sequenza una continuazione per ogni riga e non solo una volta
come succedeva nel Raster di sinistra, questo perché mentre i pixel di destra
vengono usati al più n volte di seguito, i pixel di sinistra vengono letti 1 volta
per le n righe. In questo modo quindi un pixel viene utilizzato per una riga al
primo ciclo di clock, al secondo lo stesso pixel viene shiftato per essere usato
dalla seconda riga, al terzo ciclo di clock il pixel arriva alla terza riga e così via
fino all’ultima, iterando il procedimento per ogni elemento del Raster di destra
è possibile quindi produrre un flusso di m pixel facendo una lettura a ciclo di
clock.
Per aumentare la chiarezza dei fatti esposti in Tab:7.1 è mostrato uno stream di
coppie tipico per 3 riempitori con larghezza dell’immagine uguale 5 (la matrice
dei punteggi verso cui lo stream è puntato è quella di Fig:7.1.1). La tabella è
suddivisa in due sezioni, quella che va dal ciclo di clock 0 al ciclo 4, e quella
che va dal 5 fino al 12. Questa differenza è stata evidenziata per indicare quale
pezzo dello stream riempisse quale righe, così mentre la prima sezione riempie le
i
i
i
i