Commit Graph

1042 Commits

Author SHA1 Message Date
Giles Atkinson d31568bd83 Add parsing and translation of the FREQ form of E-source devices,
integrated with the existing parsing of AND/NAND/OR/NOR forms (inpcom.c).
For the implementation, add a new analog XSPICE code model, xfer.
Add an example to examples/sp.
2023-07-15 11:15:08 +02:00
Holger Vogt ba7ad783a8 safeguard against crash upon buggy input 2023-05-27 10:49:07 +02:00
Holger Vogt 66a4b2226e .libsave: don't save the command itself, improve messaging 2023-05-27 10:44:56 +02:00
Holger Vogt 006a66b055 .libsave: Print to file the expanded library read by .lib 2023-05-27 10:44:04 +02:00
Holger Vogt 50a9daf24a Line concatenation: use dstring instead of tprintf:
Parsing time of Skywater libs reduced by more than 35%.
2023-05-27 10:42:47 +02:00
dwarning a4f6a777c0 few cleanings to prevent compiler warnings 2023-05-27 10:41:21 +02:00
Holger Vogt 797795e7c0 Shift all compatibility handlinmg from inpcom.c into its own source files
inpcompat.c and inpcompat.h
2023-05-27 10:39:05 +02:00
Giles Atkinson 5aa48cab0b Do not generate netlist lines that use non-existent libraries.
To support that, give global scope to  function inp_pathresolve()
in inpcom.c.  Update internal documentation (long comment).
2023-04-01 13:56:12 +02:00
Holger Vogt 062785319a When '.probe alli' is set, disable auto bridging and set a flag 2023-03-24 22:10:18 +01:00
Holger Vogt f121c433a7 Check for buggy diode instance line, avoid crash 2023-03-22 14:29:48 +01:00
Holger Vogt 86951501a7 Add eprvcd to the commands which set node names to lower case,
but not the file names after >
Does not work for manually entered eprvcd commands, where the user
has to provide lower case node names.
2023-03-19 15:24:27 +01:00
Holger Vogt 3996d27b29 Make code a little more efficient 2023-03-18 22:31:33 +01:00
Holger Vogt 7af6c4a661 Re-enable single line parameter lists, separated by commas 2023-03-18 22:31:27 +01:00
Holger Vogt e4202ea181 The tc for R, L, C may include an expression
like tc={expression} or tc={expression}, 1.3u or
tc={expression}, {expression2}
2023-03-18 14:37:53 +01:00
Holger Vogt e4601c16ee Not a warning but an error, stopping the simulation 2023-03-18 14:37:33 +01:00
Holger Vogt f32f3ac8cd Improve previous commit: A bad .model line leads to a breakup
of the simulation.
2023-03-18 14:37:26 +01:00
Holger Vogt c61acefef7 Prevent crash when a bad .model line is given, like
.model
.model xxx
2023-03-18 14:37:19 +01:00
Holger Vogt 5ee7a0ad2d prevent crash when defect .model line is given
(no model name or no model type)
2023-03-18 14:35:11 +01:00
Holger Vogt 3ff9643f49 Add a scale factor 'a' (atto, 1e-18) 2023-03-18 14:30:03 +01:00
Holger Vogt 4309bad14d Set the recounter to 0 upon every exit from function inp_get_param_level 2023-02-03 18:50:55 +01:00
Holger Vogt 712ed8ac77 Safeguard against stack overflow, when wrongly introduce a circular
parameter dependency
2023-02-03 11:33:36 +01:00
Holger Vogt 4b8d575122 Add a user definable variable enable_noisy_r (for .spiceinit)
to enable noise calculation for all behavioral resistors.
May locally be switched off by instance parameter noisy=0
If enable_noisy_r is not set, noise simulation
may locally be enabled by instance parameter noisy=1.
2023-01-27 16:12:42 +01:00
Holger Vogt 1a4880344f Update to fcn tprint:
allow multiple printouts in a single simulation run,
without overwriting the previous printout.
2023-01-09 16:31:44 +01:00
Holger Vogt 164ed05786 enable 'off', 'print', 'save' being part of a node name.
Only plain 'off' (case of bipolar), or 'print', 'save'
(in case of CIDER) will not be allowed.
2023-01-09 16:31:15 +01:00
Giles Atkinson 301f50335d Add limited support for string-valued parameters in .param lines.
The right-hand side of an assignment may be a string expression
made up from quoted strings, and identifiers for other string parameters,
optionally in braces.  There may be no un-quoted spaces.
Example: .param str4=str1"String 4"str2{str3}

