Tesi Robotica Algoritmi ed architetture per la risoluzione di... | Page 72
4.3. PROGRAMMER’S MANUALE: OVERVIEW
72
Il predecessore di %1 sono suoi operantdi: istruzioni %2, e %3. Il successore di
%1 è %4. Ci sono anche dipendenze tra load, store, e chiamate di istruzioni che
possono accedere alla memoria. Queste dipendenze possono essere riconosciute
tramite l’analisi eseguita da LLVM. Ci sono due parametri importanti per ogni
istruzione:
• La latenza , quanti cicli di clock è necessario attendere l’ uscita è disponibile , i carichi hanno una latenza di 2.
• Il ritardo di una istruzione è l’altro parametro , ritirato dell’allocazione e
e memorizzazione nel file di device tcl.
Le approssimazioni del ritardo permettono all’algoritmo di determinare quante
istruzioni possono essere concatenati insieme nello stesso ciclo . Durante la
pianificazione di ciascuna istruzione viene assegnato un oggetto di stato che
rappresenta uno stato in una macchina a stati finiti memorizzato nell’oggetto
FSM .
Rami, salti , e le istruzioni di switch sono utilizzati per determinare lo stato
successivo di assegnazione delle variabili. Ogni stato ha 3 possibilità analoghe a
LLVM ramo , saltare , e le istruzioni di switch. In primo luogo, un defaultTransition può essere specificato. O una singola variabile di transizione può essere
impostato , quindi possono essere specificate una o più condizioni di transizione
. Se la variabile di transizione è uguale alla condizione allora lo stato associato è
stato successivo. Dopo che abbiamo un oggetto sched per rappresentare il FSM
e lo stato di ogni istruzione , possiamo chiamare GenerateRTL per creare l’oggetto RTLModule che rappresenta il circuito hardware finale. Un RTLModule
ha una lista di ingressi, uscite , parametri e RTLSignals . Per capire RTLSignal
è utile guardare la struttura del codice Verilog . Ogni RTLSignal rappresenta un
filo o un registro che può essere basato su altri RTLSignals in condizioni diverse
. Ogni condizione è elencato come un’istruzione if always@ blocco dedicato a
quel segnale . La condizione più comune è se siamo in uno stato particolare . È
così comune che c’è una funzione per semplificare questo processo :
connectState(signal, state, driverSignal, instruction)
Qui diciamo che durante lo stato vogliamo driverSignal per guidare il segnale
. L’argomento istruzione opzionale aggiunge un commento di sopra di questo
incarico Verilog che indica l’istruzione che driverSignal stato dervied da . Un’altra opzione è quella di guidare incondizionatamente un segnale . Per fare ciò,
utilizzare :