• 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. Incorrect value when replacing parameters using SKILL c...

Stats

  • Locked Locked
  • Replies 6
  • Subscribers 143
  • Views 9640
  • 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

Incorrect value when replacing parameters using SKILL command

DarrylKaye
DarrylKaye over 3 years ago

Hello,

I have the following code so that I can add/create a specific device on a schematic. It also changes the cdf parameter so I can change the capacitance value and the Layout Indication of the device.

cvId = dbOpenCellViewByType( " MyLib" "Capa_CellView" " schematic" "" 'a)

symbol_capa = dbOpenCellViewByType( "Device_lib" "Capa_type" "symbol" "" 'r)

instId = schCreateInst( cvId symbol_capa "C0" 0:0 "R0")

inst = list(instId)

schReplaceProperty( inst "c" "0.1p" )

schReplaccePropertyy (inst "LayInd" "Soft" )

However instead of capacitance = 0.1p, the capacitance value is 0.032p (default value). I have also tried the replacing this one as 100f but it has the same result.

The version that I am using for this is setic617isr23

Also with the same code but the version is setic618isr13 I get the following error:

*Error* eval: unbound variable - cdfgData

*Error*  load: error while loading file -  "./capa/capa_view_0p1.il" at line 11

Line 11 : schReplaceProperty( inst "c" "0.1p" )

I have the CCSinvokeCdfCallbacks(cvId) in the later part of the code. So I don't think the callback of this specific parameter is affecting the code.

For context this is the info in the cdf.

Name : c

Type: string

Default : 0.032p

For now I have only encountered this in capacitor device (MOS and BJT are OK in both version with the same code structure).

Please Help. Thank you.

  • Cancel
  • DarrylKaye
    DarrylKaye over 3 years ago

    So I did some work around in my code.

    First I have created all of device that I wanted. 

    Once Created I have executed the following code.

    cvId = dbOpenCellViewByType("MyLIb" "Capa_cellView" "schematic" "" 'a)

    CCSinvokeCdfCallbacks(cvId)

    inst = dbFindAnyInstByName(cvId "C0")

    instList = list ( inst )

    schReplaceProperty( instList "LayInd" "Soft")

    schreplaceProperty(instList "c" "0.1p")

    schReplaceProperty( instList "LayInd" "NO")

    CCSinvokeCdfCallbacks(cvId)

    schReplaceProperty( instList "LayInd" "Soft")

    ...

    inst = dbFindAnyInstByName(cvId "C3")

    ...

    I was able to change the capacitance value that was different with the default value. However instead of 0.1p the capacitance value is 0.100253p

    I have 4(or more) instances to be change. And out of these instances I was only able to change the capacitance value of C3(last device to be changed) correctly.

    I was wondering if there is a solution to this? I wanted the capacitance value to be exactly 0.1p.

    Thank you.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 3 years ago in reply to DarrylKaye

    Without knowing the PDK that you're using, it's very hard to answer this (and even then I might not have access to it). Can you interactively change the capacitor value to exactly 0.1p? If not, it's unlikely you'll be able to do so by SKILL and firing the callbacks since there's probably some gridding of the physical dimensions and that results in a non-exact capacitance (I'm guessing here, since I don't know the behaviour of the PDK you're using).

    Rather than calling CCSinvokeCdfCallbacks (after changing the c and LayInd properties), perhaps you could call:

    CCSinvokeInstCdfCallbacks(inst ?order list("c")) ; might need to be list("c" "LayInd")

    This avoids re-calling the callback on everything you've done so far, plus allows control over the order they are fired in. Most likely there''s some order dependency in the callbacks.

    Andrew

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • DarrylKaye
    DarrylKaye over 3 years ago in reply to Andrew Beckett

    Yes. I am able to change the capacitor value with the GUI of the Property Editor but I need to change the LayInd properly first.

    Since I am able to change it interactively, dos this means that it can still be done using SKILL?

    I will consider the behavior of PDK and the sequence of callback to see if this will solve the problem. 

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 3 years ago in reply to DarrylKaye

    When you update the parameters through the UI, you are only changing a single parameter at a time, and then calling the callback for that parameter - if you don't specify the ?order argument with CCSinvokeCdfCallbacks or CCSinvokeInstCdfCallbacks then it calls all the callbacks in the order the CDF parameters are defined in - because it has no idea what you just changed - and so if the callbacks have an order dependency, then the results may be different.

    This is why I was suggesting a more selective approach to resolve this. There is also the possibility that you should call the init proc too - there's an argument for that, but perhaps it will be resolved simply by restricting which callbacks get called as I suggested above.

    Andrew

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • DarrylKaye
    DarrylKaye over 3 years ago

    I have already resolve the issue of this, however this is more likely to the behavior of the PDK than on how I have structured my code.

    I fix these by adding Human Interface function in my code.

    Previously the code is structured as:

    Make schem > Add instance> Change prop > Callback > Save

    Now the ccode is structured as:

    Make Schem > Add Instance > Save > Open Window(CellView and Object Prop) > Close window > Change prop > Selective Callback > Save

    I am unsure on why I needed to open the Cell View and the Object Property of the Instance so that I can change the value exactly. 

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 3 years ago in reply to DarrylKaye
    DarrylKaye said:
    I am unsure on why I needed to open the Cell View and the Object Property of the Instance so that I can change the value exactly.

    This should not be necessary (I've never found a case where it has been necessary). Without seeing an example (your code plus the details of the PDK and the device in question), it's going to be hard to diagnose it. It should be entirely possible to call the callbacks procedurally without needing to bring up the edit properties form.

    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