Section A.1.8

LRM-117

Change (changes in red and blue):

class_method ::=

  { method_qualifier } task_declaration

| { method_qualifier } function_declaration

| extern { method_qualifier } method_prototype

| class_constructor_declaration

LRM-117

Change (changes in red and blue):

extern_method_declaration ::=

  function [ lifetime ] class_identifier :: function_body_declaration

| task [ lifetime ] class_identifier :: task_body_declaration

 

class_constructor_declaration ::=

function new ( tf_port_list ) ;

{ block_item_declaration }

 [ super . new [ ( list_of_arguments ) ] ; ]

{ function_statement_or_null }

endfunction [ : new ]

Section A.2.2.1

LRM-125

Change (changes in red and blue):

enum_name_declaration ::=

enum_identifier [ [ constant_range_expression integral_number ] | [ integral_number : integral_number ] ]

[ = constant_expression ]

LRM-122

Change (changes in red and blue):

struct_union_member ::=

  { attribute_instance } data_type { packed_dimension }

      variable_identifier variable_dimension { , variable_identifier variable_dimension } list_of_variable_identifiers ;

| { attribute_instance } void list_of_variable_identifiers ;

 

struct_union ::= struct | union [ tagged ]

Section A.2.4

LRM-126

Change (changes in red and blue):

 

net_decl_assignment ::= net_identifier { unpacked_dimension } [ = expression ]

LRM-117

Change (changes in red and blue):

variable_decl_assignment ::=

  variable_identifier variable_dimension [expression ]

| variable_identifier [ ] = new [expression ] [ ( variable_identifier ) ]

| dynamic_array_variable_identifier [ ] [ = dynamic_array_new ]

| class_variable_identifier  = new [ ( list_of_arguments ) ] [ = class_new ]

| [ covergroup_variable_identifier ] = new [ ( list_of_arguments ) ]19

 

class_new24 ::=  new [ ( list_of_arguments ) | expression ]

 

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

Section A.2.6

LRM-132

Change (changes in red and blue):

dpi_import_export ::=

  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_identifier ;

 

dpi_function_import_property ::= context | pure

 

dpi_task_import_property ::= context

 

dpi_function_proto11,12 ::= function named_function_proto

 

dpi_task_proto12 ::= task named_task_proto

Section A.2.10

LRM-131 LRM-133 LRM-136

Change (changes in red and blue):

assert_property_statement::=

  assert property ( property_spec ) action_block

| assert property ( property_instance ) action_block

 

assume_property_statement::=

  assume property ( property_spec ) ;

 

cover_property_statement::=

  cover property ( property_spec ) statement_or_null

| cover property ( property_instance ) statement_or_null

 

expect_property_statement ::=

                                expect ( property_spec ) action_block

LRM-131

Change (changes in red and blue):

property_spec ::=

  [clocking_event ] [ disable iff ] ( expression ) ] [ not ] property_expr

| [ disable iff ( expression ) ] [ not ] 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 |-> [ not ] sequence_expr property_expr

| sequence_expr |=> [ not ] sequence_expr property_expr

| if  ( expression ) property_expr [ else property_expr ]

| property_instance

| ( property_expr )

 

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 |=> [ not ] multi_clock_sequence multi_clock_property_expr

| if  ( expression ) multi_clock_property_expr  [ else multi_clock_property_expr ]

| property_instance

| ( multi_clock_property_expr )

LRM-131

Change (changes in red and blue):

multi_clock_sequence::=

