Verification Engineerの戯言
インターフェースの定義(実際は、methodの定義)は、モジュールの定義の中で行います。
メソッドの名前は、モジュールのインターフェースで宣言したものと同じでなければいけません。
戻り値や引数の数および型も同じでなければいけません。また、各メソッドは必ず1回のみ定義しなければいけません。
(なお、戻り値と引数は省略可能です。そのときは、インターフェースの宣言と同じモノとして扱われます。)
戻り値や引数の数および型も同じでなければいけません。また、各メソッドは必ず1回のみ定義しなければいけません。
(なお、戻り値と引数は省略可能です。そのときは、インターフェースの宣言と同じモノとして扱われます。)
bscコンパイラは、モジュール内に未定義のメソッドがある場合はワーニングを出力します。
implicitCound(暗示的な条件)は、オプションです。
もし、指定する場合は条件式あるいはパターンマッチングになります。
条件が真の時のみ、メソッドが呼ばれます。
もし、指定する場合は条件式あるいはパターンマッチングになります。
条件が真の時のみ、メソッドが呼ばれます。
リファレンス・ガイドのPage.33の例を見てみましょう!
interface GrabAndGive; // interface is declared method Action grab(Bit#(8) value); // method grab is declared method Bit#(8) give(); // method give is declared endinterface module mkExample (GrabAndGive); Reg#(Bit#(8)) value_reg <- mkReg(?); Reg#(Bool) not_yet <- mkReg(True); // method grab is defined method Action grab(Bit#(8) value) if (not_yet); value_reg <= value; not_yet <= False; endmethod //method give is defined method Bit#(8) give() if (!not_yet); return value_reg; endmethod endmodule
mkExampleモジュールは、GrabAndGiveインターフェースを持ちます。
mkExampleモジュール内でGrabAndGiveインターフェースの2つのメソッド(grabとgive)を定義しています。
mkExampleモジュール内でGrabAndGiveインターフェースの2つのメソッド(grabとgive)を定義しています。
grabメソッドは、(not_yet)が真のときのみ実行されます。
giveメソッドは、(!not_yet)が真のときのみ実行されます。
giveメソッドは、(!not_yet)が真のときのみ実行されます。
リファレンス・ガイドにも書いてあるのですが、
method ... foo (...) if (expr); ... endmethod method ... foo (...); if (expr) ... endmethod
上記の上のメソッドは、exprが真のときにfooメソッドが実行されます。
上記の下のメソッドは、fooメソッドが呼び出された後にif (expr)が実行されます。
上記の下のメソッドは、fooメソッドが呼び出された後にif (expr)が実行されます。
検証、Verification、Bluespec SystemVerilog