[sv-ac] arguments passing

From: Doron Bustan <dbustan_at_.....>
Date: Thu Apr 26 2007 - 14:43:09 PDT
All,

here is a milestone in our effort to define arguments passing
to declared sequences and declared properties. Attached:

1. 1549_new_types_9.pdf - this is the section 17 (and Annex A),
   part of the proposal. It describes the new types, and the rules, which
   govern actual arguments to formal arguments assignments.

2. formal_semantics_arguments_passing.pdf. This is the Annex E part,
   which defines the semantics of instances of declared sequences and
   declared properties. The semantics is defined using a rewrite
   algorithm that translates an assertion with instances of sequences
   and properties(possibly with arguments,) into one flat assertion.

3. examples.txt - some examples for the rewrite algorithm.


Notes:

1. The current definition does not allow assigning of local variables
   to typed arguments. We wait for 1667, 1668 to be resolved first.

2. Currently, actual arguments of integral type must have an
   equivalent type to the formal arguments they are assigned
   to. Equivalent types are defined at 6.9.2. In general two types are
   equivalent if the have the same number of bits and either both are
   2 states types or 4 states types.  
   
   We are still debating this restriction. An alternative is to say
   that any actual argument that who's type can be casted into the formal
   argument's type, is legal (implicit casting). We think that this
   should be dicussed in the committee.





-- 
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.



Example 1
======================================================
property p1(logic [2:0] a1, property a2);

    (a1 == 3'b010) |=> a2;

endproperty

property p2(a1, logic [1:3] a2);

    a1 ##1 (a2 == 3'b010);
endproperty

assert property (p1(g1, p2(g2, g3)));

---------------------------------
result of flatten_property(p1) - 
---------------------------------
property p1'(logic [2:0] a1, property a2);

    ((logic [2:0]'$var(g1)) == 3'b010) |=> $var(p2(g2, g3));

endproperty


property p2(a1, logic [1:3] a2);

    a1 ##1 (a2 == 3'b010);
endproperty

assert property  (($var((logic [2:0])'g1) == 3'b010) |=> $var(p2(g2, g3)));

---------------------------------
result of flatten_property(p2) - 
---------------------------------
property p2'(a1, logic [1:3] a2);

    $var(g2) ##1 ($var((logic [1:3])'g3) == 3'b010);
endproperty

assert property  (($var((logic [2:0])'g1) == 3'b010) |=> $var( $var(g2) ##1 ($var((logic [1:3])'g3) == 3'b010)));
==================================================




Example 2
==================================================
property p1(logic [2:0] a1, logic [0:2] a2);

a1[0] == a2[1] &&
a1[1] == a2[2] &&
a1[2] == a2[0];

endproperty

assert property (g2 |=> p1(g1[4:6], g1[8:10]));

---------------------------------
result of flatten_property(p1) - 
---------------------------------

property p1(logic [2:0] a1, logic [0:2] a2);

$var((logic [2:0])'(g1[4:6]))[0] == $var((logic [0:2])'(g1[8:10]))[1] &&
$var((logic [2:0])'(g1[4:6]))[1] == $var((logic [0:2])'(g1[8:10]))[2] &&
$var((logic [2:0])'(g1[4:6]))[2] == $var((logic [0:2])'(g1[8:10]))[0];

endproperty

assert property (g2 |=> 
$var((logic [2:0])'(g1[4:6]))[0] == $var((logic [0:2])'(g1[8:10]))[1] &&
$var((logic [2:0])'(g1[4:6]))[1] == $var((logic [0:2])'(g1[8:10]))[2] &&
$var((logic [2:0])'(g1[4:6]))[2] == $var((logic [0:2])'(g1[8:10]))[0];
);
==================================================



Example 3
==================================================
property p1(logic a1, logic [2:0] a2);

logic [2:0] l1;

(a1, l1 = a2) |=> !a1[->1] ##0 (l1 == a2);

endproperty


property p2;

logic [2:0] l1;

(g1, l1 = g2) |=> ((g3 == l1) or p1(g1,g2|g3));

endproperty


assert property (p2);

---------------------------------
result of flatten_property(p2) - 
---------------------------------
property p1(logic a1, logic [2:0] a2);

logic [2:0] l1;

(a1, l1 = a2) |=> !a1[->1] ##0 (l1 == a2);

endproperty


property p2';

logic [2:0] l1;

(g1, l1 = g2) |=> ((g3 == l1) or p1(g1,g2|g3));

endproperty


assert property(

logic [2:0] l1;

(g1, l1 = g2) |=> ((g3 == l1) or p1(g1,g2|g3));
);

---------------------------------
result of flatten_property(p1) - 
---------------------------------
 
property p1'(logic a1, logic [2:0] a2);

logic [2:0] l1_2;

($var((logic)'(g1)), l1_2 = $var(logic [2:0])'(g2|g3)) |=> !$var((logic)'(g1))[->1] ##0 (l1_2 == $var((logic [2:0])'(g2|g3));

endproperty



assert property(

logic [2:0] l1;
logic [2:0] l1_2;

(g1, l1 = g2) |=> ((g3 == l1) or ($var((logic)'(g1)), l1_2 = $var(logic [2:0])'(g2|g3)) |=> !$var((logic)'(g1))[->1] ##0 (l1_2 == $var((logic [2:0])'(g2|g3))))
);
==================================================



Example 4
==================================================
sequence s1(a1, logic [2:0] a2);

logic [2:0] l1;

(1, l1 = a2) ##1 ((a2 != l1), a1 = a1 + 1)[*0:$] ##1 (a2 == l1);
endsequence


assert property (

logic [3:0] l1, l2;

(g1, l1 = g2, l2 = g3) |-> s1(l2, g4) ##0 (l1 == l2)
);

---------------------------------
result of flatten_property(s1) - 
---------------------------------

sequence s1'(a1, logic [2:0] a2);

logic [2:0] l1_1;

(1, l1_1 = $var((logic[2:0])'(g4))) ##1 (($var((logic[2:0])'(g4)) != l1_1), (l2) = $var((l2)) + 1)[*0:$] ##1 ($var((logic[2:0])'(g4)) == l1_1);
endsequence


assert property (

logic [3:0] l1, l2;

(g1, l1 = g2, l2 = g3) |-> 
(1, l1_1 = $var((logic[2:0])'(g4))) ##1 (($var((logic[2:0])'(g4)) != l1_1), l2 = $var((l2)) + 1)[*0:$] ##1 ($var((logic[2:0])'(g4)) == l1_1) 
##0 (l1 == l2)
);

Received on Thu Apr 26 14:43:50 2007

This archive was generated by hypermail 2.1.8 : Thu Apr 26 2007 - 14:44:15 PDT