Vengineerの妄想(準備期間)

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

Bluespec SystemVerilog : モジュールのインスタンス化(その1)

Verification Engineerの戯言

モジュールのインスタンス化は、SystemVerilogとはちょっと違います。

    type identifier <- moduleApp;

typeは、SystemVerilogではモジュール名になりますが、Bluespec SystemVerilogでは、インターフェースの名前です。
モジュール名は、<-の後のmoduleApp部に記述します。

moduleAppのところでは、モジュール名にオプションとしてモジュールパラメータを指定することができます。
モジュールパラメータのひとつとして、クロック(clock_by)とリセット(reset_by)を指定できます。

モジュールは、デフォルトで暗黙のクロックとリセットを持っています。
このデフォルトのクロックとリセットを変更するために、clock_byreset_byを使います。

リファレンス・ガイトの5.4.1 Short form instantiationの例を見ていきます。

    interface ArithIO#(type a); //interface type called ArithIO
      method Action input (a x, a y); //parameterized by type a
      method a output; //contains 2 methods, input and output
    endinterface: ArithIO

    module mkGCD#(int N) (ArithIO#(bit [31:0]));
      ... //module definition for mkGCD
      ... //one parameter, an integer N
    endmodule: mkGCD //presents interface of type ArithIO#(bit{31:0])

    //declare the interface instance gcdIFC, instantiate the module mkGCD, set N=5
    module mkTest ();
      ...
      ArithIO#(bit [31:0]) gcdIfc <- mkGCD (5, clocked_by dClkIn);
      ...
    endmodule: mkTest

ArithIOインターフェースは、パラメータとしてtype aを持っています。
mkGCDモジュールは、パラメータとしてint Nを持っています。
(ArithIOインターフェースとしては、パラメータ aがbit [31:0]になります)

最後のテストベンチモジュールであるmkTestでは、mkGCDモジュールのインスタンスとしてgcdIfcを定義しています。
このとき、mkGCDモジュールのパラメータ(N)に5を、クロックとしてdClkINを指定しています。

検証、Verification、Bluespec SystemVerilog