• 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. I hope other nets will be opened and wiring will be done...

Stats

  • Locked Locked
  • Replies 11
  • Subscribers 143
  • Views 13017
  • 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

I hope other nets will be opened and wiring will be done automatically. Is there a script or technique that fits this?

chanho
chanho over 3 years ago

Is there a technology that doesn't work like the picture on the left and automatically works like the picture on the right?

  • Cancel
  • Andrew Beckett
    Andrew Beckett over 3 years ago

    It's not entirely clear what you're expecting here - but if you are wanting to draw what's on the left, and then have it chop the horizontal track into pieces around any crossing track on a different net, then there's nothing built in as far as I know. It could be written with SKILL - below is a rough outline of how this could be done (note that this is using dbLayerAndNot to generate the new shape rather than leChopShape which would preserve the pathSegs - but that was more complex as you would then potentially have a growing number of shapes as each chop was done - I decided that I couldn't spend that long on an unclear requirement). Anyway hopefully this will give you some ideas as to how you could do this or something like it in SKILL:

    procedure(CCFchopAroundCrossingNets(chopDistance @optional (objects geGetSelSet()))
        let((overlaps cv (tempLayer "y0") anded grown choppedShapes)
            foreach(mapcan object objects 
                cv=object~>cellView
                ; find all shapes in the same region as the shape being chopped
                ; and then filter to just find those which are on a different net
                overlaps=dbShapeQuery(cv object~>lpp object~>bBox 0 0)
                overlaps=setof(overlap overlaps overlap~>net!=object~>net)
                ; now find just the pieces anded with the original shape,
                ; oversize by the chop distance
                anded=dbLayerAnd(cv tempLayer overlaps list(object))
                grown=dbLayerSize(cv tempLayer anded chopDistance)
                ; simplest to do the chop using dbLayerAndNot so that it
                ; does it in one go. Also add the result to the net the original
                ; shape was on
                choppedShapes=dbLayerAndNot(cv object~>lpp list(object) grown)
                choppedShapes~>net=object~>net
                choppedShapes~>lxStickyNet=t
                ; delete all the temporary stuff created along the way
                foreach(listOfShapes list(grown anded list(object))
                    foreach(shape listOfShapes
                        dbDeleteObject(shape)
                    )
                )
                ; foreach finishes with the resulting list so that foreach
                ; mapcan returns all the generated shapes
                choppedShapes
            )
        )
    )
    

    Regards,

    Andrew

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

    I meant to say, to use this, select the VDD track, and then use:

    CCFchopAroundCrossingNets(0.2) ; or whatever distance you want to allow around each crossing track. It only chops around crossing tracks that are on different nets.

    Andrew

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • chanho
    chanho over 3 years ago in reply to Andrew Beckett

    Thank you so much! Can you recognize the net of the inner instance and cut it?

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 3 years ago in reply to chanho
    chanho said:

    Thank you so much! Can you recognize the net of the inner instance and cut it?

    I don't understand your question. What do you mean by "the inner instance" here?

    Andrew

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • chanho
    chanho over 3 years ago in reply to Andrew Beckett

    cellname =cksgh  

    It refers to an instance called csf in a cell called cksgh. Sorry for my bad English.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 3 years ago in reply to chanho

    No, the code I wrote was just an example - it won't edit shapes within the cell (can't you do an edit-in-place first and then use the SKILL code?).

    Regards,

    Andrew

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • chanho
    chanho over 3 years ago in reply to Andrew Beckett

    I want to use the SKILL code including the information of the subcells.

    As shown in the picture, you can't cut it because you can't see the net information of the lower cells.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 3 years ago in reply to chanho

    That picture doesn't help clarify anything, but it's more to do with the fact that you can't select the VDD track in the lower level cell instance because you can only select things in the cell being edited not lower down in the hierarchy.

    Either way, the code is an example - if you want it to start traversing the hierarchy and looking for lower level shapes to edit, you'll need to make that change yourself.

    Kind Regards,

    Andrew

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • chanho
    chanho over 3 years ago in reply to Andrew Beckett

    Thank you. It was a big help.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • chanho
    chanho over 3 years ago in reply to Andrew Beckett

     Overlaps=dbShapeQuery(cv object~>lpp object~>bBox 0 32)
    sub-PCell을 인식하고 수행하는 방법을 연구하고 있습니다. 레이어를 인식하지만 dbLayerAnd에는 반영되지 않는 것 같습니다. 왜 그런지 아세요?

    procedure(ChopAroundCrossingNets(chopDistance @optional (objects geGetSelSet()))
    let((overlaps cv (tempLayer "y0") anded grown choppedShapes)
    foreach(mapcan object objects
    cv=object~>cellView
    inst=cv~>instnaces
    overlaps=dbShapeQuery(cv object~>lpp object~>bBox 0 32 inst~>trnasform )
    overlaps=setof(overlap overlaps overlap~>net!=object~>net)
    anded=dbLayerAnd(cv tempLayer overlaps list(object))
    grown=dbLayerSize(cv tempLayer anded chopDistance)
    choppedShapes=dbLayerAndNot(cv object~>lpp list(object) grown)
    choppedShapes~>net=object~>net
    choppedShapes~>lxStickyNet=t



    )
    choppedShapes
    )
    )

    • 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