Verification Engineerの戯言
Bluepsec SystemVerilogのモジュールは、次のような感じ。ほとんど、SystemVerilogと同じ。
identifier(識別子)は、mkFooのようにmkで始め、次の文字を大文字にします。
(mkは、どうやらmakeを意味するようです)。
(mkは、どうやらmakeを意味するようです)。
モジュールの引数は、SystemVerilogと同じでオプションです。引数はモジュールで使われるインターフェースです。
SystemVerilogのようにポートではなく、あくまでもインターフェースです。
たとえば、クロック(clocks)やワイヤ(wires)もインターフェースとして指定します。
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つのときは識別子は必要ありません。
ただし、引数が1つのときは識別子は必要ありません。
引数を省略した場合は、Emptyインターフェースを指定したのと同じことになります。
Emptyインターフェースは、定義済みのインターフェースで何のメソッドを持ちません。
Emptyインターフェースは、定義済みのインターフェースで何のメソッドを持ちません。
interface Empty; endinterface
検証、Verification、Bluespec SystemVerilog