Tesi Robotica Algoritmi ed architetture per la risoluzione di... | Page 80
4.4. HARDWARE ARCHITECTURE
80
segno estendere (sext) e zero estendere (zext), che sia risultato in un numero
intero senza segno. Tuttavia, le operazioni Verilog come + / - dipendono dal
tipo degli operandi, che può essere firmato o senza segno.
In LegUp, dichiariamo ogni variabile Verilog come unsigned e utilizzare il $signed() comando Verilog quando richiesto da un’istruzione come sdiv, Srem, o
sext.
4.4.6
Mult-dimensional Arrays
Array multi-dimensionali sono memorizzati in ordine di riga-maggiore, la stessa
convenzione usata da C. Ad esempio in un array:
int array[2][2][2] = {{{0, 1}, {2, 3}}, {{4, 5}, {7, 8}}}
Se si assegna variabili per la dimensione di ogni dimensione della matrice [A]
[B] [C] dove A = 2, B = 2, C = 2. Poi per accedere alla schiera di elementi [a]
[b] [c] memoria o set è dato da:
offset = c + C*b + C*B*a = c + C*(b + B*a)
Questo supporta la memorizzazione di un array di dimensione arbitraria in ram
la stessa larghezza di un elemento con A* B* C righe.
4.4.7
Functional Units
Per mantenere Fmax alto, utilizziamo le pipeline . In tutti i casi si sceglie
una pipeline pari alla larghezza bit dell’operazione. Unità funzionali soltanto le
parti divisorie/modulo per salvare zona. Il driver clock è impostato a 0 quando
il segnale wait_request del controller della memoria è elevato o quando stiamo
chiamando una funzione.
4.4.8
Structs
Le strutture sono supportate da LegUp compresi i puntatori, array, strutture e
primitive come elementi. I puntatori a struct sono supportati anche, ad esempio
le liste concatenate possono essere sintetizzati.