Tesi Robotica Analisi, progettazione e implementazione... | Page 127

i i “LP_Tesi” — 2013/10/17 — 18:27 — page 127 — #127 i 6.2. IMPLEMENTAZIONE i 127 Implementazione Per iniziare a descrivere l’implementazione bisogna innanzitutto descrivere le variabili utilizzate, in Alg:(6.3) si osservano: Algoritmo 6.3 Variabili di Top 1 2 3 FIFO#(DualPixel) fin <− mkSizedFIFO(3); FIFO#(DispColor) fout <− mkSizedFIFO(3); SizedVector#(Processor_Ifc) processors <− replicateM(mkProcessor); 4 5 6 7 Reg#(BitPD) inIndex <− mkReg(0); Reg#(BitPD) inCheck <− mkReg(0); RegBitC inCnt <− mkReg(fromInteger(width)); 8 9 10 FIFO#(BitPD) sorter <− mkSizedFIFO(parDeep); RegBitC outCnt <− mkReg(0); fin: FIFO di ingresso; fout: FIFO di uscita; processors: vettore di Processor; inIndex: indice del Processor in cui inserire i pixel; inCheck: indice di controllo per scoprire Processor non occupati; inCnt: contatore dei pixel in ingresso; sorter: FIFO che tiene traccia dell’ordine in cui i processor sono stati caricati, e quindi dell’ordine in cui, alla fine dell’elaborazione, devono essere letti; outCnt: contatore dei pixel in uscita; Le regole del modulo principalmente hanno lo scopo di gestire la parallelizzazione dei Processor, esistono dunque due fasi di gestione per l’inserimento e due fasi per l’estrazione (Alg:6.4). Nella fase di inserimento la regola inManager scorre i vari processor cercandone uno libero, quando questo viene trovato una delle n regole enque viene attivata, di preciso viene attivata la regola che assegna al processor trovato libero i pixel presenti nelle FIFO fin. i i i i