Tesi Robotica Un co-processore per Stereo-Matching: Architettura | Page 91
i
i
“LP_Tesi” — 2011/9/9 — 21:20 — page 91 — #91
i
4.7. MODULO TB
i
91
Una volta che l’immagine sarà completamente processata, tramite la system call
di terminazione ($finish) la simulazione viene arrestata.
Implementazione
Classica classe di un progetto in BSV, il Testbench permette di simulare i moduli creati. Non esponendo porte all’esterno si fa presto a pensare che contenga
solamente rule, ed infatti sono queste che ne gestiscono completamente il funzionamento. Possiamo osservare due regole di inizializzazione, la prima è setUp
(r:1 Alg:4.27), apre i file e li assegna alla variabile result, contenitore della
mappa delle occlusioni, e alla variabile dispari ty, contenitore della mappa di
disparità. Le due stringhe: result_finalL e bw_disparity_L sono definite nel
package Struct (Cap:4.1). La regola Init (r:10 Alg:4.27) scrive nei file l’intestazione necessaria per i formati grafici Netpbm, all’interno di questa sono presenti informazioni come il tipo (P6/P5), le dimensioni dell’immagine (altezza
larghezza) e profondità massima del colore (255). Le suddette regole vengono
eseguite una sola volta all’inizio del programma grazie al contatore di cicli di
clock c.
Algoritmo 4.27 Tb: rule setUp+Init
1
2
3
4
5
6
7
8
rule setUp (c==0);
loaderL.start();
loaderR.start();
File file1 <- $fopen(result_finalL, "wr" ) ;
result <= file1;
File file2 <- $fopen(bw_disparity_L, "wr" ) ;
disparity <=file2;
endrule: setUp
9
10
11
12
13
rule init (c==1);
$fwriteb(result, "P6\n%0d %0d\n255\n",width,height);
$fwriteb(disparity, "P5\n%0d %0d\n255\n",width,height);
endrule: init
Una volta che i file sono stati inizializzati si passa alla gestione del caricamento
delle righe, la rule loader (r:1 Alg:4.28) carica nel modulo Top il contenuto dei
loader fino a quando questi hanno qualcosa nella FIFO di uscita. Ma i loader
non possono continuare a trasmettere pixel infinitamente, infatti la loro gestione
i
i
i
i