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