• 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 Design
  3. Need to promote pins to one level Above

Stats

  • Locked Locked
  • Replies 5
  • Subscribers 126
  • Views 17854
  • 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

Need to promote pins to one level Above

sathisha
sathisha over 14 years ago
Hi, Is there any way to get the pins to top level by using the below hierarchy cells. Thanks, Sathisha
  • Cancel
Parents
  • Andrew Beckett
    Andrew Beckett over 14 years ago

    Not sure I know of a way of doing this without writing some SKILL code to do it. It's a fairly specific requirement (there's the Propagate Net command but that doesn't create pins).

    I managed to cheat with only a minimal amount of SKILL code by doing the following:

    1. Place the instance at 0:0
    2. Use Connectivity->Nets->Propapage Nets and hit the "Set All Net Names to Terminal Name"
    3. Use this line of SKILL in the CIW:

      foreach(net cv~>nets dbCreateTerm(net net~>name "inputOutput"))

    4. Use File->Load Physical View and pick the master (that you instantiated) as the source. Then hit the "None" button and turn on "Pins" within "Load Pins and Update Nets"

    That does it - but requires you to place the instance at 0:0.

    It wouldn't be terribly difficult to copy the pins however. I just threw this together (not thoroughly tested - I only tested it quickly in IC614):

    procedure(ABpropagateInstancePins(@optional (inst car(geGetSelSet())))
    let((newNet newTerm newFig newPin cv)
    cv=inst~>cellView
    foreach(terminal inst~>master~>terminals
    newNet=dbMakeNet(cv terminal~>net~>name)
    newTerm=dbCreateTerm(newNet terminal~>name terminal~>direction)
    foreach(pin terminal~>pins
    newPin=nil
    ; the or part in the next line is to try to handle both OA and CDB
    ; because in OA you can have more than one fig per pin
    foreach(fig pin~>figs || list(pin~>fig)
    newFig=dbCopyFig(fig cv inst~>transform)
    if(newPin then
    dbAddFigToPin(newPin newFig)
    else
    newPin=dbCreatePin(newNet newFig nil newTerm)
    )
    )
    )
    )
    t
    ))

    You should be able to select an instance and then call this function, and it will create pins over all the pins within the instance.

    Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Reply
  • Andrew Beckett
    Andrew Beckett over 14 years ago

    Not sure I know of a way of doing this without writing some SKILL code to do it. It's a fairly specific requirement (there's the Propagate Net command but that doesn't create pins).

    I managed to cheat with only a minimal amount of SKILL code by doing the following:

    1. Place the instance at 0:0
    2. Use Connectivity->Nets->Propapage Nets and hit the "Set All Net Names to Terminal Name"
    3. Use this line of SKILL in the CIW:

      foreach(net cv~>nets dbCreateTerm(net net~>name "inputOutput"))

    4. Use File->Load Physical View and pick the master (that you instantiated) as the source. Then hit the "None" button and turn on "Pins" within "Load Pins and Update Nets"

    That does it - but requires you to place the instance at 0:0.

    It wouldn't be terribly difficult to copy the pins however. I just threw this together (not thoroughly tested - I only tested it quickly in IC614):

    procedure(ABpropagateInstancePins(@optional (inst car(geGetSelSet())))
    let((newNet newTerm newFig newPin cv)
    cv=inst~>cellView
    foreach(terminal inst~>master~>terminals
    newNet=dbMakeNet(cv terminal~>net~>name)
    newTerm=dbCreateTerm(newNet terminal~>name terminal~>direction)
    foreach(pin terminal~>pins
    newPin=nil
    ; the or part in the next line is to try to handle both OA and CDB
    ; because in OA you can have more than one fig per pin
    foreach(fig pin~>figs || list(pin~>fig)
    newFig=dbCopyFig(fig cv inst~>transform)
    if(newPin then
    dbAddFigToPin(newPin newFig)
    else
    newPin=dbCreatePin(newNet newFig nil newTerm)
    )
    )
    )
    )
    t
    ))

    You should be able to select an instance and then call this function, and it will create pins over all the pins within the instance.

    Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Children
No Data

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