opus-banner
previous | back | home | next
CACD Group
updated 2001.01.28

bullet Screenshots

Spice Opus in Action

bullet About SPICE OPUS

SPICE OPUS 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 simulator includes an interactive interpreted programming language called Nutmeg, which allows interactive SPICE sessions.

Numerous memory leaks were fixed. The graphical part of the program was also rewritten but the original syntax of the plot and iplot commands was preserved, enabling any script compatibility with other SPICE compilations.

New Nutmeg commands were also added. One of them is the optimize command. It represents a general optimising feature in SPICE OPUS. Several optimising methods were coded and can be used through this command. An arbitrary circuits with an arbitrary cost functions can be optimised with its careful use.

XSPICE code model feature was enhanced so that code models can be loaded from dll/so files (.cm files).

bullet Bug fixes and other modifications

  • Version 2.04    (date built: in progress)
    • Added the nodeset and ic commands for dynamically setting nodesets and initial conditions.
    • Instance parameter m 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.
    • 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).
  • 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 SPICE 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'.
    • 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 and 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 tran 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. TRAP supports only orders 1 and 2. Anything more (or less) results in 2 (or 1). GEAR 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 BSIM3 problem when BSIM3 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 BSIM3.
    • 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 SPICE 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 SPICE model was added. It is specified as level=7 in .model statement.
    • The BSIM3SOI MOSFET SPICE 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.
    • SPICE OPUS 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.
    • 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 command.
    • 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.

bullet Mission statement

We have been studying optimization methods for several years with Berkeley's SPICE source as our favorite playground. Having satisfied our academic ambitions we thought why not invest some more time and make the product freely available. Thus SPICE OPUS saw its first release in December 1999. It is by no means just a side product of our scientific work - it serves two major purposes:
  1. Gathering academic feedback. We encourage everybody to use SPICE OPUS freely so that users discuss their simulation and optimization problems with us. In this way our research work stays in touch with reality!
  2. Higher education. As any University we are also in the teaching business, where SPICE is well established as a teaching / learning tool. Our students (and hopefully students all over the world) benefit greatly from our free circuit simulator.
In order to achieve the above, we have decided to satisfy the ever popular Windows users as well as the fast growing Linux users society. The graphical user interface of SPICE OPUS is therefore based TrollTech's Qt 2.01 libraries. We have also included Georgia Tech's XSPICE extensions to our SPICE OPUS compilation.

At the same time we continue our research work on the SPICE OPUS code, which is now focused on new methods and algorithms for increasing numerical stability. By the way, this is the main reason why we do not release our work under the GPL license (you know the phrase: "No comment, the case is still under investigation").

We are aware that a schematic capture would be very handy at this point, especially for visualizations in education. Unfortunately this would take too much time out of our scientific and teaching schedule, so we are looking for some cooperation: If there is somebody out there who is willing to build (adapt) the necessary code ... just get in touch with us!

Your OPUS team

previous | back | home | next