Section A.1.3

LRM-34

Change (changes in red):

 

class_declaration ::=

{ attribute_instance } [ virtual ] class [ lifetime ] class_identifier [ parameter_port_list ]

[ extends class_identifier [parameter_value_assignment ] ] ; [ timeunits_declaration ] { class_item }

endclass [ : class_identifier]

Section A.1.4

LRM-10

Change (changes in red):

 

list_of_port_declarations ::=

  ( port_declaration { , ansi_port_declaration port_declaration } )

| ( )

 

                ….

 

port_declaration ::=

  non_generic_port_declaration

| { attribute_instance } generic_interface_port_declaration

 

ansi_port_declaration ::=

 port_declaration

| port_type list_of_port_identifiers

Section A.2.1.2

LRM-31

Change (changes in red):

 

inout_declaration ::=

  inout [ port_type ] list_of_port_identifiers

| inout data_type list_of_variable_identifiers

Section A.2.1.3

LRM-35

Change (changes in red):

block_data_declaration ::=

  block_variable_declaration

| constant_declaration

| type_declaration

constant_declaration ::= const data_type const_assignment ;

data_declaration ::=

  [lifetime] variable_declaration

| constant_declaration

| type_declaration

 

LRM-22 LRM-35

Change (changes in red):

 

block_variable_declaration ::=

  [ lifetime ] data_type list_of_variable_identifiers ;

| [ lifetime ] data_type list_of_variable_decl_assignments ;

LRM-35

Change (changes in red):

variable_declaration ::=

[ lifetime ] data_type list_of_variable_identifiers_or_assignments list_of_variable_decl_assignments ;

Section A.2.2.1

LRM-35

Change (changes in red):

struct_union_member ::= { attribute_instance } data_type list_of_variable_identifiers_or_assignments variable_declaration ;

Section A.2.3

LRM-32

Change (changes in red):

 

list_of_modport_port_identifiers ::= port_identifier { , port_identifier }

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

list_of_net_decl_assignments ::= net_decl_assignment { , net_decl_assignment }

list_of_net_identifiers ::= net_identifier { unpacked_dimension }

{ , net_identifier { unpacked_dimension } }

list_of_param_assignments ::= param_assignment { , param_assignment }

list_of_port_identifiers ::= port_identifier { unpacked_dimension }

  { , port_identifier { unpacked_dimension } }

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

LRM-35

Change (changes in red):

list_of_variable_identifiers_or_assignments ::=

  list_of_variable_decl_assignments

| list_of_variable_identifiers

Section A.2.4

LRM-35

Change (changes in red):

variable_decl_assignment ::=

  variable_identifier [ variable_dimension ] [ = constant_expression ]

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

| class_identifier [ parameter_value_assignment ] = new [ ( list_of_arguments ) ]

Section A.2.5

LRM-17

Change (changes in red):

 

A.2.5 Declaration ranges

unpacked_dimension ::= [ dimension_constant_expression : dimension_constant_expression ]

| [ dimension_constant_expression ]

 

packed_dimension915 ::=

  [ dimension_constant_expression : dimension_constant_expression ]

| unsized_dimension [ ]

 

range ::= [ msb_constant_expression : lsb_constant_expression ]

 

associative_dimension ::=

  [ data_type ]

| [ * ]

 

variable_dimension16 ::=

{ sized_or_unsized_dimension } 

{ unpacked_dimension }

| [ ]

| associative_dimension

 

dpi_dimension ::=

  variable_dimension

| { [ ] }

 

unsized_dimension15 ::= [ ]

 

sized_or_unsized_dimension ::= unpacked_dimension | unsized_dimension

 

Section A.2.6

LRM-7

Change (changes in red):

 

function_body_declaration ::=

  [ signing ] [ range_or_type ]

[ interface_identifier . ] function_identifier ;

  { function_item_declaration }

  { function_statement_or_null }

  endfunction [ : function_identifier ]

| [ signing ] [ range_or_type ]

  [ interface_identifier . ] function_identifier ( tf_port_list function_port_list ) ;

  { block_item_declaration }

  { function_statement_or_null }

endfunction [ : function_identifier ]

LRM-7

Change (changes in red):

 

tf_port_item function_port_item ::=

{ attribute_instance } tf_input_declaration

| { attribute_instance } tf_output_declaration

| { attribute_instance } tf_inout_declaration

| { attribute_instance } tf_ref_declaration

| { attribute_instance } port_type list_of_tf_port_identifiers

| { attribute_instance } tf_data_type list_of_tf_variable_identifiers

 

tf_port_list function_port_list ::= tf_port_item function_port_item { , tf_port_item function_port_item } | list_of_port_identifiers { , tf_port_item }

LRM-5

Change (changes in red):

 

dpi_function_proto12,13 ::= function named_function_proto

named_function_proto

| [ signing ] function_data_type function_identifier ( list_of_dpi_proto_formals )

LRM-17

Change (changes in red):

 

list_of_dpi_proto_formals ::=

[ { attribute_instance } dpi_proto_formal { , { attribute_instance } dpi_proto_formal } ]

 

dpi_proto_formal ::=

data_type [ port_identifier dpi_dimension { , port_identifier dpi_dimension } ]

Section A.2.7

LRM-7

Change (changes in red):

 

