Subject: RE: [sv-cc] Fwd: READ api issues
From: Francoise Martinolle (fm@cadence.com)
Date: Tue Jan 13 2004 - 13:02:22 PST
Bassam,
see my replies.
At 09:47 AM 1/13/2004 -0800, Bassam Tabbara wrote:
>Hi Francoise, I think most I will add (see below my OKs on the load_init 
>and saying loads optional and so on, I think several other edits I will 
>make), for the vpi_get_time, here's my opinion:
>
>FM: vpi_trvs_get_time, We can enhance vpi_get_time(vpiHandle, s_vpi_time) 
>to perform the same. The s_vpi_time data structure has a field (type) 
>which can be set to return different formats (currently vpiScaledRealTime, 
>vpiSuppressTime, vpiSimTime). You just need to add your specific 
>constants: vpiMaxTime, vpiMinTime, vpiNextVC, vpiPrevVC ...
>
>BT: Extending s_vpi_time this way does *not* work in my opinion, that 
>field (vpiSimTime, vpiScaledRealTime...) is for specifying the type of 
>return of time read/unsigned64 and so on ... we need it to be **as is** 
>i.e still need to return in different types.... I think adding a new field 
>is an option but probably *not backward compatible*, so seems easier to 
>add a new routine. BTW, just like the "get" routines this one is not that 
>crucial it just adds flexibility, not much more, so not worth the 
>effort/risk of extending.
The s_vpi_time structure is defined as:
typedef struct t_vpi_time {
PLI_INT32 type;
PLI_UINT32 high, low;
double real;
}s_vpi_time, 8p_vpi_time;
The type field is a 32 bit value for which we are only using the 2 first 
bit to mean either viScaledRealTime, vpiSimtime or vpiSuppressTime.
Theses constants are defined to be:
#define vpiScaledRealTime 1
#define vpiSimTime 2
#define vpiSuppressTime 3
vpiScaledRealTime states that the time will be returned as a real, while 
vpiSimtime states that the time will be returned as a 64 bit quantity.
There are 30 other bits of the type field which can be used. You can also 
use the 30 bits in combination with the 2 first bits.
Let's assume that I define vpiMinTime to be 4.
Let's say I want to get the mintime of a trvsObj as a real number, I would 
allocate a s_vpi_time_structure and set its type field to be 5 since 
vpiScaledRealTime is 1 and vpiMinTime is 4.
We can even provide macros to set and extract some bit fields of the 32 bit 
type.
>Thx.
>
>-Bassam.
>
>--
>Dr. Bassam Tabbara
>Technical Manager, R&D
>Novas Software, Inc.
>
><http://www.novas.com/>http://www.novas.com
>(408) 467-7893
>-----Original Message-----
>From: Francoise Martinolle [mailto:fm@cadence.com]
>Sent: Friday, January 09, 2004 9:18 PM
>To: bassam@novas.com; sv-cc@eda.org
>Subject: RE: [sv-cc] Fwd: READ api issues
>
>Comments starting witn FM;
>
>At 12:47 PM 1/9/2004 -0800, Bassam Tabbara wrote:
>>Francoise, thx a lot for the feedback. I will attempt to skim and offer 
>>an opinion (since Swapnajit had requested this), all in all I do not 
>>think there is substantial disagreement here, and I think some editorial 
>>fixes can help clarify/address the issues you raise. Looking forward to 
>>getting all the team's support in the vote, and the final polishing that 
>>must be done to get the READ VPI in LRM form.
>>
>>** I honestly think these are either cosmetic/philosophical in nature, or 
>>are valid editorial fixes. I think in some cases, I have to choose in 
>>favor of the Novas tremendous experience in this serving different and 
>>varied concerns from partner and customer alike (so yeah forgive the 
>>"fluff" in a couple of cases but it's worth it), and my true attempt at 
>>munging all of the different uses and applications of our API (and the 
>>wealth of API routines ...), and I've done my best to present that in VPI 
>>form in the proposal, in some cases using my best judgement tempered by 
>>all the excellent input from all in keeping this in VPI form, so I 
>>frowned on ideas that would move this away from a VPI style, I think we 
>>all like that accomplishment so let's keep it. I sincerely appreciate all 
>>of your efforts to help in this regard and correct the missteps or things 
>>I dropped in all the revs so far. I've taken to heart Michael's comments 
>>and Francoise's comments (before now and the ones below).
>>
>>** I only mean to help in the discussion below (and **only because 
>>Swapnajit requested this**, I think people already know most of these) so 
>>please take it at that, forgive my lack of detail in a couple of comments 
>>(only because I've seen this so many times, but I know Francoise is 
>>summarizing everything).
>>
>>-Bassam.
>>
>>--
>>Dr. Bassam Tabbara
>>Technical Manager, R&D
>>Novas Software, Inc.
>>
>><http://www.novas.com/>http://www.novas.com
>>(408) 467-7893
>>-----Original Message-----
>>From: owner-sv-cc@eda.org [mailto:owner-sv-cc@eda.org] On Behalf Of 
>>Francoise Martinolle
>>Sent: Friday, January 09, 2004 8:09 AM
>>To: sv-cc@eda.org
>>Subject: [sv-cc] Fwd: READ api issues
>>
>>>My previous email bounced.
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>>The Cadence VPI/database experts and I have reviewed the latest proposal 
>>>and we are still not satisfied with the final specification. We have 
>>>brought some of these issues in the past and we still think that these 
>>>issues are important and should be solved.
>>>
>>>When accessing data from multiple databases, the user application must 
>>>keep track of which handles comes from where. Instead it should be 
>>>possible to query which database a handle originated from. Our 
>>>preference would be to create a database handle when opening a database 
>>>and allow to obtain the database handle back from any other handle 
>>>obtained from the database. The current proposal specifies a new 
>>>property (vpiInExtension) to determine if a handle was obtained by a 
>>>specific access to a database; this does not work at all  in the 
>>>following two scenarios:
>>>[BT] The heavy cost of extra complication with the addition of that 
>>>extra "db" layer, and they are only for cases of "postprocess" mode is 
>>>not worth it. In some sense they break the "advantage" built into the 
>>>proposal of "treating similar things in the interactive/postprocess 
>>>modes the same", and "keeping things simple". For all practical concerns 
>>>you already have a **top scope handle** even when you have multiple 
>>>scopes they are independent so you have a couple of handles, or even 
>>>potentially you can always have a **virtual top scope** in the db 
>>>storage, so have the extra db type floating around and so on in all 
>>>cases is NOT worthwhile in my judgement. So you also have one handle in 
>>>that case, but really a couple of handles is not that big of a deal 
>>>(we;re talking VPI ...).
>>>[BT] Adding the db creates a lot of indirection to everything, you 
>>>cannot then create a handle from a scope without passing  a db 
>>>pointer,to really do this as you suggest, if you mean a "virtual top" 
>>>that's a minor thing (but not worth the typing ...), if you mean really 
>>>using the db handle in all handle creation, that means this READ API 
>>>will no longer look like VPI !!! I cannot then call vpi_handle() to get 
>>>the trvsHndls and so on, and that's is NOT what I have in mind, and I 
>>>think a lot of the members would not be happy with that approach...
>
>FM: I only mean that from any object that had obtained you can always ask 
>which db it came from. The dbHandle acts much like a scope/module.  It is 
>a new one to one method. You don't have to ask about the db handle unless 
>you need it. You can keep track of the handles yourself but it may become 
>easier for an application to sometimes be able to get back the dbhandle.
>>>    a) I have a handle from a different extension, and that handle 
>>> implementation is completely unknown to my inferface function vpi_get,
>>>[BT] you get a FALSE.
>
>FM: Joao explained to me that you have to know that your interface created 
>handles in a given address space in order to do this. It would work, I think.
>
>>>    b) I have two databases for which I use the same READ api to access 
>>> it. Two handles coming from each databases would always have this 
>>> property TRUE. I can't tell if these handles belong to a different 
>>> database because I have no database handle to compare it to!
>>>[BT] Hmm, you can always compare the handles! This situation is no 
>>>different than having multiple handles in any VPI ...
>>>[BT] I think in most cases having a top scope handle is sufficient. In 
>>>other cases you would have a couple of (top) scope handles, or you can 
>>>choose to  add in the db a "virtual top" (aka root), to clarify the 
>>>situation in case there are many top scopes (i.e. forest) in a single 
>>>database. The "InExtension" is really for the READ api, yes. I think a 
>>>database handle (aka root) adds another layer so for common case it adds 
>>>complication. I do not think this is a worthwhile complication worthy of 
>>>addition at this time. For all intents and purposes keeping things 
>>>simple serves users much more than adding complication.
>>>
>>>The current proposal does not separate the data accessed via a simulator 
>>>from the data accessed from the data base management software. We would 
>>>prefer to have different vpiTypes for handles obtained from a database, 
>>>the reason is that the representation of a vpiNet in a database is 
>>>completely different from a vpiNet obtained from the simulator. With the 
>>>inability to tell from where it obtained the handle, an application has 
>>>a hard time keeping track of the handles.
>>>Our preferred approach is to have a vpiDbObject type to represent a 
>>>database object, there would be an additional property (vpiOrigType) to 
>>>indicate the type of the object it originated from in the design. For 
>>>example a vpiNet object in the design would have a corresponding 
>>>vpiDbObject in the database domain. The only correspondence which would 
>>>exist between the simulation object and the database object would be 
>>>that they have the same vpiName and vpiFullname.
>
>FM: after discussion with Joao, I kind of agree with the approach taken of 
>using the VPI information model even for handles pointing to objects from 
>the database.
>>>[BT] Again the intent is to be simple and allow flexibility. This goes 
>>>hand in hand with the above if there is a separate dbobject than this is 
>>>ok. But in my opinion a separate db object really breaks the intent of 
>>>the proposal to minimize different teatment of traverse objects 
>>>**regardless of where they came from** whether simulator or db or what 
>>>have you ... I do not think this simplicity is a burden it rather makes 
>>>things neat, and there is no confusion users already keep track of 
>>>handles of scopes and the like ... the extra virtual top is just an 
>>>additional level of indirection, with no practical value.
>>>In the scheme proposed to have and use more than one set of VPI routines 
>>>at the same time the specification of the vpi_load_extension() is 
>>>incomplete. In fact the vpi_load_extension() is the only routine which 
>>>is NOT part of the READ API library. This routine should be implemented 
>>>by the application or tool which needs to invoke the READ API and needs 
>>>to be provided as a separate object or library. There are some 
>>>conventions on the shared library name and bootstrap function for the 
>>>READ API which need to be explicitly stated.
>>>
>>>[BT] Hmmm, to the extent that this overlaps with Michael's comments 
>>>about clarifications for the ***READ API concerns** I agree, we have 
>>>these editorials. As for conventions, and bootstrapping and the like 
>>>these are beyond the scope of this chapter ....
>
>FM: It should at least be said that this function implementation is 
>supposed to be provided separately and executed prior using the READ 
>API.  I think that delivery of a shared library and integration should be 
>part of a standard in order to enable full portablity of that library. A 
>user which uses multiple vendor has always a problem trying to integrate 
>the same API with different simulators. We should all agree on a standard 
>mechanism.
>
>[BT] Ok.
>>>The API is not general enough to also be applicable to writing the data 
>>>base, which is a desirable trait. If a function to open a database was 
>>>provided with the capability to indicate the access (read, write...) to 
>>>the database, that would be preferable to an implicit data base open 
>>>with vpi_read_load().
>>>
>>>[BT] This is incorrect in my opinion. The trait is there, only this is 
>>>the READ API.
>
>FM: I think that what I really meant there is to generalize the functions 
>a bit so that they can be easily extended to also be used in the write 
>case. For example having  a function to open a database such as;
>vpi_db_open(filename, access, flags) where access can be read or write.
>[BT]  Ok.
>>>
>>>Some of the extensions are not in line with the spirit of VPI:
>>>   provide basic building blocks
>>>   provide a very few number of general functions.
>>>Specifically:
>>>Some of the functions added could have been done with existing VPI 
>>>functions.
>>>Ex: vpi_trvs_get_time() can be accomplished with vpi_get_time()
>>>       vpi_goto() can be accomplished with vpi_control() and vpi_filter()
>>>
>>>[BT] This is also incorrect. **ALL** the extensions are done to the 
>>>existing VPI when applicable, and you can do **everything** using that 
>>>set of API. An **additional** set is provided when the corresponding VPI 
>>>cannot handle the extension for backward compatability (e.g. vpi_goto() 
>>>has some additional function on vpi_control() but you can use 
>>>vpi_control() to do the same function).
>
>FM: If vpi_goto can do what vpi_control can do and more, then we should 
>only specify vpi_goto. vpi_get_time can be used to do what 
>vpi_trvs_get_time can do . You can use the type field in the time 
>structure to indicate the time : vpiNextVC, vpiPrevVC... vpi_get_time 
>takes a reference handle which can be a trvsobj.
>vpi_goto should take a collection handle or a trvsobj and a s_vpi_time 
>structure and return a new collection or trvsobj.
>[BT] Ok.
>>>Some functions added have slight variations which could have been 
>>>implemented with existing functions. ex: vpi_load_init_create() could 
>>>have been implemented by creating a collection of all objects within a scope:
>>>  Ex: colH = vpi_create(vpiCollectionK, 0, scopeH, vpiObjDecls) ; 
>>> vpiObjDecls is a new iteration which will return all variables, regs, 
>>> nets in a scope.
>>>
>>>[BT] This is a philosophical issue. Whether a collection is a mix of 
>>>things, or there are some special types of collections. I chose the 
>>>latter, the former is there for later extension. It seems reasonable as 
>>>an architectural design decision of the proposal to have a special 
>>>vpiTrvsCollection type.
>
>FM: I think it would be better to have a subtype of collection which can 
>indicate what it contains, but keep the general collection as the only vpiType.
>>>There are many variations of functions : vpi_read_load(), 
>>>vpi_load_init(), vpi_load_init_create() with no distinct advantage.
>>>[BT] The advantage of multiple methods is flexibility. An application 
>>>can chose what is best for it. A complex routine need not be called if I 
>>>do not need it.
>
>FM: The functions proposed only accomplish what you can do with a few vpi 
>function calls. VPI has been designed to provide building blocks not 
>convenience functions.
>[BT] Ok, I will keep only a load_init as we discussed in the meeting. And 
>clearly mark that vpi_load/unload are optional when user wants to exercise 
>more control.
>>>The application needs to concern itself with whether the data it is 
>>>accessing is loaded into memory. This instead should be an 
>>>implementation issue. Whether or not the data is loaded should be 
>>>transparent to the application. When accessing the trvsObj handle with 
>>>vpi_handle(), the data should be loaded if not already loaded. There 
>>>should not be any specific instruction to load the data. The READ API 
>>>implementation should be concerned with efficient loading of the data, 
>>>not the application. A collection of objects should be a good enough 
>>>indication to the READ API implementation to prepare for loading this 
>>>collection of objects.
>>>
>>>[BT] This is incorrect. **Of course!!!!* you load the data when you 
>>>cross a specific window!!! The application (in general) need not concern 
>>>itself but what's the harm in adding a "loaded" property ? Some 
>>>applications may wish to do that ! A collection is good enough and an 
>>>app can not concern itself .... and ignore this, some other may wish to 
>>>do so. That's the whole point. I think it's just you mis-interpet an 
>>>intent to be flexible and give **optimization** hints to actual load 
>>>this is NOT the case. This is just an API, the tool needs to have some 
>>>smart developers.
>
>FM: It seems to me that the load functions and properties should not be 
>part of the mandatory standard. They seem to be added as optional 
>functionality. They should be optional.
>[BT] Ok, will say they are optional.
>>>The proposal assumes a lack of knowledge of the current VPI standard 
>>>specification which is not appropriate nor necessary. For example, it 
>>>should not repeat the specification of the vpi_handle(), vpi_iterate() 
>>>nor explain the VPI naming conventions (section 29.1.2).
>>>
>>>[BT] Well that's the way the other chapters are: Assertion API/Coverage 
>>>API, why they are that way I don't know! Is this not an editorial change ???
>
>FM: They should also be changed.
>>>The proposal is written as a user manual and not as a standard 
>>>specification. The examples are useful but are not normative and should 
>>>be moved to an informative section. The examples make the specification 
>>>harder to comprehend.  The term "user", which is used throughout the 
>>>document, is not accurate.  Generally, the document uses this term to 
>>>refer to the application developer.  However, there are other "users", 
>>>such as the API developer (which is using the specification while doing 
>>>his/her development) or the designer (which is using the tool) ...etc.
>>>[BT] Yes your last comment indicates that "user" is more general :-)! It 
>>>can be a developer and or designer or anyone using it :-)! Anyway I 
>>>think Stu will boil all this down later ... just my 2 cents.
>>>Collections should be a general concept. This concept is applicable in 
>>>other situations. As currently specified it is too specialized for the 
>>>collection of database objects.
>>>Some new concepts have been introduced but are incompletely defined such 
>>>as the time of a trvsObjCollection. We believe that this in particular 
>>>should not be defined.
>
>FM: I think that there are things proposed in the specification which are 
>not vital to the standard, in particular defining the minimum time of a 
>trvscollection etc.. The standard should define the minimum set of API 
>functionality to define portability. This again seems like a vendor 
>convenience extension function, which can be found by querying the time of 
>each member of the collection. It should be removed from the standard.
>>>[BT] explained above ..
>>>
>>>Nothing is specified on what happens if an object has been partially 
>>>dumped into the database.
>>>
>>>
>>>
>>>
>>>
>>>[BT] I thought I added this, I think it's in, this is old feedback.
>
>FM: I don't think it is specified. For ex, if you only dumped a bit select 
>of a vector, what is happening if you obtain a handle to the vector and 
>ask for its trvsObj. What is the trvsObj going to return for the entire 
>vector or for the bits which were not probed? How are you going to find 
>out which bits were probed?
>For a struct type object, do you get a trvsobj for the entire struct? or 
>one for each field? one for each scalar or vector?
>
>
>
>>>Minor issues:
>>>[BT] Thanks for all the edits, The editor (I think that's me) next week 
>>>must go through in detail ... except what is relevant to 
>>>philosophical/design issues of above ...
>>>Section 29.1.1:
>>>The first diagram on page 1 shows a box containing "foreign". Since this 
>>>is not discussed at all in the document, this should be removed.
>>>The introduction which talks about what systemVerilog adds in terms of 
>>>data types should be removed when final inclusion in the SV LRM.
>>>If efficiency is not an API concern and is dealt behind the scenes, why 
>>>having the functions to indicate to load the data and query if the data 
>>>is loaded???
>>>
>>>[BT] Covered above...
>>>Section 29.1.2: this section should be removed as it is common knowledge.
>>>Section 29.2.1
>>>The vpiObjCollection and vpiTrvsObjCollection should be removed.
>>>The list of the object types which can be passed to vpi_get_value() is 
>>>inconsistent with the VPI information model defined for SV. Ex: Reg and 
>>>Reagarrays have disappeared.
>>>We should not attempt to list the object types here.
>>>[BT] Hmmm, this was my opinion all along (and the diagrams too!), 
>>>previous feedback suggested to do the list of things (which I might add 
>>>is not what other chapters e.g. assertion/coverage have done...).
>
>FM: sorry if I had given you this feedback, I am not sure now what is the 
>best way to document this and be synchronized with the current VPI spec.
>>>The vpiHasNoValue property is missing.
>>>
>>>
>>>
>>>
>>>
>>>Section 29.2.2.1 and 29.2.2.2
>>>The separation between static and dynamic info has no precedent in VPI. 
>>>This classification has no advantage.
>>>VpiIsLoaded should be removed.
>>>
>>>[BT] No precedent in Verilog yes, but in SV we did this in assertion 
>>>chapter !
>>>Section 29.2.2.2
>>>The reference to vpi_goto() should be removed.
>>>vpi_get_time() can be used on a vpiTrvsObj, there is no need for the 
>>>additional function vpi_trvs_get_time().
>>>
>>>[BT] Nope vpi_get_time cannot be used without significant backward 
>>>compatability issues.
>
>FM: You had claimed this before but I don't see any backward compatibility 
>issue. Please describe.
>>>Section 29.2.3
>>>This section is useless and should be removed.
>>>
>>>Section 29.3.2:
>>>A single vpiType vpiCollection should be provided.  No need to have 
>>>specialized classes.
>>>
>>>[BT] ....
>>>Replace:
>>>   The first call gives NULL handles to the collection object and the 
>>> object to be added.
>>>
>>>with:
>>>   The first call provides a NULL handle to the collection object and 
>>> the object to be added to the collection.
>>>
>>>Another way to create a collection is to provide an iteration type 
>>>method and a reference handle.
>>>For example, in order to create in one shot a collection of all the nets 
>>>which are declared in a scope:
>>>colH = vpi_create(vpiCollectionK, 0, scopeH, vpiNet);
>>>This is a very useful capability.
>>>
>>>Section 29.3.2.1 Operation on collections
>>>vpi_read_load() should be removed.
>>>
>>>[BT] ....
>>>vpi_goto() should be removed.
>>>The behavior vpi_handle(vpiTrvsObjCollection, objCollectionH) is 
>>>unspecified with respect to unrecorded objects.
>>>Do you get a trvsObj for a particular object if no data has been 
>>>recorded for that object? Do you get a NULL handle for that trvsObject? 
>>>Do you only get back a collection of non NULL trvsObj?
>>>
>>>[BT] ...
>>>
>>>Section 29.4:
>>>The list of the traversable objects is incorrect.
>>>
>>>We should only have a vpiCollection type object. The fact is that there 
>>>is no specific additional properties about a vpiTrvsObjCollection of 
>>>vpiObjCollection; why having specialized classes?
>>>The only possibility seems to be the vpiTrvsObjCollection 1-to-1 method 
>>>which has an incomplete specification.
>>>
>>>Section 29.6:
>>>vpi_read_get_version() is not necessary VPI has already a function to 
>>>access version information:
>>>vpi_get_vlog_info().
>>>
>>>vpi_load_extension() is not a READ API function, it is a function which 
>>>must be implemented by the application or tool which intends to call the 
>>>read api functions. This should be clearly distinguished.
>>>
>>>vpi_load_init(), vpi_load_init_create(), vpi_read_unload(), 
>>>vpi_read_load(), vpi_goto() should all be removed.
>>>
>>>vpi_goto() can easily be replaced by vpi_control() followed by 
>>>vpi_filter() with a criteria of vpiHasVC
>>>
>>>[BT] Yes, but what's the harm ?
>
>FM: It is redundant and complicated the interface implementation.
>>>Section 29.7:
>>>I disagree with the reading of the data.
>>>Accessing a vpiTrvsObj with vpi_handle() should be sufficient to access 
>>>the database data. There should not be any need to explicitly "load".
>>>
>>>[BT] There is no explicit load, this is just a hint ...
>
>FM: Just accessing the handles should be the hint.
>>>Section 29.7.1:
>>>vpi_load_init() and vpi_load_init_create() are unnecessary 
>>>functions.  Loading should be transparent to the application.  The 
>>>indication of which data is to be loaded can be suggested by the handles 
>>>to the objects which have been obtained or gathered in a collection with 
>>>vpi_handle(), vpi_iterate(), or vpi_create().
>>>
>>>Sections 29.7.3, 29.7.3.1
>>>These sections should be removed for reasons explained earlier.
>>>
>>>Section 29.7.4:
>>>"So far we have outlined..."
>>>should be removed.
>>>
>>>Why is the initial time of a trvsObj left to the tool implementation. 
>>>Shouldn't it start at the first time recorded in the database or at the 
>>>first time there is a value recorded for that object?
>>>[BT] No ... what if you are loading a "window-ed" in time ... I think it 
>>>is better to let apps be smart about this.
>
>FM: ok
>>>Section 29.7.2.3:
>>>vpiHasNoValue property does not appear in the diagram featuring vpitrsObj.
>>>
>>>Section 29.7.5:
>>>Some fragments of code which try to add a handle at a time to a 
>>>collection should be replaced with the capability of adding an entire 
>>>iteration at a time to the collection (see previous comments on vpi_create()).
>>>
>>>vpiReg is no longer a vpiType in SV VPI (at least in the latest spec 
>>>sent by Joao)
>>>
>>>[BT] ok ...
>>>Section 29.7.7;
>>>Remove any reference to vpi_goto().
>>>
>>>The time of a trvsObjCollection is undefined.  Is it the smallest time 
>>>for a trvs object?
>>>Some trvsObj of the collection may have different times. We should not 
>>>define the time of a trvsCollection. It seems that the code wants to 
>>>compare the time of each trvsobj with the time it passed to 
>>>vpi_control() in order to determine if a trvsObvj had a VC at that time. 
>>>There is no need to define the time of a trvsObjCollection.
>>>
>>>[BT] above ...
>>>The vpi_goto() is unnecessary it can be replaced with the combination of 
>>>vpi_control() and vpi_filter() with a criteria of vpiHasVC.
>>>
>>>[BT] above ...
>>>Section 29.8
>>>Should be removed. No need to vpi_read_unload() : the tool itself should 
>>>implement its own optimizations for loading and unloading and not depend 
>>>on the application to instruct it to do this.
>>>
>>>[BT] ....
>>>Section 29.9
>>>The user_data field is unnecessary.
>>>It is stated that the struct_version set to 1 for systemVerilog 3.1a. I 
>>>think that struct version value should not be specified by the standard. 
>>>It is tool implementation specific. What about if the tool wants to 
>>>provide other vpi function (vendor extensions), the tool will need to 
>>>generate a different version numbers for each s_vpi_extension structure 
>>>that is different. This is irrespective of what happens to the standard spec.
>>>
>>>[BT] Also agree... a lot of this is implementation dependent, yes! We 
>>>only need to focus on the read API portion ...
>>>It is unclear who calls vpi_load_extension() and where the 
>>>implementation of this function resides.
>>>
>>>Section 29.10:
>>>Section 29.10.1
>>>vpi_control():
>>>"Try to move" why try? Replace with "request to move"
>>>remove reference to vpi_goto().
>>>
>>>[BT] "Try" is relatively speaking a construct in programming (as in 
>>>try/fail) ...  request is not.
>>>Section 29.10.2
>>>Replace vpi_read_get_version() with vpi_get_vlog_info().
>>>
>>>Remove vpi_load_init() and vpi_load_init_create().
>>>
>>>Replace vpi_trvs_get_time() with vpi_get_time() and enhance 
>>>vpi_get_time() to handle vpiNextVc, vpiPrevVC etc...
>>>
>>>Remove vpi_read_load() and vpi_read_unload().
>>>
>>>vpi_create() is missing creating a collection with an iteration.
>>>
>>>Remove vpi_goto().
>>>
>>>
>>>
>>>
>>>
>>>[BT]...
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
This archive was generated by hypermail 2b28 : Tue Jan 13 2004 - 13:04:46 PST