clocked_sequence { ## clocked_sequence }

  sequence_expr

| clocking_event multi_clock_sequence

| ( multi_clock_sequence )

| multi_clock_sequence ## multi_clock_sequence

 

clocked_sequence ::=

clocking_event sequence_expr

LRM-129 LRM-133

Change (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 expression_or_dist { , variable_assignment } [ boolean_abbrev ]

| ( expression expression_or_dist {, variable_assignment } ) [ boolean_abbrev ]

| sequence_instance [ sequence_abbrev ]

| ( sequence_expr {, variable_assignment } ) [ sequence_abbrev ]

| sequence_expr and sequence_expr

| sequence_expr intersect sequence_expr

| sequence_expr or sequence_expr

| first_match ( sequence_expr )

| expression throughout sequence_expr

| sequence_expr within sequence_expr

LRM-133

Change (changes in red and blue):

actual_arg_expr ::=

  event_expression

| $

LRM-133

Change (changes in red and blue):

cycle_delay_const_range_expression ::=

  constant_expression : constant_expression

| constant_expression : $

 

expression_or_dist::=

  expression

| expression dist { dist_list }

Section A.2.11

LRM-127

Change (changes in red and blue):

covergroup_declaration ::=

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

      { coverage_spec_or_option ; }

endgroup [ : covergroup_identifier ]

 

coverage_spec_or_option ::=

  {attribute_instance} coverage_spec

| {attribute_instance} coverage_option

 

coverage_option ::=

  option.member_identifier = expression

| type_option.member_identifier = expression

 

coverage_spec ::=

  cover_point

| cover_cross

 

coverage_event ::=

  clocking_identifier

| @@( block_event_expression )

 

block_event_expression :: =

  block_event_expression or block_event_expression

| begin hierarchical_btf_identifier

| end hierarchical_btf_identifier

 

hierarchical_btf_identifier :: =

  hierarchical_task_identifier

| hierarchical_function_identifier

| hierarchical_block_identifier

| hierarchical _identifier { class_scope :: } method_identifier

Section A.6.2

LRM-117

Change (changes in red and blue):

blocking_assignment ::=

  variable_lvalue = delay_or_event_control expression

| hierarchical_variable_identifier = new [ constant_expression ] [ ( variable_identifier ) ]

| hierarchical_dynamic_array_variable_identifier [ ]  = dynamic_array_new

| class_variable_identifier  = new [ ( list_of_arguments ) ] class_new

| class_variable_identifier . randomize [ ( ) ] with constraint_block ;

| operator_assignment

Section A.6.4

LRM-113 LRM-136

Change (changes in red and blue):

statement_item ::=

  blocking_assignment ;

|  nonblocking_assignment ;

|  procedural_continuous_assignments ;

|  case_statement

|  conditional_statement

|  inc_or_dec_expression ;

|  function_call ;

| function_call_statement

|  disable_statement

|  event_trigger

|  loop_statement

|  jump_statement

|  par_block

|  procedural_timing_control_statement

|  seq_block

|  system_task_enable task_enable_statement

|  task_enable

|  wait_statement

|  procedural_assertion_item

|  clocking_drive

| void ’ ( function_call )

| randsequence

| scope_randomize

| randcase_statement

| expect ( property_spec ) [ action_block ]

| expect ( property_instance ) [ action_block ]

| expect_property_statement

LRM-115

Change (changes in red and blue):

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

Section A.6.5

LRM-139

Change (changes in red and blue):

procedural_timing_control ::=

 delay_control

| event_control

| cycle_delay

Section A.6.6

LRM-122

Change (changes in red and blue):

conditional_statement ::=

  if ( expression cond_predicate ) statement_or_null [ else statement_or_null ]

| unique_priority_if_statement

 

unique_priority_if_statement ::=

[ unique_priority ] if (expression cond_predicate) statement_or_null

{ else if (expression cond_predicate) statement_or_null }

[ else statement_or_null ]

 

unique_priority ::= unique | priority

 

cond_predicate ::=

expression_or_cond pattern { && expression_or_cond_pattern }

 

expression_or_cond_pattern ::=

expression | cond_pattern

 

cond_pattern ::= expression matches pattern

Section A.6.7

LRM-122

Change (changes in red and blue):

case_statement ::=

  [ unique_priority ] case ( expression ) case_item { case_item } endcase

| [ unique_priority ] casez ( expression ) case_item { case_item } endcase

| [ unique_priority ] casex ( expression ) case_item { case_item } endcase

  [ unique_priority ] case_keyword ( expression ) case_item { case_item } endcase

| [ unique_priority ] case_keyword ( expression ) matches case_pattern_item { case_pattern_item } endcase

 

case_keyword ::= case | casez | casex

 

case_item ::=

  expression { , expression } : statement_or_null

| default [ : ] statement_or_null

 

case_pattern_item ::=

  pattern [ && expression ] : statement_or_null

| default [ : ] statement_or_null

Section A.6.7.1 (New)

LRM-122

Add (changes in red and blue):

A.6.7.1 Patterns

 

pattern ::=

  variable_identifier

| .*

| . constant_expression

| tagged member_identifier [ pattern ]

| { pattern , ... , pattern }

| { member_identifier : pattern , ... , member_identifier : pattern }

Section A.6.9

LRM-113

Change (changes in red and blue):

task_enable ::= hierarchical_task_identifier [ ( list_of_arguments ) ] ;

task_enable_statement ::=

  task_enable

| task_method_call ;

| system_task_enable

Section A.6.10

LRM-133

Change (changes in red and blue):

procedural_assertion_item ::=

  assert_property_statement

| cover_property_statement

| immediate_assert_statement

| assume_property_statement

Section A.6.11

LRM-137

Change (changes in red and blue):

A.6.11 Clocking domain block

Section A.8.2

LRM-113 LRM-140

Change (changes in red and blue):

array_method_call ::=

array_identifier . method_identifier [ ( [ iterator_identifier ] ) ] [ with ( expression ) ]

 

function_call_statement ::=

  void ‘ ( function_call ) ;

| void ‘ ( function_method_call ) ;

| void ‘ ( system_function_call ) ;

| function_call ;

| function_method_call ;

| system_function_call ;

 

method_call_root ::=    expression  |  implicit_class_handle

 

function_method_call ::= method_call

 

task_method_call ::= method_call

 

method_call ::=

  method_call_root . method_identifier { attribute_instance } [ ( list_of_arguments ) ]

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

 

array_method_name ::=

method_identifier | unique | and | or | xor

Section A.8.3

LRM-122

Change (changes in red and blue):

conditional_expression ::= expression cond_predicate ? { attribute_instance } expression : expression

LRM-135

Change (changes in red and blue):

constant_param_expression ::=

constant_mintypmax_expression | data_type | $

LRM-113 LRM-122

Change (changes in red and blue):

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

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

| function_method_call

| tagged_union_expression

 

tagged_union_expression ::=

tagged member_identifier [ expression ]

Section A.8.4

LRM-113

Change (changes in red and blue):

primary ::=

  number

| [ implicit_class_handle . ] hierarchical_identifier { [ expression ] } [ [ range_expression ] ]

| concatenation

| multiple_concatenation

| function_call

| system_function_call

| array_method_call

| class_scope :: identifier { [ expression ] } [ [ range_expression ] ]

| ( mintypmax_expression )

| casting_type ( expression )

| casting_type concatenation

| casting_type multiple_concatenation

| streaming_expression

| time_literal

| ’0 | ’1 | ’z | ’Z | ’x | ’X 13

| null

LRM-113

Change (changes in red and blue):

implicit_class_handle9 ::= [ this. ] | [ super. ] this  |  super  | this . super

Section A.8.5

LRM-113

Change (changes in red and blue):

variable_lvalue ::=

  [ implicit_class_handle . ] hierarchical_variable_identifier { [ expression ] } [ [ range_expression ] ]

| { variable_lvalue { , variable_lvalue } }

Section A.8.7

LRM-125

Change (changes in red and blue):

number ::=

  decimal_number

| octal_number

| binary_number

| hex_number

  integral_number

| real_number

 

integral_number ::=

  decimal_number

| octal_number

| binary_number

| hex_number

Section A.9.3

LRM-117

Change (changes in red and blue):

cover_point_identifier ::= identifier

dynamic_array_variable_identifier ::= variable_identifier

LRM-117

Change (changes in red and blue):

hierarchical_block_identifier ::= hierarchical_identifier

hierarchical_dynamic_array_variable_identifier ::= hierarchical_variable_identifier

Section A.Notes

 

NOTE: The notes and all references need renumbered due to 2 items being removed!

LRM-132

Change (changes in red and blue):

12) Formals of dpi_function_proto and dpi_task_proto cannot use pass by reference mode and class types cannot be passed at all; for the complete set of restrictions see 27.4.6.

LRM-113

Change (changes in red and blue):

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

LRM-117

Change (changes in red and blue):

24) In a shallow copy the expression must evaluate to an object handle.