• Skip to main content
  • Skip to search
  • Skip to footer
Cadence Home
  • This search text may be transcribed, used, stored, or accessed by our third-party service providers per our Cookie Policy and Privacy Policy.

  1. Community Forums
  2. Custom IC SKILL
  3. Create new PCell attributes or properties to hold a list...

Stats

  • Locked Locked
  • Replies 7
  • Subscribers 143
  • Views 15571
  • Members are here 0
This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Create new PCell attributes or properties to hold a list of object identifiers

Dynamic Duo
Dynamic Duo over 12 years ago

Dear All,

I am trying to do the following with SKILL in IC6.1.5.500.12:
================================
Given: an object identifier of a schematic instance Inst0_sch = db: 0x15b7f112, where Inst0_sch is a MOSFET PCell

Obj: assign a list of object identifiers (from the same schematic) listA = list( db:0x15b7f345 db:0x15b7f456 db:0x15b7f678 ) to Inst0_sch as a new attribute or property: "impactNeighbors"
================================

I am thinking this would make query much easier, sort of to minic the reference/pointers in C/C++.
But haven't been able to get it work. Somehow I cannot make new attributes.. And in making a new property, I did not see supported valueType of l_objId?

Alternatively we can define a global list of lists: memlist_, to hold these "impactNeighbors", then assign the list index as a new property to Inst0_sch, e.g.,
dbSetq(Inst0_sch 32 "impactNeighbors"), where nth(32 memlist_) is listA..

But I'd strongly prefer the first way.. Could anyone give me some pointers?

Thanks a bunch!
Duo

  • Cancel
  • skillUser
    skillUser over 12 years ago

    Hi Duo,

    With the exception of a property database object itself, any database object can have a user-defined property associated with it (for a property on a property you would need to create a hierarchical prop using dbCreateHierProp()). So your example should work, as long as you don't try to type in the database ID's.  For a quick test, let's say you've selected the three "neighbours" to Inst0, then you might do something like this:

    Inst0_sch~>impactNeighbors = geGetSelectedSet()
    =>  (db:0x15b7f345 db:0x15b7f456 db:0x15b7f678)

    You can create the prop more formally with a call to dbCreateProp() where you are required to give the type as well as the property name and value.

    Hopefully this will help you?

    Regards,

    Lawrence.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Dynamic Duo
    Dynamic Duo over 12 years ago
    Thanks a lot for the prompt reply, Lawrence! This helps a lot.

    For my case, the db objects are derived from inside the SKILL program, instead of being selected from the window.
    For example:

    inst1 = nth(1 setof(x cvId_sch~>instances x~>xy....))
    inst2 = nth(2 ....)
    inst3 = nth(3 ....)

    listA = list( inst1 inst2 inst3)

    So when I do the following, it's not assigning the hier prop correctly:

    >> dbCreateHierProp(inst0_sch "impactNeighbors")  <-- I typed this line to CIW

    >> inst0_sch~>impactNeighbors = listA                   <-- I typed this line to CIW

    >> (db:0x15b7edff db:0x1bfc5a96 db:0x1bfc5a9d)      <-- The return of the previous line

     

    the returned value from the command line is correct, the same as listA.

    But when I check the property value:

    >> inst0_sch~>impactNeighbors                              <-- I typed this line to CIW

    >>  ((db:364375551)

    (db:469523094)

    (db:469523101)

    )

     
    Somehow what I set is not what I get? Is this related to the exception you mentioned? Any ideas is appreciated..


    Regards,

    Duo
    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Dynamic Duo
    Dynamic Duo over 12 years ago

    BTW, I observed the same issue when using geGetSelectedSet():

    3 instances selected in the schematic window:

    In CIW:

    >>geGetSelectedSet()

    (db:0x1bfc5a9d db:0x1bfc5a96 db:0x15b7edff)

     

    >>inst0_sch~>impactNeighbors = geGetSelectedSet()

    (db:0x1bfc5a9d db:0x1bfc5a96 db:0x15b7edff)

     

    >>inst0_sch~>impactNeighbors

    ((db:469523101)

    (db:469523094)

    (db:364375551)

    )

     

    This is really wierd..

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 12 years ago

    Actually it's not wierd. Only certain object types are supported as property types - these are strings, integers, floats and lists (there are some other types which are represented as these - so "time" is a special string, for example). If it's an ILList type (i.e. a list), it can only be a list containing strings, integers, floats and lists. So you can't store a list containing a table, or a list containing a file port, or a list containing a database object. It probably ought to error out if you try to store a list containing other object types, but it doesn't for historical reasons (and quite possibly for performance reasons).

    If you are trying to create relationships between objects that you want to store in the database, you should use groups not properties (e.g. using dbCreateGroup). The benefit of these is that they allow ordered and unordered groups, and can tidy up after themselves when a member object is deleted, say.

    Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Dynamic Duo
    Dynamic Duo over 12 years ago

    Many thanks for the clarification, Andrew.
    I guess that means what I wanted cannot be done using properties.. But what about *attributes*?

    when I do inst0_sch~>??, there are couple of them storing lists of dbId's, and that's exactly what I want.
    E.g, inst0_sch~>instTerms, inst0_sch~>prop, inst0_sch~>conns

    Is there a way I create a new attribute inst0_sch~>impactNeighbors? Considering the existing attributes, I think such an idea should make sense..

    Mini conclusion: Will use groups to store object relations in the database.

    Regards,
    Duo

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 12 years ago

    Duo,

    It's not possible to add your own attributes. The set of attributes is fixed - that's precisely why user groups and user properties exist, to store such additional data.

    Kind Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Dynamic Duo
    Dynamic Duo over 12 years ago
    Many thanks to the timely replies from Lawrence and Andrew! They are really helpful.

    Conclusion of the thread: groups (dbCreateGroup) should be used in a cell view to store instances' relation info involving object identifier data types

    Regards,
    Duo
    • Cancel
    • Vote Up 0 Vote Down
    • Cancel

Community Guidelines

The Cadence Design Communities support Cadence users and technologists interacting to exchange ideas, news, technical information, and best practices to solve problems and get the most from Cadence technology. The community is open to everyone, and to provide the most value, we require participants to follow our Community Guidelines that facilitate a quality exchange of ideas and information. By accessing, contributing, using or downloading any materials from the site, you agree to be bound by the full Community Guidelines.

© 2025 Cadence Design Systems, Inc. All Rights Reserved.

  • Terms of Use
  • Privacy
  • Cookie Policy
  • US Trademarks
  • Do Not Sell or Share My Personal Information