xs "grow" function is always 0.1 short

edited November 2015 in Ruby Scripting
Hi,

I was trying to modify the xs file to get different thicknesses. However, whatever I specify, the result is 0.1 less.

For example, I did

metal1 = mask(metal1).grow(0.4, :taper => 50)
stop = grow(0.4)

But the result was 0.3 for both metal1 and stop.

I could just specify 0.1 more than what I want to compensate for this, but is this a bug?
Thanks for your help.

Jack

Comments

  • edited November 2015

    Hi Jack,

    that is related to the "delta" attribute: the heights are only accurate to this value currently. That's a systematic problem implied by the geometrical production rules. You can make the delta value much smaller, but I'd not go below a few database units (typically one DBU is 1 nm - so 5 nm may be acceptable). So that observation is correct and although I'd not consider that a bug, it's at least a "bad feature".

    But there is a new implementation which will avoid this issue: You can try to check out the "v2" branch: http://sourceforge.net/p/xsectionklayout/code/HEAD/tree/branches/v2/src/. This version requires KLayout 0.23 at least and avoids this problem by using edge sets which are infinitely small. The implementation is a bit experimental but I used it already to create all the pictures from the doc. So I'm fairly sure it works correctly :-)

    Regards,

    Matthias

  • edited November -1
    Hi, Matthias,

    Thank you for your advice. It worked very well.
    However, I've noticed that the v2 version produces less smooth "round" profile when using "round" option in "grow".
    There are simply less points than the original version. seems like the points snap to somewhere, so the round edge is not so round.

    Can you advise on this point?

    Thank you.
    Jack
  • edited November -1
    Hi,

    I found that I could increase the points in the following line.

    # approximate round corners by 64 points for "round" and 8 for "octagon"
    n = (mode == :round ? 64 : 8)

    However, the points in the cross section still snaps to the closest 0.01 um grid points.
    Is it possible to keep the cross section profile from snapping?

    Thanks.
    Jack
  • edited November -1

    Hi Jack,

    maybe I should make the number of points a variable. To be frank I thought that 64 points for a circle are pretty smooth already.

    That snapping I can't explain. Maybe your input layout uses a 10nm database unit? The input's layout database unit is used for the cross section too currently, so that may explain the snapping. You can change the database unit by saving the layout with a new and smaller one. 1nm is a typical database unit.

    Regards,

    Matthias

  • edited November -1
    Hi, Matthias,

    Thank you very much. It was indeed the database unit that was set to 10 nm.
    64 points was sufficiently smooth. The snapping was the main cause of the jagged edges.

    Thank you for your help.

    Regards,
    Jack
Sign In or Register to comment.