Section A.1.2

LRM-270

Changes (changes in red and blue):

config_declaration ::=

config config_identifier ;

design_statement

{ config_rule_statement }

endconfig [ : config_identifier ]

Section A.1.3

LRM-216 LRM-249

Changes (changes in red and blue):

class_declaration ::=

[ virtual ] class [ lifetime ] class_identifier [ parameter_port_list ]

[ extends class_identifier [ parameter_value_assignment ] ] [ ( list_of_arguments ) ] ];

[ extends class_type [ ( list_of_arguments ) ] ];

{ class_item }

endclass [ : class_identifier]

LRM-207 LRM-249

Changes (add ;) (changes in red and blue):

package_declaration ::=

{ attribute_instance } package package_identifier ;

[ timeunits_declaration ] { { attribute_instance } package_item }

endpackage [ : package_identifier ]

Section A.1.4

LRM-243

Changes (remove tab before production) (changes in red and blue):

list_of_port_declarations28 ::=

( [ { attribute_instance} ansi_port_declaration

{ , { attribute_instance} ansi_port_declaration } ] )

 

non_generic_port_declaration port_declaration ::=

  { attribute_instance } inout_declaration

| { attribute_instance } input_declaration

| { attribute_instance } output_declaration

| { attribute_instance } ref_declaration

| { attribute_instance } interface_port_declaration

LRM-243

Changes (changes in red and blue):

port_declaration ::=

  non_generic_port_declaration

| { attribute_instance } generic_interface_port_declaration

 

ansi_port_declaration ::=

  port_declaration

| port_type list_of_port_identifiers

 

port_direction ::=  input | output | inout | ref

 

net_port_header ::=  [ port_direction ] port_type

 

variable_port_header ::= [ port_direction ]  data_type

 

interface_port_header ::=

  interface_identifier  [ . modport_identifier ]

| interface  [ . modport_identifier ]

 

ansi_port_declaration ::=

  [ net_port_header | interface_port_header ] port_identifier { unpacked_dimension }

| [ variable_port_header ] port_identifier variable_dimension [ = constant_expression ]

| [ net_port_header | variable_port_header  ] . port_identifier ( [ expression ] )

Section A.1.5

LRM-242

Changes (changes in red and blue):

module_common_item ::=

  module_or_generate_item_declaration

| interface_instantiation

| program_instantiation

| concurrent_assertion_item

| bind_directive

| continuous_assign

| net_alias

| initial_construct

| final_construct

| always_construct

| combinational_construct

| latch_construct

| ff_construct

| ;

LRM-243

Changes (changes in red and blue):

module_item ::=

  non_generic_port_declaration port_declaration ;

| non_port_module_item

LRM-270

Changes (changes in red and blue):

module_or_generate_item_declaration ::=

  package_or_generate_item_declaration

| genvar_declaration

| clocking_declaration

| default clocking clocking_identifier ;

Section A.1.6

LRM-243

Changes (changes in red and blue):

interface_item ::=

  non_generic_port_declaration port_declaration ;

| non_port_interface_item

Section A.1.7

LRM-242 LRM-250

Changes (changes in red and blue):

non_port_program_item ::=

  { attribute_instance } continuous_assign

| { attribute_instance } module_or_generate_item_declaration

| { attribute_instance } specparam_declaration

| { attribute_instance } local_parameter_declaration

| { attribute_instance } parameter_declaration ;

| { attribute_instance } initial_construct

| { attribute_instance } concurrent_assertion_item

| { attribute_instance } timeunits_declaration19

| class_declaration

Section A.1.8

LRM-250

Changes (changes in red and blue):

class_method ::=

  { method_qualifier } task_declaration

| { method_qualifier } function_declaration

| extern { method_qualifier } method_prototype

| { method_qualifier } class_constructor_declaration

| extern { method_qualifier } class_constructor_prototype

 

class_constructor_prototype ::=

function new ( [ tf_port_list ] ) ;

LRM-249

Changes (changes in red and blue):

extern_method_declaration ::=

  function [ lifetime ] class_identifier :: function_body_declaration

| task [ lifetime ] class_identifier :: task_body_declaration

LRM-250

Changes (changes in red and blue):

class_constructor_declaration ::=

function [ class_scope ] new [ ( [ tf_port_list ] ) ]  ;

{ block_item_declaration }

