Snapping to grid in Virtuoso

Discussion in 'Cadence' started by Stewart Smith, Aug 7, 2006.

  1. 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
     
    Stewart Smith, Aug 7, 2006
    #1
  2. 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
     
    Guenther Sohler, Aug 8, 2006
    #2
  3. 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
     
    Stewart Smith, Aug 8, 2006
    #3
Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.