• 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. schNetExprEvalNames issue inside bus-like instance

Stats

  • Locked Locked
  • Replies 1
  • Subscribers 143
  • Views 12653
  • 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

schNetExprEvalNames issue inside bus-like instance

raduionescu
raduionescu over 5 years ago

Hello,

I have a strange problem with some code I am maintaining (although did not write myself).

The code attempts to get the top most name of nets connected to pins with inherited connections. For this it uses schNetExprEvalNames  followed by geGetAdjustedPath. schNetExprEvalNames  seems to have a bug or issue if on the path there is a instance like I<1:2>.

I have two placements of a cell, once with bus once without, and lower in the hierarchy I have a device with an inherited pin

/TOP/I11/i_R/I0/I18/I3/I4/I1/ntrans11 is one

/TOP/I11/i_R/I0/I18/I1<1:2>/I4/I1/ntrans11 is the other.

the inherited term we have  dbGetTermNetExpr(term) -> "[@hSup:%:VSS!]"

what the code does is this, some differences in red

schNetExprEvalNames( ds list(/TOP/I11/i_R/I0/I18/I3/I4/I1/ntrans11 ) ?listCellView t) which returns a list including the net

((("/TOP/I11/i_RACS2/I0/I18/I3/I4/GND"1 1
        (("lib" "cell" "view" "lSup" "VSS!"
            1
        )
        ) nil
    )
    )
)

after which geGetAdjustedPath(designWindow "/TOP/I11/i_RACS2/I0/I18/I3/I4/GND") returns "/TOP/I11/vss_r_net"

but on the second instance:

schNetExprEvalNames( ds list(/TOP/I11/i_R/I0/I18/I1<1>/I4/I1/ntrans11 ) ?listCellView t) which returns a list including the net

((("/TOP/I11/i_RACS2/I0/I18/I1<18>/I4/GND"1 1
        (("lib" "cell" "view" "lSup" "VSS!"
            1
        )
        ) nil
    )
    )
)

I1<18> does not exist in the schematic, have no idea where the proc gets it. And off course the net does not exists.

what I did notice is if I skip schNetExprEvalNames and go to the level of the transistor and apply geGetAdjustedPath directly, I get the correct net

geGetAdjustedPath(designWindow "/TOP/I11/i_RACS2/I0/I18/I3/I4/I1/VSS!") returns "/TOP/I11/vss_r_net"

geGetAdjustedPath(designWindow "/TOP/I11/i_RACS2/I0/I18/I1<1>/I4/I1/VSS!") returns "/TOP/I11/vss_r_net"

So my question is: is there a reason I absolutely need schNetExprEvalNames or can I be confident that using geGetAdjustedPath gets me the results I want? Are there situations when only geGetAdjustedPath gives bad results?

Thank you.

Regards,


Radu

  • Cancel
  • raduionescu
    raduionescu over 5 years ago

    I will answer my own question, depending on how netSet properties are used schNetExprEvalNames is in fact needed. Cannot be replaced with geGetAdjustedPath .

    • 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