Tesi Robotica Un co-processore per Stereo-Matching: Architettura | Página 59

i i “LP_Tesi” — 2011/9/9 — 21:20 — page 59 — #59 i i 59 metodo di put, che serve a gestire l’input, e un metodo get che serve a gestire l’output. In particolare questi due metodi sono il fulcro dell’asincronia creata nel circuito, sarà facile trovare quindi regole di fire come: fout.notEmpty o fout.notFull. I quali garantiscono che un metodo non può entrare in esecuzione se alla fifo a cui è associato non è vuota (get) o non piena (put). Esempio di come possono presentarsi, esempio tratto da Loader.bsv: Algoritmo 4.7 Metodi 1 2 3 method Action start() if(storeRam==False); storeRam<=True; endmethod: start 4 5 6 7 method Action restart() if(!readLine); readLine<=True; endmethod: restart 8 9 10 11 method Pixel get() = fin.first; method Bool getFinNotEmpty() = fin.notEmpty; method Bool getReadLine() = readLine; Analisi del codice Principalmente il codice può essere diviso in due parti, abbiamo: • moduli di implementazione; – Top, Processor, Raster, Scoring, Disparity. • moduli per il test. – Tb, Loader. In questo modo è stato possibile rendere agile sia il processo di testing che quello di sintesi. Sono due i file che contengono i moduli principali, Top.bsv e Tb.bsv. Mentre il primo espone delle porte di input ed output all’esterno, il secondo non ne ha bisogno dato che si tratta di un modulo per la gestione delle simulazioni. Inoltre facendo questa divisione si traccia un segno netto tra ciò che deve e i i i i