SV
モジュールのインスタンスの例
test u_test ( // モジュール名のあとにインスタンス名
.a ( a_in), // ポート接続のリスト
.b ( b_in ),
.y ( y_out )
) ; // 最後は ';'
同じモジュールに複数のインスタンスを指定する場合は、', ' で区切ってインスタンスを複数一度に記述できる
moduleA u_modA ( ) ;
moduleA u_modA ( ), u_modB ( ) ; // 複数書ける
一番外側で定義されたモジュールで、他のどのモジュールのインスタンスにもなっていないモジュールは、トップモジュールとみなされる。
トップモジュールは暗黙のインスタンスになり、$root で参照される。
上位モジュールの信号とインスタンスのポートの接続を指定する。複数のポート接続がある場合は ',' で区切る
インスタンスのモジュール定義のポート宣言と同じ順序で、上位モジュールの信号名を記述する。ポート接続には信号名だけを記述
moduleA u_modA ( sigA, sigB );
// sigA の前に attribute_instance が付けられる
接続するポートと信号の名前を明示的に指定する。ポート名の前には '.' (ドット) をつけ、接続する信号は ( ) で括る。信号の他に式も記述できる。
moduleA u_modA ( . portA ( sigA ), .portB ( { b1, b2 } );
ポートに何も接続しない場合は ( ) 内を空白にする
moduleA u_modA ( . portA ( ) );
ポートの順序は任意。
ポート名と信号名が同じ場合、( ) を省略できる。これを暗黙の接続と呼ぶことにする
ポート名と同じ信号名があれば、それらすべてを接続する。余りのポートは明示的に接続させる
名前付き
moduleA u_modA ( . portA ); // 暗黙の接続。
moduleA u_modA ( . portA ( sigA ) );
moduleA u_modA ( . portA ( ) ); // オープン
moduleA u_modA ( . * ) ;
moduleA u_modA ( . portA ( sigA ), . * ) ;
// すべてにおいて . の前に attribute_instance が付けられる
( .portA ( sig ) ) // ポート名の前に . をつける
( .portA ( { sigA, sigB } ) // 信号の連結を参照
( .portA ( sig [1] ) // constant_select
( sig ) // ポート名を書かない場合
( ) // ポートがない場合
( .portA ( sigA ), .portB ( sigB ) ) // 複数
( , sigB ) // 空白は途中でも書ける
input wire のポートが未接続の時、ポートの値は z になる
interface のポートの未接続は禁止。
moduleA # ( ) u_modA ( ) ; // parameter_assignment_list が空のとき
parameter_value_assignment を順序付きで指定する場合
moduleA # ( ordered_param_assign ) u_modA ( ) ;
parameter_value_assignment を名前付きで指定する場合
moduleA # ( .paramA ( sigA ), .paramB ( sigB ) ) u_modA ( );
module_or_generate_item の一つとして module_instantiation がある
module_instantiation ::=
module_identifier [ parameter_value_assignment ] hierarchical_instance { , hierarchical_instance } ;
parameter_value_assignment ::=
# ( [ list_of_parameter_assignments ] )
list_of_parameter_assignments ::=
ordered_parameter_assignment { , ordered_parameter_assignment }
| named_parameter_assignment { , named_parameter_assignment }
ordered_parameter_assignment ::= param_expression
named_parameter_assignment ::= . parameter_identifier ( [ param_expression ] )
hierarchical_instance ::=
name_of_instance ( [ list_of_port_connections ] )
name_of_instance ::= instance_id { unpacked_dim }
list_of_port_connections ::=
ordered_port_connection { , ordered_port_connection }
| named_port_connection { , named_port_connection }
named_port_connection ::=
{ attribute_instance } . port_identifier [ ( [ expression ] ) ]
| { attribute_instance } . *