Tesi Robotica Un co-processore per Stereo-Matching: Architettura | Page 98
i
i
“LP_Tesi” — 2011/9/9 — 21:20 — page 98 — #98
i
4.9. RISULTATI
i
98
Algoritmo 4.33 Loader: rule requestOfRead+read
rule requestOfRead (readyToRead && readLine && addrRead<=
fromInteger((width*height)-1));
ram.b.put(False, addrRead, Pixel{red:0,green:0,blue:0});
step<=1;
addrRead<=addrRead+1;
modulus<=incr(modulus);
if(modulus==truncate(size-1))
readLine<=False;
endrule: requestOfRead
1
2
3
4
5
6
7
8
9
rule read(step==1);
fin.enq(ram.b.read());
if(addrRead>fromInteger((width*height)-1)) step<=0;
endrule: read
10
11
12
13
4.9
Risultati
Finita la descrizione del codice passiamo ora alla descrizione dei risultati. Come
detto all’inizio, il problema dello stereo matching ha come input una serie di
immagini della stessa scena, prese una leggermente discostata dall’altra. In un
primo momento, per semplificare il lavoro di sviluppo si è deciso di processare
solamente immagini di dimensione potenza di 2, per permettere ai registri di
indirizzamento di andare in overflow ogni volta che la lettura o la scrittura di un
immagine in memoria finiva, in modo da resettarsi automaticamente in attesa
di un nuovo input.
Gli FPGA usati per la sintesi di questo tipo di applicazione sono tutti di fascia bassa (famiglia Cyclon IV E e GX ), comportando così dei grossi limiti di
memoria per un programma che ne fa largo uso, basti pensare alle sole RAM
presenti nel modulo Scoring. Abbiamo un consumo pari a 32bit ∗ n ∗ n per la
matrice dei punteggi (con n larghezza dell’immagine), e 3bit ∗ n ∗ n per le matrici
dei gap e diag, per un costo totale di 35bit ∗ n ∗ n di memoria, ma il più potente
FPGA della famiglia Cyclon IV possiede appena 4 Mb (3,888 Kb) di memoria
interna.
Data la scarsezza di risorse si è pensato di dividere l’immagine originale in chunk
di varie dimensioni, i primi test sono stati eseguiti per chunk di 32x32 pixel,
i
i
i
i