Proposal for adding datatypes to formal parameters of assertion sequences and properties Motivation ---------- 1. To be aligned with the overall System Verilog data typing definitions. 2. To allow strongly typed code to provide better compiler/tool compabilities, optimization and error detection. 3. To extend the data types that can be passed to assertions. One may pass an class object and activate a method of that class. 4. To allow activations of properties thru the DPI, with correct data types. 5. Make usage of the SystemVerilog pass-by-value and pass-by-reference syntax. 6. Make usage of the SystemVerilog default argument capabilities. 7. Make usage of the SystemVerilog pass by name capabilities. 8. To allow a well defined interface to properties such that external users do not pass arguments that provide undesirable behavior. Syntax Changes -------------- Note: The following changes make usage of already defined BNF for 'tf_port_list' and 'list_of_arguments'. (1) Property declaration Change: property_declaration ::= property property_identifier [ ( [ list_of_formals ] ) ] ; { assertion_variable_declaration } property_spec ; endproperty [ : property_identifier ] To: property_declaration ::= property property_identifier [ ( [ tf_port_list ] ) ] ; { assertion_variable_declaration } property_spec ; endproperty [ : property_identifier ] (2) Property instance Change: property_instance ::= ps_property_identifier [ ( [ actual_arg_list ] ) ] To: property_instance ::= ps_property_identifier [ ( [ list_of_arguments ] ) ] (3) Sequence declaration Change: sequence sequence_identifier [ ( [ list_of_formals ] ) ] ; { assertion_variable_declaration } sequence_expr ; endsequence [ : sequence_identifier ] To: sequence sequence_identifier [ ( [ tf_port_list ] ) ] ; { assertion_variable_declaration } sequence_expr ; endsequence [ : sequence_identifier ] (4) Sequence instance Change: sequence_instance ::= ps_sequence_identifier [ ( [ actual_arg_list ] ) ] To: sequence_instance ::= ps_sequence_identifier [ ( [ list_of_arguments ] ) ] Examples: 1) Property with bit arguments, pass by reference. property rule6(ref bit x, ref bit y); ##1 x |-> y; endproperty property rule5a; @(posedge clk) a ##1 (b || c)[->1] |-> if (b) rule6(d,e) else // c f ; endproperty 2) Usage of default capabilities property read(int j = 0, int k, int data = 1 ); ... endproperty; This example declares a property read() with two default arguments, j and data. The property can then be insatiated using various default arguments: assert read( , 5 ); // is equivalent to read( 0, 5, 1 ); assert read( 2, 5 ); // is equivalent to read( 2, 5, 1 ); assert read( , 5, ); // is equivalent to read( 0, 5, 1 ); assert read( , 5, 7 ); // is equivalent to read( 0, 5, 7 ); assert read( 1, 5, 2 ); // is equivalent to read( 1, 5, 2 ); assert read( ); // error; k has no default value