• 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. Layout scaling and inconsistent shape dimensions issue.

Stats

  • Replies 4
  • Subscribers 130
  • Views 200
  • Members are here 0

Layout scaling and inconsistent shape dimensions issue.

JS20250120924
JS20250120924 3 days ago

Hi everyone,

I recently encountered a perplexing issue while scaling up my layout. Could you please take a look?

Virtuoso version: IC23.1-64b.ISR12.37

I currently have a GDS file that I need to scale up by a factor of 1.11. I achieved this by adjusting the design scale factor within Xstream to enlarge the layout design.

However, I encountered an issue with inconsistent shape dimensions. For instance, my original shapes were sized at 0.5, but after scaling up, most appear as 0.556 while a small portion show as 0.555.

Can this be resolved through certain settings, or do I need a SKILL script to handle this issue?

  • Cancel
  • Sign in to reply
Parents
  • Andrew Beckett
    Andrew Beckett 2 days ago

    I suspect the most likely scenario where things are ending up at 0.556 width is if they were paths or pathSegs to start off with, and your database has a DBUPerUU of 1000 (i.e. a database resolution of 1nm). Paths and pathSegs need to have a width which is an even number of database units, and so you cannot have 0.555 as the width. For other polygons and rectangles, it's the points themselves that are scaled not the width, but I would expect the rounding error to truncate in the same direction, but I'm not sure without doing an experiment (maybe if the shapes are centred around the 0 x or y coordinate then they might round in different directions to get onto the database grid). Without seeing some example data, it's hard to be sure...

    Andrew

    • Cancel
    • Vote Up +1 Vote Down
    • Sign in to reply
    • Cancel
  • JS20250120924
    JS20250120924 2 days ago in reply to Andrew Beckett

    Hi Andrew,

    Thanks for your reply!

    I just checked some more contacts (these contacts are also rectangle types) and found similar issues. Not sure if you can see the images—I ran into some trouble uploading them. I noticed that when scale up, some contacts measure 0.1 in size while others are 0.099. Moreover, all contacts with a width of 0.099 are aligned in the same column (sharing identical x-axis coordinates). This makes me suspect it might be related to the shape's bounding box coordinates.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • Andrew Beckett
    Andrew Beckett 1 day ago in reply to JS20250120924

    I did some experimentation (to avoid having to think of a good example) and created 1 million rectangles of width/height 0.09 at random coordinates between +/- 100um, and then streamed this out and streamed back in with a scale factor of 1.11.

    I then analysed the widths and heights of the resulting shapes and I had approximate 200,000 shapes with a width or height of 0.099 and 1,800,000 shapes with a width or height of 0.1 (the total is twice the number of shapes because I had two dimensions to analyse).

    Picking a couple of examples. This original shape (here's the bBox):

    ((-99.742 99.985) (-99.652 100.075))

    would be scaled to this (with no rounding):

    ((-110.71362 110.98335) (-110.61372 111.08325))

    which when rounding to the 1000 DBUPerUU would be:

    ((-110.714 110.983) (-110.614 111.083))

    This has a width and height of 0.1.

    Now looking at this original shape:

    ((-98.804 99.995) (-98.714 100.085))

    This would be scaled to (without rounding):

    ((-109.67244 110.99445) (-109.57254 111.09435))

    You can see from the x-coordinates that one is just below half of 0.001 and one is just above, so they will round in different directions:

    ((-109.672 110.994) (-109.573 111.094))

    this shape has a width of 0.099 and a height of 0.1.

    This is inevitable because of the scale factor of 1.11 - when you are dealing with shapes with a resolution finer than 0.1 (i.e. have a coordinate that is made up of hundredths or thousandths of microns as part of the coordinate), they will scale to a number which includes digits beyond the database resolution and hence will snap to grid - and these could snap in opposite directions depending on the coordinate values.

    As for fixing this with SKILL - it rather depends on what you are expecting it to do in every scenario - conceivably you could correct the widths of rectangles, but what do you do with polygons and other shapes?

    Andrew

    • Cancel
    • Vote Up +1 Vote Down
    • Sign in to reply
    • Cancel
Reply
  • Andrew Beckett
    Andrew Beckett 1 day ago in reply to JS20250120924

    I did some experimentation (to avoid having to think of a good example) and created 1 million rectangles of width/height 0.09 at random coordinates between +/- 100um, and then streamed this out and streamed back in with a scale factor of 1.11.

    I then analysed the widths and heights of the resulting shapes and I had approximate 200,000 shapes with a width or height of 0.099 and 1,800,000 shapes with a width or height of 0.1 (the total is twice the number of shapes because I had two dimensions to analyse).

    Picking a couple of examples. This original shape (here's the bBox):

    ((-99.742 99.985) (-99.652 100.075))

    would be scaled to this (with no rounding):

    ((-110.71362 110.98335) (-110.61372 111.08325))

    which when rounding to the 1000 DBUPerUU would be:

    ((-110.714 110.983) (-110.614 111.083))

    This has a width and height of 0.1.

    Now looking at this original shape:

    ((-98.804 99.995) (-98.714 100.085))

    This would be scaled to (without rounding):

    ((-109.67244 110.99445) (-109.57254 111.09435))

    You can see from the x-coordinates that one is just below half of 0.001 and one is just above, so they will round in different directions:

    ((-109.672 110.994) (-109.573 111.094))

    this shape has a width of 0.099 and a height of 0.1.

    This is inevitable because of the scale factor of 1.11 - when you are dealing with shapes with a resolution finer than 0.1 (i.e. have a coordinate that is made up of hundredths or thousandths of microns as part of the coordinate), they will scale to a number which includes digits beyond the database resolution and hence will snap to grid - and these could snap in opposite directions depending on the coordinate values.

    As for fixing this with SKILL - it rather depends on what you are expecting it to do in every scenario - conceivably you could correct the widths of rectangles, but what do you do with polygons and other shapes?

    Andrew

    • Cancel
    • Vote Up +1 Vote Down
    • Sign in to reply
    • Cancel
Children
  • JS20250120924
    JS20250120924 1 day ago in reply to Andrew Beckett

    Hi Andrew,

    Thank you for your detailed analysis. I've learned a lot.

    I plan to write a script to modify the width of rectangles using SKILL. Since almost all the shapes in my design are rectangles, this method is well-suited for my needs.

     

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • 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