• 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. Bus-expansion-like trick for an array of design variabl...

Stats

  • Locked Locked
  • Replies 2
  • Subscribers 125
  • Views 16499
  • 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

Bus-expansion-like trick for an array of design variables

fastandig
fastandig over 6 years ago

I am using IC 5.1.

I create 64 voltage sources by first creating a single one, then copying it, pressing F3 and then entering 63 in the "columns".

I assign 64 net names by using bus expansion so then i get something like inp<0>, inp<1> ..... inp<63>.

The tools allow me to do the above quickly without manually having to draw so many voltage sources or naming so many nets one by one.

So I was wondering if there's a way I can assign 64 such design variables to the 64 dc voltage sources, lets call them inp_var<0>, inp_var<1>.... inp_var<63>, without having to manually pull up the property box of 64 voltage sources and typing 64 design variable names. Is there a quick way to do this, something like the above bus-expansion way?

Or is the only alternate way is to modify the netlist every time (using some script) before I run monte-carlo simulations for each combination of the 64 voltages? Or any other faster/better solutions?

I think this can be done in IC 6.1 but unfortunately I've to work in IC 5.1 because of legacy circuits, so please let me know if I can do it in IC 5.1. Thank you.

  • Cancel
  • Andrew Beckett
    Andrew Beckett over 6 years ago

    This isn't possible with anything built-in (even in IC6.1.X), but it's easy enough to do with a little bit of SKILL code. For example:

    procedure(CCFsetBusVars(@key (propName 'vdc) (suffix "_var") (instances geGetSelSet()))
        let((varName netName bussedInstTerm)
            rexCompile("^\\([^<]*\\)<\\([0-9]*\\)>$")
            foreach(inst instances
                when(inst~>objType=="inst"
                    ;--------------------------------------------------------
                    ; Use net name connected to instance to name the
                    ; variable, assuming it looks like a bus. Otherwise
                    ; base the variable name on the name of the source
                    ;--------------------------------------------------------
                    bussedInstTerm=
                        exists(instTerm inst~>instTerms
                            rexExecute(instTerm~>net~>name)
                        )
                    varName=
                        if(bussedInstTerm then
                            rexSubstitute(strcat("\\1" suffix "\\2"))
                        else
                            strcat(inst~>name suffix)
                        )
                    putprop(inst varName propName)
                )
            )
            t
        )
    )

    Assuming you've placed all the instances, added the wires and labelled the wires (with bus expansion), and performed a schematic check (to extract the nets), you can then select all the instances (doesn't matter if the wires are selected too), and run CCFsetBusVars(). There are some keyword arguments if the property is not called "vdc" - so for current sources it would be CCFsetBusVars(?propName 'idc)

    Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • fastandig
    fastandig over 6 years ago in reply to Andrew Beckett

    Thank you Andrew, worked very well.

    • 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