Subcircuits may have default and actual string parameters, but the values
must be single identifiers, not quoted strings or string expressions.
2023-01-09 16:26:59 +01:00
Pascal Kuthe 79b2d2d520 removed unneded changes 2022-12-27 14:09:22 +01:00
Holger Vogt a4d13dae24 Suppress model type warning when device is of type N. 2022-12-27 14:04:56 +01:00
Holger Vogt 8f0eab90ee Replace 'a' by 'n' for OSDI device 2022-12-27 14:03:39 +01:00
Holger Vogt d8eb685fcc Preliminary fix to get_number_terminals:
check for tokens with '=' to stop and get number of nodes by
stepping back.
2022-12-27 13:59:20 +01:00
Holger Vogt 6ece9b5748 Exclude XSPICE specific error message.
Don't call fcn get_adevice_model_name().

Return a fixed value (5) for number of nodes:
This is wrong. It has to be replaced by a safe
method to figure out the number of terminals for
varying Verilog-A device models.
2022-12-27 13:57:20 +01:00
Pascal Kuthe acfaf023b3 prototype for Verilog-A integration using OSDI and OpenVAF
This initial prototype is capable of performing DC, transient and AC
analysis. Not all features of OSDI are supported yet and there are still
some open questions regarding ngspice integration. However many usecase
already work very well and a large amount of CMC models are supported.
The biggest missing feature right now is noise analysis.

test: test case for diode DC working with SH

test: add transient analysis to osdi_diode test

test: added docu text to osdi_diode test

test: added test case directories

fix: bug in osdi_load

test: small change to netlist

fix: implement DEVunsetup

fix: correct behaviour for MODEINITSMSIG

test: osdi diode enable all analysis modes

removed netlist

ignoring test results

added the build of the diode shared object to the python test script

deleting old stuff and always rebuilding the shared object

added diode_va.c to the repo

preparing CI

Create .gitlab-ci.yml file

(testing) add res, cap and multiple devices test

feat: use osdi command to load files

Previously OSDI shared object files were loaded from fixed directories.
This was unreliable, inconvenient and caused conflicts with XSPICE.

This commit remove the old loading mechanism and instead introduces the
`osdi` command that can load (a list of) osdi object files (like the
codemodel command for XSPICE). A typical usecase will use this as a
precommand in the netlist:

.control
pre_osdi foo.osdi
.endc

If the specified file is a relative path it is first resolved relative
to the parent directory of the netlist. If the osdi command is invoked
from the interactive prompt the file is resolved relative to the current
working directory instead.

This commit also moves osdi from the devices folder to the root src
folder like xspice. This better reflects the role of the code as users
may otherthwise (mistakenly) assume that osdi is just another
handwritten model.

test: update tests to new command

fix: do not ignore first parameter

feat: implement log message callback

fix: don't generate ddt matrix/rhs in DC sweep

fix: missing linker script

update to osdi 0.3

(testing) simplify test cases, fix bug

(testing) multiple devices test improvement

(testig) node collapsing bugfix

test: increase tolerance in tests

feat: update to newest OSDI header

fix: temperature update dt behaviour

fix: ignored models

fix: compilation script

fix: allow hicum/l2 to compile with older c++ compilers

fix: set required compiler flags for osdi

fix: disable x by default

fix: add missing SPICE functions

fix: update diode to latest ngspice version

feat: implement python CMC test runner

doc: Add README_OSDI.md

fix: make testing script work with python version before 3.9

fix: free of undefined local variable

fix: do not calculate time derivative during tran op

update osdi version

