• 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. Creating circle in Virtuoso

Stats

  • Locked Locked
  • Replies 8
  • Subscribers 127
  • Views 19705
  • 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

Creating circle in Virtuoso

zhengli
zhengli over 16 years ago
Hi, Can any one help me how to create a circle snapping to manufacturing grids defined in the technology file? I want to create a circle shape in virtuoso layout editor XL included in iCC 6.1.3. I found out that circle is actually created as a polygon. The problem is that when I export the layout into GDSII file, the ending points of the circle does not snapping to the manufacturing grids. I tried to create several real polygons, it is snapping to the grids. So I was wondering if there should be some additional setting to force circle shape snapping to grids. Please let me know if there is any solutions. Thanks a lot
  • Cancel
  • skillUser
    skillUser over 16 years ago

     Hi,

    Unless I am mistaken, it is not mathematically possible to snap a circle so that it is all on grid, but this might just be the terminology that you are using.

    After creating a circle you can use Edit -> Advanced-> Convert to Polygon to manually control the conversion of ellipses, donuts and circles to polygonal shapes.  There is a setting "Conic Sides" on the Layout Editor Options form which defaults to 20, but you can try other values. This is also available as a .cdsenv variable setting, for example:

    layout numSides int 20

     I hope that this information helps you.

    Regards,

    Lawrence.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • zhengli
    zhengli over 16 years ago
    Thank you very much. What I want is actually a polygonal shape like a circle which is snapping to grids. However, even if I convert the circle to polygonal shape using Edit-> Advanced-> Convert, the resulting polygon are still not snapping to manufacturing grids. Conic slides can control how many sides I can have, but it seems that it doesn't help in this case. Is there any way that I can tell virtuoso to snapping all the points of the polygon to the grids? Thanks in advance! Best, Zheng
    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Austin CAD Guy
    Austin CAD Guy over 16 years ago

     You will have to calculate the coordinates to get them to snap to the manufacturing grid. Calculate your angle based on the number of segments and that will give you the angle to calcuate each segment. Digging out your old trig book, sine of the angle is used to calculate the X value, cosine the Y value (the radius is the hypotenuse). Round the values to the manufacturing grid as you calculate them and you will get a slightly jaggy circle with everything on grid. You can do some smoothing after you calculate the points, adjusting the length of each segment independently.

     

    Ted

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • archive
    archive over 16 years ago

    Hi,

    I encountered the same problem and wrote a pcell to do it for me: http://atchoo.org/tools/cadence/circlePcell.il

    Let me know if you have any problems with it!

     Cheers,

    Roger

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • EricCDN
    EricCDN over 16 years ago

    See also Sourcelink Solution 1800103:

    http://sourcelink.cadence.com/docs/db/kdb/1994/Sept/1800103.html

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • zhengli
    zhengli over 16 years ago

    Thanks. This one seem to work. However, I do not understand why a compensate factor need to be added. This factor is get from        

    compFactor = 1 / rep~>DBUPerUU

     and used as follows:

          procedure(  CCSroundCoord(  point xgrid ygrid compFactor )
              prog(  ( x y )
                   x=round( ( xCoord( point ) + compFactor ) / xgrid ) * xgrid
                   y=round( ( yCoord( point ) + compFactor ) / ygrid ) * ygrid
                   return( list(  x y  ) )
               )
           )

    DBUPerUU represents number of database units in one user unit. In my system it is 1000. If I add this one, the whole calculation will be screwed up.

     

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

    This is to compensate for small rounding errors that can occur whenever doing floating point arithmetic.

    For example, if you do:

    floor(1.005/0.005) you end up with 200, not 201, due to the fact that the result of the division is a tiny amount less than 201.

    Adding a small "epsilon" compensates for this - in this case, it's adding 1 DBU. 

    However, since the calculation in this function is using round(), there should really be no need to do this, because it will round to the nearest, rather than round down or up. So I think it's redundant. It shouldn't really break anything (assuming the grid is not 1 DBU!), but it doesn't do anything useful.

    Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • ejm20
    ejm20 over 13 years ago

     Hi Roger - This is a very cool pCell, nicely done!!  

     Thanks

     Rick

    • 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