[ super . new [ ( list_of_arguments ) ] ; ]

{ function_statement_or_null }

endfunction [ : new ]

Section A.1.9

LRM-273

Changes (changes in red and blue):

dist_item ::= value_range [ dist_weight ]

  value_range := expression

| value_range :/ expression

 

dist_weight ::=

  := expression
:/ expression

Section A.1.10

LRM-240 LRM-249 LRM-250

Changes (changes in red and blue):

package_item ::=

  package_or_generate_item_declaration

| specparam_declaration

| concurrent_assertion_item_declaration

| anonymous_program

| timeunits_declaration19

 

package_or_generate_item_declaration ::=

  net_declaration

| data_declaration

| task_declaration

| function_declaration

| dpi_import_export

| extern_constraint_declaration

| extern_method_declaration

| class_declaration

| class_constructor_declaration

| parameter_declaration ;

| local_parameter_declaration

| covergroup_declaration

| overload_declaration

| concurrent_assertion_item_declaration

LRM-250

Changes (changes in red and blue):

anonymous_program_item ::=

  task_declaration

| function_declaration

| class_declaration

| class_constructor_declaration

| covergroup_declaration

Section A.2.1.1

LRM-243

Changes (changes in red and blue):

local_parameter_declaration ::=

  localparam [ signing ] { packed_dimension } list_of_param_assignments ;

| localparam data_type_or_implicit list_of_param_assignments ;

 

parameter_declaration ::=

  parameter [ signing ] { packed_dimension } list_of_param_assignments

| parameter data_type_or_implicit list_of_param_assignments

| parameter type list_of_type_assignments

Section A.2.1.2

LRM-243

Changes (changes in red and blue):

inout_declaration ::=

inout [ port_type ] list_of_port_identifiers

 

input_declaration ::=

  input [ port_type ] list_of_port_identifiers

| input data_type list_of_variable_identifiers

 

output_declaration ::=

  output [ port_type ] list_of_port_identifiers

| output data_type list_of_variable_port_identifiers

LRM-243

Changes (changes in red and blue):

generic_interface_port_declaration ::=

  interface list_of_interface_identifiers

| interface . modport_identifier list_of_interface_identifiers

Section A.2.2.1

LRM-243 LRM-249

Changes (changes in red and blue):

data_type_common_item data_type ::=

  integer_vector_type [ signing ] { packed_dimension }

| integer_atom_type [ signing ]

| type_identifier { packed_dimension }

| non_integer_type

| struct_union [ packed [ signing ] ] { struct_union_member { struct_union_member } }

{ packed_dimension }14

| enum [ enum_base_type ] { enum_name_declaration { , enum_name_declaration } }

| string

| chandle

| virtual [ interface ] interface_identifier

| [ class_scope | package_scope ] type_identifier { packed_dimension }

| class_type

| event

| ps_covergroup_identifier

 

data_type ::=

  data_type_common_item

| event

| class_scope_type_identifier

| covergroup_identifier

 

data_type_or_implicit ::=

  data_type

| [ signing ] { packed_dimension }

LRM-249

Changes (changes in red and blue):

class_scope_type_identifier::=

class_scope [ :: type_identifier ]

 

class_scope ::=

class_identifier [ parameter_value_assignment ]

{ :: class_identifier [ parameter_value_assignment ] }

class_scope ::=

class_type ::

 

class_type ::=

ps_class_identifier [ parameter_value_assignment ]

{ :: class_identifier [ parameter_value_assignment ] }

LRM-241

Changes (changes in red and blue):

integer_atom_type ::= byte | shortint | int | longint | integer | time

 

integer_vector_type ::= bit | logic | reg

 

non_integer_type ::= time | shortreal | real | realtime

LRM-243

Changes (changes in red and blue):

port_type ::=

  data_type

| net_type_or_trireg [ signing ] { packed_dimension }

| [ signing ] { packed_dimension }

 

port_type ::=

[ net_type_or_trireg ] [ signing ] { packed_dimension }

LRM-249

Changes (changes in red and blue):

simple_type ::= integer_type | non_integer_type | ps_type_identifier

LRM-246

Changes (changes in red and blue):

struct_union_member29 ::=

{ attribute_instance } data_type { packed_dimension }

data_type_or_void list_of_variable_identifiers ;

| { attribute_instance } void list_of_variable_identifiers ;

 

            data_type_or_void ::= data_type | void