fixes for compilation on windows
2022-12-27 13:51:57 +01:00
Pascal Kuthe 744002dc49 fix sigfault on older c compilers 2022-12-11 15:35:53 +01:00
Holger Vogt e967b31c94 Add a new compatibility mode xs (for XSPICE) 2022-12-11 15:32:30 +01:00
Holger Vogt 59413a7f71 Add error messages when controlled_exit is called:
No exit without message.
2022-12-11 15:29:47 +01:00
Giles Atkinson 9801d06795 Fix XSPICE's node prefix '~' when PSPICE compatability is used. 2022-10-14 13:52:17 +02:00
Holger Vogt 7bb581b1b3 Remove parameter noiseless in simple diode model.
The model is noiseless anyway.
2022-10-08 16:50:26 +02:00
Brian Taylor 266d944745 Remove unnecessary hierarchical level check. 2022-10-08 16:50:15 +02:00
Brian Taylor bd00738a49 Fix memory leaks in ff/latch code. 2022-10-08 16:50:03 +02:00
Giles Atkinson 8cc9d8522f Fix bug #602 "Warning message trying to linearize a transient analysis vector"
by changing the way "ngspice -a" (autorun option) works.  The inserted code
now checks whether a simulation has already run by examining $curplot
before forcing "run".  Also at most one simulation is forced to run.
2022-10-08 16:47:30 +02:00
Giles Atkinson b1341c8e30 Insert XSPICE bridging devices automatically when an analogue node
has the same name as an XSPICE event node (including digital nodes).
The function Evtcheck_nodes() is replaced by a new version in its
own file.
2022-10-07 13:19:59 +02:00
Brian Taylor 2d9f86c742 Check for name collisions between nodes generated during translation from Pspice to Xspice and instance pin or subckt port names. These are reported as ERRRORs. 2022-10-07 13:14:35 +02:00
Holger Vogt b94ef139dd Avoid an endless loop: Safeguard function
search_plain_identifier(char *str, const char *identifier)
against identifiers being an empty string.
2022-10-07 13:12:30 +02:00
Holger Vogt 73ee9e452d Prevent crash when ca or d are not defined. May happen when
.endc is missing.
2022-10-07 13:04:50 +02:00
Holger Vogt ab6e273a5e Remove inner couple {...} from {{...}} only when instance is not
a behavioral source which will be translated to a B source.
2022-10-07 13:01:07 +02:00
Brian Taylor 7f38ce4ebb Remove debug code. 2022-10-07 12:55:42 +02:00
Brian Taylor 9361e9ae6c Follow convention, use eq() macro. Show replacement cards when ngdebug=TRUE. 2022-10-07 12:54:32 +02:00
Brian Taylor e38e1099b5 Create pin and port lists only when variable ps_pins_and_ports is set != 0. 2022-10-07 12:54:17 +02:00
Brian Taylor 528c50dc46 Retain the param: section after removing the optional: section from a Pspice subckt declaration. 2022-10-07 12:53:41 +02:00
Brian Taylor bc8d67d5fa Generate lists of subckt ports indicating direction (in, out, inout.) 2022-10-07 12:51:33 +02:00
Brian Taylor 1fb533a3d4 Stopped memory leak in continuation cards when removing old cards. 2022-10-07 12:51:18 +02:00
Brian Taylor 219ca23635 For debug tracing, list the cards before and after udevice replacements. 2022-10-07 12:50:51 +02:00
Brian Taylor 18e17cefdf Add pullup/down. Skip spurious '*' line. 2022-10-07 12:50:30 +02:00
Brian Taylor 7b5c780043 Fix a memory leak. Cleanup the code a bit. All-digital Pspice subckts with U* devices for most used gates/ff can be handled. More extensive test cases are necessary. Also, interfacing subckts with analog ports is not implemented. 2022-10-07 12:49:46 +02:00
Brian Taylor 96a1b528fd Replace Pspice U* and .model cards with their Xspice equivalent statements. There are still memory leaks which will be plugged next. The .subckts have only digital ports, which will need to addressed for mixed A/D designs. 2022-10-07 12:49:29 +02:00
Brian Taylor a2fd346b1a Trial run at scanning cards for Pspice U* devices and models. #define INTEGRATE_UDEVICES to turn it on. No new cards are created yet, just lots of debugging info. 2022-10-07 12:48:51 +02:00
Holger Vogt 1e304c6e53 Prevent a crash when line is empty 2022-10-07 11:34:39 +02:00
Holger Vogt eb79e91175 This is a fix to bug report 589 by Bohdan Tkhir:
Remove only mfg=something, icrating=, vceo=, type=,
not any combination of text like net_type=... .
Restrict this removal to compatibility modes ps or lt.
2022-10-07 11:32:56 +02:00
Holger Vogt 838ad2b10c Add multiplier flag 'm' to behavioral capacitor and inductor 2022-10-07 11:30:25 +02:00
Holger Vogt b6abcb0436 Searching for params: as plain identifier 2022-04-26 10:37:19 +02:00
Holger Vogt 0be163d8d8 Search for "off" token in device instance lines not with
C standard fcn strstr, but with search_plain_identifier().
Thus allow model names that contain "off" (like offset)
2022-04-26 10:36:24 +02:00
Holger Vogt 4cc6222230 Make function search_plain_identifier non-static
Declare info on the compatibility mode as a 'Note'.
2022-04-25 21:29:25 +02:00
Holger Vogt 696736b2b3 adding expressions in {} as pwl parameters
not complete, still requires caring about the FIXME above.
2022-04-25 21:28:52 +02:00
Holger Vogt 242a1d796a Remove the "type" declaration from a .model line 2022-04-25 21:28:32 +02:00
Holger Vogt f21255ef1b Fix regression bug #579
Accept numbers to ac statement in voltage (current) sources
also given as parameters.
2022-02-22 20:39:20 +01:00
Holger Vogt 0eb272243f Enable RKM notation also for inductors (e.g. 1u2 for 1.2u) 2022-02-07 16:00:29 +01:00
Holger Vogt 632f8c033d Make numoparam error messages more user friendly.
Add line number of netlist to the message.

