Tesi Robotica Analisi, progettazione e implementazione... | Página 121
i
i
“LP_Tesi” — 2013/10/17 — 18:27 — page 121 — #121
i
6.1. MIGLIORAMENTI
i
121
velocità infinita di esecuzione, di fatto qualcuna sarà molto veloce qualcun’altra
sarà molto lenta. Un’operazione veloce potrebbe essere per esempio una somma
o una sottrazione, le quali durano giusto il tempo che il segnale elettrico passi
all’interno del circuito sintetizzato per fare l’addizione o la sottrazione. Esistono
altre operazioni, invece, che sono più lente, o meglio insiemi di operazioni che
dovendo essere eseguite una di fila l’altra accumulando il delay dei vari componenti elettrici che le compongono, basti pensare ad un registro che deve essere
incrementato o decrementato a seconda di una condizione, per svolgere l’update
dello stato del registro è necessario quindi aspettare che un circuito comparatore
dia un risultato, tutto questo si traduce in ritardo, ritardo che deve essere tenuto
in conto quando viene calcolata in fase di sintesi la frequenza di lavoro dell’FPGA. Se la sintesi dovesse restituire una frequenza troppo alta si correrebbe il
rischio che le sequenze di operazioni più lunghe non avrebbero il tempo di essere
completate portando ad uno stato di inconsistenza l’intera computazione. Nella
prima release del progetto esistevano molti problemi di fondo causati dall’inesperienza, la prima regola è quella di non usare mai moltiplicazioni e soprattutto
divisioni (o operazioni di modulo), queste due operazioni una volta sintetizzate
consistono in una serie di addizioni e sottrazioni successive, che in base agli
operandi possono risultare più o meno lunghe. L’unico caso in cui è possibile
fare una moltiplicazione o una divisione avviene quando uno dei due operandi
della moltiplicazione o il dividendo della divisione consiste in una potenza di 2,
in questo caso infatti la moltiplicazione si traduce in uno shift a sinistra mentre
la divisione in uno shift a destra. Esistono però casi in cui non si può fare a
meno di fare una di queste due operazioni complesse, e per non far scendere
troppo la frequenza di lavoro si decide di spezzare la computazione in più cicli
di clock, infatti evitando di dover fare tutto in un unico ciclo la frequenza può
salire dato che le singole somme che compongono una moltiplicazione per essere
eseguite impiegano pochissimo tempo.
Tornando al progetto, nella prima release erano presenti operazioni di moltiplicazione e divisione per operandi non potenza di 2, questo ha portato ad un
drammatico calo della frequenza tale da rendere inutile l’intero disegno. Per
fortuna tramite ulteriori studi si è scoperto che l’intero progetto non necessità
di operazioni di moltiplicazione e divisione. Giusto per citare un esempio, nella
prima release la fase di Backtrack era completamente gestita con operazioni di
divisione e modulo (pesante computazionalmente quanto la divisione), questi
venivano usati allo scopo di sapere numero di riga e colonna dato l’indirizzo
della matrice score Alg:6.1. Nell’if presente nel listato veniva semplicemente
controllato che l’indirizzo di aggiornamento check non oltrepassasse i limiti del-
i
i
i
i