Vengineerの妄想(準備期間)

人生は短いけど、長いです。人生を楽しみましょう!

Bluespec SystemVerilog : インターフェスの宣言

Verification Engineerの戯言

インターフェースは、interface/endinterfaceの中にメソッドやサブインターフェースを宣言します。

メソッドは関数とおなじようなもので、0個以上の引数と戻り値を持ちます。
インターフェース中のメソッド宣言は、関数のプロトタイプ宣言とおなじです。
ただし、functionmethodになります。
メソッドは、RTLに変換されたときはワイヤとして表現されます。

methodfunctionの違いは、methodは暗示的な条件にて呼び出される。

リファレンス・ガイドの例(Page.25)を見てみます。

    interface IntStack;
      method Action push (int x);
      method Action pop;
      method int top;
    endinterface: IntStack

IntStackインターフェースは、3つのmethod(push, pop, top)を持ちます。
pushdメソッドは、int型の引数xを持ち、戻り値の型がActionです。
popメソッドは、引数を持たないで、戻り値の型がActionです。
topメソッドは、引数を持たないで、戻り値の型がintです。

methodでは、RTLに変換したときにready信号になります。
また、戻り値がActionのときはenable信号になります。
メソッドを呼ぶことができる状態の時は、enable信号がアサートされます。
enable信号がデ・アサートのときは、該当するメソッドは呼ぶことができません。
メソッドの戻り値がActionの場合は、ready信号がアサートのとき有効になります。

インターフェースは、パラメータを持つことができます。
上のスタックインターフェースに登録できるデータの型をintからパラメータにて変更できます。

    interface Stack#(type a);
      method Action push (a x);
      method Action pop;
      method a top;
    endinterface: Stack

#(type a)がパラメータ部分で、aの部分が実際の型になります。

SystemVerilogのように、新しい型をtypedefでできますので、int型のスタックインターフェースは、

    typedef Stack#(int) IntStack;

のように宣言できます。


検証、Verification、Bluespec SystemVerilog