• 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. How to corrupt a GDS with dbCreateParamInst

Stats

  • Locked Locked
  • Replies 3
  • Subscribers 143
  • Views 13269
  • 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

How to corrupt a GDS with dbCreateParamInst

tweeksii
tweeksii over 7 years ago

Recently one of our new SKILL programmers (lets call him Obi Wan) discovered a way to update a pcell such that it streams out "successfully" (i.e. 0 errors), but the resulting GDS cannot be opened by Calibre DRC/DRV.  (I did not attempt to stream it back in to Virtuoso, but presumably that would have failed as well.)

After careful debugging, he narrowed the problem down to this line:

         dbCreateParamInst( pcCellView cvDbShapeStaggered nil origin "R0" 2 pcellParamList )


Obi Wan had copied this pcell code from another pcell so that he could make a small change.  In the original pcell (which streams out without issue), the corresponding line is the same, save for one tiny detail:

                    dbCreateParamInst( pcCellView cvDbShapeStaggered nil origin "R0" 1 pcellParamList )

I.e. the "numInst" parameter was 1 in the working pcell, and accidentally setting it to 2 broke streamout!

That mysterious "numInst" parameter to dbCreateInst, dbCreateParamInst, etc. has always bothered me.  What does it do, exactly?  Apparently, if you dare to set it to something other than 1, it silently corrupts your GDS!  :P  The documentation doesn't say what's supposed to happen when numInst > 1 (do I get two instances on top of each other?), but it does say it works with the instance name (e.g. "I3<1:0>"), so I'm guessing this parameter is meaningful for schematics, but not for layouts?

Anyway, it's troubling that XStreamOut generated a garbage GDS without throwing an error, or even a warning about it!  Can anyone from Cadence reproduce this on their end, or would you like a testcase?

  • Cancel
  • Andrew Beckett
    Andrew Beckett over 7 years ago

    The numInst parameter creates the instance as a vector rather than a single instance. For layouts, that's a bit pointless, but for schematics you end up with a vectored name.

    I don't know what you mean about it "corrupting your GDS". I don't see any problem with the stream file generated - there's a single instance in the stream file which is what I'd expect. Nothing appears to be wrong with the stream file as far as I can tell.

    Regards,

    Andrew

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • tweeksii
    tweeksii over 7 years ago in reply to Andrew Beckett
    Andrew Beckett said:
    I don't know what you mean about it "corrupting your GDS". I don't see any problem with the stream file generated - there's a single instance in the stream file which is what I'd expect. Nothing appears to be wrong with the stream file as far as I can tell.

    Even when you set numInst to 2?  Intereseting....

    Well thanks for trying to duplicate it.  Maybe it has something to do with the particular pcells that we were using (or the fact that it was a pcell that made the dbCreateParamInst call).  I should stop being lazy and file a proper testcase. Slight smile  

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 7 years ago in reply to tweeksii

    Tom,

    i’d tried both creating an instance in SKILL with numInst as 2 and doing so within a pcell. Both were ok for me. So there must be some subtlety to the issue. So if you could contact customer support, that would be great!

    BTW, I approved your other reply (to the stream out from VM question) because it got moderated by the automatic spam detection for some reason - sorry about that  

    Regards,

    Andrew

    • 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