• 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 Design
  3. Problem building a slotted metal pcell

Stats

  • Locked Locked
  • Replies 7
  • Subscribers 125
  • Views 15407
  • 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

Problem building a slotted metal pcell

archive
archive over 18 years ago

Hi, I am trying to make a pcell that will create a big piece of metal with slots chopped out of it (for mechanical stress relief). I started with a prototype SKILL code that will create the slotted metal as an instance, and it worked ("prototype.il"). When put into pcell form, the pcell code compiles successfully. But the pcell instance can only have 14 slots max and fails otherwise. Warnings are always generated whether there is pcellEvalFailed or not. (I've appended the warnings generated to the end of "slot_pcell.il"). It seems that the database ID of the metal object becomes nil after being accessed repeatedly, so leChopShape stops working. (1) Could anyone help to point out what's wrong with the code/method? (2) I used leChopShape in the pcell, which is not a recommended function for pcells. Is there another way to make slots in layers? (3) In SKILL, is there a way to exit a loop prematurely, or skip some of the iterations (next/last functions) ? Thanks in advance :) KK


Originally posted in cdnusers.org by kkchen
prototype.il
  • Cancel
  • archive
    archive over 18 years ago

    Oops, I didn't realise the posted text also needs to be html formatted ... sorry if you found it unreadable above ... hope this works ...

    Hi, I am trying to make a pcell that will create a big piece of metal with slots chopped out of it (for mechanical stress relief).

    I started with a prototype SKILL code that will create the slotted metal as an instance, and it worked ("prototype.il").

    When put into pcell form, the pcell code compiles successfully. But the pcell instance can only have 14 slots max and fails otherwise. Warnings are always generated whether there is pcellEvalFailed or not. (I've appended the warnings generated to the end of "slot_pcell.il").

    It seems that the database ID of the metal object becomes nil after being accessed repeatedly, so leChopShape stops working.

    (1) Could anyone help to point out what's wrong with the code/method?

    (2) I used leChopShape in the pcell, which is not a recommended function for pcells. Is there another way to make slots in layers?

    (3) In SKILL, is there a way to exit a loop prematurely, or skip some of the iterations (next/last functions) ?

    Thanks in advance :)

    KK


    Originally posted in cdnusers.org by kkchen
    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • archive
    archive over 18 years ago

    1. The code I downloaded was missing a paren at the end to close the pcDefinePcell. Also the leChopeShape was periodically creating a new object. If I changed the call to make_slot like this:

    shape_id = make_slot(shape_id sw nw ne se sw)

    Then it worked. HOWEVER, performance was terrible since leChopShape is so slow.

    2. If you are in Cadence 5.1.41 USR2 or later (I think that is the requirement), you can use some dbLayer commands. When I changed the code to simply create a metal1 shape and then create small polygons and run a dbLayerAndNot, I was able to remove the leChopShape and performance was great.


    ; chop out slot
    when(chop_abort != 1
    shp = dbCreatePolygon(pcCellView "y0" list(sw nw ne se sw))
    shps=cons(shp shps)
    )

    ) ; end this_row for let
    ) ; end this_row for
    ) ; end this_col for let
    ) ; end this_col for
    dbLayerAndNot(pcCellView "metal1" list(shape_id) shps)
    mapcar('dbDeleteObject shps)
    dbDeleteObject(shape_id)

    3. If you want to exit a loop, use a while loop with a counter

    loop = t
    row = 0
    while(loop
    do skill here
    row++
    when(a
    loop=nil
    )
    )


    Originally posted in cdnusers.org by dmay
    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • archive
    archive over 18 years ago

    ROD (Relative Object Design) MPP (Multi-Part Path) SKILL/PCells were implemented to provide support for this type of structure. Reference the Virtuoso Relative Object Design User Guide and Virtuoso Layout User Guide.


    Originally posted in cdnusers.org by craigth
    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • archive
    archive over 18 years ago

    Craig,
    Has the performance for rod objects improved at all? For large designs, the functionality of rod is not worth the performance pain.

    Also, in this case the rodCreateRect could have built up the temporary rectangles, but the dbLayerAndNot is still needed to create actual slots as far as I know. Is there new rod functionality that can slot the metal?

    -Derek


    Originally posted in cdnusers.org by dmay
    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • archive
    archive over 18 years ago

    Thanks for the leChopShape explanation, Derek.

    I was using an older Cadence software version, but I can use IC5141 usr2 now. The dbLayer commands are really useful.


    Originally posted in cdnusers.org by kkchen
    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • LaksNanu
    LaksNanu over 9 years ago
    Hi,

    I tried to experiment with this script by downloading it. This is for learning purpose. But i am facing the following error.
    I tried understanding the error but failed.

    Could you guys help me with this.
    And one more thing, Their is a discussion about pcell creation. how make this as a pcell, since i didn't see any pcell function in the code.

    load "prototype.il"
    function make_slot redefined
    *Error* lefChopShape: Invalid figure - db:0x35b2106e
    *Error* load: error while loading file - "prototype.il" at line 98
    deGetCellView()
    db:0x2050fc9a
    make_slot(met3 5 50 500 500)
    *Error* eval: unbound variable - met3
    make_slot("met3" 5 50 500 500)
    *Error* leChopShape: argument #1 should be a database object (type template = "dlggxg") - "met3"
    make_slot("met1" 5 50 500 500)
    *Error* leChopShape: argument #1 should be a database object (type template = "dlggxg") - "met1"

    Regards,
    Lakshmiprashanth
    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 9 years ago

    When you don't have a clue what you're doing, starting with code from a 9-year old post (from the old forums) which wasn't fully functional seems an odd thing to want to do. The post references some other code, which was probably lost during the translation from cdnusers.org (this was the code that created the PCell).

    I don't know how you've modified the code which is causing trouble when you're using it, but your subsequent calls to make_slot suggest that you have no knowledge of SKILL at all. You tried passing a variable name (met3) then a string ("met3") when the function is expecting a database object for the shape to be chopped. Also, the subsequent arguments don't take sense - they are supposed to be points, not single numbers.

    I suggest you start by reading the SKILL Language User Guide and maybe looking to attend a Cadence SKILL Language Programming training course (links under the Services menu at the top of the page).

    Kind 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