BSIMSOI-4.5 NOTES
S. R. Whiteley 4/19/14


1.  The internal source and drain nodes are not collapsed away by
default as they are in 4.4.  Further, there appears to be no way of
forcing collapse of these nodes by giving external parameters.

Instead of being collapsed, the internal source and drain nodes are by
default connected to the external source and drain nodes with a 1
milli-ohm resistance.

This is very, very bad for two reasons:
  1)  There are extra matrix rows and columns used for the internal
      nodes, which is inefficient in both memory and computationally.

  2)  The large conductance makes the resulting matrix non-solvable
      with standard double-precision arithmetic in common circuits,
      including the CMC QA tests.  Actually, in the QA tests, a
      solution is found, but it is highly inaccurate.

      Simulators that don't use extended-precision math can't use this
      model, without explicitly providing drain and source resistance
      values large enough to avoid the numerical problems.  One can
      estimate gmax = gmin*1e16*reltol.
      
This problem can be fixed trivially.  In the source code block shown
below, replace the hard-coded 1e3 with 0.0.  This will cause the "<+
0.0" contribution branch to be chosen in lines 7628 and 7644, which
will cause any reasonable Verilog processor to collapse the nodes, or
at least tie them together with a "voltage source" which though costs
a branch element, does not cause conditioning problems.

Line 3303:
        /* process source/drain series resistance */
        B4SOIdrainResistance = B4SOIsheetResistance * B4SOIdrainSquares;
        if (B4SOIdrainResistance > 0.0)
            B4SOIdrainConductance = 1.0 / B4SOIdrainResistance;
        else
//            B4SOIdrainConductance = 1.0e3;
            B4SOIdrainConductance = 0.0;
    
        B4SOIsourceResistance = B4SOIsheetResistance * B4SOIsourceSquares;
        if (B4SOIsourceResistance > 0.0)
            B4SOIsourceConductance = 1.0 / B4SOIsourceResistance;
        else
//            B4SOIsourceConductance = 1.0e3;
            B4SOIsourceConductance = 0.0;


2.  I get a consistent 13.3% difference in the dcSweep QA results,
when the solution is accurate (i.e, when using extended precision, or
after the modification above).  I see that the QA reference results
for these tests are different from the 4.4 results.  The output from my
dcSweep runs matches the 4.4 results very closely.

I conclude that the QA reference results for dcSweep01, dcSweep02, and
dcSweep03 provided for the bsimsoi-4.5 model are incorrect.

The reference results differ only in the lowest currents reported. 
This is consistent with numerical problems described above.  However,
it also differs from my 64-bit results.  If using Hspice, which uses
extended precision, then one would not expect this error.  I have not
yet been able to duplicate the CMC QA "reference" results for these
tests by any means.

All other tests match pretty well.


3.  General comment/question.

With the BSIM models, including bsim4.8.0, bsim6.0/1, bsimsoi-44
(Verilog and C) and bsimsoi-4.5, I can get QA results very close to
the QA reference results, but rarely exact.

With some other models (mextram bjt, psp102 and psp103 mos), I get
EXACT results for every single test.

There seems to be a difference in the way the reference results are
prepared.

There is a note with the bsimsoi-4.5 QA package that indicates that
Hspice was used to obtain the data, which is good.  I wish that others
would provide similar information.  In general, I don't know, for
example, if the reference results are obtained from a simulator, or
generated from the model equations with Matlab or something equivalent.
This latter approach would be preferred, but knowing which simulator
would be useful, too.

For example, simulators like Hspice may use floats for output data
storage to conserve memory.  The would explain why there are tiny
differences in comparing to data that are double precision.  I don't
know if Hspice does this, but it would be consistent with
observations.  I also don't really know if Hspice uses
extended-precision math, however the results suggest that it does.

So, my working theory on the origin of the residual differences (also
seen with the hicum bjt model) is double-to-float truncation in
Hspice.  If this is true, Hspice results may not be the best choice
for QA reference data.




