Joao, What are the names of the new callbacks? I did a string search for "cb" and didn't see any obvious ones. I did see starts and ends of frames and threads, but nothing for the variables themselves. 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: Joao Geada [mailto:jgeada@comcast.net] ] Sent: Friday, April 22, 2005 4:28 PM ] To: Jim Vellenga ] Cc: Warmke, Doug; SV-CC; Rohit Rana ] Subject: RE: [sv-cc] Proposal for 526: vpiValid for dynamic variables ] ] Just an observation: the new VPI defines a few new callbacks that ] have to be supported in SystemVerilog. These include variable ] creation, ] destruction & status change callbacks for dynamic variables. ] Any implementation ] that can support those should be automatically able to cleanup any ] existing VPI handles so that they remain valid ... ] ] ie: if I have a VPI handle existing for a dynamic variable 'foo' ] (whether this is a full variable or part of a variable is immaterial) ] then the implementation must know about this handle and must ] be able to ] internally create the appropriate status change callbacks to ] update the ] handle as necessary, including, when appropriate, marking the ] handle as ] 'invalid'. ] ] Right? ] ] Joćo ] ] On Fri, 2005-04-22 at 16:19 -0400, Jim Vellenga wrote: ] > 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 13:52:22 2005
This archive was generated by hypermail 2.1.8 : Fri Apr 22 2005 - 13:52:50 PDT