Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

GDS scale error #4

Open
mguthaus opened this issue Dec 4, 2021 · 5 comments
Open

GDS scale error #4

mguthaus opened this issue Dec 4, 2021 · 5 comments

Comments

@mguthaus
Copy link

mguthaus commented Dec 4, 2021

Hi,

I believe that your GDS parser uses a fixed scale of 0.001 (1000):

aa = np.array(a[ii].xy) / 1000 * pixels_per_um

However, the NanGate library uses a scale of 0.0001 (10000). Therefore, the dimensions of the mask are off by 10x.

If you look at the contact width (layer 10) in the NOR2_X2.gds example, they should have a width of 65nm but instead, we see 650nm if you print out the polygon data.

Matt

@mguthaus
Copy link
Author

mguthaus commented Dec 4, 2021

If you want a discussion of the scaling, it is described here:
https://boolean.klaasholwerda.nl/interface/bnf/gdsformat.html#rec_header

And here is the output of the NanGate library cells:
GDS II Version 3
Date Modified:110,12,27,19,6,9
Date Last Accessed:110,12,27,19,6,9
Library: NangateOpenCellLibrary
Units: 1 user unit=0.0001 database units, 1 database unit=1e-10 meters.
End of GDSII Header Found

A 0.065um contact in NOR2_X2.gds is this in the GDS database units:

            BeginBoundary
            Drawing Layer: 10
            Purpose Layer: 0
                    XY Point: 850,950
                    XY Point: 1500,950
                    XY Point: 1500,1600
                    XY Point: 850,1600
                    XY Point: 850,950
            EndBoundary

Which is 650x650 database units. To get this to 0.065nm, you need to divide by 10000, not 1000.

@mguthaus
Copy link
Author

mguthaus commented Dec 4, 2021

When you fix the scaling as above, the ILT then does not work. It produces blank results with this warning on NOR2_X2.gds:

Calculating ILT
/home/mrg/litho/DimmiLitho/litho/ilt.py:190: RuntimeWarning: divide by zero encountered in double_scalars
stepsize = self.stepSize / np.max(abs(deta))
/home/mrg/litho/DimmiLitho/litho/ilt.py:191: RuntimeWarning: invalid value encountered in multiply
newTheta = self.masktheta - stepsize * deta
Interation index: 0, Costfunction value: 0.123713.

@mguthaus
Copy link
Author

mguthaus commented Dec 4, 2021

Note, I also had to adjust the m.x_gridsize and m.y_gridsize to 0.25 or else the mask did not have enough resolution.

@mguthaus
Copy link
Author

mguthaus commented Dec 4, 2021

It seems that ILT works but RobustILT fails...

@vincentlv
Copy link
Owner

vincentlv commented Aug 21, 2022

Note, I also had to adjust the m.x_gridsize and m.y_gridsize to 0.25 or else the mask did not have enough resolution.

Hi. Sorry for this issue. The unit of x_gridsize is nm, and 0.25 is too small. As a workaround, we can adjust the scaling manually when we parsing the GDS. We can plot mask image to double check. For example, if gridsize is set to 2 nm, and CD is 50 nm, then it will take almost 5 pixels in the image.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants