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