forked from ngspice/ngspice
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
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
- Loading branch information
1 parent
d7bdfe1
commit acfaf02
Showing
65 changed files
with
7,635 additions
and
34 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
FROM python:3.10.4-bullseye | ||
|
||
# python installation | ||
RUN apt-get update && apt-get -y install bc bison flex libxaw7 libxaw7-dev libx11-6 libx11-dev libreadline8 libxmu6 | ||
RUN apt-get update && apt-get -y install build-essential libtool gperf libxml2 libxml2-dev libxml-libxml-perl libgd-perl | ||
RUN apt-get update && apt-get -y install g++ gfortran make cmake libfl-dev libfftw3-dev | ||
|
||
RUN pip install pytest numpy pandas |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
# OSDI implementation for NGSPICE | ||
|
||
OSDI (Open Source Device Interface) is a simulator independent device interface, that is used by the OpenVAF compiler. | ||
Implementing this interface in NGSPICE allows loading Verilog-A models compiled by OpenVAF. | ||
The interface is fixed and does not require the compiler to know about NGSPICE during compilation. | ||
NGSPICE also doesn't need to know anything about the compiled models at compilation. | ||
Therefore, these models can be loaded dynamically at runtime. | ||
|
||
To that end the `osdi` command is provided. | ||
It allows loading a dynamic library conforming to OSDI. | ||
Example usage: `osdi diode.osdi`. | ||
|
||
If used within a netlist the command requires the `pre_` prefix. | ||
This ensures that the devices are loaded before the netlist is parsed. | ||
|
||
Example usage: `pre_osdi diode.osdi` | ||
|
||
If a relative path is provided to the `osdi` command in a netlist, it will resolve that path **relative to the netlist**, not relative to current working directory. | ||
This ensures that netlists can be simulated from any directory | ||
|
||
## Build Instructions | ||
|
||
To compile NGSPICE with OSDI support ensure that the `--enable-predictor` and `--enable-osdi` flags are used. | ||
The `compile_linus.sh` file enables these flags by default. | ||
|
||
|
||
## Example/Test Case | ||
|
||
A simple handwritten diode can be found in `test_cases/diode/diode.c`. | ||
In the same directory a script named `test_diode.py` is provided that will compile this model and run some example simulations. | ||
After the script has finished the compilation result `diode.osdi` and the netlist can then be found in `test_cases/diode/test_osdi`. | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.