• 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. Annotating bussed terminal voltages with cdsTerm()

Stats

  • Locked Locked
  • Replies 10
  • Subscribers 127
  • Views 18570
  • 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

Annotating bussed terminal voltages with cdsTerm()

tderstep
tderstep over 10 years ago

We recently upgraded to a newer version of Cadence (IC6.1.6-64b.500.10) and I'm having an issue with pin annotations on symbols.  Previously (up to version 6.1.5), in symbols with bussed pins, I could use cdsTerm to specify a specific bus member to annotate when showing terminal voltages or currents.  For example, if I had a 16-bit bus called D<15:0>, I could use the label cdsTerm("D<14>") to return the voltage/current of bit 14 in my bus.  Now, the same label seems to return nothing.  I had created a custom script which repeatedly calls cdsTerm() on each bus member, turning the result into a decimal, hex, or binary number to annotate on the schematic.  This no longer works and the problem seems to be the change in cdsTerm()'s behavior.  Is anyone aware of this problem and knows a workaround?  Alternately, does anyone have other solutions for meaningfully annotating bus values on schematics?  Any help is much appreciated!

Teo

  • Cancel
  • Andrew Beckett
    Andrew Beckett over 10 years ago

    This looks like CCR 1322695, but you should contact customer support so that we can investigate and ensure this gets fixed.

    Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Michele Ancis
    Michele Ancis over 9 years ago

    Hello,

    not sure whether that is the best way to interact but I am using 6.1.7 and I just found the same problem:

    cdsTerm("my_bus<0>") returns nothing

    while cdsTerm("my_bus<2:0>") returns only one voltage out of the bus

    cdsTerm(my_bus<0>) returns nil

    Do I have to contact support for this?

    Next, I would be interested in knowing how to "call a script" for calculating a format for these voltages and display it on schematic as the OP is describing.

    Thank you,

    Michele

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 9 years ago

    Michele,

    cdsTerm("my_bus<0>") on a pin called "my_bus<0>" should work fine. A vectored bus name doesn't really know what to do. These work by being "ILLabel" labelType labels - this says they are a SKILL expression which returns a value - and then the value is displayed. You can put whatever function you like as the expression in the label - it just needs to return a number or a string.

    I'd always advise contacting customer support. For a start, if you'd have done that yesterday, chances are you'd have got an answer by now - whereas there are relatively few Cadence folks monitoring these forums (I was on vacation yesterday, so was not looking at all, and can't always when I'm busy).

    Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Michele Ancis
    Michele Ancis over 9 years ago

    Hi Andrew,

    vacation...love the sound of that word!

    Jokes aside, thanks as usual for your inputs. I have another ticket open for support so I didn't want to "overload" it and I was under the impression that I could just have not written the expression correctly (escaping the brackets for instance..).

    But from your explanation it all of a sudden seems clear: SKILL does not have any native support for bus notations. I also seem to gather that what the OP was hinting at - calling a script to back annotate - is basically putting the name of the desired SKILL function in the cdsTerm() argument...right?

    I'll play a little with SKILL then, before bothering Support again :)

    Thanks as always,

    Michele

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 9 years ago
    Hi Michele, I'm not sure what you mean - SKILL has plenty of support for bus notations (in the database layers and so on). Spectre however doesn't really have busses and the annotation retrieval functions wouldn't really know what to do to annotate a whole vector of voltages or currents. That's more of a "what is a meaningful thing to do here" problem rather than an impossibility. Regards, Andrew.
    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Michele Ancis
    Michele Ancis over 9 years ago
    Hi Andrew,

    it is most likely me who does not understand the workings of this cdsTerm().
    The starting point:
    I have a symbol with two pins:
    - my_pin
    - my_bus<2:0>

    if I create an ILLabel for both of them, with the template cdsTerm("my_xxx<nn>") then - when annotating DCOP, my_pin would show the voltage while my_bus<2:0> will not.

    I seem to understand from your previous reply that those ILLabels are SKILL expressions returning a value, which is then displayed.
    I then went on thinking that "my_pin" is in some way a SKILL expression which is understood and outputs the DCOP value.

    On the other hand, "my_bus<2:0>" is *not* a SKILL expression which is understood and outputs a DCOP value for each of its members.

    In this sense I was talking of "not supported". Please correct me where necessary :-)

    For sure I misinterpreted your above statements, as I went on and defined and loaded the following procedure:

    procedure( maprint(s)
    printf("%s" s)
    s
    );procedure

    but putting this in the cdsTerm() as

    cdsTerm("maprint("blah"))

    or

    cdsTerm("maprint(\"blah\"))

    or

    cdsTerm(maprint("blah"))

    is not working...
    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 9 years ago

    Michele,

    You've got the wrong end of the stick here. cdsTerm() is a SKILL function (which takes some arguments) and it returns a value which is displayed instead of the label (the label text is the SKILL expression).

    So you could change the label to maprint("blah") and see it have an effect. It makes no sense to pass an arbitrary SKILL function as the argument to cdsTerm() - it's expecting a terminal name as the argument.

    cdsTerm/cdsParam/cdsName are just built-in SKILL functions which can return a variety of bits of information depending on CDF and annotation system settings. They're a placeholder function, and the behaviour can then be configured. However there's nothing to stop you using your own functions (with the downside these are then not configurable via the annotation setup form).

    Kind Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Michele Ancis
    Michele Ancis over 9 years ago

    Andrew,

    thanks for clearing up my confusion about the cdsTerm()

    Couple of questions though:

    - Is there any place in the docs where cdsTerm() is explained in some level of detail? If I type "cdsTerm()" in the help search, I can basically only read the Schematic L User Guide or CDF User Guide, but nothing referring to the "SKILL essence" of the function.

    - In the OP it is mentioned that for a version previous to IC6.1.6-64b.500.10 there was a possibility to call cdsTerm("my_bus<0>") for a terminal called my_bus<n:0>. This is at least how I read it.

    You then reply that this sounds like something to address. I am now using 6.1.7 and - as we discuss this - I seem to gather that there is really no support for this...So I am a little confused about this.

    Would you mind helping me understand? What is the point I'm missing?

    Finally, I would really like to have these bus voltages annotated on the schematic, would you point me to a possible route to achieve that?

    Thanks as always!

    Michele

    P.S. To be extremely clear, here are the quotes:

    -----------------------

    OP: [..] For example, if I had a 16-bit bus called D<15:0>, I could use the label cdsTerm("D<14>") to return the voltage/current of bit 14 in my bus.  Now, the same label seems to return nothing [..]

    Andrew: This looks like CCR 1322695, but you should contact customer support so that we can investigate and ensure this gets fixed

    Michele: cdsTerm("my_bus<0>") returns nothing while cdsTerm("my_bus<2:0>") returns only one voltage out of the bus

    Andrew: cdsTerm("my_bus<0>") on a pin called "my_bus<0>" should work fine. A vectored bus name doesn't really know what to do

    This is where my confusion starts. Didn't we say in the beginning that it should be possible to address a bus member?

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 9 years ago

    Actually, I did suggest contacting customer support (I'm on vacation today as well).

    Looking back through the history of this discussion thread, CCR 1322695 is supposed to be fixed in IC617 ISR6. This is where it will show all of the values of the bus when using cdsTerm("my_bus<2:0>"). Apparently that used to work in IC615 but broke in IC616.

    As to whether an individual bus member can be annotated using cdsTerm("my_bus<2>") on a bussed pin my_bus<2:0> - I would have expected that to work, but I haven't tested it. That's why you should contact customer support (I'm doing this in my spare time, and that is limited at the moment).

    My comment about the "vectored bus name doesn't really know what to do" was more that I'd forgotten that cdsTerm("my_bus<2:0>") used to work - I wasn't sure how it could display several values in a single location. Appears that it used to be able to, but doesn't any more (until the next ISR). I wasn't saying that cdsTerm("my_bus<2>") shouldn't work (that's a scalar bus reference).

    So if you want a response - please go via support. You have access, so please use it!

    Note there's no need for detailed documentation on precisely what cdsTerm() does - I'm not sure it would help anyway.

    Kind Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Michele Ancis
    Michele Ancis over 9 years ago
    Andrew,
    first of all let me say that I *greatly* appreciate the kind of help you provide on this Forum, and the fact that you interact with us even when on vacation shows the kind of commitment you have. I bear the utmost respect for that, let's be clear!

    There's other stuff right now on the CS for me, so I will wait until that is solved before asking for this. After all, I did think I was just misspelling something so there was no need to get to CS. I was wrong :)

    BTW, I tried to make something of your mention of CCR 1322695, but a search on the full string or number did not return any result, neither on this site nor on the CS site. Am I supposed to gather, for instance, the definition of an issue and its foreseen solution (as you reported)?
    My point being - as in the documentation case - the more I'm able to find information myself, the less I have to bother people on the Forum or CS.
    Sometimes I find it difficult to find my way through Virtuoso without asking for help.

    Thanks,

    Michele
    • 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