RE: [sv-cc] Proposal for 526: vpiValid for dynamic variables

From: Rich, Dave <Dave_Rich_at_.....>
Date: Fri Apr 22 2005 - 15:04:18 PDT
Hi Jim,

Just wanted to put in my $.02

An element of a dynamic array can have three states: valid, invalid, or
outdated. Refer to section 11.4.2. I think the VPI handles should mimic
pass by reference semantics to elements of dynamic arrays.

Dave
 

> -----Original Message-----
> From: owner-sv-cc@eda.org [mailto:owner-sv-cc@eda.org] On Behalf Of
Jim
> Vellenga
> Sent: Friday, April 22, 2005 1:19 PM
> To: Warmke, Doug; SV-CC
> Cc: Rohit Rana
> Subject: RE: [sv-cc] Proposal for 526: vpiValid for dynamic variables
> 
> Doug, Rohit and I have both been doing some thinking
> -- and have come to different conclusions so far.
> But here is my response to at least some of your comments.
> 
> We can make a distinction between a variable that is
> a dynamic array, associative array, or queue and the
> set of values that are associated with the variable.
> The variable itself can be explicitly declared as
> static or be implicitly "static" because it's declared
> in a static context.  In either of those case, there's
> going to be some single place in almost any implementation
> that corresponds to the simple name of the array.  Because
> of that, a vpiHandle to the object corresponding to the
> simple name should be fairly stable.  Even if the array
> is reduced to having no elements, the array continues
> to exist.
> 
> I'll deal later with the problem of what happens when
> the simple name is not declared in a static context.
> 
> When it comes to the elements of the array, or where
> the block of objects that constitute the array is stored
> in memory, that's another matter.  The space where the
> elements are stored is almost certainly going to move
> around in memory as the arrays expand and contract.
> And, as you observe, a queue is very likely to be
> implemented as a linked list.
> 
> Be that as it may, the language requires that one be
> able at any time to access the elements of the array
> directly via an index value.  Thus, if the space for
> the values of a dynamic array foo gets reallocated,
> foo[137] still has to refer to something meaningful,
> provided 137 < the size of the array.  The language
> suggests that this ought to be a fairly efficient
> operation, but if it's inefficient in the language,
> it's probably for the equivalent access (finding
> the new 137th element of foo) to be inefficient
> in VPI as well.  The same is true for an element
> of a queue.
> 
> So let's say that a vpiHandle points to foo[137]
> before the array or queue gets resized (or shifted).
> If we say that after the change, the vpiHandle still
> has to refer to what the language would call foo[137],
> then determining the validity of the vpiHandle
> would mean checking the bounds of the array or
> queue, then doing what the language would to
> to find the corresponding element.  Whether or
> not you think that's the right thing to do, would
> you at least agree that this provides a consistent
> and implementable check for the validity of the
> handle of an element of a dynamic array or queue?
> 
> If the simple name of the array is declared in
> a dynamic context, the validity of the handle
> representing the simple name will be coterminous
> with that of the context -- just as it would
> be for a statically sized variable.  So if
> we can solve the problem for a statically sized
> variable, we can solve for a dynamically sized
> one as well -- although getting the elements
> of the two arrays has to differ as noted above.
> 
> Now about strings.  Again, the validity of the
> handle corresponding to the simple name of the
> string can be established independently of the
> value associated with the string, using the
> same argument as before.  That is, there
> almost certainly is a place somewhere inside
> the simulator that corresponds to the name
> of the string (either permanently or for the
> duration of the context in which the string is
> declared).  So in that case the handle for
> the string should be just as stable as the
> handle for its context.
> 
> But what about the elements of the string?
> That's a very good question.  I went to the
> document to find out how to extract the
> elements of a string in VPI.  I don't actually
> know if there's a way to do that -- I presume
> some form of vpi_get_value might work, but
> I don't know that we've defined vpi_get_value
> for strings.  But from the diagrams, I don't
> see how you can extract a character from a
> particular position in the string (32.14?), or
> extract its var bit (also 32.14?).  One might
> possibly iterate over vpiVarSelect (32.15),
> but that relationship is missing from 32.14
> as well.
> 
> So for the nonce, I don't see a way to extract
> a handle corresponding to a byte of a string,
> so applying vpiValid to it may be moot.
> 
> We haven't yet researched the use of automatic
> variables in all those other contexts, so I'll
> have to stop here for now.  But I would appreciate
> anyone's feedback on my thinking about dynamically-
> sized arrays and strings.
> 
> Regards,
> Jim V.
> 
> ---------------------------------------------------------
> James H. Vellenga                            978-262-6381
> Engineering Director                   (FAX) 978-262-6636
> Cadence Design Systems, Inc.         vellenga@cadence.com
> 270 Billerica Rd
> Chelmsford, MA 01824-4179
> "We all work with partial information."
> ----------------------------------------------------------
> 
> 
> 
> ] -----Original Message-----
> ] From: Warmke, Doug [mailto:doug_warmke@mentorg.com]
> ] Sent: Friday, April 08, 2005 2:10 AM
> ] To: Jim Vellenga; SV-CC
> ] Cc: Rohit Rana
> ] Subject: RE: [sv-cc] Proposal for 526: vpiValid for dynamic
variables
> ]
> ] Jim,
> ]
> ] The vpiValid scheme seems good in principle.
> ] I've been trying to think of wording for automatics,
> ] but I'm not sure about some other more basic things.
> ]
> ] First, implementations might reallocate dynamic objects
> ] such as dynamic arrays and associative arrays.  This can
> ] happen due to resizing.
> ]
> ] Other objects, such as queues, are suitable for linked list
> ] implementation and shouldn't need to be reallocated
> ] by a simulator as they change in size. Thus one can in theory
> ] safely keep a reference to an element of a queue and use it
> ] as long as the element hasn't been explicitly deleted by user code.
> ]
> ] Is a vpi handle to an element of a dynamic object like a
> ] SystemVerilog reference to an element of a dynamic object?
> ] If so, then it could be invalidated when the dynamic object
> ] is moved around in memory.
> ]
> ] Also, strings are dynamic objects.
> ] They may be moved around in memory as the string changes
> ] in size.  And strings may be completely deleted by user code.
> ] Are there issues with handles to string variables?
> ] If someone gets a handle to a valid string, then SV
> ] code destroys the string such that it is a NULL variable,
> ] how would that be reflected in the handle object the user has?
> ]
> ] What about handles to basic dynamic and associative arrays?
> ] (i.e. not just array elements).  Those can shift around from
> ] being completely NULL to being objects with valid contents.
> ]
> ] For automatics, remember that in SystemVerilog one can have
> ] automatic variables in all kinds of scopes, not just tasks
> ] and functions.  They can exist in named block scopes, straight
> ] in always/initial blocks, in fork/joins, and probably
> ] elsewhere I'm not thinking about.
> ]
> ] Talk to you guys tomorrow (early!)
> ]
> ] Regards,
> ] Doug
> ]
> ] > -----Original Message-----
> ] > From: owner-sv-cc@eda.org [mailto:owner-sv-cc@eda.org
> ] <mailto:owner-sv-cc@eda.org> ] On
> ] > Behalf Of Jim Vellenga
> ] > Sent: Thursday, April 07, 2005 1:44 PM
> ] > To: SV-CC
> ] > Cc: Rohit Rana
> ] > Subject: [sv-cc] Proposal for 526: vpiValid for dynamic variables
> ] >
> ] > We have uploaded a proposal for adding the vpiValid
> ] > property to variables.  The note says that this property
> ] > indicates whether or not a non-static variable from
> ] > within a class or within a dynamic array is still
> ] > valid, i.e., its memory has not yet been reclaimed.
> ] >
> ] > vpiValid also applies to automatic variables in
> ] > tasks and functions.  Does anyone have some good
> ] > wording to add to this note for that?
> ] >
> ] > Regards,
> ] > Jim Vellenga
> ] >
> ] > ---------------------------------------------------------
> ] > James H. Vellenga                            978-262-6381
> ] > Engineering Director                   (FAX) 978-262-6636
> ] > Cadence Design Systems, Inc.         vellenga@cadence.com
> ] > 270 Billerica Rd
> ] > Chelmsford, MA 01824-4179
> ] > "We all work with partial information."
> ] > ----------------------------------------------------------
> ] >
> ] >
> ] >
> ]
> ]
> ]
Received on Fri Apr 22 15:04:44 2005

This archive was generated by hypermail 2.1.8 : Fri Apr 22 2005 - 15:05:30 PDT