Tesi Robotica Analisi, progettazione e implementazione... | Page 88
i
i
“LP_Tesi” — 2013/10/17 — 18:27 — page 88 — #88
i
88
i
4. VERILOG E BLUESPEC SYSTEMVERILOG
Non essendo un modulo di test bench, al contrario di quello precedente, è necessario definire un’interfaccia, ovvero in che modo la comunicazione deve avvenire
con l’esterno, per questo scopo quando viene dichiarato il modulo è necessario
aggiungere una lista di nomi fra parentesi (in questo caso: clk, rst, enable,
count), come facilmente si capisce clk e rst rappresentano rispettivamente i
segnali di clock e reset. Senza il clock non è possibile per forza di cose definire
moduli sequenziali ma solo combinatori, mentre senza reset non è possibile far
ripartire il programma una volta che questo viene messo sul dispositivo. Dopo
di questi viene dichiarato il segnale di enable, questo segnale dice al circuito
quando è possibile eseguire l’operazione per cui è fatto, ovvero quella di incrementare un registro. Come è intuibile questi tre segnali devono essere applicati
come input al circuito, ed è per questo motivo che come seconda riga di codice
è necessario esplicitare questo concetto, rafforzandolo successivamente dicendo
che sono di tipo wire e che quindi possono solo trasportare informazioni e non
conservarle. A questo punto viene definito l’unico output del modulo, ovvero
count, questo output a differenza degli input è composto da 4 fili perché il
registro che memorizza il conto all’interno del modulo è appunto a 4 bit, per
specificare questa cosa in Verilog si utilizza la sequenza di token [3:0], che
indicano appunto che l’output è un array di 4 fili espressi dall’MSB all’LSB.
Una volta che l’interfaccia è stata definita si passa all’istanziazione dei sotto
moduli, in questo caso si istanzia un semplice registro a 4 bit che manterrà
in memoria il conto. Avendo lo stesso nome la porta di output e il registro si
otterrà l’effetto di poterne leggere il contenuto dall’esterno.
Venendo quindi alla descrizione del primo costrutto prettamente sequenziale,
ovvero l’always, si può dire che questo blocco come dice la parola stessa viene
eseguito “sempre”, o meglio, ogni volta che le condizioni di esecuzione vengono
soddisfatte, in questo caso si può osservare come regola: (posedge clk or
posedge rst). In questo modo si indica che il blocco deve essere eseguito ogni
volta che il fronte di salita (positive edge) sia del clock che del reset viene a
verificarsi, andando così a sincronizzare il modulo con il resto del circuito.
A questo punto si incontra un costrutto if-else il cui utilizzo è identico a quello del
C, ovvero viene controllata la condizione e in base al valore logico di questa viene
eseguita una delle due alternative, in questo caso la condizione viene dettata dal
segnale di reset rst, se questo risulta alto allora il contatore viene settato a 0,
in caso contrario se il segnale enable è anch’esso alto allora il contatore count
viene aggiornato.
i
i
i
i