SV
以下の2種類がある。構文上はどちらかだけでも完全なソーステキストになるということ
library_text
source_text // SystemVerilog source text
以下の構成をとる
timeunits_declaration // option
1個以上のdescription
description は以下のどれか。つまり以下のどれか一つでもソーステキストに成り得る。また以下のどれかをどんな順序で何回記述してもよいということ
upd_declaration
interface_declaration
program_declaration
package_declaration
{ attribute_instance } package_item
{ attribute_instance } bind_directive
config_declaration
あとで
virtual // option
class
lifetime // option
class id
parameter_port_list // option
extends // option
implementes // option
class 本体
endclass [: class_id]
extends は extends class_type [ ( arguments ) ]
implements は implements interface_class_type (の繰り返し)
package declaration
あとで
timeunit time_literal [ / time_literal ] ;
timeprecision time_literal
timeunit time_literal; timeprecision time_literal;
上記の逆順
port_expression // option つまり空白でもよい
. port_id ( [ port_expression] ) // ()の中は空白でもよい
port_reference
port_reference の繰り返し // 上と区別する必要ある?
port_reference は port_id constant_select
header // option
port id
unpacked dimension // 0 or more
= constant_expression // option
unpacked dimension の代わりに variable_dimension
bind bind_target_scope [ : bind_target_instance_list ] bind_instantiation ;
bind bind_target_instance bind_instantiation
bind_target_scope には module_id と interface_id が使える
bint_target_instance_list はその名の通り bind_target_instance の並び
bind_target_instance は hierarchical_id constant_bit_select
program_instantiation
module_instantiation
interface_instantiation
checker_instantiation
下の二つ。どちらも前に attribute_instance を何個つけてもよい
module_common_item
extern_tf_declaration
extern method_prototype
extern forkjoin task_prototype
port_declaration
non_port_interface_item
generate_region
interface_or_generate_item // ここに出てくるのか
program_declaration
modport_declaration
interface_declaration
timeunits_declaration
Program items
あとで
最後の三つを除き、前に attribute_instance が書ける
class_property
{ property_qualifier } data_declaration
const { class_item_qualifier } data_type const_id [ = constant_expression ]
class_item_qualifier は static, protected, local のどれか
class_method
class_constraint
class_declaration
covergroup declaration
local_parameter_declaration ;
parameter_declaration;
; // 空文?
{ method_qualifier } task_declaration
{ method_qualifier } function_declaration
pure virtual { class_item_qualifier } method_prototype ;
extern { method_qualifier } method_prototype ;
{ method_qualifier } class_constructor_declaration
extern { method_qualifier } class_constructor_prototype
一番右は function new [ ( [ tf_port_list ] ) ]; // ( ) 内も ( ) も省略可
constraint_prototype
constraint_declaration
random_qualifier
rand | randc
class_item_qualifier
task_prototype
function_prototype
いわゆるnew
function
[ class_scope ] // option
new
( tf_port_list ) // option () 内も省略可
;
block_item_declaration // 0 or more
super.new [ ( list_of_arguments ) ]; // option ( ) は省略可
function_statement_or_null // 0 or more
endfunction [ : new ]
[static] constraint constraint_id constraint_block
{
constraint_block_item // 0 or more
}
constraint_block_item
package_or_generate_item_declraration
net_declaration // 以下全部 declaration
data
task
function
checker
dpi_import_export // declaration ではない
extern_constraint
class
class_constructor
local_parameter
parameter
covergroup
assertion_item
; // 空文
anonymous_program
package_export_declaration
timeunits_declaration
program ;
anonymous_program_item // 0 or more
task declaration
function
class
covergroup
class_constructor
; // 空文
endprogram
data
[const] [var] [lifetime] data_type_or_implicit list_of_variable_decl_assignments ;
type_decl
package_imprt_decl
import package_import_item { , package_import_item } ; // 最低一個要る
net_type_decl
package_import_item
package_id :: id
package_id :: *
package_export_decl
export * :: *
export package_import_item { , package_import_item } ;
gen_var_decl
genvar list_of_genvar_ids ;
net_decl // これは省略
type_decl // いわゆる typdef
typedef data_type typ_id { variable_dimenstion } ;
typedef interface_instance_id constant_bit_select . type_id type_id ;
typedef [ enum | struct | union | class | interface class ] type_id ;
net_type_decl // 省略
lifetime
static
automatic