Section A.2.2.3

LRM-247 LRM-249

Changes (changes in red and blue):

delay_value ::=

  unsigned_number

| real_number

| ps_identifier

| time_literal

Section A.2.3

LRM-243

Changes (changes in red and blue):

list_of_modport_port_identifiers ::= port_identifier { , port_identifier }

| . port_identifier ( [ expression ] ) { . port_identifier ( [ expression ] ) }

LRM-243

Changes (changes in red and blue):

list_of_port_identifiers ::= port_identifier { unpacked_dimension }

  { , port_identifier { unpacked_dimension } }

| . port_identifier ( [ expression ] ) { . port_identifier ( [ expression ] ) }

Section A.2.4

LRM-227

Changes (changes in red and blue):

param_assignment ::= parameter_identifier { unpacked_dimension } = constant_param_expression

LRM-249

Changes (changes in red and blue):

dynamic_array_new ::= new [ expression ] [ ( dynamic_array_variable_identifier  expression ) ]

Section A.2.6

LRM-249

Changes (changes in red and blue):

function_data_type6 ::= data_type_common_item | void

 

function_body_declaration ::=

  [ signing ] [ type_or_dimensions ]

[ interface_identifier . | class_scope ] function_identifier ;

{ tf_item_declaration }

{ function_statement_or_null }

  endfunction [ : function_identifier ]

| [ signing ] [ type_or_dimensions ]

[ interface_identifier .  | class_scope ] function_identifier ( [ tf_port_list ] ) ;

{ block_item_declaration }

{ function_statement_or_null }

  endfunction [ : function_identifier ]

LRM-243

Changes (changes in red and blue):

named_function_proto::= [ signing ] function_data_type function_identifier ( [ list_of_tf_proto_formals  tf_port_list ] )

 

list_of_tf_proto_formals ::=

{ attribute_instance } tf_proto_formal { , { attribute_instance } tf_proto_formal }

LRM-261

Changes (task should be bold and red)  (changes in red and blue):

dpi_import_export ::=                                                          // from Annex A.2.6

  import "DPI" [ dpi_function_import_property ] [ c_identifier = ] dpi_function_proto ;

| import "DPI" [ dpi_task_import_property ] [ c_identifier = ] dpi_task_proto ;

| export "DPI" [ c_identifier = ] function function_identifier ;

| export "DPI" [ c_identifier = ] task task task_identifier ;

Section A.2.7

LRM-249

Changes (changes in red and blue):

task_body_declaration ::=

  [ interface_identifier . | class_scope ] task_identifier ;

{ tf_item_declaration }

{ statement_or_null }

  endtask [ : task_identifier ]

| [ interface_identifier . | class_scope ] task_identifier ( [ tf_port_list ] ) ;

{ block_item_declaration }

{ statement_or_null }

  endtask [ : task_identifier ]

LRM-243

Changes (changes in red and blue):

tf_item_declaration ::=

  block_item_declaration

| { attribute_instance } tf_input_declaration ;

| { attribute_instance } tf_output_declaration ;

| { attribute_instance } tf_inout_declaration ;

| { attribute_instance } tf_ref_declaration ;

| tf_port_declaration

 

tf_port_list ::=

tf_port_item { , tf_port_item }

 

tf_port_item ::=

  { attribute_instance } tf_input_declaration

| { attribute_instance } tf_output_declaration

| { attribute_instance } tf_inout_declaration

| { attribute_instance } tf_ref_declaration

| { attribute_instance } [ signing ] { packed_dimension } list_of_tf_variable_identifiers

| { attribute_instance } data_type list_of_tf_variable_identifiers

 

tf_port_item ::=

{ attribute_instance }

[ tf_port_direction ] data_type_or_implicit

port_identifier variable_dimension [ = expression ]

 

tf_input_declaration ::=

  input [ signing ] { packed_dimension } list_of_tf_variable_identifiers

| input data_type list_of_tf_variable_identifiers

 

tf_output_declaration ::=

  output [ signing ] { packed_dimension } list_of_tf_variable_identifiers

| output data_type list_of_tf_variable_identifiers

 

tf_inout_declaration ::=

  inout [ signing ] { packed_dimension } list_of_tf_variable_identifiers

| inout data_type list_of_tf_variable_identifiers

 

tf_ref_declaration ::=

[ const ] ref data_type list_of_tf_variable_identifiers

 

