Attempt to override value of inherited parameters

Discussion in 'Cadence' started by JD, Mar 7, 2007.

  1. JD

    JD Guest

    I got a subckt definition like is:

    subckt nmos w=5e-6 l=0.18e-6 ...
    + tox_mismatch = mis_tox * parama
    .....
    .....
    .....
    ends nmos

    The mis_tox is defined in another file:

    parameters
    + mis_tox = 0
    ....
    ....


    section stat
    statistics {
    process {
    ...
    ...
    }
    mismatch {
    vary mis_tox dist=gauss std=1.0
    ...
    ...
    }
    }
    endsection stat


    When I tried to netlist a nmos instance like:

    M0 nmos w=5e-6 l=0.18e-6 mis_tox = 1.25

    The spectre report "Attempt to override value of inherited
    parameters"

    Since I need to override a different value of mis_tox for each nmos
    instance, is there a way to do that?
     
    JD, Mar 7, 2007
    #1
  2. I'm a bit confused because you seem to be using the same parameter name as both
    a global parameter and a local parameter.

    If you define it as follows:

    subckt nmos (d g s b)
    parameters w=5e-6 l=0.18e-6 mis_tox=1 ... tox_mismatch = mis_tox * parama

    ends nmos

    Then you can pass mis_tox to the instance - but it then won't be affected by the
    global parameter mis_tox which is in the statistics block.

    Perhaps you need to have one parameter name for passing locally, and one global
    variable?

    For example:

    parameters mis_tox_glob=1

    statistics {
    process {
    }
    mismatch {
    vary mis_tox dist=gauss std=1.0
    }
    }

    subckt nmos (d g s b)
    parameters w=5e-6 l=0.18e-6 mis_tox=0 \
    mis_tox_local=mis_tox==0?mis_tox_glob:mis_tox \
    tox_mismatch=mis_tox_local*parama
    ....
    ends nmos

    In other words, if you don't pass mis_tox on the instance, it will use the
    global (or monte carlo mismatch parameter mis_tox_glob); if you pass it,
    it will use that instead of the global parameter. This is taken care of in the
    conditional expression mis_tox==0?mis_tox_glob:mis_tox which is effectively
    an if-then-else expression (often called the "ternary" expression in C).

    Regards,

    Andrew.
     
    Andrew Beckett, May 1, 2007
    #2
Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.