Note on Physical Constants

Compact models and simulators use specific values for such physical constants as the magnitude of the electronic charge, Q, and Boltzmann's constant Kb. Slight differences in these values will give rise to different simulation results for ostensibly the same model between different simulators. These differences can be actual differences in value, or can be because different numbers of digits of precision were used in different simulations. The latter problem also arises when models use an explicitly defined value for pi, with a limited number of digits in the definition, rather than calculating pi via something like 4*atan2(1,1).

To try to avoid differences between different implementations, VBIC explicitly has values defined for some physical constants. However, it appears that some implementations have substituted simulator specific values for the physical constants. This has lead to differences in VBIC simulation results between different simulators. The differences are very small, because the physical constants generally differ only in the 6th decimal place. However they do exist, so in trying to "exactly" match VBIC results between simulators, Verilog-A, and the stand-alone solver these differences in physical constants need to be taken into account.

There can be some dispute about the "real" value for a physical constant. Given that the best estimate for these constants has changed, and continues to change, over time, one reason for the difference between different simulators is that once a value is used in a simulator it is not possible to update it. So simulators implemented at different times that use the "best" values known at the time of implementation for physical constants can have different values. This sounds silly, however it is mandatory for backward compatibility. Parameter sets for particular models are extracted based on simulation results for a specific version of the model and simulator, and if at some later revision of the simulator the physical constants are changed, then simulations with previously verified, official sets of model parameters will change. This cannot happen, you cannot retroactively have all parameter sets for all technologies tweaked to be valid for specific versions of a simulator. (The changes in "best" values for physical constants over time is very small, so you would not in practice do this, but it is the principal that counts).

So here's the interesting part: I looked at what values are used for some constants in some simulators, models, and languages. These are tabulated below.

Source TABS (0C in K) Q Kb
VBIC 273.15 1.6021890e-19 1.3806620e-23
BSIM 273.15 1.6021900e-19 1.3806226e-23
Spice2G6 273.15 1.6021918e-19 1.3806226e-23
Sze 273.15 1.6021800e-19 1.3806600e-23
NIST 273.15 1.6021765e-19 1.3806503e-23

Note that the Spice2G6 values are used in many simulators, and also are the values used in Verilog-A. The VBIC values are those that were used in the ADVICE simulator at AT&T Bell Laboratories in the late 1980's, this is where VBIC originated.

An interesting and somewhat ironic observation on the above values is that despite some disagreements between various simulators and models, they all differ from the present "best" values provided by NIST! See the NIST web site for the latest information, and the uncertainty to which the values are known.

A similar situation exists for the value of the silicon band-gap as a function of temperature. Many versions of SPICE have the following:


However, the values in this expression come from the 1st edition of Sze's book. In the second edition the values were updated to


These improved values were not (and as noted above were really not able to be) implemented in some simulators. In some simulators the numbers in the above expressions are declared as model parameters, rather than being simulator wide, unchangeable constants, in which case updates to the "best" values for the parameters can be implemented via .model cards.

Bottom line: be aware that physical constants and parameters can differ between different simulators, and between implementations of the same model in different simulators, hence you can get different results for the "same" model between different simulators.