wrspice-3.2.6 7/12/2010 Changes and New Features ------------------------ * Enhancements to .measure capability. Measurements like "min 0", i.e., a constant argument, now produce a vector in the plot. Previously, the measurement would fail and no vector would be produced. The case of no measurement function at all now generates a vector and scale. The vector is all 0. The scale can be used for time interval measurement. Previously, no vectors would be produced. * Added motion event filtering, to avoid the cursor lag seen with GTK-2 when the marker is active in plots. Bugs Fixed ---------- * The toolbar text was overwriting itself in the most recent GTK-2 release (2.20.1). There are no reports of this from the field. ------------------------------------------------------------------------------- wrspice-3.2.5 5/3/2010 Changes and New Features ------------------------ * Undated to the bsim-4.6.5 MOS model from 4.6.1. Level 54 now maps to bsim-4.6.5, previously it mapped to bsim-4.3.0. This level will now map to the "latest" bsim4 model, to better track HSPICE. WRspice now officially supports the IBM cmos10sf process design kit models. bsim-4.6.5 benchmark files adapted to the IBM cmos10sf framework are available in the examples. Bugs Fixed ---------- * Improved numerics in .measure evaluation, sometimes measures weren't being performed at the expected time point due to roundoff. * Fixed operator precedence for the tri-conditional (a ? b : c) operator, so it now nests correctly without parentheses. E.g., a ? b : c ? d : e now parses correctly, as a ? b : (c ? d : e). * The keywords ".opt" and ".option" weren't being interpreted the same as ".options" in some cases. All three keywords are equivalent. ------------------------------------------------------------------------------- wrspice-3.2.4 4/5/2010 Changes and New Features ------------------------ * General code update. This release has had a major internal restructuring, moving a lot of the existing legacy code written in C into a more modern C++ coding style. The revisions make use of data scoping and other language features to facilitate future modification and maintainability. These same features reduce the probability of certain types of errors that can cause program instability. The dreadful collection of junk in the examples directory has been updated. Each file now does something obvious when sourced. * Sensitivity analysis update Sensitivity analysis now works with an AC or DC specification. Previously, only the operating point sensitivity functioned correctly. * New SOI MOS model added The Berkeley BSIMSOI-4.3 MOS model has been added as levels 23 and 70. * New MOS level mapping feature It is now possible to apply a mapping for the level numbers found in MOS models. This makes it possible to use SPICE MOS models created for other simulators, which may have different level numbers for similar models, without editing the model file. Suppose that you have a set of model files provided by a foundry service, designed for another simulator. These files provide parameters for the Berkeley BSIM-4.4 model, with level 99 (as an example). In WRspice, the BSIM-4.4 model is assigned to level 14. Rather than copying and editing the files, on can use to following construct in the WRspice input: .mosmap 99 14 .include path_to_model_file The level 99 as found in the model file will be interpreted as level 14 in WRspice. This line must appear logically ahead of, i.e., read before, the corresponding .model lines. See "help .mosmap" for more information. * Enhancement of user-defined function capability. The "define" command and the .param line in input files can be used to define user-defined functions (UDFs). This feature implementation was completely revised, in order to support very complex usage patterns found in recent foundry design kit models. The aspects of this that are visible to the user are as described below. User-defined function definitions are now modularized and prioritized. At the base of the hierarchy (with lowest priority) are the "shell" UDFs which are defined with the define command. Every circuit now has its own set of UDFs, which are obtained from .param lines which are not part of a subcircuit. When a circuit is the "current circuit", its UDFs will be searched before the shell UDFs to resolve a function reference. The current circuit's UDF database is pushed onto a stack, ahead of the shell UDFs. Most of the time, this stack is two levels deep. During initial circuit processing, when subcircuit expansion is being performed, when a subcircuit is bing expanded, any functions defined within the .subckt text with .param lines are pushed on the top of the stack. Since subcircuit definitions may be nested, functions will be pushed/popped according to the depth in the hierarchy currently being processed. Previously, none of this was done, and all functions were kept in a single flat database equivalent to the "shell" database. This does not provide correct scoping. Now, a function defined in a subcircuit will have priority over a function of the same name and argument count defined in the circuit body, and a function defined in the circuit body will have priority over a function with the same name and argument count defined from the shell with the define command. When "define" is given without arguments, all currently defined functions are listed. Those definitions from the current circuit will be shown with an asterisk '*' in the first column. Other functions listed have been defined with the define command. The functions defined in subcircuits are invisible, their use is only transient and they are part of the database only during subcircuit expansion. It is now possible to define a function that calls a non-existing function. The resolution is now done when the function is evaluated. Thus, functions of functions can now be defined in any order. For example: define xx(x,y) yy(x,y) define yy(a,b) a+b The first define would previously fail, as there is no existing definition of yy, so that the functions must be defined in the reverse order. This constraint no longer exists in the present release, and applies, possibly more importantly, to .param function definitions. Previously, when a function was defined, if the body contained a call to another UDF, the parse tree from the called UDF would be stitched into the current UDF. Thus, the new UDF would be a "flat" reprsentation of the hierarchy of UDFs that were called. In a complex hierarchy of functions, such as found in the some foundry models, printing one of the top-level UDFs would generate page after page of space-free equation text. The new appreoach is much nicer in that it retains the calling hierarchy, and keeps the parse trees of manageable size. It is also essential for maintianing the function scope hierarchy described above. Note: presently, function definitions always use the "local" prioritization as described. The parhier option is ignored. * Change to default token field separation character used in subcircuit expansion. When a subcircuit is expanded, a new SPICE deck is created internally, which is a flat representation of the circuit. During expansion, nodes and other reference name tokens found in subcircuit definitions are mapped to new names which concatenate the subcircuit name hierarchy to the base name, creating a new token unique (one hopes) in the flat representation. Previously, and in Spice3, the colon ':' is used to separate the fields in the new token. The flat circuit would be full of names containing colons, which unfortunately is a problem in WRspice. The problem is that WRspice (unlike Spice3) supports the ternary conditional operator a?b:c (if a is true, then b, otherwise c). This use of the colon can conflict with colons found in node names, making text processing very difficult. To avoid this, the default field separation character has been changed to an underscore '_', and provision has been added to set this character from the shell. The variable "subc_catchar" can be set to a one-character string containing the character to use. For example, to switch back to the use of a colon, give set subc_catchar=":" before sourcing a circuit. The whole process of subcircuit expansion is supposed to be invisible to the user, and the average user would not know or care about which character is used as the field separator. However, there may be unintended and unanticipated consequences of this change. Note: HSPICE uses '.' for subc_catchar. * Unit string concatenation character changed form '_' to '#'. It appears that this feature was never fully documented. A "units string" can follow numbers given to WRspice, and these units are carried through expressions, simplified, and printed with results. The units string follows a number, separated by a separation character which is most often optional. Previously, this character was '_', but is now '#' in this release, to avoid conflict with the subcircuit field separator character. Further, it is now possible to add "denominator units", which was not possible before. A second appearance of the separation character, or the first appearance if there was no separation character ahead of the units string, is logically like '/', and units that follow are denominator units. Examples: 1.0#F#S 1 Farad per second 1.0F#S 1 femtosecond (note that 'F' can be a multiplier or a unit!) 1.0FS 1 femtosecond 1.0#FS 1 Farad-second 1.0S 1 second 1.0#S 1 second 1.0##S 1 Hertz The character used as the separation character can be changed by setting the string variable "units_catchar". The character in the single-character string becomes the new separation character. For example, set units_catchar = "_" will return to the previous default. * More new variables. Several new variables have been added that allow the user to change the character used for various purposes in WRspice. All of these variables can be set to a single-character string. subc_catchar units_catchar These two were described above. plot_catchar This specifies the character used to separate the plot and vector names in a fully qualified reference. The default is '.'. Example: tran3.v(22) spec_catchar This specifies the leading character of a "special" vector, which is a device, model, or circuit parameter. The default is '@'. Examples: @modelname[paramname], @devicename[paramname]. var_catchar This sepcifies the "concatenation character" which terminates shell variable expansion when necessary in context. The default is '%'. For example "$one%k" expands to the value of the shell variable "one" immediately followed by the character 'k'. * .PARAM changes 1. The first character of a .param name can now be '_'. Previously, only alphabetic characters were recognized. 2. Added support for .options parhier=. This feature has the same effect as in HSPICE. If not set or set to "local", parameters set lowest in the hierarchy override those of the same name set higher. If set to "global", higher level definitions will override lower definitions. * Case sensitivity changes Case sensitivity of various object names and strings is now under program control. Historically the following have all been case sensitive in WRspice: Function names User-defined function names Vector names .PARAM names Codeblock names Node and device names Other SPICE programs have different case-sensitivity rules, in partiular many of these name categories are case insensitive. To provide better portability of input files, each of the categories above can now be case-insensitive in WRspice. By default, function names and user-defined function names are now case-insensitive. The remaining categories remain case-sensitive by default. Case sensitivity must be extablished at program startup and can not be changed during operation. There are two ways to accomplish this: 1) the new -c command line option 2) then new setcase [] command called in a startup file. The is a word consisting of letters, each letter corresponds to a class from the list above. If lower-case, the class will be case-sensitive. If upper-case, the class will be case-insensitive. The letters are f, u, v, p, c, and n corresponding to the classes listed above. Tne default case sensitivity corresponds to the string "FUvpcn". Letters can appear in any order, and unrecognized characters are ignored. Not all letters need be included, only those seen will be used. This word should follow -c or -C in the command line options, separated by space. It can also be given as the argument to the setcase command, which can be given in the user's .wrspiceinit or system startup file. If setcase is given without an argument, which can be done from the WRspice prompt, the present case sensitivity status is reported. * Constants plot changes The "constants" plot, which provides values for certain universal constants and is the existing "plot" before any analysis, has changed a bit. 1) Units have been added to the constants that have associated units. 2) Names "c","e", and "i" have been changed to "const_c", "const_e" and "const_j" to avoid clashes with user-specified vector names. 3) The flux quantum phi0 has been added. * New syntax accepted for plot setting and reference. The setplot command and other plot name references can now use indexing into the plot list. The plot list is the internal list of plots, in order of creation, as listed with the setplot command without arguments, and in the Plots tool. In addition to the plot name, the following constructs are now recognized. Below, N is an integer. -N Use the N'th plot back from the current plot. N must be 1 or larger. Example: "setplot -1" will set the current plot to the previous plot. The command will fail if there is no such plot. +N This goes in the reverse direction, indicating a plot later in the list than the current plot. N An integer without + or - indicates an absolute index into the plot list, zero-based. The value 0 will always indicate the "constants" plot, which is the first plot created (on program startup). The use of indexing in the plotname.vecname construct will work as well. For example, "-1.v(1)" represents v(1) from the previous plot (when using the default plot_catchar which is '.'). When using the plotname.vecname construct, internally the vector and its scale are copied into the current plot as temporary vectors. If you do "plot -1.v(1)" it may be surprising to find that the plot title, etc. are from the current plot, and not the source plot. * Other misc. changes 1. There can now be an optional "start" or "start =" ahead of the start value in .tran lines, for HSPICE compatibility. 2. WRspice models that don't have a level number will now match with an explicitly given level. For example, the WRspice diode model does not use a level parameter, but other simulators may support diode levels. Previously, the presence of a level value larger than one in WRspice input in a diode model would be a fatal error. Now, a warning will be issued, and the model parameters will be read, but there is no guarantee that the model parameters will make sense to WRspice. 3. The vector "temper" is now globally defined. This is the current operating temperature assumed by the program. This can be used in SPICE input to obtain the temperature, in Celsius. 4. In the title line, the sequences "\n" and "\t" are now expanded to newline and tab characters respectively. Thus, the title can print as multiple lines, however it is always counted as a single line for line numbering. 5. In the transmission line device and model, the level parameter values for Pade and convolution algorithms are now 1 and 2 respectively rather than 0 and 1. Bugs Fixed ---------- * Fixed convergence problems in the Berkeley BSIM4 SOI models (both bsimsoi-4.0 and the new bsimsoi-4.3). The models, as obtained from Berkeley, have an issue with the "bypass" code that adversely affects convergence. The bypass feature has been disabled in these models. * The "bypass" option has been changed from a boolean to an integer. This is an option that attempts to speed computation in complex semiconductor models by skipping computation when voltages are stable. This option is on by default, so that the boolean "bypass" option did nothing. Now, it is possible to turn off the bypass feature by setting the option to 0. * Fixed bugs in user-defined function capability. As described above, this capability was rewritten and extended, fixing numerous problems in the process. * Fixed bug: the first line of the wrspice.errors file was missing in some cases. * Added a recursion test for .param expansion, a recursive definition or set of definitions would crash the program. * The ".endv" Verilog block termination was not being interpreted, so the Verilog block would logically continue to the end of the file. * Specifying tf (transfer function) analysis without a dc/ac sweep would crash the program. ------------------------------------------------------------------------------- wrspice-3.2.3 2/13/2010 Changes and New Features ------------------------ * Error and warning reporting changes While loading input, error messages are now queued, processed, and displayed after the read completes. Duplicate messages are not shown. The whole system is much more efficient. This fixes problems caused by a huge cascade of error messages that can occur, from, e.g., loading a large design kit library that has many incompatibilities. Previously, it could take several minutes to issue the messages since the text window update is slow, after which there would be another minute or two of unresponsiveness while the X-server processes expose events. The new approach handles this far more gracefully. Only the last 200 lines are so are kept, by default others are lost. However, one can set the variable "errorlog" to the name of a file, which will receive all errors. If this variable is set as a boolean (i.e., to nothing), errors will be recorded in a file named "wrspice.errors" in the current directory. The variable can be set from the main page of the Commands tool. * Case sensitivity of internal function names Internal function names in WRspice input are now recognized without case sensitivity. Previously, these were case-sensitive, which is a bad idea for compatibility. * Internal code update of parts of the printing interface and drivers. This should be invisible, except that the driver which produces jpeg and other image files has been renamed to "image". It used to be named "imlib", after the name of the third party software that was once used for this purpose, but was replaced years ago by another package developed by Whiteley Research and called "imsave". The old "imlib" name is still valid, it is an alias for the "image" driver. Bugs Fixed ---------- * Fixed some issues with the Unix/Linux help viewer window: 1) Timing changes to avoid flashing and jittery-ness, which became worse under Xorg 7.4. 2) No longer jumps to the top of the page on window resize. 3) Images were being clipped incorrectly in some unusual cases. * The "helper function" execution in the image print driver was not working. This should be working now, and as the helper functions are already available on most Linux systems, formats like GIF and PDF, and a lot more (all formats supported by the "convert" program that is part of ImageMagick) are readily available on Linux systems. ------------------------------------------------------------------------------- wrspice-3.2.2 1/15/2010 Bugs Fixed ---------- * The Windows releases would sometimes crash when plots were destroyed. There was a used-after-free issue, which did not seem to affect the Unix/Linux releases, but caused trouble under Windows. * There was a related performance bottleneck which would be noticeable in runs with a large number (thousands) of vectors when destroying plots. ------------------------------------------------------------------------------- wrspice-3.2.1 11/18/2009 Bug alert! Subcircuit expansion would be internally incorrect, with possibly no warning, if the following were true: 1) The subcircuit contained a MOS or BJT device. These devices have a "variable length" node list which requires special testing to determine whether a token is a node, or a model name. This test would fail if: 2) The device used a model whose name contains upper-case characters. The result would be that the final node (bulk node) would not be connected properly. This is a serious issue and Whiteley Research regrets that this appeared in a production release and apologizes to all users affected. It is recommended that all Gen 3 users update immediately! Bugs Fixed ---------- * See above. * Fixed drop handling in entry widgets in GTK-2 (Red Hat Linux, Debian) releases. These have their own drop handler which was interfering with the program's drop handler, causing the text to become corrupted. ------------------------------------------------------------------------------- wrspice-3.2.0 10/30/2009 Welcome to the first PRODUCTION release of WRspice Generation 3! Below are the changes and fixes applied to the final beta release. Bugs Fixed ---------- * The IPC channel from Xic was filtering out and discarding Tab characters. Thus, SPICE input containing tab characters obtained through Xic would not parse correctly, which broke the op-amp model in Xic. Tab characters are no longer filtered.