RE: [sv-ac] local vars as actual arguments

From: Bassam Tabbara <Bassam.Tabbara_at_.....>
Date: Tue Oct 17 2006 - 07:59:22 PDT
Hi Doron,

I think what's missing in your example, and detracts from presentation,
is the "direction" input/... in r1. That's another dimension to consider
e.g. I can't assign to lv if it is input ... (lv = lv ...). 

Thx.
-Bassam.

-----Original Message-----
From: owner-sv-ac@eda.org [mailto:owner-sv-ac@eda.org] On Behalf Of
Korchemny, Dmitry
Sent: Tuesday, October 17, 2006 7:35 AM
To: Doron Bustan
Cc: sv-ac@eda.org
Subject: RE: [sv-ac] local vars as actual arguments

Hi Doron,

You are considering passing by value as lv/* new definition */ =
1/*usage, passed by value*/  + 1

Following your approach the following should be legal:

sequence s(int lv);
	(1, lv = 1);
endsequence

property p;
	s(1);
endproperty

which doesn't look natural.

Dmitry

-----Original Message-----
From: owner-sv-ac@server.eda.org [mailto:owner-sv-ac@server.eda.org] On
Behalf Of Doron Bustan
Sent: Tuesday, October 17, 2006 4:25 PM
Cc: sv-ac@server.eda.org
Subject: Re: [sv-ac] local vars as actual arguments

Dmitry,

I think that my example

property p1;
logic [7:0] lv;

(1, lv = 1) ##1                        // lv = 1
  (1, lv = 1 + 1) ##1                  // lv = 2
  (1, lv = (lv > 3) ? 1+1 : 1-1);      // lv = 0
 ##1 (lv == 0) ;                       // p pass
endproperty

works like functions in c and other programing languages and has a
meaning.

Doron






Korchemny, Dmitry wrote:

>Hi Doron,
>
>I think that passing local variable by value is problematic. I would 
>interpret it in your example as:
>
>property p1;
>logic [7:0] lv;
>
>(1, lv = 1) ##1                        
>  (1, 1 = 1 + 1) ##1                  
>  (1, 1 = (1 > 3) ? 1+1 : 1-1);      
> ##1 (lv == 0) ;                   
>endproperty
>
>which is meaningless.
>
>Thanks,
>Dmitry
>
>-----Original Message-----
>From: owner-sv-ac@server.eda.org [mailto:owner-sv-ac@server.eda.org] On

>Behalf Of Doron Bustan
>Sent: Tuesday, October 17, 2006 2:21 PM
>To: sv-ac@server.eda.org
>Subject: [sv-ac] local vars as actual arguments
>
>Hi,
>
>
>last meeting I took an action item to review passing local variables as

>actual arguments to sequences, who in their turn are passed as actual 
>arguments to other sequences.
>
>It looks that as long as all local variables in the different sequences

>have different names, an approach based on substitution will work.
>
>However, it is not clear that substitution is consistent with the way 
>local variables are being considered as actual arguments. The LRM does 
>not make it clear whether local variable are passed by value or by 
>substitution. To understand the differences, look at the following 
>example:
>
>sequence r1(lv1, lv2);
>  (1, lv1 = lv1 + 1) ##1
>  (1, lv1 = (lv1 > 3) ? lv2+1 : lv2-1); endsequence
>
>property p1;
>logic [7:0] lv;
>
>(1, lv = 1) ##1 r1(lv, lv) ##1 (lv == 0) ; endproperty
>
>When we take the substitution approach, we have that p1 is equivalent 
>to:
>
>property p1;
>logic [7:0] lv;
>
>(1, lv = 1) ##1                        // lv = 1
>  (1, lv = lv + 1) ##1                 // lv = 2
>  (1, lv = (lv > 3) ? lv+1 : lv-1);    // lv = 1
> ##1 (lv == 0) ;                       // p fails
>endproperty
>
>
>When we take the pass by value approach, we have that p1 is equivalent 
>to:
>
>property p1;
>logic [7:0] lv;
>
>(1, lv = 1) ##1                        // lv = 1
>  (1, lv = 1 + 1) ##1                  // lv = 2
>  (1, lv = (lv > 3) ? 1+1 : 1-1);      // lv = 0
> ##1 (lv == 0) ;                       // p pass
>endproperty
>
>
>At least in sv-ac discussion, we did refer to passing local variables 
>as actual argument as "pass by value.
>
>I think that we need to discuss the  differences, and see if it is ok 
>to continue with the substitution.
>
>Doron
>  
>
Received on Tue Oct 17 07:59:30 2006

This archive was generated by hypermail 2.1.8 : Tue Oct 17 2006 - 07:59:36 PDT