Vengineerの妄想(準備期間)

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

Bluespec SystemVerilog : モジュールの宣言

Verification Engineerの戯言

Bluepsec SystemVerilogのモジュールは、次のような感じ。ほとんど、SystemVerilogと同じ。

identifier(識別子)は、mkFooのようにmkで始め、次の文字を大文字にします。
(mkは、どうやらmakeを意味するようです)。

モジュールの引数は、SystemVerilogと同じでオプションです。引数はモジュールで使われるインターフェースです。
SystemVerilogのようにポートではなく、あくまでもインターフェースです。
たとえば、クロック(clocks)やワイヤ(wires)もインターフェースとして指定します。

引数が1つだけの時は、インターフェース名のみを指定しますが、
引数が複数個ある時は、インターフェース名と識別子が必要になります。

リファレンスガイドの例では、つぎのようなものがあります。

    引数が1つの例(mkFifoモジュールは、Fifoインターフェースを持つ)

    module mkFifo#(Int#(8) a) (Fifo);
      ...
    endmodule

    引数が2つ以上の例(mkSyncPulseモジュールは、Clockインターフェースの識別子sClkIn,
        Resetインターフェースの識別子sRSTIn, Clockインターフェースの識別子dCLKIn,
        SyncPulseIfcインターフェースのifc識別子の引数を持ちます)

    module mkSyncPulse (Clock sClkIn, Reset sRstIn,
                        Clock dClkIn,
                        SyncPulseIfc ifc);
      ...
    endmodule

引数が1つでも2つ以上でも、最後の引数はモジュールのインターフェースになります。
ただし、引数が1つのときは識別子は必要ありません。

引数を省略した場合は、Emptyインターフェースを指定したのと同じことになります。
Emptyインターフェースは、定義済みのインターフェースで何のメソッドを持ちません。

    interface Empty;
    endinterface

検証、Verification、Bluespec SystemVerilog