Tesi Robotica Analisi, progettazione e implementazione... | Page 162
i
i
“LP_Tesi” — 2013/10/17 — 18:27 — page 162 — #162
i
162
1
2
i
7. TERZA RELEASE
BitF startOffset=14;
slackStart[0]=34; slackStart[1]=18; slackStart[2]=17;
Il nome slackStart sta ad indicare il valore di inizializzazione dei registri di
slack. Lo startOffset come si può bene immaginare indica il punto in cui
il Backtrack deve iniziare, il numero viene ricavato semplicemente guardando
l’ultimo indirizzo della matrice dei punteggi modificata (Fig:7.1.5). Le variabili
slackStart invece vengono calcolate eseguendo una mossa di north da una riga
all’altra, per esempio da Fig:7.1.5 si può osservare come per passare dall’ultimo riempitore al secondo sia necessario sottrarre all’indirizzo una quantità pari
a 42-24=18, spiegando il questo modo il valore slackStart[1]=18, per passare invece dal secondo riempitore al primo è necessario sottrarre all’indirizzo
una quantità pari a 23-6=17 (slackStart[2]). Per passare invece dal primo
riempitore all’ultimo le cose si fanno più complicate perché non è possibile fare
semplicemente 13-43 in quanto si tratta di un numero negativo, a questo punto entra in gioco la grandezza del registro di indirizzo di tipo BitF, essendo la
matrice 8*8=64, l’indirizzo deve essere di grandezza 6 bit.
Bisogna quindi fare in modo di trovare il valore giusto da sottrarre a 13 per fare
andare in underflow il registro e arrivare finalmente a 43. Per calcolare questo
valore è necessario aggiungere al penultimo indirizzo del primo riempitore (13)
il valore massimo che può essere raggiunto dal registro (64) e sottrarre il valore
dell’ultimo indirizzo dell’ultimo riempitore (43), cioè 13+64-43=34, spiegando
infine il valore di slackStart[0].
Nelle prossime sezioni verrà spiegato il codice che permette il funzionamento di
tutto il nuovo design ma come piccola precisazione va aggiunto che la variabile
intParDeep sta per internal parallelism depth e indica il numero di riempitori.
7.1.1
Modulo Raster
Al contrario delle release precedenti è stato necessario dividere il modulo Raster
in due implementazione differenti dell’interfaccia Raster_Ifc. In questo modo
sono stati ottenuti due moduli: mkRasterLeft ed mkRasterRight. In Alg:7.1 è
possibile vedere l’interfaccia, presenta solo due metodi, uno di get e l’altro di put.
I moduli devono implementare per forza l’interfaccia con tutti i suoi metodi. A
questo punto si rende necessario la descrizione dei moduli separatamente.
i
i
i
i