Verification Engineerの戯言
モジュールのインスタンス化は、SystemVerilogとはちょっと違います。
type identifier <- moduleApp;
typeは、SystemVerilogではモジュール名になりますが、Bluespec SystemVerilogでは、インターフェースの名前です。
モジュール名は、<-の後のmoduleApp部に記述します。
モジュール名は、<-の後のmoduleApp部に記述します。
moduleAppのところでは、モジュール名にオプションとしてモジュールパラメータを指定することができます。
モジュールパラメータのひとつとして、クロック(clock_by)とリセット(reset_by)を指定できます。
モジュールパラメータのひとつとして、クロック(clock_by)とリセット(reset_by)を指定できます。
モジュールは、デフォルトで暗黙のクロックとリセットを持っています。
このデフォルトのクロックとリセットを変更するために、clock_byとreset_byを使います。
このデフォルトのクロックとリセットを変更するために、clock_byとreset_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]になります)
mkGCDモジュールは、パラメータとしてint Nを持っています。
(ArithIOインターフェースとしては、パラメータ aがbit [31:0]になります)
最後のテストベンチモジュールであるmkTestでは、mkGCDモジュールのインスタンスとしてgcdIfcを定義しています。
このとき、mkGCDモジュールのパラメータ(N)に5を、クロックとしてdClkINを指定しています。
このとき、mkGCDモジュールのパラメータ(N)に5を、クロックとしてdClkINを指定しています。
検証、Verification、Bluespec SystemVerilog