Section A.1.3

LRM-174

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) ] ] ;

   { class_item }

endclass [ : class_identifier]

Section A.2.2.1

LRM-170

Changes (changes in red and blue):

enum_base_type ::=

  integer_atom_type [ signing ]

| integer_vector_type [ signing ] [ packed_dimension ]

| type_identifier [ packed_dimension ]26

LRM-147

Changes (changes in red and blue):

enum_name_declaration ::=

  enum_identifier [ [ integral_number ] ] [ = constant_expression ]

| enum_identifier [ [ integral_number : integral_number ] ] [ = constant_expression ]

enum_identifier [ [ integral_number [ : integral_number] ] [ = constant_expression ]

 

EDITOR’S NOTE: I applied change 125 differently than the change instructions. The instructions had the new alternate syntax ( | [ integral_number : integral_number ] ) in the middle of the production, which seemed obscure, would not have fit well on one line, and was different than the convention used in most of the BNF. The change instruction were:

 

enum_name_declaration ::= enum_identifier [ [ constant_range_expression integral_number ] | [

integral_number : integral_number ] ] [ = constant_expression ]

Section A.2.5

LRM-160

Changes (changes in red and blue):

variable_dimension13 ::=

  { sized_or_unsized_dimension }

| associative_dimension

| queue_dimension

 

queue_dimension ::= [ $ [ : constant_expression ] ]

Section A.2.9

LRM-173

Changes (changes in red and blue):

modport_tf_port ::=

  task named_task_proto { , named_task_proto }

| function named_function_proto { , named_function_proto }

| task_or_function_identifier tf_identifier { , task_or_function_identifier tf_identifier }

Section A.2.10

LRM-180

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 {, variable_assignment sequence_match_item} ) [ boolean_abbrev ]

| sequence_instance [ sequence_abbrev ]

