Attempt to override value of inherited parameters

J

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?
 
On 7 Mar 2007 10:28:46 -0800, "JD" <Jiandong.Ge@gmail.com> wrote:

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?
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
Principal European Technology Leader
Cadence Design Systems, UK.
 

Welcome to EDABoard.com

Sponsor

Back
Top