Original line number added to new lines in inpcom.c.
Internal error messages only when 'ngdebug' is set
2022-01-15 13:43:26 +01:00
Holger Vogt c4e94cd59b safeguard against a crash when the s line is buggy 2022-01-12 15:16:06 +01:00
Holger Vogt b636017359 add function prototype
for insert_new_line()
2021-12-13 22:09:17 +01:00
Holger Vogt 422719200e re-enable parameters in agauss function
fixes bug #564 reported by Stefan Schippers

If nested braces {..{  }...} have been created,
replace the inner { } by ( )
2021-12-13 21:49:18 +01:00
Holger Vogt b749e62e31 Make error message more verbose 2021-12-13 21:48:29 +01:00
Holger Vogt 9dff15507d .probe: Add call to function inp_probe() which resides
in inpc_probe.c.

Make function insert_new_line() non-static

Enable detecting the number of nodes in x-lines
(calls to subciruits) in function get_number_terminals()
2021-12-13 21:47:27 +01:00
Holger Vogt 3f3936c728 Remove memory leaks 2021-12-13 21:34:07 +01:00
Holger Vogt d6038ea43c Redo the transformation vswitch -> pswitch
Parsing takes default values into account, when
parameter is missing.
S vswitch --> pswitch code model
S_ST vswitch (with hysreresis) --> SW switch
S iswitch --> aswitch code model
S_ST iswitch (with hysreresis) --> CSW switch

Use string handling for replacements: allow parameter
equations in .model lines.
2021-10-29 16:37:19 +02:00
Holger Vogt a87b237bff is_a_modelname() to detect a model 1N4148, if compt LT is set.
Rewrite is_a_modelname(), when LT is set: only check element lines
beginning with r and c for RKM notation of a number.

