• 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. Skill Pcell "undefined function pow" at eval during LVS

Stats

  • Locked Locked
  • Replies 6
  • Subscribers 125
  • Views 1930
  • 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

Skill Pcell "undefined function pow" at eval during LVS

AdrienL
AdrienL over 1 year ago

Hello,

I've been working on a PCell in skill for several days and it is not a piece of cake! I was able to fix most of my problems alone, but this time I really don't understand...

For a little of context I have a PCell that generates a layout and a schematic (therefore I have 2 pcDefinePCell).

When I generate the PCell (by loading the .il script) everything works fine. I see my layout and my schematic as expected.

When I implement the symbol of my pcell in a schematic, no problem, the layout is also generated as expected. DRC work perfectly.

But when I run the LVS, it won't work and I have this error:

Pcell evaluation for architectures_tests/pcell_inv/schematic generated information. See layer/purpose "marker/error" shape with property "drcWhy" for description. You can get more details from file /tmp/_pcEvala79387.

ERROR (OSSHNL-408): Failed to generate the netlist because of a Pcell evaluation error on cellview 'my_lib/pcell_inv/schematic'. Set simStopNetlistOnPcellFailure to "ignore" to prevent this error.

In the tmp file I have 2 times : *Error* eval: undefined function - pow

The thing is I don't have any "pow" function in my scripts... So I really don't understand.

I hope someone can help me. Thank you in advance!

  • Cancel
Parents
  • Andrew Beckett
    Andrew Beckett over 1 year ago

    You could try doing:

    _stacktrace=50
    sstatus(errsetTrace t)

    Then look in the /tmp file it mentions. This should give an idea about where the pow is being called from? pow() is an ADE function and not part of core SKILL (expt or ** should be used instead), but the trick is to find where it's called from first.

    One possibility might be if you are (say) calling CDF callbacks within your PCell code - given the name "pcell_inv" I'm assuming it contains instances of transistors in the schematics, and those might have CDF callbacks that call pow. If these aren't under your control, you could put this in your library's libInit.il :

    unless(isCallable('pow)
      procedure(pow(base expt) expt(base expt))
    )

    Regards,

    Andrew

    • Cancel
    • Vote Up +1 Vote Down
    • Cancel
  • AdrienL
    AdrienL over 1 year ago in reply to Andrew Beckett

    I have an other problem now, the LVS (or the simulation in ADE) wont take the Pcell schematic, but the schematic generated when the script is loaded (with the default value).

    Should I create an different post?

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Reply
  • AdrienL
    AdrienL over 1 year ago in reply to Andrew Beckett

    I have an other problem now, the LVS (or the simulation in ADE) wont take the Pcell schematic, but the schematic generated when the script is loaded (with the default value).

    Should I create an different post?

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Children
  • Andrew Beckett
    Andrew Beckett over 1 year ago in reply to AdrienL

    Hmm, I thought you said that it fixed it?

    By the way, the only way to reload the libInit.il within the same virtuoso session is to explicitly load() the file (it's loaded automatically on a first access trigger and obviously it can only trigger than once).

    If you send me a friend request on the forums with your email address, I can take a quick look with you via a screen-sharing session (this is not an invitation to people across the world to do the same - I don't have the capacity!)

    Andrew

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • AdrienL
    AdrienL over 1 year ago in reply to Andrew Beckett

    It fixed the eval error problem indeed. But it unlocked new problems Sweat smile

    Understood for the libinit.il

    Thank you, I sent you one.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • AdrienL
    AdrienL over 1 year ago in reply to AdrienL

    Just to post the solution Andrew found:

    It was a simply that I used string format in my CDF parameters definition, but float in my PCell parameters definition.
    It seems that layout pcells automatically convert string to float (ex: 300n -> 0.3), but no the schematic pcells...
    As the schematic did not understand the given string parameter (expecting a float), it discarded it and used the default value. (However, it strange that I didn't have any warning or error message :o)

    So we changed the parameters definition from float to string, and used the function cdfParseFloatString() to convert string to usable float.

    • 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