SV
モジュール名の後に # ( ) をつけてパラメータリストを定義できる。ポートリストの前に記述する。
module test # (
MSB=3, LSB=0 ) ( // parameter # のあと
input [MSB:LSB] a, output y ); // port
...
endmodule
パラメータ宣言が複数ある場合は、',' でつなげる
先に宣言したパラメータは、後のパラメータ宣言で使える
module test # ( bw=3, kk = 1 << bw ) ( ... ) ;
param_assignment の後に parameter_port_decl を列挙するスタイル
# ( parA )
# ( parA [] )
# ( parA = constant_param_expression )
# ( parA, parB )
# ( parA, parameter parC )
parameter_port_decl を列挙するスタイル
# ( parameter parA )
# ( parameter parA, parameter parB )
# ( localparam parA )
# ( data_type list_of_param_assignments )
# ( type list_of_type_assignments)
module_ansi_header ::= { attr } module_keyword [ lifetime ] module_id { pkg_import_decl } [ param_port_list ] [list_of_port_decl ] ;
param_port_list ::=
# ( list_of_param_assignments { , param_port_decl } )
| # ( param_port_decl { , param_port_decl } )
| # ( )
param_port_declaration ::=
parameter_declaration // parameter の後に名前。代入も書ける
| local_parameter_declaration // localparam の後に名前。代入も書ける
| data_type list_of_param_assignments
| type list_of_type_assignments
param_declaration ::=
parameter data_type_or_implicit list_of_param_assignments
| parameter type list_of_type_assignments
local_param_declaration // parameter の代わりに local_param
list_of_net_decl_assignments ::= net_decl_assignment { , net_decl_assignment }
net_decl_assignment ::= net_identifier { unpacked_dimension } [ = expression ]
parameter そのものは別のところに書く
list_of_param_assignments ::= param_assignment { , param_assignment }
param_assignment ::= parameter_identifier { unpacked_dimension } [ = constant_param_expression ]
パッケージのインポートもモジュールヘッダに書ける。パラメータ宣言の前に記述する。
インポート文は複数個書ける ( ; で区切る )
パッケージのインポートの後は、parameter か port のどちらかの定義がないといけない。
通常の import と同じ
package_import_declaratin ::= import package_import_item { , package_import_item } ;
package_import_item ::=
package_identifier :: identifier
| package_identifier ::*
モジュール名の次に書ける lifetime は何やろ?