• Skip to main content
  • Skip to search
  • Skip to footer
Cadence Home
  • This search text may be transcribed, used, stored, or accessed by our third-party service providers per our Cookie Policy and Privacy Policy.

  1. Community Forums
  2. Custom IC SKILL
  3. another off-grid problem (pathSeg cannot be rounded to grid...

Stats

  • Locked Locked
  • Replies 10
  • Subscribers 144
  • Views 10772
  • Members are here 0
This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

another off-grid problem (pathSeg cannot be rounded to grid)

tdtg
tdtg over 2 years ago

Here is another pesky offgrid problem. We have a design where unfortunately an instance was placed somehow by a Layout XL bug in offgrid location. Then a bunch of wiring was done with wiring and bus tools to this instance. As a result there are hundreds of wires consisting of pathSeq that are now offgrid. The vendor requires things be on 0.005um grid and these have 0.001um offgrid placements.

Now the skil script CCSputOnGridHier() will fix many of these. But we have pathSeq that cannot be fixed. We cannot even fix the offgrid manually using the property editor. If we try to adjust this vertex .691 to match the .69 Begin Point vertex, the CIW prints

*WARNING* (DB-270000): dbSetPathSegPoints: Begin and end points do not specify a horizontal, vertical, or diagonal pathSeg.

Is it because the wire is part of a bus or is somehow constrained?

This is an awful problem since we are faced with hundreds of these stupid offgrid violations and this stuff always happens right before tapeout deadline.

We would really appreciate some advice on how to proceed besides redrawing all these wires from scratch.

Thank you!

Tobi

  • Cancel
Parents
  • FunnydoubleM
    FunnydoubleM over 2 years ago

    I have also encountered problems in fixing "pathSeg", could you please help me upgrade the code?

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • rajeshcad
    rajeshcad over 2 years ago in reply to FunnydoubleM

    Change is needed at two places in the code. One while storing the values (first foreach loop) and one while recreating (case statement).

    1. Storing the beginExt and endExt initially in the foreach loop…

     ("pathSeg"

               path = list(list(obj~>beginExt obj~>endExt)  obj~>endPt  obj~>beginPt)

             )

    The order in the list is utilized during recreation of pathSeg, so stick to it.

     2. Using the values during recreation of pathSeg in case statement.

    ("pathSeg"

                 geSelectObject(dbCreatePathSeg(cv obj~>lpp car(path) cadr(path) obj~>width obj~>beginStyle obj~>endStyle caddr(path)))

                 dbDeleteObject(obj)

               )

    I have sent the modified file to Tobi's mail. Once he confirms that it works for him, I will upload the file in the following article as well.

    https://support.cadence.com/apex/ArticleAttachmentPortal?id=a1Od0000000nWVlEAM&pageName=ArticleContent

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Reply
  • rajeshcad
    rajeshcad over 2 years ago in reply to FunnydoubleM

    Change is needed at two places in the code. One while storing the values (first foreach loop) and one while recreating (case statement).

    1. Storing the beginExt and endExt initially in the foreach loop…

     ("pathSeg"

               path = list(list(obj~>beginExt obj~>endExt)  obj~>endPt  obj~>beginPt)

             )

    The order in the list is utilized during recreation of pathSeg, so stick to it.

     2. Using the values during recreation of pathSeg in case statement.

    ("pathSeg"

                 geSelectObject(dbCreatePathSeg(cv obj~>lpp car(path) cadr(path) obj~>width obj~>beginStyle obj~>endStyle caddr(path)))

                 dbDeleteObject(obj)

               )

    I have sent the modified file to Tobi's mail. Once he confirms that it works for him, I will upload the file in the following article as well.

    https://support.cadence.com/apex/ArticleAttachmentPortal?id=a1Od0000000nWVlEAM&pageName=ArticleContent

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Children
  • tdtg
    tdtg over 2 years ago in reply to rajeshcad

    Thanks for this great responsivity. I have shared back to Raj my edits to the code to make it more robust, so that it doesn't simply abort when it encounters a pathSeg it cannot modify (for unknown reason we had a couple of these). My modified script prints out more information about what it changed,, it only puts things back to grid that are offgrid, and it leaves selected those objects that it cannot fix by catching these exceptions with errset. My SKILL coding skills are basically nonexistent so maybe Raj can make it better.

    BTW, I found it very useful to add a default grid setting and make a bindkey, then invoke it with key to run the script with the desired grid, in this case putting these lines to the CIW or in .cdsinit makes it easier to run

    load("../skil/CCSputOnGridPins.il")

    hiSetBindKey("Layout" "<Key>5" "putOnGridCB(\".005\")")

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel

Community Guidelines

The Cadence Design Communities support Cadence users and technologists interacting to exchange ideas, news, technical information, and best practices to solve problems and get the most from Cadence technology. The community is open to everyone, and to provide the most value, we require participants to follow our Community Guidelines that facilitate a quality exchange of ideas and information. By accessing, contributing, using or downloading any materials from the site, you agree to be bound by the full Community Guidelines.

© 2025 Cadence Design Systems, Inc. All Rights Reserved.

  • Terms of Use
  • Privacy
  • Cookie Policy
  • US Trademarks
  • Do Not Sell or Share My Personal Information