• 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 15409
  • 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
Parents
  • 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
Reply
  • 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
Children
No Data

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