tf_port_direction ::= port_direction | const ref

 

tf_port_declaration ::=

{ attribute_instance } tf_port_direction data_type_or_implicit list_of_tf_variable_identifiers ;

 

named_task_proto ::= task_identifier ( [list_of_tf_proto_formals  tf_port_list ] )

 

task_proto_formal tf_proto_formal ::=

  tf_input_declaration

| tf_output_declaration

| tf_inout_declaration

| tf_ref_declaration

Section A.2.9

LRM-243

Changes (changes in red and blue):

modport_simple_ports_declaration ::=

  input list_of_modport_port_identifiers

| output list_of_modport_port_identifiers

| inout list_of_modport_port_identifiers

| ref [ data_type ] list_of_modport_port_identifiers

 

modport_simple_ports_declaration ::=

port_direction  modport_simple_port { , modport_simple_port }

 

modport_simple_port ::=

  port_identifier

| . port_identifier ( [ expression ] )

Section A.2.10

LRM-240

Changes (changes in red and blue):

concurrent_assertion_item ::= [ block_identifier : ] concurrent_assertion_statement

  concurrent_assert_statement

| concurrent_cover_statement

| concurrent_assertion_item_declaration

 

concurrent_assertion_statement ::=

  assert_property_statement

| assume_property_statement

| cover_property_statement

 

concurrent_assert_statement ::=

[block_identifier:] assert_property_statement

 

concurrent_cover_statement ::=

[block_identifier:] cover_property_statement

LRM-208 LRM-249

Changes (changes in red and blue):

property_instance ::=

ps_property_identifier [ ( [ actual_arg_list ] ) ]

LRM-208

Changes (changes in red and blue):

property_declaration ::=

property property_identifier [ property_formal_list ( [ list_of_formals ] ) ] ;

{ assertion_variable_declaration }

property_spec ;

endproperty [ : property_identifier ]

 

property_formal_list ::=

( formal_list_item { , formal_list_item } )

LRM-278

Changes (changes in red and blue):

property_spec ::=

  [clocking_event ] [ disable iff ( expression ) ] property_expr

| [ disable iff ( expression ) ] multi_clock_property_expr

 

property_expr ::=

  sequence_expr

| ( property_expr )

| not property_expr

| property_expr or property_expr

| property_expr and property_expr

| sequence_expr |-> property_expr

| sequence_expr |=> property_expr

| if ( expression ) property_expr [ else property_expr ]

| property_instance

| clocking_event property_expr

LRM-262 LRM-278

Changes (changes in red and blue):

multi_clock_property_expr ::=

  property_expr

! | multi_clock_sequence

| clocking_event multi_clock_property_expr

| ( multi_clock_property_expr )

| not multi_clock_property_expr

| multi_clock_property_expr or multi_clock_property_expr

| multi_clock_property_expr and multi_clock_property_expr

| multi_clock_sequence |-> multi_clock_property_expr

| multi_clock_sequence |=> multi_clock_property_expr

| if ( expression ) multi_clock_property_expr [ else multi_clock_property_expr ]

| property_instance

LRM-208 LRM-278

Changes (changes in red and blue):

sequence_declaration ::=

sequence sequence_identifier [ sequence_formal_list ( [ list_of_formals ] ) ] ;

{ assertion_variable_declaration }

sequence_spec ;

sequence_expr ;

endsequence [ : sequence_identifier ]

 

sequence_formal_list ::=

( formal_list_item { , formal_list_item } )

LRM-278

Changes (changes in red and blue):

sequence_spec ::=

  multi_clock_sequence

| sequence_expr

LRM-211 LRM-278

Changes (changes in red and blue):

multi_clock_sequence::=

  sequence_expr

| clocking_event multi_clock_sequence

| ( multi_clock_sequence )

| multi_clock_sequence ## multi_clock_sequence

| multi_clock_sequence cycle_delay_range multi_clock_sequence

LRM-208 LRM-278

Changes (changes in red and blue):

sequence_expr ::=

  cycle_delay_range sequence_expr { cycle_delay_range sequence_expr }

| sequence_expr cycle_delay_range sequence_expr { cycle_delay_range sequence_expr }

| expression_or_dist [ boolean_abbrev ]

| ( expression_or_dist {, sequence_match_item } ) [ boolean_abbrev ]

| sequence_instance [ sequence_abbrev ]