task_body_declaration ::=

  [ interface_identifier . ] task_identifier ;

  { task_item_declaration }

  { statement_or_null }

endtask [ : task_identifier ]

| [ interface_identifier . ] task_identifier ( tf_port_list task_port_list ) ;

  { block_item_declaration }

  { statement_or_null }

  endtask [ : task_identifier ]

 

task_port_list ::= task_port_item { , task_port_item }

| list_of_port_identifiers { , task_port_item }

 

task_port_item ::=

  { attribute_instance } tf_input_declaration

| { attribute_instance } tf_output_declaration

| { attribute_instance } tf_inout_declaration

| { attribute_instance } tf_ref_declaration ;

| { attribute_instance } port_type list_of_tf_port_identifiers

| { attribute_instance } tf_data_type list_of_tf_variable_identifiers

Section A.2.8

LRM-35

Change (changes in red):

block_item_declaration ::=

  { attribute_instance } block_data_declaration data declaration

| { attribute_instance } local_parameter_declaration

| { attribute_instance } parameter_declaration ;

Section A.2.9

LRM-13

Change (changes in red):

 

modport_ports_declaration ::=

  { attribute_instance } modport_simple_ports_declaration

| { attribute_instance } modport_hierarchical_ports_declaration

| { attribute_instance } modport_tf_ports_declaration

Section A.6.2

LRM-18

Change (changes in red):

 

function_statement_or_null ::=

  function_statement

| { attribute_instance } ;

Section A.6.4

LRM-18

Change (changes in red):

 

function_statement ::= [ block_identifier : ] function_statement_item

 

function_statement_or_null ::=

  function_statement

| { attribute_instance } ;

Section A.6.5

LRM-18

Change (changes in red):

 

event_control ::=

  @ hierarchical_event_identifier event_identifier

| @ ( event_expression )

| @*

| @ (*)

Section A.6.8

LRM-27

Change (changes in red):

loop_statement ::=

  forever statement_or_null

| repeat ( expression ) statement_or_null

| while ( expression ) statement_or_null

| for ( variable_decl_or_assignment ; expression ; variable_assignment ) statement_or_null

| for ( variable_decl_or_assignment { , variable_decl_or_assignment } ; expression ;

variable_assignment { , variable_assignment } ) statement_or_null

| do statement_or_null while ( expression ) ;

LRM-35

Change (changes in red):

variable_decl_or_assignment ::=

  data_type list_of_variable_identifiers_or_assignments variable_declaration

| variable_assignment

Section A.7.3

LRM-6

Change (changes in red):

 

A.7.3 Specify block terminals

specify_input_terminal_descriptor ::=

input_identifier [ [ constant_range_expression ] ]

specify_output_terminal_descriptor ::=

output_identifier [ [ constant_range_expression ] ]

input_identifier ::= input_port_identifier | inout_port_identifier | interface_identifier.port_identifier

output_identifier ::= output_port_identifier | inout_port_identifier | interface_identifier.port_identifier

Section A.7.4

LRM-18

Change (changes in red):

 

parallel_edge_sensitive_path_description ::=

( [ edge_identifier ] specify_input_terminal_descriptor =>

(specify_output_terminal_descriptor [ polarity_operator ] : data_source_expression ))

 

full_edge_sensitive_path_description ::=

( [ edge_identifier ] list_of_path_inputs *>

(list_of_path_outputs [ polarity_operator ] : data_source_expression ) )

Section A.8.4

LRM-8

Change (changes in red):

 

constant_primary ::=

  constant_concatenation

| constant_function_call

| ( constant_mintypmax_expression )

| constant_multiple_concatenation

| genvar_identifier

| number

| 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 14

 

primary ::=

  number

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

[ . method_identifier { attribute_instance } [ ( expression { , expression } ) ] ]

| concatenation

| multiple_concatenation

| function_call

| system_function_call

| constant_function_call

| class_identifier :: { class_identifier :: } identifier

| ( mintypmax_expression )

| casting_type ( expression )

| void ’ ( function_call )

| casting_type concatenation

| casting_type multiple_concatenation

| time_literal

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

| null

Section A.9.1

LRM-18

Change (changes in red):

 

attr_spec ::= attr_name  [ = constant_expression ]

  attr_name = constant_expression

| attr_name

Section A.9.3

LRM-18

Change (changes in red):

 

event_identifier ::= identifier

LRM-18

Change (changes in red):

 

text_macro_identifier ::= simple_identifier

Section A NOTES

LRM-5 LRM-8 LRM-17

Change (changes in red):

9) Open-array ( [ ] ) form shall only be used with dpi_proto_formal

 

10) implicit_class_handle shall only appear within the scope of a class_declaration or extern_method_declaration.

 

11) In any one declaration, only one of protected or local is allowed, only one of rand or randc is allowed, and static and/or virtual can appear only once.

 

12) dpi_function_proto return types are restricted to small values, as per 26.4.5

13) formals of dpi_function_proto cannot use pass by reference mode and class types cannot be passed at all; for the complete set of restrictions see 26.4.6

 

14) The apostrophe (‘) in constant_primary or primary shall not be followed by white_space.

 

 

15) unsized_dimension is permitted only in declarations of import DPI functions, see dpi_function_proto.

 

16) More than one unsized dimension is permitted only in declarations of import DPI functions, see dpi_function_proto.