• 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. Getting coordinates for pin placement

Stats

  • Locked Locked
  • Replies 15
  • Subscribers 143
  • Views 20815
  • 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

Getting coordinates for pin placement

LongTimeNovice
LongTimeNovice over 10 years ago

Hello, everyone.  I'm trying to examine a pin that's in a layout subcell, and then draw a pin directly over it.  I'm having trouble getting my coordinates in the correct format.  I'm sure of two things: 1) I'm probably making this harder than it needs to be, and 2) I'm probably missing something obvious.  I've pasted the code, and below that is the response from Cadence.

############# Here is my code #############

;GET bBox OF PIN IN TARGET INSTANCE

pBox=car(instTerm~>term~>pins)~>fig~>bBox

;SEPARATE OUT LOWER LEFT COORDINATES

pBoxLL=car(car(pBox))
pBoxFixLL=dbTransformPoint(pBoxLL inst~>transform)

;GET LOWER COORDINATE AND CONVERT TO STRING

pBoxFixLower=car(pBoxFixLL)
sprintf(pBoxFixLower "%L" pBoxFixLower)

;GET LEFT COORDINATE AND CONVERT TO STRING

pBoxFixLeft=cdr(pBoxFixLL)
sprintf(pBoxFixLeft "%L" pBoxFixLeft)
pBoxFixLeft = substring(pBoxFixLeft 2 strlen(pBoxFixLeft)-2)

;MAKE A STRING WITH LOWER AND THEN A COLON AND THEN LEFT

pinCoordsLL=strcat(pBoxFixLower ":" pBoxFixLeft)

;SEPARATE OUT UPPER RIGHT COORDINATES

pBoxUR= cdr(car(pBox))
pBoxUR=car(pBoxUR)
pBoxFixUR=dbTransformPoint(pBoxUR inst~>transform)

;GET UPPER COORDINATE AND CONVERT TO STRING

pBoxFixUpper=car(pBoxFixUR)
sprintf(pBoxFixUpper "%L" pBoxFixUpper)

;GET RIGHT COORDINATE AND CONVERT TO STRING

pBoxFixRight=cdr(pBoxFixUR)
sprintf(pBoxFixRight "%L" pBoxFixRight)
pBoxFixRight = substring(pBoxFixRight 2 strlen(pBoxFixRight)-2)

;MAKE A STRING WITH UPPER AND THEN A COLON AND THEN RIGHT

pinCoordsUR=strcat(pBoxFixUpper ":" pBoxFixRight)

;MAKE STRING WITH UPPER-LEFT COORDS AND LOWER-RIGHT COORDS SEPARATED BY A "/"

pinCoords=strcat(pinCoordsLL "/" pinCoordsUR)

;CONVERT THIS STRING TO A LIST CONTAINING L:L AND U:R

pinCoords = parseString(pinCoords "/")

;PRINT THESE VARIABLES FOR DEBUGGING PURPOSES

printf("  *** pinCoordsLL is %A\n" pinCoordsLL)
printf("  *** PinCoordsUR is %A\n" pinCoordsUR)
printf("  *** PinCoords is %A\n" pinCoords)

;MAKE A PIN USING pinCoords VARIABLE

leCreatePin( cv  pLPP  "rectangle"  pinCoords  pName  "inputOutput"  list("left" "right" "top" "bottom") )

############# This is the response from Cadence starting with the debugging lines and ending with the error #############

*** pinCoordsLL is "11.175:10.315"

*** PinCoordsUR is "11.605:10.745"

*** PinCoords is ("11.175:10.315" "11.605:10.745")

*Error* length: argument must be a list or an array - "11.175:10.315"

<<< Stack Trace >>>

leCreatePin(cv pLPP "rectangle" pinCoords pName ... )

I notice that the PinCoords list, when printed, looks right but has quotes in it.  I wonder if this throwing off my leCreatePin statement.

I'd love to hear your thoughts.

Thank you!

Steven.

  • Cancel
Parents
  • LongTimeNovice
    LongTimeNovice over 10 years ago

    Hi, Lawrence.

    I've still got a problem.  I'm sure it's related to what I'm feeding into the dbTransformBBox statement.  My definition of instPinList is probably wrong.  Here is my code:

     

    instList=selectedSet() ;MULTIPLE INSTANCES ARE SELECTED WHEN SCRIPT IS RUN

    ;CYCLE THROUGH INSTANCES, FIND PINS OF EACH INSTANCE, AND THEN GET EACH PIN'S COORDS BEFORE MOVING TO THE NEXT INSTANCE

    foreach(inst instList

    instPinList = inst~>instTerms~>term~>pins

    foreach( instTerm instPinList

    pinFig = car(instTerm~>term~>pins)~>fig

    printf("  *** pinFig is %A\n" pinFig) ;PRINT LINE FOR DEBUGGING

    pinCoords = dbTransformBBox(pinFig~>bBox inst~>transform)

    printf("  *** pinCoords is %A\n" pinCords) ;PRINT LINE FOR DEBUGGING

    );foreach

    );foreach

    And here is the response from Virtuoso:

      *** pinFig is (db:0x43911dcd) *Error* dbTransformBBox: Invalid bBox - (((5.82 5.88) (6.25 6.31))) <<< Stack Trace >>> dbTransformBBox((pinFig~>bBox) (inst~>transform))

    I'd love to hear your thoughts.  Thank you!

    Steven.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Reply
  • LongTimeNovice
    LongTimeNovice over 10 years ago

    Hi, Lawrence.

    I've still got a problem.  I'm sure it's related to what I'm feeding into the dbTransformBBox statement.  My definition of instPinList is probably wrong.  Here is my code:

     

    instList=selectedSet() ;MULTIPLE INSTANCES ARE SELECTED WHEN SCRIPT IS RUN

    ;CYCLE THROUGH INSTANCES, FIND PINS OF EACH INSTANCE, AND THEN GET EACH PIN'S COORDS BEFORE MOVING TO THE NEXT INSTANCE

    foreach(inst instList

    instPinList = inst~>instTerms~>term~>pins

    foreach( instTerm instPinList

    pinFig = car(instTerm~>term~>pins)~>fig

    printf("  *** pinFig is %A\n" pinFig) ;PRINT LINE FOR DEBUGGING

    pinCoords = dbTransformBBox(pinFig~>bBox inst~>transform)

    printf("  *** pinCoords is %A\n" pinCords) ;PRINT LINE FOR DEBUGGING

    );foreach

    );foreach

    And here is the response from Virtuoso:

      *** pinFig is (db:0x43911dcd) *Error* dbTransformBBox: Invalid bBox - (((5.82 5.88) (6.25 6.31))) <<< Stack Trace >>> dbTransformBBox((pinFig~>bBox) (inst~>transform))

    I'd love to hear your thoughts.  Thank you!

    Steven.

    • 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