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 :