[sv-cc] Mantis item #2226

From: Michael Rohleder <michael.rohleder_at_.....>
Date: Wed Jan 02 2008 - 08:17:35 PST
Hi all,

first of all Season's Greetings and all the best to all of you. Hope you 
had a nice time with your families and enjoyed some days off. I 
certainly did (and still do) - I am in vacation until next Monday, but 
will try to join the call today.

This email tries to nail down some feedback about the problem of dynamic 
objects and especially Abi's write-up. Many thanks to Abi for providing 
us this proposal, after reading it for the 4th and 5th time I think I 
start to understand it much better. ;-)

Since some you have requested also some use cases from a customer's 
point of view from my side, I am trying to do my best and putting some 
related information into my feedback. Hope this is useful. So let's 
start finally:

A) From my point of view there are three types or classes of 
"applications" that are usually written in PLI/VPI/DPI that can/should 
be differentiated for this discussion:
 A1) small, script-like, functions that are implementing simple things 
or a specific functionality that can be easier or more efficient 
described in the "C" language than in Verilog. Typical functions falling 
into this category are, e.g.:
   . a small parser that is reading one or more specific file(s) 
containing some configuration information
   . utility functions that are providing a specific functionality (e.g. 
string concatenation, filename/pathname extraction & building)
   . a reference model for a module that is best to describe on an 
algorithmic level without much detail needed on RTL level
   . a function that generates specific stimulus for a protocol, which 
is reusing some pre-coded C algorithm
   Most (80% - 90%) of these functions are and will be further moving in 
the DPI camp, whenever the functionality provided by DPI permits this. 
The remaining functions will very likely move to a mixture of DPI and 
VPI over time. This type of "applications" is the usual level of 
complexity generated and maintained by "normal" users, aka design and 
verification engineers.
 A2) Medium complex applications or "plug-ins" that are usually 
extending a Verilog application with specific functionality. Examples are:
   . In interface to a customer specific simulator, or a non-Verilog 
simulation engine, e.g. an Instruction Set Simulator
   . An extension of a simulator to write  a VCD file with a specific 
format for later usage (e.g. for tester pattern generation)
   . An extension of a simulator to read a specific stimulus format 
(e.g. for tester pattern resimulation)
   . An extension of a Verilog simulator for doing or setting up 
specific formal analysis tasks or library verification support activities
   The functionality required by these applications requires usually the 
usage of VPI, DPI does not provide the features needed. These kind of 
applications are usually created and maintained by "power users" and 
central CAD organizations of larger companies.
 A3) Complex applications that perform highly complex functionality not 
provided by standard Verilog applications. Functionality that falls into 
this category are usually new applications written on-top of a simulator 
or another Verilog application. Examples are:
   . A full blown high level verification language (e.g. Verisity's e)
   . A methodology to evaluate/grade the quality of testbench (e.g. 
Certess' Certitude)
   . An additional simulator interface provided by a simulator vendor 
(e.g. OMI)
   These applications are often tools by themselves, and have a high 
degree of complexity and run-time sensitivity. They are usually created 
by third-party companies or start-up's or "Advanced Tool" organizations 
in larger semiconductor companies.

The above examples are having two important distinctions:
 - the complexity of the task to be implemented by a VPI function (e.g. 
simple/medium/complex)
 - the "user" or creator of this function (e.g. designer/CAD/tool developer)

comment a) In my humble opinion (IMHO), applications of type A1) and 
their users/creator's do and will not care about the lifetime of dynamic 
objects. These kind of functionality is rarely performance critical and 
seldom very complex, so they will not gain much if they do. Instead of 
going the extra mile with aspects or similar implementations they will 
simply obtain a new variable handle every time they need it. Similar 
might be true for a certain percentage of applications of type A2), I 
assume about half of them.

comment b) Even for all applications not discussed by comment a) I do 
not see much benefit in terms of application runtime when adding the 
properties from Abi's proposal. Most of them describe the validity of 
certain properties, but leave it up to the user to handle the 
corresponding variable correctly. IMHO this creates two problems:
   - a chance to create vendor specific extensions, because CAD people 
optimize the behavior for a specific simulator/tool (often people use a 
trial-and-error approach to identify the simulator behavior and measure 
the performance)
   - not necessarily  the people writing these kind of applications have 
the time/knowledge to handle these properties correctly all the time

comment c) I am not able to find a good reasoning for the capability of 
being able to lock a specific object as described in Abi's proposal. I 
also failed to find to imagine a good use case for this feature. As 
said, sorry I am just a dumb user.

comment d) Most of the aspects in Abi's proposal just cover when a 
certain information is valid and/or can be requested. Why do we not just 
put a certain error return code to denote an invalid request when 
performing the request operation ? Adding these aspects permits us to do 
some check upfront, but is this really needed ? Just want to ask this 
question loudly ...


As a summary, I think Abi's proposal has added a lot of value, because 
it structures the problem in a well defined way. However I see some 
issues with it, I think we should discuss in the next meeting:
 - it permits the user to optimize the lifetime analysis of some 
variables and react accordingly. This would be good, if this is 
predictable over all applications, simple and would be fully 
deterministic. However I have the fear that this might fire back and 
could also result in tool specific behavior and plug-ins, mis-optimized 
behavior. I am simply not sure the user really needs to handle this kind 
of information on its own.
 - a lot of this information provided by the aspects shows what kind of 
functionality is valid for a certain handle type; aka it defines what is 
erroneous behavior when asking for a certain information using a handle. 
Why can we not handle these error cases reactively; e.g. by providing 
the appropriate error status upon an erroneous function call?
 - I am not sure whether there are not different implementations 
possible that hide this kind of complexity from the user; e.g. smart 
pointers similar to SCV which can be used as handles for dynamic 
objects. Just loud thinking again ...

Hope this is useful feedback to start from.

Happy New Year!

Best regards,
-Michael










-- 


NOTE:
The content of this message may contain personal statements which are not 
neccessarily the view of Freescale, unless specifically stated.

         ___________________________________________________     
        |                                                   |
        | Michael Rohleder            Tel: +49-89-92103-259 |
     / )| Principal Staff Engineer    Fax: +49-89-92103-101 |( \
    / / | Freescale Semiconductor,        www.freescale.com | \ \
  _( (_ |  _        New Product Development Center       _  | _) )_
 (((\ \>|_/ >  Schatzbogen 7, D-81829 Muenchen, Germany < \_|</ /)))
 (\\\\ \_/ /    mailto:michael.rohleder@freescale.com    \ \_/ ////)
  \       /_______________________________________________\       /
   \    _/                                                 \_    /
   /   /                                                     \   \

This e-mail, and any associated attachments have been classified as:
[ ] Public
[ ] Freescale Semiconductor Internal Use Only
[x] Freescale Semiconductor Confidential Proprietary


    Freescale Halbleiter Deutschland GmbH
    Schatzbogen 7
    D-81829 Muenchen
    www.freescale.com

    Sitz der Gesellschaft/Registered Office: Muenchen
    Registergericht/Registered Court: Amtsgericht Muenchen HR B 151590
    Geschaeftsfuehrer/General Manager: Juergen Weyer, Daryl Raiford, 
                      Oliver Kaltenbach, John Pence, Andreas Wild
    USt.-ID-Nr./VAT-ID-No. DE813898243
    Steuernummer/Tax No. 143/138/30552



-- 
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.
Received on Wed Jan 2 08:18:10 2008

This archive was generated by hypermail 2.1.8 : Wed Jan 02 2008 - 08:18:32 PST