[sv-ac] Mantis 928 proposal

From: Lisa Piper <piper_at_.....>
Date: Fri Jun 09 2006 - 06:57:17 PDT
Hi all,

Here is a detailed proposal for review for the Mantis 928 changes. I
have entered it on Mantis and at Hillel's request changed myself to
owner.

Lisa

 

=================

Mantis 928:  The purpose is to fix issues with the existing BNF.
Specifically:

1. removal of list_of_formals, formal_list_item, and actual_arg_expr
that were not referenced

2. list_of_arguments was redfined as sequence_list_of_arguments and
property_list_of_arguments. actual_arg was defined as
sequence_actual_arg and property_actual arg.   They are differenct in
that sequences cannot have property arguments.

3. tf_port list was replaced by sequence_port_list and
property_port_list to fix the issue that tf_port_list does not allow
default values assignment other than expression  The new definition
allows for intiialization of all args in the definition.. Named or
positional association of arguments is allowed when the sequence or
property is instantiated.  

 

4. Actual args for a sequence include property_instance, sequence_expr,
expression,  hierarchical _event_identifier, event_expression, *, (*)
(this expands the existing to include all event_controls ) Actual args
for a property are the same as for a sequence with the addition of a
property_instance .

Notes: The definition of actuals for a property allows only for a
property_instance that does not include a disable iff  that is different
from the top level property.(not a property expression).

5. One additional change is that a sequence_expr should also allow for a
sequence instance in its definition.  This relates to this as a
sequence_instance can also be an event control.

 

======================

 

REPLACE (from 17.11)

 

A property is declared with optional formal arguments, as in a sequence
declaration. When a property is

instantiated, actual arguments can be passed to the property. The
mechanism for passing arguments to a

property is the same as for passing arguments to a sequence. The
property gets expanded with the actual

arguments by replacing the formal arguments with the actual arguments.
Semantic checks are performed to

ensure that the expanded property with the actual arguments is legal.

 

WITH

 

A property is declared with optional formal arguments, as in a sequence
declaration. When a property is

instantiated, actual arguments can be passed to the property.  In
addition to the types of arguments that are passed to a sequence, a
property instance can be passed as a formal argument provided that it
does not contain a disable iff clause that is different from the
property itself.  The mechanism for passing arguments to a property is
the same as for passing arguments to a sequence. The property gets
expanded with the actual arguments by replacing the formal arguments
with the actual arguments. Semantic checks are performed for typed
formals to ensure that the expanded property with the actual arguments
is legal.

 

REPLACE  (and also 17-14)

 

A.2.10 Assertion declarations

...

property_instance ::=

property_identifier [ ( [ list_of_arguments ] ) ]

concurrent_assertion_item_declaration ::=

property_declaration

| sequence_declaration

property_declaration ::=

property property_identifier [ ( [ tf_port_list ] ) ] ;

{ assertion_variable_declaration }

property_spec ;

endproperty [ : property_identifier ]

property_spec ::=

[clocking_event ] [ disable iff ( expression_or_dist ) ] 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_or_dist ) property_expr [ else property_expr ]

| property_instance

| clocking_event property_expr

sequence_declaration ::=

sequence sequence_identifier [ ( [ tf_port_list ] ) ] ;

{ assertion_variable_declaration }

sequence_expr ;

endsequence [ : sequence_identifier ]

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

cycle_delay_range ::=

## integral_number

| ## identifier

| ## ( constant_expression )

| ## [ cycle_delay_const_range_expression ]

sequence_method_call ::=

sequence_instance . method_identifier

sequence_match_item ::=

operator_assignment

| inc_or_dec_expression

| subroutine_call

sequence_instance ::=

sequence_identifier [ ( [ list_of_arguments ] ) ]

formal_list_item ::=

formal_identifier [ = actual_arg_expr ]

list_of_formals ::= formal_list_item { , formal_list_item }

actual_arg_expr ::=

event_expression

| $

 

WITH

 

A.2.10 Assertion declarations

property_instance ::=

ps_property_identifier [ ( [ list_of_arguments
property_list_of_arguments] ) ]

property_list_of_arguments::=

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

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

property_actual_arg_expr ::=

| property_instance 

| sequence_expr 

| expression

| hierarchical _event_identifier

| event_expression 

| *

|(*)

concurrent_assertion_item_declaration ::=

property_declaration

| sequence_declaration

property_declaration ::=

property property_identifier [ ( [ tf_port_list property_port_list] ) ]
;

{ assertion_variable_declaration }

property_spec ;

endproperty [ : property_identifier ]

property_port_list ::=

                property_port_item {, property_port_item}

property_port_item ::= 

                { attribute_instance }

                property_formal_type 

                port_identifier {variable_dimension} [=expression];

property_formal_type ::= 

                 | data_type_or_implicit

property_spec ::=

[clocking_event ] [ disable iff ( expression_or_dist ) ] property_expr

property_expr ::=

sequence_expr

| sequence_instance

| ( 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_or_dist ) property_expr [ else property_expr ]

| property_instance

| clocking_event property_expr

sequence_declaration ::=

sequence sequence_identifier [ ( [ tf_port_list  sequence_port_list] ) ]
;

{ assertion_variable_declaration }

sequence_expr ;

endsequence [ : sequence_identifier ]

sequence_port_list ::=

                sequence_port_item {, sequence_port_item}

sequence_port_item ::= 

                { attribute_instance }

                sequence_formal_type 

                port_identifier {variable_dimension} [=expression];

sequence_formal_type ::= 

                 | data_type_or_implicit

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

| sequence_instance

 

....

sequence_instance ::=

ps_sequence_identifier [ ( [ list_of_arguments
sequence_list_of_arguments] ) ]                   

formal_list_item ::=

formal_identifier [ = actual_arg_expr ]

list_of_formals ::= formal_list_item { , formal_list_item }

sequence_list_of_arguments

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

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

sequence_actual_arg_expr ::=

| sequence_expr 

| expression

| hierarchical _event_identifier

| event_expression

| *

| (*)

 

....

 

 
Received on Fri Jun 9 06:57:12 2006

This archive was generated by hypermail 2.1.8 : Fri Jun 09 2006 - 06:58:09 PDT