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