| ( sequence_expr {, variable_assignment sequence_match_item } ) [ 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

 

sequence_match_item ::=

  variable_assignment

| subroutine_call

Section A.2.11

LRM-173

Changes (changes in red and blue):

hierarchical_btf_identifier :: =

  hierarchical_task_identifier

| hierarchical_function_identifier

  hierarchical_tf_identifier

| hierarchical_block_identifier

| hierarchical _identifier { class_scope :: } method_identifier

LRM-160

Changes (changes in red and blue):

open_value_range23 ::=

  value_range

| [ expression : $ ]

| [ $ : expression ]

Section A.3.1

LRM-172

Changes (changes in red and blue):

cmos_switch_instance ::= [ name_of_gate_instance name_of_instance ] ( output_terminal , input_terminal ,

ncontrol_terminal , pcontrol_terminal )

 

enable_gate_instance ::= [name_of_gate_instance name_of_instance] ( output_terminal , input_terminal , enable_terminal )

 

mos_switch_instance ::= [name_of_gate_instance name_of_instance] ( output_terminal , input_terminal , enable_terminal )

 

n_input_gate_instance ::= [name_of_gate_instance name_of_instance] ( output_terminal , input_terminal { , input_terminal } )

 

n_output_gate_instance ::= [name_of_gate_instance name_of_instance] ( output_terminal { , output_terminal } ,

input_terminal )

 

pass_switch_instance ::= [name_of_gate_instance name_of_instance] ( inout_terminal , inout_terminal )

 

pass_enable_switch_instance ::= [name_of_gate_instance name_of_instance] ( inout_terminal , inout_terminal ,

enable_terminal )

 

pull_gate_instance ::= [name_of_gate_instance name_of_instance] ( output_terminal )

 

name_of_gate_instance ::= gate_instance_identifier { unpacked_dimension }

Section A.4.1.1

LRM-172

Changes (changes in red and blue):

module_instantiation ::=

module_identifier [ parameter_value_assignment ] module_instance hierarchical_instance { , module_instance hierarchical_instance } ;

LRM-172

Changes (changes in red and blue):

module_instance hierarchical_instance ::= name_of_instance ( [ list_of_port_connections ] )

 

name_of_instance ::= module_instance_identifier instance_identifier { unpacked_dimension }

Section A.4.1.2

LRM-172

Changes (changes in red and blue):

interface_instantiation ::=

interface_identifier [ parameter_value_assignment ] module_instance hierarchical_instance { , module_instance hierarchical_instance } ;

Section A.4.1.3

LRM-172

Changes (changes in red and blue):

program_instantiation ::=

program_identifier [ parameter_value_assignment ] program_instance hierarchical_instance { , program_instance hierarchical_instance } ;

 

program_instance ::= program_instance_identifier { range unpacked_dimension } ( [ list_of_port_connections

] )

Section A.5.4

LRM-172

Changes (changes in red and blue):

udp_instance ::= [ name_of_udp_instance name_of_instance ]  ( output_terminal , input_terminal { , input_terminal } )

 

name_of_udp_instance ::= udp_instance_identifier { range unpacked_dimension }

Section A.6.4

LRM-165 LRM-173

Changes (changes in red and blue):

statement_item ::=

  blocking_assignment ;

| nonblocking_assignment ;

| procedural_continuous_assignments ;

| case_statement

| conditional_statement

| inc_or_dec_expression ;

| function_call_statement subroutine_call_statement

| disable_statement

| event_trigger

| loop_statement

| jump_statement

| par_block

| procedural_timing_control_statement

| seq_block

| task_enable_statement

| wait_statement

| procedural_assertion_item

| clocking_drive

| randsequence_statement

| scope_randomize

| randcase_statement

| expect_property_statement

| randsequence_statement

| scope_randomize

| randcase_statement

Section A.6.7.1

LRM-150

Changes (changes in red and blue):

pattern ::=

  variable_identifier

| .*

| . constant_expression

| tagged member_identifier [ pattern ]

| { pattern , ... { , pattern } }

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

LRM-149

Changes (changes in red and blue):

EDITOR’S NOTE: Does the “...” indicate a repetition of something? If so, this is different than the convention used everywhere else in the BNF. If this “...” convention is to be used as well, it needs to be added to the convention explanations at the beginning of the annex.

Section A.6.9

LRM-173

Changes (changes in red and blue):

A.6.9 Task enable Subroutine call statements

system_task_enable ::= system_task_identifier [ ( [ expression ] { , [ expression ] } ) ] ;

 

task_enable ::= hierarchical_task_identifier [ ( list_of_arguments ) ] ;

 

task_enable_statement ::=

  task_enable

| task_method_call ;

| system_task_enable

 

subroutine_call_statement :=

  subroutine_call ;

| void ‘ ( function_subroutine_call ) ;

Section A.6.12

LRM-165

Changes (changes in red and blue):

randsequence_statement ::= randsequence ( [ production_ identifier ] )

production { production }

endsequence

Section A.8.1

LRM-160

Changes (changes in red and blue):

array_range_expression ::=

  expression

| expression : expression

| expression +: expression

| expression -: expression

 

            empty_queue24 ::= { }

Section A.8.2

LRM-173

Changes (changes in red and blue):

A.8.2 Function Subroutine calls

 

constant_function_call ::= function_identifier { attribute_instance }

[ ( list_of_constant_arguments ) ]

 

constant_function_call ::= function_subroutine_call27

 

function_call ::= hierarchical_function_identifier { attribute_instance } [ ( list_of_arguments ) ]

 

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

 

system_tf_call ::= system_tf_identifier  [ ( list_of_arguments ) ]

 

subroutine_call ::=

  tf_call

| system_tf_call

| method_call

 

function_subroutine_call ::= subroutine_call

 

list_of_arguments ::=

  [ expression ] { , [ expression ] } { , . identifier ( [ expression ] ) }

| . identifier ( [ expression ] ) { , . identifier ( [ expression ] ) }

 

list_of_constant_arguments ::=

  [ constant_expression ] { , [ constant_expression ] }

| . identifier ( [ constant_expression ] ) { , . identifier ( [ constant_expression ] ) }

 

system_function_call ::= system_function_identifier [ ( expression { , expression } ) ]

 

function_call_statement ::=

  void ’ ( function_call ) ;

| void ’ ( function_method_call ) ;

| void ’ ( system_function_call ) ;

| function_call ;

| function_method_call ;

| system_function_call ;

 

function_method_call ::= method_call

 

task_method_call ::= method_call

Section A.8.3

LRM-160

Changes (changes in red and blue):

constant_range_expression ::=

  constant_expression

| msb_constant_expression : lsb_constant_expression

| constant_base_expression +: width_constant_expression

| constant_base_expression -: width_constant_expression

 

constant_range_expression ::= constant_expression | constant_range_or_indexed_range

 

constant_range_or_indexed_range ::= range | constant_indexed_range

 

constant_indexed_range ::=

  constant_base_expression +: width_constant_expression

| constant_base_expression –: width_constant_expression

LRM-173

Changes (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

| function_method_call

| tagged_union_expression

LRM-160

Changes (changes in red and blue):

range_expression ::=

  expression

| msb_constant_expression : lsb_constant_expression

| base_expression +: width_constant_expression

| base_expression -: width_constant_expression

 

range_expression ::= expression | range_or_indexed_range

 

range_or_indexed_range ::= range | indexed_range

 

indexed_range ::=

  base_expression +: width_constant_expression

| base_expression –: width_constant_expression

Section A.8.4

LRM-160

Changes (changes in red and blue):

constant_primary ::=

constant_concatenation

| constant_function_call

| ( constant_mintypmax_expression )

| constant_multiple_concatenation

| genvar_identifier

| number

| enum_identifier

| parameter_identifier

| specparam_identifier

| casting_type ’ ( constant_expression )

| casting_type ’ constant_concatenation

| casting_type ’ constant_multiple_concatenation

| time_literal

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

 

constant_primary ::=

  primary_literal

| parameter_identifier

| specparam_identifier

| genvar_identifier

| enum_identifier

| constant_concatentation

| constant_multiple_concatenation

| constant_function_call

| ( constant_mintypmax_expression )

| constant_cast

LRM-173

Changes (changes in red and blue)

module_path_primary ::=

  number

| identifier

| module_path_concatenation

| module_path_multiple_concatenation

| function_call

| system_function_call

| function_subroutine_call

| ( module_path_mintypmax_expression )

LRM-160 LRM-173

Changes (changes in red and blue)

primary ::=

  number

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

| concatenation

| multiple_concatenation

| function_call

| system_function_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 11

| null

 

primary ::=

  primary_literal

| [ implicit_class_handle . ] hierarchical_identifier select

| class_scope :: identifier select

| empty_queue

| concatenation

| multiple_concatenation

| function_call

| system_function_call

| function_subroutine_call

| ( mintypmax_expression )

| cast

| streaming_expression

| $25

| null

LRM-160

Changes (changes in red and blue):

implicit_class_handle7 ::= this | super | this . super

 

select ::= { [ expression ] }  [ [ range_or_indexed_range ] ]

 

constant_select ::=  { [ expression ]