Tesi Robotica Analisi, progettazione e implementazione... | Page 94
i
i
“LP_Tesi” — 2013/10/17 — 18:27 — page 94 — #94
i
94
i
4. VERILOG E BLUESPEC SYSTEMVERILOG
World!” un po’ modificato.
Ogni file deve definire un package (Hello) e al suo interno definire almeno un
modulo (mkHello) che implementi l’interfaccia dichiarata (Hello_Ifc), nello
stesso package inoltre possiamo avere tanti moduli quanti sono necessari. Il
concetto di package è identico a quello che si ha in Java.
In ogni modulo è possibile definire molti costrutti, fra i più importanti ci sono
le regole (rule) e i metodi (method). Le rule vengono eseguite a ogni ciclo di
clock, come si capisce sono praticamente l’equivalente dell’always in Verilog,
in questo caso si avrà che la stringa “Hello World!” verrà stampata ad ogni
ciclo di clock. I method devono essere implementati a seconda dell’interfaccia,
così come accadrebbe in un normale linguaggio di programmazione ad oggetti e
possono essere di tre Tipi:
Action: eseguono delle azioni senza ritornare niente;
Value: ritornano un certo valore senza eseguire azioni;
ActionValue: eseguono azioni e ritornano valori.
Ogni metodo viene eseguito nel ciclo di clock in cui viene chiamato.
Per fare un paragone con il Verilog i metodi si sostituiscono ai fili di input ed
output, dove prima si doveva dichiarare un filo di uscita e leggerlo nel momento
giusto (cosa che si può rivelare complicata quando la lettura da un filo è regolata
da una serie di segnali che si devono verificare in un preciso ordine) ora basta
fare una chiamata al metodo di un oggetto, e questo è uno dei tanti piccoli
Algoritmo 4.6 Testbench
1
2
3
4
5
6
7
8
9
10
package Tb;
(* synthesize *)
module mkTb (Empty);
Hello_Ifc test <- mkHello;
rule greet;
$display ("Value of x:",test.valueX());
$display ("----------------");
endrule
endmodule: mkTb
endpackage: Tb
i
i
i
i