Screenshots

About
SpiceOpus
SpiceOpus is a circuit simulator with optimisation utilities. It is a
recompilation of the original Berkeley's source code for
Windows 95/98/NT and
Linux operating systems. Georgia Tech Research Institute's
XSpice mixed-mode simulator was added to the Berkeley code. The XSpice code
model feature was enhanced so that code models can be loaded from dll/so files
(.cm files). The simulator includes an interpreted programming language called
Nutmeg, which allows interactive Spice sessions. Numerous memory
leaks were fixed. The graphical part of the program was rewritten but the
original syntax of the
plot and
iplot commands was preserved, enabling any script compatibility with
other Spice compilations. We are constantly updating
SpiceOpus with new semiconductor models and we are working very hard
to make it as stable as possible.
All the above however is just the foundation for our actual research
work. We are interested in professional applications of different optimization
methods in circuit simulation. Unfortunately there is a host of small memory
leaks in any "blood relative" of Berkeley's Spice, which are usually harmless
since the operating system always reclaims allocated memory after an
application closes. Serious optimization however needs hundred thousands of
continuous simulation runs without choking the memory management system.
Therefore we had to develop a very stable simulator before we could even think
of optimization.
Our main scientific input to
SpiceOpus is an optimization tool including ten different
optimization approaches. The user can choose between steepest descent,
Newton's method, Davidon-Fletcher-Powell's method, random search, grid search,
search along coordinate axes, Powell's method, Hooke-Jeeves's method,
constrained simplex, simple genetic algorithm and evaluation of cost function
across whole parameter space. Each method has its own set of parameters and
they can be combined via
Nutmeg scripts. In addition to all these options the users has to
identify suitable optimization parameters including some sensible constrains,
he has to express his design criterions through a scalar cost function, which
will be eventually minimized by the selected method. The whole optimization
procedure is not exactly something a novice would want to tackle. It even
takes experts some time (and nerves) before the optmization yields any useful
results.
SpiceOpus saw its first free release in December 1999 (version 1.0).
Very quickly a large user community developed, showering us with valuable
feedback from all sorts problems. As you can see from the release history
below we have been very busy. The optimization tool of
SpiceOpus has caught quite a lot of attention from professional
designers requiring more demanding individual support. In spring 2001 we
therefore decided to fork a professional version
SpiceOpus pro 2.1, to be released and supported by
SimShelf International and keep our free
release
SpiceOpus light 2.1 in the research domain. The light
version has no optimization tool, a limited circuit size to 300 nodes and no
user support. Other than that, both versions are functionally identical and
will benefit from a joined future development.
The light version should satisfy everybody involved in teaching/learning as
well as companies doing board level design. Chip designers with some healthy
optimization ambitions and large scale board developers on the other hand
should refer to
SimShelf International for the
professional version including sound customer service.
Release history
- Version 2.25
(date built: 5. Dec 2006)
- Steady state response analysis in transient domain was implemented as
ssse command. Shooting method with extrapolation is
used.
- Option
integdebug added. When specified messages about trapezoidal
integration method behaviour are printed.
- Commands
spec and
fourier are consistent now. In previous versions the phase was
calculated differently.
- Syntax of
Nutmeg
linearize command supplemented. The linearising step has to be
given. New syntax is:
linearize step
-
Nutmeg syntax for working with variables
($ usage) improved.
- Read only variable
workdir added. It contains absolute path to the current working
directory.
- Version 2.24
(date built: 5. Jan 2006)
- Non-linear capacitances are introduced and therefore capacitance syntax is
extended. If capacitance expression is given then
ctype parameter determines capacitance charge calculation. If capacitance
expression is a self-referential function (only voltage
v
(positive_node,
negative_node) across the capacitor, whose capacitance is determined, is
used as function argument) then set
ctype = 1. Default value of
ctype parameter is zero, which ensures proper charge calculation in case
of non-self-referential capacitance expression. New syntax is:
c<name> <positive_node> <negative_node>
{[<model_name>] [[c[apacitance]=]{[<value>]
[<expression>]}]} [ctype=<value>]
[ic=<value>] [l=<value>] [w=<value>]
[m=<value>]
<> ... user defined field
[] ... optional field
{} ... at least one filed must be specified
- Variable
fullgarbagecollect added. When it is defined (by
set command) deleting of internal temporary vectors takes place in all
plots rather than just in current plot. Note that
optimize command automatically sets this variable when enter into
optimisation loop and restores its state at leave.
- Syntax
@inst:@subckt[param] added for accessing all instances of a
specified subcircuit type.
-
nolift property added to independent voltage and current source models.
The default value is zero. If
nolift property is set then particular independent source remains
unaffected by
ramptime option and source stepping/lifting convergence aids. It
behaves as defined by its transient definition in time domain
(ramptime option and source lifting). In dc domain it is constant dc
source as defined in its dc definition (source stepping). New syntax for
independent voltage source is:
v<name> <positive_node> <negative_node> [dc_definition]
[ac_definition]
[transient_definition] distorsion_definition
[nolift=<value>] [m=<value>]
dc_definition = [dc= | dc] <value>
ac_definition = {ac[mag]= | ac[mag]} <value> [[acphase= | acphase]
<value>]
transient_definition = {pulse <u1> <u2> [<td>
[<tr> [<tf> [<tpw> [<tper>]]]]] |
sin[e] <u0> <ua> [<f> [<td>
[<kd>]]] |
exp <u1> <u2> [<d1> [<t1>
[<td2> [<t2>]]]] |
pwl <t1> <u1> [<t2> <u2> [ ...
]] |
sffm <u0> <ua> [<f> [<mi>
[<fs>]]]}
distorsion_definition = [{distof1= | distof1} <value>
[<value>]]
[{distof2= | distof2} <value> [<value>]]
<> ... user defined field
[] ... optional field
{} ... at least one filed must be specified Same goes for
independent current source.
-
Nutmeg variables
rndinit,
gausstruncate and functions
rndunif(),
rndgauss() added for generating random real numbers.
- Option scale implemented for capacitor model (wscaled
= w * scale and lscaled = l *
scale).
- Nutmeg command netlist added
for obtaining various netlist information.
- Simulated annealing optimisation method was implemented.
- Circuit reparsing
(netclass rebuild command) is
done only if active (selected) and currently parsed netclasses do not match.
Otherwise reparsing is skipped. To force netclass rebuild regardless
netclass matching set
forcerebuild variable. Also a
Nutmeg command
netclass uptodate was added to
explicitly obtain the information if reparsing is needed or not.
- Options xmu, xmumult and trapratio were added. They are
all used only in second order trapezoidal integration algorithm, which can
generate numerical oscillations. Option xmu provides smooth transition
from the second order (xmu = 0.5) back to the first order (xmu = 0)
(Euler) algorithm. The default value is 0.5. If numerical oscillations are
detected then multiplying with xmumult (default value is 0.8) decreases
xmu. The level of detection of numerical oscillations can be set by
trapratio option (default value is 10).
- Option resmin added. It specifies minimum resistance value for
resistors. This is needed in some cases when extremely small resistance
numerically overcomes all other terms in both nodal equations for terminal nodes,
which could further lead to non-accurate solutions. The resmin value for
resistance is enforced when resistance / multiply factor <
resmin.
- Nutmeg command backup added for
saving and retrieving various internal data structures.
- Nutmeg command test added for
obtaining file properties.
- Current explosion model parameter expli implemented for non-geometric
(level = 1) and geometric (level = 3) diode model. The
id(vd) exponential PN junction characteristic
above the explosion current (id > expli) becomes linear,
with the slope determined at the explosion point. This speeds up simulation and
improves convergence. The default value equals to 1e15 [A/area]. If
explosion point is in reverse bias (vd < 0) then linearisation
is not performed.
- Version 2.22
(date built: 2. November 2004)
- Variable
quiet implemented. If it is set then warning and note messages are not
printed (currently does not work for all messages yet).
- Model parameters noiflag (enable flicker and thermal noise level
selector), flklev (flicker noise level) and thmlev (thermal noise
level) added for bsim3v3 (level = 53) MOSFET model. They implement some
additional non-Berkeley flicker and thermal noise equations, which are used only
if nlev parameter is not specified. Non-Berkeley flicker noise equations
are used if flklev is given and noiflag is not explicitly set to
zero. Same goes for thermal noise. Non-Berkeley thermal noise equations are used
if thmlev is given and noiflag is not explicitly set to zero. As
mentioned before all three parameters are ignored in case nlev is
specified. Parameter flklev can have values 0, 1, 2 or 3, parameter
thmlev 0, 1 or 2 and parameter noiflag 0 or 1.
- Model parameters nds and vnds are used to calculate current of
reverse biased drain-bulk and source-bulk diodes in bsim3v3 (level = 53)
MOSFET model.
- Area calculation method implemented for bsim3v3 (level = 53) MOSFET
model. Model parameters acm, calcacm, ldif, hdif,
rlev, alev, diolev and dcaplev added for this
purpose.
- Model parameters tlev and tlevc added for bsim3v3 (level
= 53) MOSFET model. They implement some additional non-Berkeley temperature
dependencies of energy gap, bulk diode saturation currents and capacitances,
surface potential and threshold voltage. Additional model parameters were also
needed for this purpose:
eg (1.16 for tlev=2, 1.11 otherwise) energy gap for pn junction diode
gap1 (7.02e-4) first bandgap correction factor
gap2 (1108) second bandgap correction factor
phi (0.576036) surface potential
pta (alias for tpb) (0) temperature coefficient of pb
ptp (alias for tpbsw) (0) temperature coefficient of pbsw
ptc (0) fermi potential phi temperature coefficient
cta (alias for tcj) (0) temperature coefficient of cj
ctp (alias for tcjsw) (0) temperature coefficient of cjsw
tcv (0) threshold voltage temperature coefficient
- Model parameter fc (forward-bias depletion capacitance coefficient for
bulk diodes) added for bsim3v3 (level = 53) MOSFET model.
- Model parameter vfbflag added for bsim3v3 (level = 53) MOSFET
model. It selects threshold voltage equation when capmod = 0.
- Version 2.21
(date built: 6. May 2004)
- Procedures were introduced into Nutmeg language by
script command.
- Command destroyto was added for
removing all plots created after plot passed to the command as an argument.
- Iteration count and dvdt timestep algorithms added. Relevant options
lvltim, rmax, rmin, ft, fs, itl3,
slopetol, absvar, relvar, relq, ltereltol,
lteabstol and newtrunc added.
Option lvltim selects timestep control algorithm. Iteration count is
selected when lvltim = 0, dvdt when lvltim = 1 (default) and
Berkeley's implementation of local truncation error when lvltim = 2.
when local truncation error method (lvltim = 2) is used.
Options rmax and rmin multiplied by user given timestep define the
largest and the smallest allowed timesteps. Options fs and ft
define fraction by which timestep is multiplied in first iteration and in case of
non-convergence.
Option itl3 is used in iteration count timestep algorithm. If less than
itl3 iterations are needed for calculating a particular time point then
timestep is doubled.
Options slopetol, absvar and relvar are used in dvdt
timestep algorithm and define maximum slope change and absolute and relative
solution change.
Options relq, ltereltol, lteabstol and newtrunc are
used in local truncation error timestep algorithm. They define relative charge
tolerance, relative and absolute current tolerance and usage of simplified
algorithm for local truncation error calculation.
- Option nopredictor added. It defines if predictor corrector algorithm
is used or not.
- Option noconviter added. It skips convergence double checking in
Newton-Raphson algorithm. By default this option is not set and convergence is
double checked. This means that additional iterations are performed to check if
the resulting solution is stable.
- Option dcap added. It defines depletion capacitance equations for
nongeometric and geometric junction diodes (levels 1 and 3) and bipolar junction
transistors. At the moment only default depletion capacitance equations are
implemented (dcap = 1).
- Option gmindc added. It defines minimum conductance placed in parallel
with all pn junctions in dc domain.
- Model parameters nlev (non-Berkeley noise equation selector) and
gdsnoi (channel thermal noise coefficient) added for bsim3v3 (level
= 53) MOSFET model. Parameter nlev can have values 0, 1, 2 or 3. If it is
specified then non-Berkeley noise model is used for calculating flicker and
channel thermal noise otherwise Berkeley model (default) is used. Parameter
gdsnoi is used only when nlev = 3.
- Instance properties idrain, idraincplx, igate,
igatecplx, isource, isourcecplx, ibulk and
ibulkcplx added for bsim3v3 MOSFET model (level=53). Terminal
currents of MOSFET device are stored there. A terminal current is considered as
positive if it flows into the device. The device properties always hold only
their last values. If one wants for instance to save drain current of the device
m1 for all points of dc analysis then save command should be
used (e.g. save @m1[idrain]). The drain current values at all calculated
points will be saved as a vector in the results plot. The properties with
cplx suffix are complex numbers. They hold complex values of terminal
currents for ac analysis. For other analyses their imaginary part is zero.
On the other hand the properties without cplx suffix are real numbers. For
ac analysis they hold absolute values of terminal currents.
- timer() and
clock() functions added for measuring CPU and
absolute time.
- Options nofloatnodescheck and noautoconv added. If
nofloatnodescheck option is defined then circuit topology check for
floating nodes during circuit setup is skipped. Floating nodes have no pass to
ground in dc domain. For instance nodes connected only to capacitances are
floating. If noautoconv option is defined then automatic option setting
for achieving convergence during operation point calculation is not performed.
Both options are not defined by default. Circuit topology check and automatic
option setting can take some time. Therefore both options are automatically
switched on during the optimisation.
- Instance parameter check added to bsim3v3 MOSFET model
(level=53). If its value is 1 then instance parameter check is performed.
To skip instance parameter check define check=0. Instance parameter check
is skipped regardless to check parameter if model parameter
check=0. Default value for instance and model check parameters for
all instances and models is set by definstcheck and defmodcheck
options, respectively. The default value for both options is zero.
- cshunt option added. If it is greater than zero then cshunt
capacitances from each node to ground are added into the circuit. The default
value is zero.
- Cmin stepping added to convergence aids. First source lifting without
cmin capacitances is performed. If no convergence is reached then
cmin capacitances are added from each node to ground and source lifting is
performed again. If still no convergence is reached then i*cmin
capacitances are added and source lifting is performed in the following steps.
i means step number. Cmin stepping can be controlled by noinitsrcl,
cmin and cminsteps options. If noinitsrcl is defined then
initial source lifting without cmin capacitances is skipped. cmin
and cminsteps define the value of capacitances and number of steps,
respectively. noinitsrcl is not defined by default and default values for
cmin and cminsteps are 1e-12 and 10.
- Solution limiting added into convergence aids for operating point analysis. It
means that only changes inside tolerances are allowed in each iteration. Solution
limiting is used when we know that starting point for numerical iterations is
near final solution but still no convergence is achieved. Such cases arise in
gmin and source stepping when the step becomes small and at the end of source
lifting if operating point analysis does not converge in normal way. Solution
limiting can be controlled by sollim and sollimiter options.
sollim defines allowed change and sollimiter defines number of
iterations when numerical iterations are done in solution limiting mode. The
default value for both options is 10. Allowed change of right hand side component
value is determined by:
if(abs(new - old) > tolerance) new = old +/- tolerance / sollim
Number of iterations in solution limiting mode is:
sollimiter * itl1
- File handling Nutmeg commands
copy,
move and
remove added.
- Options matrixcheck and voltagelimit implemented. If
matrixcheck option is set then the matrix and right hand side entries are
checked and corrected (limited) in each iteration after every circuit load. The
matrixcheck option helps to discover and solve convergence problems when
infinite or indeterminate values appear in the matrix or right hand side. It is
not set by default. The voltagelimit option specifies the highest allowed
model (vds, pn junction etc. voltages) voltage during the iterations. It has to
be greater than zero otherwise it is ignored. Its default value is 1e30.
- Options nsfactor and nssteps added for soft nodesetting. The
nodesets are added into the matrix with the nsfactor and are then
gradually omitted in nssteps successful iterations. The default values are
nsfactor=1e10 and nssteps=1.
- Options opdebug, gminpriority, srcspriority and
srclpriority added. Option opdebug turns message printing about
convergence aids on during the operation point analysis. The option is not set by
default. Priority options defines an order in which the convergence aid
algorithms will be called. The default values are: gminpriority=1,
srcspriority=2 and srclpriority=3.
- Plot stack. Added the pushplot,
popplot, and plotstack commands. Added __topstack and
__topplot plot identifiers.
- Some additional diode model parameters mostly dealing with periphery
(sidewall) effects were implemented. Default values are in braces.
jsw (0) sidewall saturation current per unit junction periphery
cj (alias for cjo) (0) zero-bias junction capacitance per unit junction bottomwall area
cjsw (0) zero-bias junction capacitance per unit junction periphery
php (vj) periphery junction contact potential
mjsw (0.33) periphery junction grading coefficient
fcs (0.5) coefficient for the forward-bias depletion periphery capacitance formula
- Instance parameter pj (junction periphery) was implemented for diode.
It is scaled in geometric (level=3) junction diode model
(pjscaled = pj * scale). The default value for
pj parameter is zero.
- Extended syntax for inductance instances. New syntax is:
l<name> <positive_node> <negative_node> [l=|inductance=]<value> [ic=<value>] [m=<value>]
<> ... user defined field
[] ... optional field
- Options defpd, defps, defnrd and defnrs added to
define default values for MOSFET drain and source perimeter and drain and source
number of squares. The default value for all four options is zero. Options are
taken into account for MOSFET levels 1 (mos1), 2 (mos2), 3 (mos3), 6 (mos6), 44
(ekv) and 53 (bsim3v3).
- Middle option added to dc analysis.
- Altering a subcircuit parameter for all instances of a subcircuit. See the @@ syntax for subcircuits.
- Nutmeg command cursor enhanced with
multiple crossing capability and slope type.
- Version 2.2
(date built: 15. May 2003)
- Command line option
-c added. Under Linux it starts
SpiceOpus in console mode. Under Windows
SpiceOpus window is not opened and it runs as a hidden application that
can be seen only in the task manager. When this option is given, plotting, GUI
functions, and the command line history using the cursor up/down keys are
disabled.
- Command line option
-pl <path> added. It overrides the library directory setting read
from
OPUSHOME environment variable (library directory =
OPUSHOME/lib), or, if
OPUSHOME is not specified,
SPICE_LIB_DIR variable (library directory =
SPICE_LIB_DIR). Note that
scripts subdirectory in library directory contains
spinit spice init script file, which is sourced at startup.
- Command line option
-pe <path> added. It overrides the executable directory setting
read from
OPUSHOME environment variable (executable directory =
OPUSHOME/bin), or, if
OPUSHOME is not specified,
SPICE_EXEC_DIR variable (executable directory =
SPICE_EXEC_DIR).
- Command line option
-pk <name> added (non-light version only). It overrides the lock
file name setting read from
SPICE_LOCK_NAME environment variable (lock file name =
SPICE_LOCK_NAME). If
SPICE_LOCK_NAME is not specified then the default name
lock is used. The lock file is searched in the following directories:
- current directory,
- library directory,
-
scripts subdirectory in library directory,
- executable directory.
- Command line option
-gf <number> added. It overrides the
SpiceOpus default font size for the terminal window (10).
- Option pziter added to set number of iterations in pole-zero
analysis.
- Abbreviation .inc for .include is now accepted. If the filename
in .include line is embraced with single quotes then the quotes are
ignored. Aliases .macro and .eom for .subckt and
.ends are also accepted. .protect and .unprotect directives
known in other Spices are ignored since they are irrelevant in SpiceOpus.
Inline comments beginning with character $ are allowed in non-command
lines. The text after the $, including $ character, is considered
as a comment.
- Option scale implemented for resistor, geometric junction diode and
bsim3v3 MOSFET models.
Resistor model: |
wscaled = w * scale
lscaled = l * scale |
Geometric junction diode model: |
areascaled = area * scale2 |
MOSFET model:
(only bsim3v3) |
wscaled = w * scale
lscaled = l * scale
pdscaled = pd * scale
psscaled = ps * scale
adscaled = ad * scale2
asscaled = as * scale2 |
Note that option scale is not implemented for other models yet.
- The gmin implementation across the bulk diodes for MOS1,
MOS2, MOS3, MOS6 and bsim3v3 MOSFET models fixed.
- Nutmeg commands copyplot,
scktreparse and
scktparams added.
- Source lifting and improved source and gmin stepping algorithms implemented to
aid convergence.
- Option discrete_space added to optimize options command to make
optimisation parameter space discrete. Grid for each optimisation parameter is
defined by incremental step. It is given by increment value in parameter
declaration, that is in optimize parameter command. Therefore also
increment item was added to optimize parameter command.
- Model parameter check added to bsim3v3 MOSFET model (level=53).
The default value is 1, which means that model parameter check is performed. To
skip model parameter check define check=0.
- Keyword delete added to
nodeset and
ic commands for removing all nodesets
and initial conditions.
- Geometric junction diode model added as level=3. Diode's length and
width can be specified with instance parameters w and l. Area is
then calculated by area = w * l.
- UFET and UFSOI (University of Florida) MOSFET models added as level=7 and 58.
- HFET model developed by Micheal Shur and Trond Ytterdal was added. It is specified as level=2 in .model statement for MESFET device.
- STAG (Southampton Thermal Analogue) partially depleted SOI MOSFET model added as level=57. Versions 2.1 and 2.6 are available and can be selected through version model parameter.
- Bug when writing and loading output raw files in binary mode was fixed.
- Prefix x added as a synonym for meg = 1e6.
- Instance parameter m (number of devices in parallel) added for all available device models and all available levels of a particular model included in SpiceOpus. Default value is always: m=1.
- Different versions of bsim4 MOSFET device model was added for compatibility reasons. It is specified as level=60 in .model statement. Level 8 is therefore cancelled. Different versions (4.0, 4.1, 4.2 or 4.2.1) can be chosen with version flag in .model statement. The default version is 4.2.1 which means bsim4v4.2.1 model.
- Different versions of bsim3 version 3 MOSFET device model was added for compatibility reasons. It is specified as level=53 in .model statement. Level 7 is therefore cancelled. Different versions (3.0, 3.1, 3.2, 3.2.2, 3.2.3 or 3.2.4) can be chosen with version flag in .model statement. The default version is 3.2.4 which means bsim3v3.2.4 model.
- Different versions of bsim3soi version 2 MOSFET device model were added for compatibility reasons. They are specified as level=56 in .model statement. Levels 9, 10 and 11 are therefore cancelled. Different modes (partially, dynamically and fully depleted mode) are available and can be selected by soimod model parameter. soimod equals 1, 2 or 3 for partially, dynamically and fully depleted mode respectively. Versions 2.0 and 2.1 are available for dynamically and fully depleted modes. For partially depleted mode versions 2.0, 2.0.1, 2.1, 2.2, 2.2.1, 2.2.2 and 2.2.3 are included. A particular version can be chosen by version model parameter. The default value for soimod = 2, and the default version is 2.1 for dynamically and fully depleted modes and 2.2.3 for partially depleted mode.
- Automatic model selection (binning) for bsim3v3 MOSFET device model.
- Graphical user interface gui command added. Its syntax is gui
<command>. Therefore the exact knowledge of syntax for a particular
Nutmeg command is no longer needed. For now gui is available only
with commands show and optimize.
- To modify vectors in const plot from another plot, user has to give complete vector name. Example: let const.vector_name = ....
- Option centering added to the optimisation options. It enables optimisation procedure considering parameter tolerances. Therefore abstol and reltol items were added to optimize parameter command.
- Procedure cost_profile added as an optimisation method. The procedure enables a view into cost function behaviour at the current circuit parameter values.
- The bsim3soi version 1 MOSFET device model was added for compatibility reasons. It is specified as level=55 in .model statement. Different versions (1.0, 1.1, 1.2 or 1.3) can be chosen with version flag in .model statement. The default version is 1.3 which means bsim3soiv1.3 model.
- Added area() and
integrate() functions.
- Extended syntax for resistance and capacitance instances. For resistances it
introduces temperature coefficients tc1 and tc2 as instance
parameters which overwrite temperature coefficients given in resistance model.
New syntax is:
r<name> <positive_node> <negative_node> {[<model_name>]
[[r[esistance]=]<value>]}
[[tc[1]=]<value>] [[tc2=]<value>] [l=<value>]
[w=<value>] [temp=<value>] [m=<value>]
c<name> <positive_node> <negative_node> {[<model_name>]
[[c[apacitance]=]<value>]}
[ic=<value>] [l=<value>] [w=<value>] [m=<value>]
<> ... user defined field
[] ... optional field
{} ... at least one filed must be specified
- Some additional parameters were implemented into the following models (default
values are in braces):
resistance model
res (0) default resistance
diode model
mj (alias for m) (0.5) area junction grading coefficient
MOS1 model
wd (0) lateral diffusion into channel width from bulk
xl (0) length bias accounts for masking and etching effects
xw (0) width bias accounts for masking and etching effects
delvto (alias for delvt0) (0) zero-bias treshold voltage shift
n (1) emission coefficient
bex (-1.5) low field mobility temperature exponent
MOS2 model
wd (0) lateral diffusion into channel width from bulk
xl (0) length bias accounts for masking and etching effects
xw (0) width bias accounts for masking and etching effects
delvto (alias for delvt0) (0) zero-bias treshold voltage shift
n (1) emission coefficient
utra (0) transverse field coefficient
bex (-1.5) low field mobility temperature exponent
MOS3 model
wd (0) lateral diffusion into channel width from bulk
xl (0) length bias accounts for masking and etching effects
xw (0) width bias accounts for masking and etching effects
delvto (alias for delvt0) (0) zero-bias treshold voltage shift
n (1) emission coefficient
bex (-1.5) low field mobility temperature exponent
bsim3v2 model
ld (alias for dl) (0) channel length reduction in meters
wd (alias for dw) (0) channel width reduction in meters
php (alias for pbsw) (1) source drain side junction capacitance built in potential
xl (0) channel length reduction in meters due to masking and etching effects
xw (0) channel width reduction in meters due to masking and etching effects
lmlt (1) length shrink factor
wmlt (1) diffusion layer and width shrink factor
rs (0) source ohmic resistance
rsc (0) additional source resistance due to contact resistance
rd (0) drain ohmic resistance
rdc (0) additional drain resistance due to contact resistance
jsw (0) sidewall bulk junction saturation current
is (1e-14) bulk junction saturation current
n (1) emission coefficient
cbd (0) zero bias bulk-drain junction capacitance
cbs (0) zero bias bulk-source junction capacitance
tt (0) transit time
bsim3v3 model
npeak (alias for nch) (1.7e17) channel doping concentration
n (alias for nj) (1) source/drain junction emission coefficient
php (alias for pbsw) (1) source/drain sidewall junction capacitance built in potential
ld (alias for lint) (0) length reduction parameter
wd (alias for wint) (0) width reduction parameter
xl (0) channel length reduction in meters due to masking and etching effects
xw (0) channel width reduction in meters due to masking and etching effects
lmlt (1) length shrink factor
wmlt (1) diffusion layer and width shrink factor
del (0) channel length reduction
rs (0) source ohmic resistance
rsc (0) additional source resistance due to contact resistance
rd (0) drain ohmic resistance
rdc (0) additional drain resistance due to contact resistance
is (1e-14) bulk junction saturation current
cbd (0) zero bias bulk-drain junction capacitance
cbs (0) zero bias bulk-source junction capacitance
tt (0) transit time
- Variable nopolyfitcheck added. If the variable is set then checking Gauss-Jordan elimination results is skipped when calculating the interpolating polynomial. Fitting curves which generates very large polynomial coefficients lead to numerical errors and interpolation therefore fails. To get at least inaccurate results nopolyfitcheck can be used.
- subs option added into BJT model for modelling lateral transistor geometry. subs = 1 defines vertical transistor and subs = -1 defines lateral transistor respectively. For npn transistors vertical geometry is default, while lateral geometry is default for pnp transistors. Vertical and lateral geometry differ in connection of parasite substrate capacitance to collector (vertical - there is Csc) or base (lateral - there is Cbs).
- Version 2.1
(date built: 4. October 2001)
- nmirror option added into constrained simplex optimisation method. Option defines number of points mirrored in each iteration.
- stop_cost option added into optimisation procedure. Option can be set/unset with optimize options command. The optimisation procedure is stopped if cost function value is lower than stop_cost value.
- Instance parameter m (number of devices in parallel) added for bsim3v3 MOSFET model (level=7). Default value: m=1.
- The bsim3 version 2 MOSFET device model was added for compatibility reasons. It is specified as level=47 in .model statement.
- bsim4 device model (level=8) upgraded to version 4.2.0.
- Changed syntax for optimize parameter command.
- Fixed a bug when the expression given for the voltage of non-linear dependent source is constant. In this case non-linear dependent source becomes an independent voltage source.
- Normal (gaussian) distribution of parameter values added for random search (Monte Carlo optimisation method).
- Added the nodeset and ic commands for dynamically setting nodesets and initial conditions.
- Instance parameter m (number of parallel instances) added for resistors, capacitances, inductances, diodes, bipolar transistors, JFETs (level=1), MESFETs and MOSFETs (level=1). It defines number of devices in parallel. Default value: m=1.
- Allocated memory control. Exact number of allocated bytes can be obtained by rusage command.
- Syntax
$&vector_name[index1,index2] fixed. Syntax
$& is now obsolete. Use
{vector_name[index1,index2]} instead.
- Temperature dependency added for JFET level=1 model (parameters bex and betatce).
- Generation recombination noise source added for JFET level=1 model (parameters kgr, tau and ea).
- Smarter autoscale for plot, better labeling.
- Nutmeg function unwrap()
added for phase unwrapping.
- Added arithmetic substitution to
Nutmeg (by using {expression}).
- Closed leaks asociated with temporary storage and vector or parse tree
parameters in Spice3 devices.
- Rewrite of subcircuit expansion and error messaging for the netlist parser.
- Added subcircuit parameter passing.
- Improved Nutmeg listing function,
provides many information on subcircuits.
- Added plot command keywords quickappend
(doesn't autoscale at append) and autoscale
(manual triggering of autoscale).
- Memory leak tracking added. To turn it on, type
set memtrack. All allocations are tracked starting from the moment you
turn it on. If memory tracking is on and you leave the program by typing
quit, the unreleased memory information is dumped into a file named
memdump.dbg in the current working directory. Send this file to the
developers if your spice seems to leak memory (if after doing
unalias *,
undefine *,
destroy all,
optimize reset and
delcirc all, calling
rusage shows that more than 200k-300k memory is allocated). Note that
in memory tracking mode
SpiceOpus runs about 2x slower and the actual memory consumption
increases dramatically due to internal memory tracker structures. Memory
allocated by the memory tracker for its internal purposes is not tracked. When
the memory tracker is off, it doesn't have an impact on performance.
- The simulator is now up to 50% faster and Nutmeg runs up to 25%
faster.
- Smarter file lookup for .include and .lib.
- Added the .netclass and .endn keywords to the netlist parser. By means of netclasses
failure mode analysis and cornerpoint analysis can be performed.
- Added the netclass command to
Nutmeg for selecting the type of netlist.
- Subcircuit parameters can be accessed by using @name[param]. Subcircuit parameters can also
be altered (let). The alter command doesn't work on subcircuit parameters.
- Closed leaks in the netlist parse tree parser (B sources).
- Added the optimize setparams command for setting the parameter values back to the
values stored in the optimizer after a netclass rebuild is called.
- Version 2.03
(date built: 12. October 2000)
- Fixed interpolate() function.
- Fixed crash when destroy all was called after multiple source commands.
- Added the nameplot command for renaming a plot.
- Added the support for keywords next and previous
for the setplot command.
- Added min(), max() and
sum() functions to Nutmeg.
- Fixed analysis clause in optimize. Loops (while, ...) now
work with optimize.
- optimize parameter has two new options now: log and lin. log sets logarithmic
scale for a parameter. It is reccomended for parameters with wide ranges
(let's say 1e-6 to 1e2). In most cases it improves convergence of the
optimisation algorithm. lin sets linear scale as in older versions.
- Elitism was added to the genetic optimisation algorithm (optimize method ... elitism ...).
- 'set badcktfree' now makes the simulator release the circuit if it contains any
errors.
- 'set badcktstop' prevents the simulator from running the commands in the .control
block on loading the circuit if the circuit contains any errors.
- Fixed DC sweep so it doesn't give convergence problem messages when LIN,
DEC and OCT sweep is used.
- Plot name matching in expressions (plot.vector) now looks for an exact match and not
prefix match (i.e. dc doesn't match dc1).
- Fixed the way plots get enumerated. Previously two tran and two ac analyses produced
plots tran1, tran2, ac2 and ac3. Now plots tran1, tran2, ac1, ac2 are produced. Actually
the largest number found after plot name plus 1 is used as the postfix number.
- Complete rewrite of the file sourcing. Added
.lib clause support (HSpice). Added hierarchical
error reporting during parse.
- Complete revision of the digital.cm library. Worst crashes fixed.
Added examples that demonstrate the use of the digital.cm code models.
- '-o filename' option now logs terminal window activity to a file
specified by user and displays it in the terminal window at the
same time. Logging can be temporarily disabled by selecting
Edit/Logging from the menu.
- Added menu option Control/Stop Execution that stops the current simulation
and Nutmeg script.
- Fixed signal handling. On segmentation violation and other fatal signals
SpiceOpus now displays an error message and waits for the user to
press any key before the program is terminated. This way the user has time to
examine the output before the window is closed.
- Fixed binary operations when for complex scalar right operand the result was wrong
if left operand was a vector.
- 'let' command now releases the previous vector and creates
a new vector if the assignement is not made into some elements of the vector. This way let
behaves like in all other normal programming languages.
- Added the vector[|low, high] operator (operator [| ]). This operation selects
the elements from the vector for which the value of the scale is between low
and high.
- Added graph tagging. Tagging is achieved with commands
'plot create ...', 'plot append ' and 'plot destroy ' commands.
When the usual 'plot' command is used or if an iplot is created, graphs are
tagged automatically (for plot with 'plotn' and for iplot with 'iplotn').
- Smarter refresh with 'plot append ...'.
- Added functions floor(),
ceil() and
round() to Nutmeg.
- Added 'optimize reset' command for cleaning up optimize settings.
- Fixed x^y operation for B source, e.g. 2^v(1) previously didn't work. Now even v(1)^v(2) works.
- Added the vector[%real_index] operator. It selects the
point from the vector for which the index is equal to real_index (used with cursors).
If real_index is not an integer number, the value is calculated using linear interpolation.
- Added the 'cursor' command that can be used for manipulating
digital oscilloscope style cursors for various waveform measurements.
- Parameters function and order for independent voltage and current sources
are now read-only. To change the order of a transient source, simply assign a vector
to the coeffs parameter (let @vsrc[coeffs]=(1;9;0.1)). To change the type of the
transient source, use sin (or sine), pulse, exp. pwl or sffm as parameter name instead
of coeffs (to make a pulse source sinusoidal, type let @vsrc[sin]=(1;2;50)).
- Eliminated the need for a CR in the last line of the source.
- Fixed problems with the define command.
- Parameters AF and KF are now showed correctly for JFET.
- Version 2.02
(date built: 27. June 2000)
- Fixed edit behaviour for Windows.
edit command starts an editor asynchronously. The spice circuit file
must be sourced manually to simulate the changes. The same was done in Linux
although we are still having problems with spice3 binary creating a zombie every
time the editor is invoked. Fortunately all zombies die after the main Spice
window is closed.
- Fixed the crash when using
let @... or
let @@....
- Added support for simulator parameters in let (e.g.
let @@@temp=15 is equivalent to
set temp=15). This is now obsolete. All simulator parameters can be set
by
set command (e.g.
set sim_opt_name = value) where an arbitrary
Nutmeg expression wrapped into curly braces
{} can also be used instead of
value.
- Fixed parser so that refering to vector range now works (e.g.
a[2,8]).
- Fixed crash when Spice2 style nodenames (e.g.
(2,3)) in subcircuits caused the simulator to crash due to wrong
subcircuit expansion. The origin of the crash was in releasing code model
structures. Subcircuit expansion sucks bigtime. We must rewrite it sometime.
Anyway to make such circuits work, simply remove parenthesis and commas around
node names.
- Fixed crash caused by an attempt to access a vector after loading of first
circuit failed.
- Fixed crash during analysis when a current source was left dangling.
- Fixed crash in UNIX version when loading a DOS CR-LF .cir file.
- Fixed skipping leading spaces and tabs. Long netlist lines (>255 chars) don't
crash the simulator now.
- Old subcircuit expansion was completely removed.
set oldsubcktexpand has no effect now.
- Added support for global nodes in subcircuits (HSpice style). A global node
is not considered to be an internal subcircuit node when it appears in
subcircuit definition thus it is not expanded with subcircuit name. An example
of a global node is node
0 (ground node). To make a node global use the
.global option:
.global node1 node2 ...
- Fixed a bug when stop frequency lower than start frequency for ac analysis
resulted in zero length vectors.
- Fixed a bug when start and stop frequency were the same for ac analysis,
Spice would enter an infinite loop.
- Note that
Nutmeg is case sensitive. In case you want to be sure, write everything
in lowercase.
- Fixed CM vector parameter defaulting. s_xfer code models should work now
without
int_ic parameter given.
- Fixed convergence problems with s_xfer code model when using
uic with transient analysis.
- Fixed d_state code model so it doesn't crash if the state file is not
found.
- In case a circuit contains errors, the
.control block is not executed. If the
badcktfree variable is set, the circuit is immediately removed from
memory after errors are found.
- Added the
; operator. Now a vector can be constructed in
Nutmeg from its components (e.g.
let a=(1;2;3;c) concatenates 1, 2, 3 and c).
- Added
icstep option. See more in a brief explanation of
how initial conditions work.
- Fixed simulator options
method (possible values:
trap or
gear) and
maxord (1..6). Gear algorithm now really works. Trapeziodal algorithm
supports only orders 1 and 2. Anything more (or less) results in 2 (or 1). Gear
algorithm supports orders from 1 to 6.
- Version 2.01
(date built: 16. May 2000)
- Enhanced plot syntax so multiple 'vs' options can be supplied.
- Added variables for controlling the plot window (plotwinwidth, plotwinheight,
plotwininfo, plotautoident).
- Added support for manual vector identification in plot window. This is now the
default. Use 'set plotautoident' to restore vesion 2.0 behaviour.
- Fixed a bug in TF analysis. Vector names for results are now
input_impedance, output_impedance and transfer_function.
- Fixed
poly sources so they really work now. Spice2 syntax is now completely
supported.
- Added bsim4 device model (level=8), version 4.0.0.
- Updated bsim3soi device model to 2.1 (DD, FD) and 2.2 (PD) (now levels 9-11).
- Fixed bsim3v3.2.2 problem when bsim3v3.2.2 models were giving incorrect results
in simulations following the first simulation of a circuit.
- Fixed 2-dimensional DC sweep that was broken by the general DC sweep
enhancements.
- Added support for Solaris i386 and SPARC platforms.
- Released sources for code model libraries (.cm) along with makefiles.
- Added suffixes for constants in B sources (mili, micro, ...).
- If a circuit contains errors, structures that were created by loading
the circuit are released.
- Turned on DEVdelete and DEVmDelete capability in the source so the information
about models and instances can be released from memory.
- Added MOS6delete and MOS6mDelete functions.
- Added DEVunsetup driver function for bsim3v3.2.2.
- Added releasing of internal G, body and charge nodes for bsim4 in bsim4unsetup.
- Added releasing of internal debug nodes for bsim3soi DD, FD and PD models in
unsetup function. TODO: releasing body and temperature nodes.
- bsim2 model temperature defaulting is fixed. It used to default to 27 degrees
Celsius no matter what the circuit temperature was set to. TEMP parameter now
defaults to circuit temperature. Since this parameter is stored in degrees Celsius
(normally temperatures are stored in Kelvin) the value is converted by subtracting
CONSTCtoK from the CKTnomTemp.
- Version 2.0
(date built: 7. April 2000)
- DC sweep of an arbitrary instance/model parameter, global temperature or nominal temperature in lin or log fashion.
- Improved let command now supports instance/model parameters. Vector parameter components are also supported.
- Instance/model parameters can be used in arbitrary expressions.
- Improved print command can print vector data without a header and index column (easier exporting of data).
-
XSpice extesions added (code modelling,
improved convergence control,
poly sources,
mixed-mode simulation).
- An error in the state resolution table for digital nodes was fixed. The
original table in the Georgia-Tech version of XSpice is asymmetric. This is of
course a total nonsense. You can take a look at the
fixed table and send us your comments. We fixed
it to our best knowledge and by studying carefully the original XSpice
manuals.
- Templates for building your own code models in C.
-
siminfo command for checking the simulator status.
-
cmload command for loading XSpice code models and user defined
nodes from dll files (.cm files).
- Printing support for
SpiceOpus terminal window and plot windows.
- Version 1.2
(date built: 17. December 1999)
- parameters coeffs (coefficients of time-depended value), distof1 and distof2 for independent sources can be changed with alter command and viewed with show command.
- indexing of vector components.
- Calling extern executable in backquotes. Extern executable generates a
sequence of Nutmeg commands on standard output. The commands are read and
performed. The last character output from the executable has to be EOF.
- The bsim3 version 3.2.2 MOSFET model was added. It is specified as
level=7 in
.model statement.
- The bsim3soi MOSFET model was added. Dynamic depletion bsim3soi model
version 2.0 is specified as
level=8 in
.model statement. Fully depleted bsim3soi model version 2.0 is
specified as
level=9 in
.model statement. And Partially depleted bsim3soi model version 2.0.1
is specified as
level=10 in
.model statement.
- The spec command written by
Anthony Parker, Macquarie University,
was added.
- The PS FET model developed by Anthony Parker and David Skellern was added. It is specified as level=2 in .model statement for JFET device.
- repeat loop inside some other loop.
- Complete rewrite of the plot and iplot commands.
- Version 1.0
(date built: 18. October 1999)
- Berkeley's 3f4 patch was applied (the unofficial Spice 3f5 patch).
- The original source code was slightly modified. Those modifications enabled
the use of new standard C libraries which came with the compiler.
-
SpiceOpus was ported to the Windows 95/98/NT operating systems and to
the Linux operating system.
- The graphical part of the program was rewritten for Windows 95/98/NT and for
Linux operating systems.
- A significant number of memory leaks were tracked down and fixed. There were
lots of cases where it was not clear who owned a piece of dynamically allocated
data and so the original code would not free up the data by default. Some
instability was also caused in cases when several structures point to the same
dynamically allocated pieces of data.
-
cd
command without
HOME variable.
- The
$&vector_name syntax used when a vector is referenced as a
variable. Syntax
$& is now obsolete. Use
{vector_name} instead.
-
alter command when syntax
@device[parameter] is used and when it is used to change a model
parameter
(alter #modelname parameter = expression).
- Dereferencing
NULL pointers, use of uninitialised pointers and multiple freeing of
the same part of memory.
- Binary mode in
write and
load commands.
- Time in
rusage command.
- The temperature of the circuit set by
temp variable.
- The
save command.
- Saving of branch currents through voltage sources in resulting plots.
- Showing capacitance values for
cgs,
cgd and
cgb with
show command for
level=1 MOSFETs.
-
Timestep too small error in transient analysis. The original Berkeley
source code stops the analysis, when the time delta is less than
10-9 * maximum stepsize.
- The new
optimize command was added.
Mission statement
It is our ambition to transfer optmization methods
from a theoretical level to real life circuit design.
SpiceOpus light is by no means just a side product of
our scientific work - it serves two major purposes:
- Gathering research feedback. We encourage everybody to use
SpiceOpus light freely so that users discuss their simulation
problems with us. In this way our research work
stays in touch with reality!
- Higher education. Spice is well established as a teaching/learning tool.
Hopefully students all over the world will benefit greatly from our free circuit
simulator.
At the same time we continue our research work on the SpiceOpus code, which
is now also focused on new methods and algorithms for increasing numerical
stability and computational speed.
Your
SpiceOpus team
|