• 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. polygon size operations for orthogonal (Manhattanized) ...

Stats

  • Locked Locked
  • Replies 2
  • Subscribers 143
  • Views 14897
  • 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

polygon size operations for orthogonal (Manhattanized) polygons

MarkAL
MarkAL over 9 years ago

I've had an annoying problem that's been at the core of my Skill code base for a long time and has a fairly severe impact on my designs. In my designs, I draw many curvilinear shapes. However, the foundry that I design in does not accept designs with non-Manhattan polygons (e.g. every edge must be orthogonal to the global Cartesian coordinate system). Thus, I use a custom function to "Manhattanize" all of my polygons. 

At a later step in my design flow, I use size up and size down operations by using dbLayerSize() to perform some automatic DRC cleaning. This automatic DRC cleaning is a critical step in my design flow. The problem is that dbLayerSize() does not behave as I would like when there are Manhattanized shapes. I've attached a figure to illustrate. 

The pink is the size up polygon, and the smaller polygon is the original polygon. It's hard to see in the screenshot, but I measured the distance of the edge of each original polygon to the edge of the sized up polygon. The nominal size up is 0.1um, and the first rectangle shows exactly this distance between edges. However, the 2nd rectangle is rotated by 15 degrees -- thus requiring "Manhattanization" of the edges of the rectangle to meet foundry requirements. When the size operations is applied to this rectangle, the distance between edges is ~0.120um  -- or ~20nm larger than intended. The worst case is when the rectangle is rotated 45 degrees (shown in the 4th rectangle) which results in a ~sqrt(2)*0.100 = 141nm distance between edges. 

dbLayerSize() seems to size edges -- both horizontal and vertical. This is a very reasonable thing to do as long as all polygons are orthogonal to the global Cartesian grid. Any advice on how to get the desired behavior where the distance between edges of rotated polygons is (very nearly) the same as the polygon that's aligned to the Cartesian grid? 

Thanks,
M

  • Cancel
Parents
  • skillUser
    skillUser over 9 years ago

    Hi Mark,

    I'm not quite sure how you arrived at your shapes?  I tried the Tools -> Layer Generation menu and selected Grow By 0.1 and got the shapes below. I also got the same sort of result when I used the code from CCShierLayerOps.il (which I wrote a while back) - it uses dbLayerSize for the Grow By operation.  The separation between the yellow and blue shapes below is much closer to the 0.1 value (but not exactly 0.1). My grown shapes were not truncated either...

     

    Look up the code I mention above and try it out to see if you get similar results.  Which version are you using, by the way?

    Regards,

    Lawrence.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Reply
  • skillUser
    skillUser over 9 years ago

    Hi Mark,

    I'm not quite sure how you arrived at your shapes?  I tried the Tools -> Layer Generation menu and selected Grow By 0.1 and got the shapes below. I also got the same sort of result when I used the code from CCShierLayerOps.il (which I wrote a while back) - it uses dbLayerSize for the Grow By operation.  The separation between the yellow and blue shapes below is much closer to the 0.1 value (but not exactly 0.1). My grown shapes were not truncated either...

     

    Look up the code I mention above and try it out to see if you get similar results.  Which version are you using, by the way?

    Regards,

    Lawrence.

    • 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