• 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. Changing schematic properties and callbacks

Stats

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

Changing schematic properties and callbacks

AncisMichele
AncisMichele over 3 years ago

Hi,

I am in the process of evaluating a new PDK and I would like to run some sweeps for different geometries and device types.

The issue with sweeping "the standard way" is that this substitution process does not update those parameters of the model which rely on callbacks.

These days, things like perimeter/area and total width of transistors are caclulated via callbacks.

In trying to overcome this issue, I thought of automating the creation of an array of devices, each with its own properties.

Changing the properties of an instance created in a schematic view looks easy enough (I just learned about it today),

I gathered most of the info I now have, from this post on the Forum, and about the "callback plague" a bit here and there.

This thread in Ggroups has a full-fledged "callback caller" but I am still hoping (since I cannot understand the code) to get away with something simpler

like what I've found here (again Ggroups).

My first steps are - of course - interactive, so I have:

A symbol cellview on a schematic canvas, which I can select and then type on the CIW:

inst = car(selectedSet())

gives me a handle to the instance. I can either inspect the CDF from within the GUI (Tools->CDF->Edit)  or do a cdfGetInstCDF(inst) to get a handle to the db object.

The cell has a property called "fingers", which is as you guessed, the number of fingers of the device. If I do, from the CIW:

inst->fingers="2"

then I can see from the form of the cell instance, which I can of course inspect as I have the schematic canvas open, that the number of fingers is now - correctly - set to two.

But not only! (And this is where it starts to puzzle me)

Also other elements have changed in the form, the very same way one would expect when changing the n. of fingers manually, in the form.

The total witdth, areas and perimeters have changed as well (perimeters and areas are not editable, btw).

The joy does not last long, however. A call to ADE and successive netlisting brings up a device which has only the n. of fingers I've set. All other parameters are the "old" ones!!

Now as a side question, I would like to ask: how is it possible that I have a schematic showing me devices with property XYZ which, once netlisted, have different ones? This of course

opens an abyss of questions... But back to the main point.

Although I don't understand the above, i.e. how can it be that the schematic is showing me something that is not netlisted in that precise way, I thought that maybe I can solve this incongruency

by using callbacks. I used the snippet found in the 'simple version'  thread (2nd link). 

This means that if you change a database property on an instance,
you'll need to call any CDF callbacks yourself for that instance
property. One way of doing that is:


; set the global variable used to communicate with callbacks
cdfgData=cdfGetInstCDF(inst)
; assuming W is the parameter that was modified
paramName='W;
callback=get(cdfgData paramName)->callback
when(callback && callback!=""
; catch any errors during the evaluation
errset(evalstring(callback) t)
)

If I understand the gist of it, to invoke a callback is just performing an evalstring() on its name.

This name, a string, is what's returned by get(cdfgData paramName)->callback.

I've tried to do this, to no avail. The netlisted device has only the property I directly changed and none of the derived ones recalculated in any way.

I'm thinking I don't really know how to invoke the callback function, because how is the tool supposed to know on which instance to perform the operation?

Just to name one.

Any pointers highly appreciated, keeping in mind that what I'm really looking to implement is a very basic thing: just an array of automatically generated devices with a series of values for their main properties (length, width, n. of fingers...) so in my simple world (tell me if it's not so simple), the whole thing should go like:

for (X in instance_list):

  create instance X

  for parameter in par_list:

     X --> parameter = "myval"

     callback_for_parameter_1

so, nothing too complicated. Of course I'm missing something, hopefully not too much!

Thanks for your help,

Michele

  • Cancel
Parents
  • Andrew Beckett
    Andrew Beckett over 3 years ago

    Michele,

    I'd suggest you either:

    1. Use the parameters capability in ADE Explorer/Assembler (or even XL) which allows you to sweep the parameters of a device and the callbacks do get fired in the background (rather than putting a variable on it, you use the parameterisation flow in ADE). This is the simplest because the tool does all the work for you
    2. Use my callback calling code (not an ancient version on the comp.cad.cadence forum, but something more recent which is indented and maybe easier to read). This also handles the pain for you. How to call CDF callbacks procedurally from SKILL to update CDF parameters?

    Trying to get the right CDF and then doing evalstring() yourself is possible, but sometimes you might need to take care of calling the init proc, or making sure it's the right kind of CDF - it's a can of worms. You can write it succinctly for a specific case, but depending on the PDK there might need to be a chain of callbacks invoked, not just the one you changed.

    I'd personally go for option 1 above if you can.

    Andrew

    • Cancel
    • Vote Up +2 Vote Down
    • Cancel
  • RaphaelN
    RaphaelN over 3 years ago in reply to Andrew Beckett

    I am facing the same problem and I already used option 1. However I checked the netlist and it seems that the internal transistor parameters are not updated if I sweep for example the length. The update is only done if I edit the length in the transistor symbol.

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

    Please contact customer support - the parameterisation approach really should work. It's possible that something isn't set up right - the other thing that can happen is that the callback fails because of some restriction with allowed values (I'm guessing).

    We'll need to see what's happening to be able to understand how to resolve this.

    Andrew

    • Cancel
    • Vote Up +1 Vote Down
    • Cancel
  • RaphaelN
    RaphaelN over 3 years ago in reply to Andrew Beckett

    The problem was that the PDK offers a transistor cell which itself consists of a transistor and the well diodes. This cell is useful for backgate bias operation. With this cell the callback fails, however for a parameter sweep there is another cell available which behaves equally but do not have the diodes. With this cell the callback works properly.

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

    The problem was that the PDK offers a transistor cell which itself consists of a transistor and the well diodes. This cell is useful for backgate bias operation. With this cell the callback fails, however for a parameter sweep there is another cell available which behaves equally but do not have the diodes. With this cell the callback works properly.

    • 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