• 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. How to find and print out the pins of schematic using s...

Stats

  • Locked Locked
  • Replies 8
  • Subscribers 144
  • Views 12741
  • 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

How to find and print out the pins of schematic using skill

Drake96
Drake96 over 2 years ago

Hello I have a schematic

How to automatically extract the power and gnd pins in text box..when i select this cell from library browser using skill?
Can you please guide using an example?

  • Cancel
Parents
  • p94todorov
    p94todorov over 2 years ago

    Hello,

    I am not sure whether this is what you are looking for, but you can get the locations of the pins in a given symbol like this:

    cell = dbOpenCellViewByType("libName" "cellName" "symbol" "schematicSymbol" "r")
    warn("For cell %L, library %L\n" cell->cellName cell->libName)
    foreach(term cell~>signals~>term
        termCenterPt = centerBox(car(term~>pins~>fig)->bBox)
        warn("Terminal %L location X = %n Y = %n\n" term~>name xCoord(termCenterPt) yCoord(termCenterPt))
    );foreach

    This is of course their location in the cellview, in case you need to operate on instances in schematic just transform these coordinates.

    Regards,

    Petar

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

    Thanks Peter, i tried it but it didn't works...i want the pin names

    suppose for above cell names as i browse it...the power pin and gnd pin should reflect

    as VDD1 GND1

    regards

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

    If you want the terminal names of a schematic, use:

    cv=dbOpenCellViewByType(libName cellName "schematic")
    termNames=cv~>terminals~>name
    dbClose(cv)

    Andrew

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

    Thanks Andrew, is there a way where i can differentiate between power, gnd and io pin and report them simultaneously

    if am using above command...it just list out all pin names

    or any example to understand

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

    Thanks Andrew, is there a way where i can differentiate between power, gnd and io pin and report them simultaneously

    if am using above command...it just list out all pin names

    or any example to understand

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

    If the Signal Type has been set when the pin was created to "power" or "ground" (this is often automatically set based on the name) - select the pin and do an edit properties on it to check - then you can use this:

      termNames=setof(term cv~>terminals member(term~>net~>sigType '("supply" "ground")))~>name

    (note, the database stores the "power" signal type as "supply").

    This is the only indication in the database as to the intent of the signal - otherwise we have no way of knowing whether something is for power or ground.

    Regards,

    Andrew

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

    Thanks Andrew!!!!!

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

    Andrew,

    i tried below way-

    but am not getting the desired supply pin in box...apart from that all other options are working fine.

    can you please help me with that

    procedure(abLibCellViewComboExample()
    let((grid lib cell view libLabel cellLabel viewLabel Pwr_Label Pwr_ports
    browse form)
    libLabel=hiCreateLabel(
    ?name 'libLabel ?labelText "Library"
    ?justification 'right
    )
    cellLabel=hiCreateLabel(
    ?name 'cellLabel ?labelText "Cell"
    ?justification 'right
    )
    viewLabel=hiCreateLabel(
    ?name 'viewLabel ?labelText "View"
    ?justification 'right
    )
    lib=ddHiCreateLibraryComboField(
    ?name 'lib ?callback "(ddsUpdateSyncWithForm)"
    )
    cell=ddHiCreateCellComboField(
    ?name 'cell ?callback "(ddsUpdateSyncWithForm)"
    )
    view=ddHiCreateViewComboField(
    ?name 'view ?callback "(ddsUpdateSyncWithForm)"
    )
    Pwr_Label=hiCreateLabel(
    ?name 'Pwr_Label ?labelText "Power Pins*" ?justification 'left
    )
    Pwr_ports=hiCreateStringField(
    ?name 'Pwr_ports ?value "" ?callback "runpwrpin(hiGetCurrentForm())"
    )
    browse=hiCreateFormButton(
    ?name 'browse ?buttonText "Browse..." ?callback "(ddsSyncWithForm (hiGetCurrentForm) 'browse 'lib 'cell 'view)"
    )
    grid=hiCreateGridLayout(
    'grid
    ?items list(
    list( libLabel 'row 0 'col 0)
    list( cellLabel 'row 1 'col 0)
    list( viewLabel 'row 2 'col 0)
    list( lib 'row 0 'col 1)
    list( cell 'row 1 'col 1)
    list( view 'row 2 'col 1)
    list( browse 'row 0 'col 2)
    list( Pwr_Label 'row 3 'col 0)
    list( Pwr_ports 'row 3 'col 1)
    list( 'col_stretch 0 0)
    list( 'col_stretch 1 1)
    list( 'col_stretch 2 0)
    )
    )
    form=hiCreateLayoutForm(
    'abImportParasiticsForm
    "Lib Cell View Pin Example"
    grid
    ?sizePolicy 'horizontalExpanding
    )
    hiInstantiateForm(form)
    ddHiLinkFields(
    form->lib
    form->cell
    form->view
    )
    hiDisplayForm(form)
    )
    )
    procedure(runpwrpin(form)
    let( libName cellName termNames cv)
    libName = form->lib->value
    cellName = form->cell->value
    cv=dbOpenCellViewByType(libName cellName "schematic")
    termNames=setof(term cv~>terminals member(term~>net~>sigType '("supply")))~>name
    form->Pwr_ports->value = termNames
    )

    Drake

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

    Sorry to be blunt, but I'm amazed after all these questions where you ask questions about implementing UI (both this and under your other account name), you still seem to be unable to do basic debugging. There are a few things wrong here:

    1. The callback is on the Pwr_ports field, which means you have to enter something in that field and then move the focus outside to trigger the runpwrpin function to be called. So you'd type something there, click outside, and then it will run (which would be a rather odd use model). Presumably you would have either a button on the form or have it called once the lib/cell/view are completed (probably not a good idea to do that as it would keep re-reading things as you browse to the right cellView).
    2. Even then, it fails with: *Error* let: local bindings must be a proper list - libName . This is because the let() statement is not correctly written in the callback function (hint, you could test this also by calling runpwrpin(hiGetCurrentForm()) in the CIW).
    3. If I fix the local variable list, it also fails because you're trying to set the value of a string field to a list - termNames will be a list:
      *WARNING* Form 'abImportParasiticsForm', field 'Pwr_ports': Bad value ("VDD1").
      Must be a string.

    Fixing the callback function to be this solves this (a bit of indentation in the code would help, as I keep saying):

    procedure(runpwrpin(form)
    let( (libName cellName termNames cv)
    libName = form->lib->value
    cellName = form->cell->value
    cv=dbOpenCellViewByType(libName cellName "schematic")
    termNames=setof(term cv~>terminals member(term~>net~>sigType '("supply")))~>name
    form->Pwr_ports->value = buildString(termNames)
    )
    )

    Note this still requires you to type something into the "Power Pins*" field and then change focus to trigger the callback; I'm not going to fix your UI code.

    Andrew

    • 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