• 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 10770
  • 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
  • tdtg
    tdtg over 2 years ago

    More about this, the script actually does something really unexpected and bad IMO, it sets the pathSeg extension to zero, so that a wire pathSeg that starts out like this, note the extension of 3.4um

    turns into this

    Note extension is now zero

    We don't know what do do about this. 

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

    Would it be possible to suggest a fix to this part of code so that it modifies the existing pathSeg to make sure all properties are preserved?

    here is the code in text

    ("pathSeg"

    pathSegId=dbCreatePathSeg(cv obj~>lpp car(path) car(last(path)) obj~>width obj~>beginStyle obj~>endStyle)

    if(obj~>figGroup then dbAddFigToFigGroup(obj~>figGroup pathSegId))

    geSelectObject(pathSegId)

    dbDeleteObject(obj)

    ) ;pathSeg

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

    Probably it would be enough if the script would round the pathSeg extension values to the grid as well as the vertices

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • 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
  • Andrew Beckett
    Andrew Beckett over 2 years ago in reply to tdtg

    I would suggest that you either create a case via support.cadence.com or give feedback on the article you reference; that's the best way of it getting back to the article author (it's not me...)

    I would also wonder why you are getting the off-grid points in the first place; that's very odd, given that pathSegs are constrained to be octilinear. You might want to raise a case for that alone.

    Andrew

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

    Well like I said, the tens of thousands of offgrid errors resulted from a bogus offgrid placement of wiring done in a temporary copy of the top layout. When this wiring cell got placed back to the top layout it was offgrid, which should not have been allowed to occur. We did not notice and wired up lots more stuff. Now we are faced with the big job of fixing all these errors. A working offgrid fixer script would be very useful, since the current ones fail on some pathSeg wiring objects and they fail without any reporting of which ones they fail on, leaving us in a strange state of trying to find these objects by divide by two approach. Wrapping this pathSeg code in errset and reporting which objects failed (or somehow marking them) would be useful. 

    And there is still the mystery of why we cannot manually edit the pathSeg object shown above to fix it in the properties dialog. 

    It would be very nice to have a robust version of the CCSputOnGridHier script with bindkey installation to make life easier. We are not good at this coding but maybe will try it later after the tapeout.

    Thanks as always for the quick responses Andrew, you are great!

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

     BTW, the script CCSputOnGridHier.il did this to one of our buses, shorting out a bunch of signals

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 2 years ago in reply to tdtg

    I suspect that the code has not been that well-tested with pathSegs (by the looks of things). That's why contacting support makes sense as that way the author can improve it (sorry, I'd love to re-write it, but don't have the bandwidth to do this - I'd sooner the original author improves it themselves).

    Thanks,

    Andrew

    • 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
  • 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