Tesi Robotica Analisi, progettazione e implementazione... | Page 96
i
i
“LP_Tesi” — 2013/10/17 — 18:27 — page 96 — #96
i
96
i
4. VERILOG E BLUESPEC SYSTEMVERILOG
registro, e per modificare il contenuto di un registro è necessario utilizzare
l’assegnatore non bloccante “<=” che aggiorna il valore al successivo ciclo di
clock esattamente come succede in un circuito elettrico, mentre il valore di y
(definito semplicemente su 2 bit) si aggiorna ogni volta dato che si tratta di
una variabile che contiene al suo interno una semplice etichetta di ciò che è il
risultato e quindi può variare all’interno di un singolo ciclo di clock. Anche la
chiamata del metodo valueX dimostra come il contenuto aggiornato del registro
possa essere letto solamente dopo che il ciclo di clock attuale sia finito.
Come per il Verilog esistono alcune direttive di sistema non sintetizzabili ma che
aiutano nella fase di debug, possiamo trovare infatti sia $display che $finish.
Per ottenere maggiore ordine nella generazione di codice Verilog da codice BSV
è stata introdotta la parola chiave (* synthesize *), tutti i moduli preceduti
da questa verranno compilati in un file a parte, in caso contrario il codice viene
generato nello stesso file del modulo che lo istanzia, ad esempio se mod1 non
presenta la parola chiave (* synthesize *), ma viene istanziato in mod2 che la
presenta, alla fine del processo di generazione del codice Verilog nel file mod2
saranno presenti i sorgenti di entrambi i moduli.
Esistono molte di queste parole chiavi, per lo più si riferiscono alla gestione dei
conflitti tra regole. Ad esempio ci si potrebbe trovare nella situazione in cui due
regole che vengono eseguite nello stesso ciclo di clock tentano di modificare il
contenuto di un registro nello stesso istante, ciò ovviamente genera un conflitto
che può essere risolto o dando la precedente di una sull’altra o permettendole
di essere eseguite una alla volta in differenti cicli di clock. Per fare quest’ultima
cosa sia alle regole che ai metodi può essere impostata una cosiddetta regola di
fire, come se si utilizzasse un if, che in base a precise condizioni decide se un
metodo o una regola possano essere eseguite durante un certo ciclo di clock.
4.2.2
Librerie utilizzate
Fra i package importati durante la scrittura del codice è possibile annoverarne
principalmente due: package FIFO e package BRAM, nelle intellectual properties (IP) open source fornite con il compilatore è possibile trovare queste due
classi scritte in Verilog.
i
i
i
i