G
gennari
Guest
Hi,
My research group is creating large circular shapes for mask layouts on
a fine grid. My first attempt to create these was to use
dbCreateEllipse()/dbCreateDonut() and then
dbConvertEllipseToPolygon()/dbConvertDonutToPolygon(). The problem is that
the results contain diagonal lines that must be split up into an
astronomical number of horizontal and vertical segments (on a 1nm grid) by
the mask writing tool, and the last mask took forever to write.
What we would like to do is to create the donut on about a 20nm (instead of
1nm) grid with only horizontal and vertical lines for an orthogonal polgyon.
So I wrote some SKILL code to read in the donut polygon and create a new
polygon with diagonal lines replaced by x/y steps on a 20nm grid. However,
some of the resulting polygons contained more than 4000 points and Virtuoso
(ICFB 4.46) said they were invalid and the max was 4000. Is there any way
around this vertex limit, or any way to split a polygon with ~10,000 points
into smaller polygons with <4000 points efficiently? My best solution was to
split the polygons into a huge number of rectangles with some SKILL code and
then use leMergeShapes() to get polygons. This takes alot of time and memory
considering there are around 100K rectangles to merge.
We eventually had someone else make the polygons for us out of a number of
sections to avoid this problem. What they did was to divide the donut into
16 angular segments, create a polygon one segment, and use 16 instances
representing each 22.5 degree slice to form the final ring. While this was
created easily in L-Edit, converted to GDS2, and sent to us, Cadence refused
to read the odd cell rotations. Is there any way to have Cadence Virtuoso
stream in a GDS2 layout with cell rotations of 22.5 degrees? Are there any
(relatively free) tools out there that will partially flatten only the cells
with these odd rotations and write the result back out to GDS2? I don't
understand why these rotations cause such a problem in Cadence.
Any solutions/suggestions will be appreciated. Thank you.
Frank Gennari
My research group is creating large circular shapes for mask layouts on
a fine grid. My first attempt to create these was to use
dbCreateEllipse()/dbCreateDonut() and then
dbConvertEllipseToPolygon()/dbConvertDonutToPolygon(). The problem is that
the results contain diagonal lines that must be split up into an
astronomical number of horizontal and vertical segments (on a 1nm grid) by
the mask writing tool, and the last mask took forever to write.
What we would like to do is to create the donut on about a 20nm (instead of
1nm) grid with only horizontal and vertical lines for an orthogonal polgyon.
So I wrote some SKILL code to read in the donut polygon and create a new
polygon with diagonal lines replaced by x/y steps on a 20nm grid. However,
some of the resulting polygons contained more than 4000 points and Virtuoso
(ICFB 4.46) said they were invalid and the max was 4000. Is there any way
around this vertex limit, or any way to split a polygon with ~10,000 points
into smaller polygons with <4000 points efficiently? My best solution was to
split the polygons into a huge number of rectangles with some SKILL code and
then use leMergeShapes() to get polygons. This takes alot of time and memory
considering there are around 100K rectangles to merge.
We eventually had someone else make the polygons for us out of a number of
sections to avoid this problem. What they did was to divide the donut into
16 angular segments, create a polygon one segment, and use 16 instances
representing each 22.5 degree slice to form the final ring. While this was
created easily in L-Edit, converted to GDS2, and sent to us, Cadence refused
to read the odd cell rotations. Is there any way to have Cadence Virtuoso
stream in a GDS2 layout with cell rotations of 22.5 degrees? Are there any
(relatively free) tools out there that will partially flatten only the cells
with these odd rotations and write the result back out to GDS2? I don't
understand why these rotations cause such a problem in Cadence.
Any solutions/suggestions will be appreciated. Thank you.
Frank Gennari