| ( sequence_expr {, sequence_match_item } ) [ sequence_abbrev ]

| sequence_expr and sequence_expr

| sequence_expr intersect sequence_expr

| sequence_expr or sequence_expr

| first_match ( sequence_expr {, sequence_match_item} )

| expression_or_dist throughout sequence_expr

| sequence_expr within sequence_expr

| clocking_event sequence_expr

LRM-275

Changes (changes in red and blue):

cycle_delay_range ::=

  ## constant_expression

  ## integral_number

| ## identifier

| ## ( constant_expression )

| ## [ cycle_delay_const_range_expression ]

 

sequence_method_call ::=

sequence_instance . method_identifier

LRM-208 LRM_249

Changes (changes in red and blue):

sequence_instance ::=

ps_sequence_identifier [ ( [ actual_arg_list  ] ) ]

 

formal_list_item ::=

formal_identifier [ = actual_arg_expr ]

 

list_of_formals ::= formal_list_item { , formal_list_item }

 

actual_arg_list ::=

  ( actual_arg_expr { , actual_arg_expr } )

| ( . formal_identifier ( actual_arg_expr ) { , . formal_identifier ( actual_arg_expr ) } )

LRM-209

Changes (changes in red and blue):

non_consecutive_repetition ::= [*= [= const_or_range_expression ]

 

goto_repetition ::= [*-> [-> const_or_range_expression ]

LRM-208

Changes (changes in red and blue):

expression_or_dist::=

  expression

| expression dist { dist_list }

expression_or_dist::= expression [ dist { dist_list } ]

Section A.2.11

LRM-229 LRM-243

Change (note ; at end of coverage_option) (changes in red and blue):

covergroup_declaration ::=

covergroup covergroup_identifier [ ( list_of_tf_proto_formals [ tf_port_list ] ) ] [ coverage_event ] ;

{ coverage_spec_or_option ; }

endgroup [ : covergroup_identifier ]

 

coverage_spec_or_option ::=

  {attribute_instance} coverage_spec

| {attribute_instance} coverage_option ;

LRM-249

Changes (changes in red and blue):

hierarchical_btf_identifier :: =

  hierarchical_tf_identifier

| hierarchical_block_identifier

| hierarchical _identifier { [ class_scope :: ] } method_identifier

LRM-251 LRM-256

Changes (last 2 terms added =) (changes in red and blue):

bins_or_options ::=

  coverage_option

| [ wildcard ] bins_keyword bin_identifier [ [ [ expression ] ] ] = { range_list } [ iff ( expression ) ]

| [ wildcard] bins_keyword bin_identifier [ [ ] ] = ( trans_list ) [ iff ( expression ) ]

| bins_keyword bin_identifier [ [ [ expression ] ] ] = default [ iff ( expression ) ]

| bins_keyword bin_identifier = default sequence [ iff ( expression ) ]

LRM-251

Changes (changes in red and blue):

trans_list ::= ( trans_set ) { , ( trans_set ) }

LRM-267

Changes (changes in red and blue):

trans_range_list ::=

  trans_item

| trans_item [ [ * repeat_range ] ]

| trans_item [ [ *–> [ –>repeat_range ] ]

| trans_item [ [ *= [ =repeat_range ] ]

LRM-251 LRM-253

Changes (changes in red and blue):

trans_item ::= { range_list } | value_range

LRM-229

Changes (changes in red and blue):

cover_cross ::= [cover_point_identifer : ] cross cross list_of_coverpoints [ iff ( expression ) ] select_bins_or_empty

LRM-255

Changes (changes in red and blue):

bins_selection ::= bins_keyword bin_identifier = select_expression [ iff ( expression ) ]

Section A.5.1

LRM-242

Changes (reformat production!) (changes in red and blue):

udp_declaration ::=

  udp_nonansi_declaration udp_port_declaration { udp_port_declaration }

udp_body

  endprimitive [ : udp_identifier ]

| udp_ansi_declaration udp_body endprimitive [ : udp_identifier ]

| extern udp_nonansi_declaration

| extern udp_ansi_declaration

| { attribute_instance } primitive udp_identifier ( .* ) ;

{ udp_port_declaration } udp_body endprimitive [ : udp_identifier ]

 

udp_declaration ::=

  { attribute_instance } primitive udp_identifier ( udp_port_list ) ;

udp_port_declaration { udp_port_declaration }

udp_body

  endprimitive

| { attribute_instance } primitive udp_identifier ( udp_declaration_port_list ) ;

udp_body

  endprimitive

Section A.6.2

LRM-242

Changes (changes in red and blue):

always_construct ::= always  always_keyword statement

 

always_keyword ::= always | always_comb |  always_latch | always_ff

 

combinational_construct ::= always_comb statement

 

latch_construct ::= always_latch statement

 

ff_construct ::= always_ff statement

LRM-248

Changes (changes in red and blue):

blocking_assignment ::=

  variable_lvalue = delay_or_event_control expression

| hierarchical_dynamic_array_variable_identifier [ ] = dynamic_array_new

| class_variable_identifier = class_new

| class_variable_identifier . randomize [ ( ) ] with constraint_block

| operator_assignment

LRM-242

Changes (changes in red and blue):

procedural_continuous_assignments procedural_continuous_assignment ::=

  assign variable_assignment

| deassign variable_lvalue

| force variable_assignment

| force net_assignment

| release variable_lvalue

| release net_lvalue

Section A.6.4

LRM-240 LRM-242 LRM-248 LRM-250

Change (include ; on clocking_drive) (changes in red and blue):

statement_item ::=

  blocking_assignment ;

| nonblocking_assignment ;

| procedural_continuous_assignments ;

| procedural_continuous_assignment ;

| case_statement

| conditional_statement

| inc_or_dec_expression ;

| subroutine_call_statement

| disable_statement

| event_trigger

| loop_statement

| jump_statement

| par_block

| procedural_timing_control_statement

| seq_block

| wait_statement

| procedural_assertion_item

| procedural_assertion_statement

| clocking_drive ;

| randsequence_statement

| scope_randomize

| randcase_statement

| expect_property_statement

LRM-248

Changes (changes in red and blue):

scope_randomize ::= [ std :: ] randomize ( [ variable_identifier_list ] ) [ with { constraint_block } ]

Section A.6.8

LRM-248

Change (Bold on brackets on loop_variables) (changes in red and blue):

loop_statement ::=

  forever statement_or_null

| repeat ( expression ) statement_or_null

| while ( expression ) statement_or_null

| for ( for_initialization ; expression ; for_step )

statement_or_null

| do statement_or_null while ( expression ) ;

| foreach ( array_identifier [ [ loop_variables ] ] ) statement

LRM-248

Change (Bold on brackets on loop_variables) (changes in red and blue):

loop_variables ::= [ index_variable_identifier ] { , [ index_ variable_identifier ] }

Section A.6.10

LRM-240

Changes (changes in red and blue):

procedural_assertion_item ::=

 assert_property_statement

| cover_property_statement

| immediate_assert_statement

| assume_property_statement

 

procedural_assertion_statement ::=

  concurrent_assertion_statement

| immediate_assert_statement

Section A.6.11

LRM-270

Changes (including new formatting) (changes in red and blue):

clocking_declaration ::=

[ default ] clocking [ clocking_identifier ] clocking_event ;

{ clocking_item }

endclocking [ : clocking_identifier ]

LRM-271

Changes (including new formatting) (changes in red and blue):

cycle_delay ::= ## expression

  ## integral_number

| ## identifier

| ## ( expression )

Section A.8.1

LRM-249

Changes (changes in red and blue):

slice_size ::= ps_type_identifier | constant_expression

Section A.8.2

LRM-249

Changes (changes in red and blue):

tf_call ::= ps_or_hierarchical_tf_identifier { attribute_instance } [ ( list_of_arguments ) ]

LRM-248

Changes (changes in red and blue):

subroutine_call ::=

  tf_call

| system_tf_call

| method_call

| randomize_call

LRM-248

Changes (changes in red and blue):

method_call ::=

  method_call_root . method_identifier { attribute_instance } [ ( list_of_arguments ) ]

| expression . array_method_name { attribute_instance } [ ( list_of_arguments ) ]

[ with ( expression ) ]21

 

method_call ::=

method_call_root . method_call_body

 

method_call_body ::=

  method_identifier { attribute_instance } [ ( list_of_arguments )  ]

| built_in_method_call

 

built_in_method_call ::=

  array_manipulation_call

| randomize_call

 

array_manipulation_call ::=

array_method_name { attribute_instance }

[ ( list_of_arguments ) ]

[ with ( expression ) ]

 

randomize_call ::=

randomize { attribute_instance }

 [ ( [ variable_identifier_list | null ]  )  ]

 [ with { { constraint_block } } ]

Section A.8.3

LRM-275

Changes (changes in red and blue):

constant_expression ::=

  constant_primary

| unary_operator { attribute_instance } constant_primary

| constant_expression binary_operator { attribute_instance } constant_expression

| constant_expression ? { attribute_instance } constant_expression : constant_expression

| string_literal

 

expression ::=

  primary

| unary_operator { attribute_instance } primary

| inc_or_dec_expression

| ( operator_assignment )

| expression binary_operator { attribute_instance } expression

| conditional_expression

| string_literal

| inside_expression

| tagged_union_expression

LRM-202

Changes (changes in red and blue):

range_list_or_array ::=

  variable_identifier

| { value_range { , value_range } }

Section A.8.4

LRM-249

Changes (changes in red and blue):

constant_primary ::=

  primary_literal

| ps_parameter_identifier

| ps_specparam_identifier

| genvar_identifier

| [ package_scope | class_scope ] enum_identifier

| constant_concatentation

| constant_multiple_concatenation

| constant_function_call

| ( constant_mintypmax_expression )

| constant_cast

LRM-249

Changes (changes in red and blue):

primary ::=

  primary_literal

| [ implicit_class_handle . | class_scope | package_scope ] hierarchical_identifier select

| class_scope :: identifier select

| empty_queue

| concatenation

| multiple_concatenation

| function_subroutine_call

| ( mintypmax_expression )

| cast

| streaming_expression

| sequence_method_call

| $25

| null

LRM-249 LRM-275

Changes (changes in red and blue):

primary_literal ::= number | time_literal | unbased_unsized_literal | string_literal

Section A.8.5

LRM-249

Changes (changes in red and blue):

net_lvalue ::=

  ps_or_hierarchical_net_identifier constant_select

| { net_lvalue { , net_lvalue } }

 

variable_lvalue ::=

  [ implicit_class_handle . | package_scope ] hierarchical_variable_identifier select

| { variable_lvalue { , variable_lvalue } }

Section A.9.3

LRM-270

Changes (changes in red and blue):

hierarchical_identifier ::= [ $root . ] { identifier { [ [ constant_expression ] ] } . } identifier

LRM-248

Changes (changes in red and blue):

index_variable_identifier ::= identifier

LRM-249

Changes (changes in red and blue):

output_port_identifier ::= identifier

 

package_identifier ::= identifier

 

package_scope ::=

  package_identifier ::

| $unit ::

LRM-249

Changes (changes in red and blue):

property_identifier ::= identifier

 

ps_class_identifier ::= [ package_scope ] class_identifier

 

ps_covergroup_identifier ::= [ package_scope ] covergroup_identifier

 

ps_identifier ::= [ package_scope ] identifier

 

ps_or_hierarchical_net_identifier ::=

[ package_scope ] net_identifier | hierarchical_net_identifier

 

ps_or_hierarchical_tf_identifier ::= [ package_scope ] tf_identifier | hierarchical_tf_identifier

 

ps_parameter_identifier ::= [ package_scope ] parameter_identifier

 

ps_property_identifier ::= [ package_scope ] property_identifier

 

ps_sequence_identifier ::= [ package_scope ] sequence_identifier

 

ps_specparam_identifier ::= [ package_scope ] specparam_identifier

 

ps_type_identifier ::= [ package_scope ] type_identifier

Section A.10

LRM-236

Changes (changes in red and blue):

A.10 Notes Footnotes (normative)

LRM-249

Changes (changes in red and blue):

7) implicit_class_handle shall only appear within the scope of a class_declaration or extern_method_declaration out-of-block method declaration.

LRM-248

Changes (changes in red and blue):

21) The with clause of a method call shall be legal only for the array (or queue) methods of Section 4.15.

LRM-243

Changes (changes in red and blue):

27) In a constant_function_call, all arguments shall be constant_expressions.

 

28) The list_of_port_declarations syntax is explained in Section 18.8, which also imposes various semantic restrictions, e.g., a ref port must be of a variable type and an inout port must not be.  It shall be illegal to initialize a port that is not a variable output port.

 

29) It shall be legal to declare void struct_union_members only within tagged unions.