[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Gnucap-devel] "binning" of models
From: |
Al Davis |
Subject: |
Re: [Gnucap-devel] "binning" of models |
Date: |
Tue, 15 Jan 2002 14:21:30 -0700 |
The next release really will have binning. I implemented it
yesterday, and it was very easy. I don't know if it is strictly
HSPICE compatible or not, but it is close. I believe it is a
superset.
Like HSPICE, there is no check for consistency at bin boundaries.
It can work for all model "levels". It is not necessary to use the
same criteria for all. By defining it in the base, it does.
It is legal for different bins to use completely different models.
You could use a BSIM3 for one bin and a level 1 for another.
If binning parameters are specified, but the model is explicitly
specified, without binning, a warning is issued when it is outside
the legal range.
If full binning is used (implicit selection of the model) and there
is no matching bin, this is an error. (It throws an exception.)
Here's a basic outline:
Binned model names end with dot number, such as "foo.1", "foo.2",
"foo.3".
The numbers must start at 1 and be consecutive, but not necessarily
in order in the file. There is no warning or error if they are not
consecutive.
It is still legal to name a model something like "foo.4" and not use
binning.
To use binning, you specify the name without the number.
M1 2 3 4 5 foo w=2u L=2u
First, it will look for a model "foo". If this is available, it will
use it directly, without binning.
If there is no model "foo", it will look for "foo.1". If a model
"foo.1" is found, it is checked for bin matching. If it matches, it
is accepted, else it continues by looking for "foo.2", and so on. If
the model "foo.1" is not found, the search for a match is terminated,
and an error issued (exception thrown).
So, suppose there exist models "foo.1", "foo.2", and "foo.4". It
will try "foo.1", then "foo.2". Since there is no "foo.3" it will
terminate the search, missing "foo.4".
You can still specify the specific model directly:
M1 2 3 4 5 foo.2 w=2u L=2u
If you do this, it will not do binning.
Well, you could have "foo.2.1", "foo.2.2", ......
Models now have a new method "bool is_valid(const COMMON_COMPONENT*)"
that checks for a valid bin. It returns true if it is ok, false if
not. It is a virtual function, so if you don't specify it, it
inherits it. This makes it so all MOS models can use the same check,
or it can be overridden. The base for all (in MODEL_BASE), just
returns true, which disables binning for that model.
Using the model compiler, all you need to do to enable binning is to
list the parameters where they are expected, and provide a function
to check, under "validate".
That was easy!
It looks like the next release will have binning and BJT.
al.