RE: [sv-cc] A possible interpretation for vpi_compare_objects

From: Bassam Tabbara <Bassam.Tabbara_at_.....>
Date: Fri Aug 04 2006 - 10:50:34 PDT
Thanks Jim/Chuck,

This does look good -- I was reading this primarily with class var/obj
in mind.  

About (2) below, easiest is to say this is necessary but not sufficient.

Thx.
-Bassam.

-----Original Message-----
From: owner-sv-cc@eda-stds.org [mailto:owner-sv-cc@eda-stds.org] On
Behalf Of Chuck Berking
Sent: Wednesday, August 02, 2006 12:07 PM
To: Jim Vellenga; SV-CC
Subject: RE: [sv-cc] A possible interpretation for vpi_compare_objects

Overall this looks great, Jim.  I would suggest two possible
clarifications/additions to this as follows:

1) Re. comparing two bit/var selects-
   We may want to return TRUE if two bit/var-select objects of same
   array have index expressions that, though differently specified, are
   "run-time invariant" (constant exprs) that evaluate to the same
values,
   i.e. rather than strictly vpiDecompile output-based.  This would
still be
   consistent with the third principle as well.

2) You may want to give an example of what is meant by your last
paragraph,
   i.e. 
      "However, the converse is not required.  In some cases, all 
       these conditions may be true without requiring that 
       vpi_compare_objects() return 1, and a return value of 0 does not 
       require that at least one condition be false."
Regards,
Chuck

-----Original Message-----
From: owner-sv-cc@eda-stds.org [mailto:owner-sv-cc@eda-stds.org] On
Behalf Of Jim Vellenga
Sent: Wednesday, August 02, 2006 2:21 PM
To: SV-CC
Subject: [sv-cc] A possible interpretation for vpi_compare_objects

Here are some thoughts on vpi_compare_objects() coming out of today's
meeting.

(27.2) IEEE Std 1364-2005 states for vpi_compare_objects() that:

  "The VPI routine vpi_compare_objects() shall return 1 (true) if
  the two handles refer to the same object. Otherwise, 0 (false)
  shall be returned. Handle equivalence cannot be determined with
  a C '==' comparison."

After today's meeting, I'd like to offer the text below as one possible
clarification.  Note that according to this proposed clarification,

-- the vpiType of the two handles must match.

-- two vpiVarSelects or vpiBitSelects that differ only in how their
indices are expressed will not match because the strings returned by
vpiDecompile will differ.

-- if the two handles can differ at any time during the simulation
process, vpi_compare_objects() must return FALSE at all times.

Regards,
Jim

Proposed clarification:
-------------------------------------------------------------------
In particular, if vpi_compare_objects(obj1, obj2) returns 1, then at all
points in the simulation process at which obj1 and obj2 exist (have not
been freed),

-- For any integer property P except vpiLineNo, the value returned by
vpi_get(P, obj1) shall be equal to the value returned by vpi_get(P,
obj2).

-- For any string-valued property S, except for vpiFile, the value
returned by vpi_get_str(S, obj1) shall match the value returned by
vpi_get_str(S, obj2) under comparison using the C strcmp() function, or
both functions shall return a null handle.

-- For any VPI function that takes a reference handle and returns
another VPI handle, if that function is applied separately to obj1 and
to obj2, either the returned values shall both be the null handle, or
the returned values shall themselves match under vpi_compare_objects().

-- Applying vpi_get_value() or vpi_get_delays() to obj1 shall return the
same values as applying the identical function to obj2.

-- If vpi_put_value() or vpi_put_delays() is applied to either handle,
the simulation shall subsequently behave as if it had been applied to
both.  For example, if vpi_put_value() applies a new value to obj1,
immediately applying vpi_get_value() to obj2 shall return the value
stored in obj1.

If any of these conditions is not true, vpi_compare_objects() must
return 0.  However, the converse is not required.  In some cases, all
these conditions may be true without requiring that
vpi_compare_objects() return 1, and a return value of 0 does not require
that at least one condition be false. 
-----------------------------------------------------------------------


--------------------------------------------------------- 
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 Aug 4 10:50:39 2006

This archive was generated by hypermail 2.1.8 : Fri Aug 04 2006 - 10:50:58 PDT