Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Snapping to grid in Virtuoso

3,262 views
Skip to first unread message

Stewart Smith

unread,
Aug 7, 2006, 7:55:10 AM8/7/06
to
I've been give some designs originating from the CLEWin editor that have
a ridiculously fine grid (1nm) which the original designer doesn't seem
to be able to solve. Is there a simple way to force all vertices on
polygons and rectangles in the designs to a 0.5 micron grid either when
importing from GDSII or in the layout editor itself? There's an option
in the Stream In import function that says Snap XY to grid resolution
but maybe that means something else. The manuals can be a bit opaque on
this sort of thing IME. Thanks in advance to anyone who can help.

Regards
Stewart

Guenther Sohler

unread,
Aug 8, 2006, 5:41:49 AM8/8/06
to
We use a script, which really forces all vertexes to grid. But the result
is not always satisfying. No guarantee, please make a backup!

procedure(NL_RoundGridSub(point grid)
point=list(round(car(point)/grid)*grid round(cadr(point)/grid)*grid )
)

procedure(NL_RoundGridS(cv,grid)
foreach(shape cv~>shapes
if((shape~>objType == "rect")
then
shape~>bBox=list(NL_RoundGridSub(car(shape~>bBox),grid) NL_RoundGridSub(cadr(shape~>bBox),grid))
)
if((shape~>objType == "path")
then
newpoints=nil
foreach(point shape~>points
newpoints=cons(NL_RoundGridSub(point grid ) newpoints)
)
shape~>points=newpoints
shape~>width=round(shape~>width/2.0/grid)*2.0*grid
)
if((shape~>objType == "polygon")
then
newpoints=nil
foreach(point shape~>points
newpoints=cons(NL_RoundGridSub(point grid ) newpoints)
)
shape~>points=newpoints
)
)
foreach(inst cv~>instances
inst~>xy=NL_RoundGridSub(inst~>xy,grid)
)
)

procedure(NL_RoundGridCB(theform)
cv=geGetEditCellView()
grid=theform~>NL_GSfieldgrid~>value
NL_RoundGridS(cv,grid)
)

procedure( NL_RoundGrid()
let( (NL_GSfieldlib NL_GSform1 )
NL_GSfieldgrid =hiCreateFloatField( ?name 'NL_GSfieldgrid ?value 0.01 ?prompt "Final Grid:" ?edita
ble t);
NL_GSform1 =hiCreateAppForm( ?name 'NL_GSform1 ?fields list(NL_GSfieldgrid ) ?callback "NL_RoundGri
dCB(hiGetCurrentForm())");
hiDisplayForm(NL_GSform1);
)
)

NL_RoundGrid()


This rounds all vertices to grid on the current layout cellview


Stewart Smith

unread,
Aug 8, 2006, 7:38:47 AM8/8/06
to
Guenther Sohler wrote:
> We use a script, which really forces all vertexes to grid. But the result
> is not always satisfying. No guarantee, please make a backup!
>

Thanks very much for that, it's sure to come in useful. Obviously
everything needs to be checked for problems afterwards but it's done the
trick on the design I'm working on at the moment.

Cheers
Stewart

0 new messages