• 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. Automatically placement of PINS on NETS

Stats

  • Locked Locked
  • Replies 12
  • Subscribers 145
  • Views 21818
  • 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

Automatically placement of PINS on NETS

DannyRitt
DannyRitt over 8 years ago

Hello,


When generating/updating PINS in VXL it typically places them near the 0,0 coordinates as one group. I have a large block with many PINS, all grouped near 0,0 coordinates. I am interested to automatically place them on objects with the same layer and NET name. These PINS do not need to be on EDGES but on polygons with the same NET name. The skill script will take all selected PINS and move them to the matched path/rectangle/polygon with the same NET name.

Any ideas will be greatly appreciated.

Danny

  • Cancel
Parents
  • drdanmc
    drdanmc over 8 years ago
    First, make sure you understand terminals, pins, and figures. When you see a "pin" in layout, what you are seeing is a figure (like a rectangle or polygon) whose parent is a pin. That pin has a terminal as a parent. A terminal can have several pins.

    foreach(myTerm cv->terminals
    foreach(myPin myTerm->pins
    myNet = myPin->net
    figs_on_net = myNet->figs

    ;; write code to figure out which figure on the net (i.e. one of the members of figs_on_net)
    ;; you want to move the pin figure (myPin->fig) to.
    ;;
    ;; figure out what the pin figure type is with myPin->fig->objType
    ;; suppose you found that the objType is "rect" (typical) and you need to move
    ;; to the location specified by newBbox, then do
    myPin->fig->bBox = newBbox

    ;; if it is a path or polygon you need to do something different.

    ;; and move the label too. Labels are usually children.
    foreach( lab myPin->fig->children
    ;; put some objType checking in here...
    lab->xy = centerBox(newBbox)

    ;; could also figure out how much the pin moved by and adjust the xy position by the same delta
    ;; many variations and possibilities.
    )
    )
    )

    this obviously isn't a fully coded with checks for corner cases example but maybe it is enough to move you in the right direction.

    -Dan (paying the community dues....)
    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Sujitkrsingh
    Sujitkrsingh over 7 years ago in reply to drdanmc

    Hi Dan,

    Can you please help me to move the pin on the net  if pin name and net name is same using skill?

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Reply
  • Sujitkrsingh
    Sujitkrsingh over 7 years ago in reply to drdanmc

    Hi Dan,

    Can you please help me to move the pin on the net  if pin name and net name is same using skill?

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Children
  • DannyRittman
    DannyRittman over 7 years ago in reply to Sujitkrsingh

    Try the next code:

    procedure(MovePinsToInstances()
    let( (term pin net childTerm pinFigLocation location instTerm pinFig)
    cv=geGetWindowCellView()
    foreach(term cv~>terminals
    ; iterate over all the pins for this terminal
    foreach(pin term~>pins
    pinFig=pin~>fig
    net=term~>net
    ; only do this if there aren't more than one inst term
    ;unless(cdr(net~>instTerms)
    instTerm=car(net~>instTerms)
    childTerm=instTerm~>term
    childPinFig=car(instTerm~>term~>pins)~>fig
    ; location within the instance master
    location=centerBox(childPinFig~>bBox)
    ; transform to the top level coordinate system
    location=dbTransformPoint(location instTerm~>inst~>transform)
    pinFigLocation=centerBox(pinFig~>bBox)
    ; calculate the overall transform to move the pin to the new location
    ;transform=dbConcatTransform(list(-xCoord(pinFigLocation):-yCoord(pinFigLocation) "R0" 1) location)
    transform=dbConcatTransform(list(-xCoord(pinFigLocation):-yCoord(pinFigLocation) "R0" 1) list(xCoord(location):yCoord(location) "R0" 1))
    dbMoveFig(pinFig cv transform)
    ;    )
       )
      )
     ) ; let
    )


    Danny

    • 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