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