So don't use a RKM number (e.g. 4k7) for naming a resistor model.
2021-10-05 18:01:53 +02:00
Holger Vogt 6f6f2b8996 Remove double assigment to s[1]
Assignment Is either done in the loop or by *y = '\0';
2021-09-29 20:31:22 +02:00
Holger Vogt df5e7e36f6 When checking for µ, truncated the line, when shifted.
Enable R470, when newcompat LT is selected.
2021-09-29 20:30:53 +02:00
Holger Vogt 3dcc36c1c3 ngspice input deck may contain special characters like µ (mu).
Detect mu for ANSI and UTF-8 and translate it to u.
2021-09-29 20:30:35 +02:00
Holger Vogt 601287e949 Check V and I lines for dc and ac.
Allow ac without parameters, a default is set to ac ( 1 0 )
2021-09-29 20:28:15 +02:00
Brian Taylor 81df6ed772 Retaining the mixed case of Cider quoted string valued parameters. Limit searches for ic.file to D*, M*, and Q* device instantiation lines. Cider model (numos, numd, nbjt) detection is limited to .model lines. Continuation lines which do contain these tokens are not checked, but this should rarely happen. All of the examples/cider circuits meet these assumptions. Memory errors have been removed. 2021-09-29 20:27:29 +02:00
Holger Vogt 3599c189b6 re-enable lower-casing of tokens beginning with 'cd',
except for command 'cd' which is usually followed by a space.
2021-09-29 20:27:05 +02:00
Brian Taylor abad190b38 Don't search for ic.file within comments. 2021-09-29 20:23:26 +02:00
Brian Taylor b3a99f0c6c Do not use non-portable strcasestr. 2021-09-29 20:23:08 +02:00
Brian Taylor 663a79dea8 Fix NAN error in numd2 area report and crashes when a doping file is missing. Update examples/cider so that the test circuits all run; add case sensitivity tests for rootfile and ic.file parameter strings enclosed in a single pair of double quotes. 2021-09-29 20:22:56 +02:00
Holger Vogt 9221df234c Patch to allow (and ignore) leading or trailing commas
when putting {} around tokens. Tested with PWL voltage source.

Patch has been suggested by Liqian Zhang
2021-09-29 19:58:36 +02:00
Holger Vogt 9cc9c56cad Don't write past '\0', fixes a bug in commit
1c5e0d11d ("If there is a XSPICE code model .model line with
file input, keep quotes and case for the file path.", 2021-07-15)
2021-07-18 11:19:51 +02:00
Holger Vogt b7473a33a0 Check for double '{', replace the inner '{', '}' by '(', ')'
in .subckt or .model (which both may stem from external sources)
2021-07-18 10:29:16 +02:00
Holger Vogt 1c5e0d11dd If there is a XSPICE code model .model line
with file input, keep quotes and case for the file path.
2021-07-16 10:52:54 +02:00
Holger Vogt 15a3ed87c0 Enable the m parameter in E, G, B, R behavioral source/devices 2021-07-16 10:52:21 +02:00
Holger Vogt ae72677cc2 Remove a false read when curr_line has
already been invalidated.
2021-07-05 19:43:25 +02:00
Holger Vogt 0f25c25c7e Remove a memory leak
Make inp_rem_levels non-static
and use it to remove 'root' after it has been used.
2021-07-05 19:42:14 +02:00
Holger Vogt 93ddc7a3eb Enhancement for E source with table, convert to B source with pwl:
Add G source
Allow 'table' also being part of a parameter name like 'table_something'
2021-07-05 14:32:34 +02:00
Holger Vogt 76eac5aa0f Make error message more verbode 2021-07-05 14:30:35 +02:00
Holger Vogt a4be66b9b0 Prevent crash if there is bad syntax in h, g, e, or f line 2021-07-05 14:30:26 +02:00
Holger Vogt 31fbf910af Crash when trying to delete root and netlist:
Revert the order of deletion: Firstly the root, then the netlist.
2021-07-05 14:30:08 +02:00
Holger Vogt 858689d206 Make syntax check for nesting of .subckt ... .ends more verbose:
Try to find out where .subckt/.ends may be doubled, or missing.
2021-07-05 14:29:50 +02:00
Holger Vogt 52b5e218c7 Add '\f' to characters to be replace by '+'
during the syntax check of an netlist input file.
2021-07-05 14:29:35 +02:00
Holger Vogt dcde7b590e Don't put brackets around dtemp and temp, when they denote
instance parameters and thus are on the left hand side of '='
2021-07-05 14:28:39 +02:00
Holger Vogt 19abc83312 Make the choice of last commit mor obvious 2021-07-05 14:27:23 +02:00
Holger Vogt 87a9d87f7d Replace identifier by func not only after '=', but also '{'
Extension to commit
61e48f984 ("Start replacing identifiers by func only after the first '='", 2021-06-18)
2021-07-05 14:26:57 +02:00
Holger Vogt 68e51848a4 logic condition to check only 'x' lines had not been given 2021-07-05 14:26:46 +02:00