vacask-bin 0.3.4.dev4__py3-none-macosx_15_0_arm64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- vacask_bin/__init__.py +19 -0
- vacask_bin/_version.py +1 -0
- vacask_bin/data/bin/lib/libLLVM.dylib +4 -0
- vacask_bin/data/bin/lib/libamd.3.3.4.dylib +0 -0
- vacask_bin/data/bin/lib/libbtf.2.3.3.dylib +0 -0
- vacask_bin/data/bin/lib/libcamd.3.3.5.dylib +0 -0
- vacask_bin/data/bin/lib/libccolamd.3.3.5.dylib +0 -0
- vacask_bin/data/bin/lib/libcholmod.5.3.5.dylib +0 -0
- vacask_bin/data/bin/lib/libcolamd.3.3.5.dylib +0 -0
- vacask_bin/data/bin/lib/libfftw3.3.dylib +0 -0
- vacask_bin/data/bin/lib/libgcc_s.1.1.dylib +0 -0
- vacask_bin/data/bin/lib/libgfortran.5.dylib +0 -0
- vacask_bin/data/bin/lib/libklu.2.3.6.dylib +0 -0
- vacask_bin/data/bin/lib/libomp.dylib +0 -0
- vacask_bin/data/bin/lib/libopenblasp-r0.3.34.dylib +0 -0
- vacask_bin/data/bin/lib/libquadmath.0.dylib +0 -0
- vacask_bin/data/bin/lib/libsuitesparseconfig.7.14.1.dylib +0 -0
- vacask_bin/data/bin/lib/libunwind.1.0.dylib +0 -0
- vacask_bin/data/bin/lib/libzstd.1.5.7.dylib +0 -0
- vacask_bin/data/bin/openvaf-r +0 -0
- vacask_bin/data/bin/vacask +0 -0
- vacask_bin/data/lib/vacask/inc/builtins.inc +9 -0
- vacask_bin/data/lib/vacask/mod/bsim3v3.osdi +0 -0
- vacask_bin/data/lib/vacask/mod/bsim4v8.osdi +0 -0
- vacask_bin/data/lib/vacask/mod/bsimbulk106.osdi +0 -0
- vacask_bin/data/lib/vacask/mod/capacitor.osdi +0 -0
- vacask_bin/data/lib/vacask/mod/diode.osdi +0 -0
- vacask_bin/data/lib/vacask/mod/inductor.osdi +0 -0
- vacask_bin/data/lib/vacask/mod/opamp.osdi +0 -0
- vacask_bin/data/lib/vacask/mod/psp103v4.osdi +0 -0
- vacask_bin/data/lib/vacask/mod/resistor.osdi +0 -0
- vacask_bin/data/lib/vacask/mod/spice/bjt.osdi +0 -0
- vacask_bin/data/lib/vacask/mod/spice/bsim3v3.osdi +0 -0
- vacask_bin/data/lib/vacask/mod/spice/bsim4v8.osdi +0 -0
- vacask_bin/data/lib/vacask/mod/spice/capacitor.osdi +0 -0
- vacask_bin/data/lib/vacask/mod/spice/diode.osdi +0 -0
- vacask_bin/data/lib/vacask/mod/spice/full/bjt.osdi +0 -0
- vacask_bin/data/lib/vacask/mod/spice/full/bsim3v3.osdi +0 -0
- vacask_bin/data/lib/vacask/mod/spice/full/capacitor.osdi +0 -0
- vacask_bin/data/lib/vacask/mod/spice/full/diode.osdi +0 -0
- vacask_bin/data/lib/vacask/mod/spice/full/inductor.osdi +0 -0
- vacask_bin/data/lib/vacask/mod/spice/full/jfet1.osdi +0 -0
- vacask_bin/data/lib/vacask/mod/spice/full/jfet2.osdi +0 -0
- vacask_bin/data/lib/vacask/mod/spice/full/mes1.osdi +0 -0
- vacask_bin/data/lib/vacask/mod/spice/full/mos1.osdi +0 -0
- vacask_bin/data/lib/vacask/mod/spice/full/mos2.osdi +0 -0
- vacask_bin/data/lib/vacask/mod/spice/full/mos3.osdi +0 -0
- vacask_bin/data/lib/vacask/mod/spice/full/mos6.osdi +0 -0
- vacask_bin/data/lib/vacask/mod/spice/full/mos9.osdi +0 -0
- vacask_bin/data/lib/vacask/mod/spice/full/vdmos.osdi +0 -0
- vacask_bin/data/lib/vacask/mod/spice/inductor.osdi +0 -0
- vacask_bin/data/lib/vacask/mod/spice/jfet1.osdi +0 -0
- vacask_bin/data/lib/vacask/mod/spice/jfet2.osdi +0 -0
- vacask_bin/data/lib/vacask/mod/spice/mes1.osdi +0 -0
- vacask_bin/data/lib/vacask/mod/spice/mos1.osdi +0 -0
- vacask_bin/data/lib/vacask/mod/spice/mos2.osdi +0 -0
- vacask_bin/data/lib/vacask/mod/spice/mos3.osdi +0 -0
- vacask_bin/data/lib/vacask/mod/spice/mos6.osdi +0 -0
- vacask_bin/data/lib/vacask/mod/spice/mos9.osdi +0 -0
- vacask_bin/data/lib/vacask/mod/spice/resistor.osdi +0 -0
- vacask_bin/data/lib/vacask/mod/spice/sn/bjt.osdi +0 -0
- vacask_bin/data/lib/vacask/mod/spice/sn/diode.osdi +0 -0
- vacask_bin/data/lib/vacask/mod/spice/sn/jfet1.osdi +0 -0
- vacask_bin/data/lib/vacask/mod/spice/sn/jfet2.osdi +0 -0
- vacask_bin/data/lib/vacask/mod/spice/sn/mes1.osdi +0 -0
- vacask_bin/data/lib/vacask/mod/spice/sn/mos1.osdi +0 -0
- vacask_bin/data/lib/vacask/mod/spice/sn/mos2.osdi +0 -0
- vacask_bin/data/lib/vacask/mod/spice/sn/mos3.osdi +0 -0
- vacask_bin/data/lib/vacask/mod/spice/sn/mos6.osdi +0 -0
- vacask_bin/data/lib/vacask/mod/spice/sn/mos9.osdi +0 -0
- vacask_bin/data/lib/vacask/mod/spice/vdmos.osdi +0 -0
- vacask_bin/data/lib/vacask/mod/tline_ideal.osdi +0 -0
- vacask_bin/data/lib/vacask/mod/vbic_1p3.osdi +0 -0
- vacask_bin/data/lib/vacask/mod/vbic_1p3_4t.osdi +0 -0
- vacask_bin/data/lib/vacask/mod/vbic_1p3_5t.osdi +0 -0
- vacask_bin/data/lib/vacask/python/vacask/__init__.py +56 -0
- vacask_bin/data/lib/vacask/python/vacask/__pycache__/__init__.cpython-315.pyc +0 -0
- vacask_bin/data/lib/vacask/python/vacask/__pycache__/rawfile.cpython-315.pyc +0 -0
- vacask_bin/data/lib/vacask/python/vacask/__pycache__/runtest.cpython-315.pyc +0 -0
- vacask_bin/data/lib/vacask/python/vacask/__pycache__/vacaskpp.cpython-315.pyc +0 -0
- vacask_bin/data/lib/vacask/python/vacask/gf180tovc.py +215 -0
- vacask_bin/data/lib/vacask/python/vacask/helpers.py +60 -0
- vacask_bin/data/lib/vacask/python/vacask/ng2vc.py +113 -0
- vacask_bin/data/lib/vacask/python/vacask/ng2vclib/__init__.py +0 -0
- vacask_bin/data/lib/vacask/python/vacask/ng2vclib/converter.py +148 -0
- vacask_bin/data/lib/vacask/python/vacask/ng2vclib/dfl.py +118 -0
- vacask_bin/data/lib/vacask/python/vacask/ng2vclib/exc.py +10 -0
- vacask_bin/data/lib/vacask/python/vacask/ng2vclib/generators.py +83 -0
- vacask_bin/data/lib/vacask/python/vacask/ng2vclib/m_devices.py +51 -0
- vacask_bin/data/lib/vacask/python/vacask/ng2vclib/m_file.py +380 -0
- vacask_bin/data/lib/vacask/python/vacask/ng2vclib/m_inst_d.py +44 -0
- vacask_bin/data/lib/vacask/python/vacask/ng2vclib/m_inst_m.py +75 -0
- vacask_bin/data/lib/vacask/python/vacask/ng2vclib/m_inst_n.py +33 -0
- vacask_bin/data/lib/vacask/python/vacask/ng2vclib/m_inst_passive.py +255 -0
- vacask_bin/data/lib/vacask/python/vacask/ng2vclib/m_inst_q.py +43 -0
- vacask_bin/data/lib/vacask/python/vacask/ng2vclib/m_inst_x.py +40 -0
- vacask_bin/data/lib/vacask/python/vacask/ng2vclib/m_masters.py +289 -0
- vacask_bin/data/lib/vacask/python/vacask/ng2vclib/m_model.py +79 -0
- vacask_bin/data/lib/vacask/python/vacask/ng2vclib/m_output.py +185 -0
- vacask_bin/data/lib/vacask/python/vacask/ng2vclib/m_params.py +332 -0
- vacask_bin/data/lib/vacask/python/vacask/ng2vclib/patterns.py +42 -0
- vacask_bin/data/lib/vacask/python/vacask/rawfile.py +185 -0
- vacask_bin/data/lib/vacask/python/vacask/runtest.py +47 -0
- vacask_bin/data/lib/vacask/python/vacask/sg13cmos5ltovc.py +584 -0
- vacask_bin/data/lib/vacask/python/vacask/sg13cmos5lxschem.tcl +148 -0
- vacask_bin/data/lib/vacask/python/vacask/sg13g2tovc.py +553 -0
- vacask_bin/data/lib/vacask/python/vacask/sg13g2xschem.tcl +149 -0
- vacask_bin/data/lib/vacask/python/vacask/ts2vc.py +502 -0
- vacask_bin/data/lib/vacask/python/vacask/vacaskpp.py +58 -0
- vacask_bin/data/lib/vacask/python/vacask/xschem2vc.py +94 -0
- vacask_bin-0.3.4.dev4.dist-info/METADATA +6 -0
- vacask_bin-0.3.4.dev4.dist-info/RECORD +115 -0
- vacask_bin-0.3.4.dev4.dist-info/WHEEL +4 -0
- vacask_bin-0.3.4.dev4.dist-info/entry_points.txt +2 -0
- vacask_bin-0.3.4.dev4.dist-info/top_level.txt +1 -0
vacask_bin/__init__.py
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"""Prebuilt VACASK circuit simulator binaries."""
|
|
2
|
+
|
|
3
|
+
import os
|
|
4
|
+
import sys
|
|
5
|
+
|
|
6
|
+
_HERE = os.path.dirname(os.path.abspath(__file__))
|
|
7
|
+
_EXE = '.exe' if sys.platform == 'win32' else ''
|
|
8
|
+
|
|
9
|
+
BIN_DIR = os.path.join(_HERE, 'data', 'bin')
|
|
10
|
+
MOD_DIR = os.path.join(_HERE, 'data', 'lib', 'vacask', 'mod')
|
|
11
|
+
VACASK_CMD = os.path.join(BIN_DIR, 'vacask' + _EXE)
|
|
12
|
+
OPENVAF_CMD = os.path.join(BIN_DIR, 'openvaf-r' + _EXE)
|
|
13
|
+
|
|
14
|
+
from ._version import __version__
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def _run_vacask():
|
|
18
|
+
"""Entry point for the 'vacask' console script."""
|
|
19
|
+
os.execvp(VACASK_CMD, [VACASK_CMD] + sys.argv[1:])
|
vacask_bin/_version.py
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.3.4.dev4"
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# _vacask exists only in the scikit-build package, without it only the helper scripts are available
|
|
2
|
+
import importlib.util
|
|
3
|
+
if importlib.util.find_spec(__name__+"._vacask") is not None:
|
|
4
|
+
from . import _vacask
|
|
5
|
+
else:
|
|
6
|
+
_vacask = None
|
|
7
|
+
|
|
8
|
+
if _vacask is not None:
|
|
9
|
+
def _conf_vacask():
|
|
10
|
+
import os
|
|
11
|
+
this_file = os.path.abspath(__file__)
|
|
12
|
+
this_dir = os.path.dirname(this_file)
|
|
13
|
+
osdi_dir = os.path.normpath(os.path.join(this_dir, "mod"))
|
|
14
|
+
_vacask.simulator.prependModulePath([osdi_dir])
|
|
15
|
+
|
|
16
|
+
_conf_vacask()
|
|
17
|
+
|
|
18
|
+
status = _vacask.status
|
|
19
|
+
from ._vacask.status import *
|
|
20
|
+
|
|
21
|
+
parser = _vacask.parser
|
|
22
|
+
from ._vacask.parser import *
|
|
23
|
+
|
|
24
|
+
parser_output = _vacask.parser_output
|
|
25
|
+
from ._vacask.parser_output import *
|
|
26
|
+
|
|
27
|
+
compiler = _vacask.compiler
|
|
28
|
+
from ._vacask.compiler import *
|
|
29
|
+
|
|
30
|
+
circuit = _vacask.circuit
|
|
31
|
+
from ._vacask.circuit import *
|
|
32
|
+
|
|
33
|
+
analysis = _vacask.analysis
|
|
34
|
+
from ._vacask.analysis import *
|
|
35
|
+
|
|
36
|
+
id = _vacask.id
|
|
37
|
+
from ._vacask.id import *
|
|
38
|
+
|
|
39
|
+
value = _vacask.value
|
|
40
|
+
from ._vacask.value import *
|
|
41
|
+
|
|
42
|
+
simulator = _vacask.simulator
|
|
43
|
+
from ._vacask.simulator import *
|
|
44
|
+
|
|
45
|
+
options = _vacask.options
|
|
46
|
+
from ._vacask.options import *
|
|
47
|
+
|
|
48
|
+
from .helpers import *
|
|
49
|
+
|
|
50
|
+
# Monkeypath the setup function because it always overwrites the "default module path" set above.
|
|
51
|
+
_original_setup = simulator.setup
|
|
52
|
+
def _setup(*args, **kwargs):
|
|
53
|
+
result = _original_setup(*args, **kwargs)
|
|
54
|
+
_conf_vacask()
|
|
55
|
+
return result
|
|
56
|
+
simulator.setup = _setup
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
# gf180tovc.py
|
|
2
|
+
# =============================================================================
|
|
3
|
+
# Convert GlobalFoundries gf180mcuD (ngspice) PDK to VACASK
|
|
4
|
+
# Based on VACASK's sg13g2tovc script
|
|
5
|
+
#
|
|
6
|
+
# =============================================================================
|
|
7
|
+
|
|
8
|
+
import sys, os, shutil, re
|
|
9
|
+
from pathlib import Path
|
|
10
|
+
from .ng2vclib.converter import Converter
|
|
11
|
+
from .ng2vclib.dfl import default_config
|
|
12
|
+
|
|
13
|
+
CONVERT_XSCHEM_SYMBOLS = False
|
|
14
|
+
|
|
15
|
+
tech_file = "sm141064.ngspice"
|
|
16
|
+
tech_file2 = ("design.ngspice", None, None, "design.lib")
|
|
17
|
+
output_path = "../vacask/models/"
|
|
18
|
+
# (section, read_process_depth, output_depth, output_name)
|
|
19
|
+
sections = [
|
|
20
|
+
("typical", None, None, "mos_tt.lib"),
|
|
21
|
+
("ff", None, None, "mos_ff.lib"),
|
|
22
|
+
("ss", None, None, "mos_ss.lib"),
|
|
23
|
+
("fs", None, None, "mos_fs.lib"),
|
|
24
|
+
("sf", None, None, "mos_sf.lib"),
|
|
25
|
+
("bjt_typical", None, None, "bjt_tt.lib"),
|
|
26
|
+
("bjt_ss", None, None, "bjt_ss.lib"),
|
|
27
|
+
("bjt_ff", None, None, "bjt_ff.lib"),
|
|
28
|
+
("diode_typical", None, None, "diode_tt.lib"),
|
|
29
|
+
("diode_ff", None, None, "diode_ff.lib"),
|
|
30
|
+
("diode_ss", None, None, "diode_ss.lib"),
|
|
31
|
+
("res_typical", None, None, "res_tt.lib"),
|
|
32
|
+
("res_ff", None, None, "res_ff.lib"),
|
|
33
|
+
("res_ss", None, None, "res_ss.lib"),
|
|
34
|
+
("mimcap_typical", None, None, "mimcap_tt.lib"),
|
|
35
|
+
("mimcap_ff", None, None, "mimcap_ff.lib"),
|
|
36
|
+
("mimcap_ss", None, None, "mimcap_ss.lib"),
|
|
37
|
+
("moscap_typical", None, None, "moscap_tt.lib"),
|
|
38
|
+
("moscap_ff", None, None, "moscap_ff.lib"),
|
|
39
|
+
("moscap_ss", None, None, "moscap_ss.lib"),
|
|
40
|
+
("statistical", None, None, "statistical.lib"),
|
|
41
|
+
("noise_corner", None, None, "noise_corner.lib")
|
|
42
|
+
]
|
|
43
|
+
|
|
44
|
+
## Known-bug patches template
|
|
45
|
+
patches = {
|
|
46
|
+
"sm141064.ngspice": [
|
|
47
|
+
(
|
|
48
|
+
".subckt nplus_u_m1 1 2 3 lr=lr wr=wr dtemp=0",
|
|
49
|
+
".subckt nplus_u_m1 1 2 3 lr=-1 wr=-1 dtemp=0"
|
|
50
|
+
),
|
|
51
|
+
(
|
|
52
|
+
".subckt pplus_u_m1 1 2 3 lr=lr wr=wr dtemp=0",
|
|
53
|
+
".subckt pplus_u_m1 1 2 3 lr=-1 wr=-1 dtemp=0"
|
|
54
|
+
),
|
|
55
|
+
(
|
|
56
|
+
".subckt pplus_u_m2 1 2 3 lr=lr wr=wr dtemp=0",
|
|
57
|
+
".subckt pplus_u_m2 1 2 3 lr=-1 wr=-1 dtemp=0"
|
|
58
|
+
),
|
|
59
|
+
],
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
family_map_update = {
|
|
64
|
+
("mos", 54, None): ("spice/bsim4v8.osdi", "sp_bsim4v8", {}),
|
|
65
|
+
("mos", 54, "4.5"): ("spice/bsim4v8.osdi", "sp_bsim4v8", {}),
|
|
66
|
+
("mos", 54, "4.6"): ("spice/bsim4v8.osdi", "sp_bsim4v8", {}),
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
remove_model_params_update = {
|
|
70
|
+
"sp_bsim4v8": {
|
|
71
|
+
"rgeomod"
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
subckt_multiplier_update = {}
|
|
76
|
+
|
|
77
|
+
if __name__ == "__main__":
|
|
78
|
+
# Environment
|
|
79
|
+
pdkroot = os.getenv("PDK_ROOT")
|
|
80
|
+
if pdkroot is None:
|
|
81
|
+
print("The PDK_ROOT environmental variable must point to the PDK directory.")
|
|
82
|
+
sys.exit(1)
|
|
83
|
+
pdk = os.getenv("PDK")
|
|
84
|
+
if pdk is None:
|
|
85
|
+
pdk = "gf180mcuD"
|
|
86
|
+
|
|
87
|
+
# Source directories
|
|
88
|
+
tech_src = os.path.realpath(os.path.join(pdkroot, pdk, "libs.tech", "ngspice"))
|
|
89
|
+
# Source directory (stdcell)
|
|
90
|
+
stdcell_src = os.path.realpath(os.path.join(pdkroot, pdk, "libs.ref", "gf180mcu_fd_sc_mcu9t5v0", "spice"))
|
|
91
|
+
# Source directory (io)
|
|
92
|
+
io_src = os.path.realpath(os.path.join(pdkroot, pdk, "libs.ref", "gf180mcu_fd_io", "spice"))
|
|
93
|
+
|
|
94
|
+
# Convert tech files
|
|
95
|
+
osdi_files = set()
|
|
96
|
+
dflmods = set()
|
|
97
|
+
print("Converting technology files")
|
|
98
|
+
|
|
99
|
+
# extra file
|
|
100
|
+
file, read_process_depth, output_depth, output_name = tech_file2
|
|
101
|
+
destpath = output_path + output_name
|
|
102
|
+
cfg = default_config()
|
|
103
|
+
cfg.update({
|
|
104
|
+
"default_model_prefix": "gf180_default_mod_",
|
|
105
|
+
"sourcepath": [".", tech_src, stdcell_src, io_src],
|
|
106
|
+
"read_depth": read_process_depth,
|
|
107
|
+
"process_depth": read_process_depth,
|
|
108
|
+
"output_depth": output_depth,
|
|
109
|
+
"patch": patches,
|
|
110
|
+
"original_case_subckt": True,
|
|
111
|
+
"original_case_model": True,
|
|
112
|
+
})
|
|
113
|
+
cfg["family_map"].update(family_map_update)
|
|
114
|
+
cfg["remove_model_params"].update(remove_model_params_update)
|
|
115
|
+
cfg["subckt_multiplier"].update(subckt_multiplier_update)
|
|
116
|
+
cfg["signature"] = "// Converted from GlobalFoundries gf180mcuD PDK for Ngspice\n"
|
|
117
|
+
|
|
118
|
+
cvt = Converter(cfg, indent=4, debug=1)
|
|
119
|
+
cvt.convert(file, destpath)
|
|
120
|
+
|
|
121
|
+
# multiple sections in the same file
|
|
122
|
+
for section, read_process_depth, output_depth, output_name in sections:
|
|
123
|
+
print(" ", tech_file, "section", section)
|
|
124
|
+
destpath = output_path + output_name
|
|
125
|
+
|
|
126
|
+
cfg = default_config()
|
|
127
|
+
cfg.update({
|
|
128
|
+
"default_model_prefix": "gf180_default_mod_",
|
|
129
|
+
"sourcepath": [".", tech_src, stdcell_src, io_src],
|
|
130
|
+
"read_depth": read_process_depth,
|
|
131
|
+
"process_depth": read_process_depth,
|
|
132
|
+
"output_depth": output_depth,
|
|
133
|
+
"patch": patches,
|
|
134
|
+
"original_case_subckt": True,
|
|
135
|
+
"original_case_model": True,
|
|
136
|
+
})
|
|
137
|
+
cfg["family_map"].update(family_map_update)
|
|
138
|
+
cfg["remove_model_params"].update(remove_model_params_update)
|
|
139
|
+
cfg["subckt_multiplier"].update(subckt_multiplier_update)
|
|
140
|
+
cfg["signature"] = "// Converted from GlobalFoundries gf180mcuD PDK for Ngspice\n"
|
|
141
|
+
|
|
142
|
+
cvt = Converter(cfg, indent=4, debug=1)
|
|
143
|
+
cvt.convert(tech_file, destpath, section)
|
|
144
|
+
|
|
145
|
+
# OSDI files based on defined and used models
|
|
146
|
+
for mname, in_sub in cvt.data["model_usage"]:
|
|
147
|
+
if (None, in_sub) in cvt.data["models"]:
|
|
148
|
+
# simple models
|
|
149
|
+
if mname in cvt.data["models"][(None, in_sub)]:
|
|
150
|
+
builtin, mtype, family, level, version, _ = cvt.data["models"][(None, in_sub)][mname]
|
|
151
|
+
k = family, level, version
|
|
152
|
+
if k in cvt.cfg["family_map"]:
|
|
153
|
+
osdi_file, _, _ = cvt.cfg["family_map"][k]
|
|
154
|
+
osdi_files.add(osdi_file)
|
|
155
|
+
else:
|
|
156
|
+
# binned models
|
|
157
|
+
if mname in cvt.data["bins"][(None, in_sub)]:
|
|
158
|
+
builtin, mtype, family, level, version, _ = cvt.data["bins"][(None, in_sub)][mname][0]
|
|
159
|
+
k = family, level, version
|
|
160
|
+
if k in cvt.cfg["family_map"]:
|
|
161
|
+
osdi_file, _, _ = cvt.cfg["family_map"][k]
|
|
162
|
+
osdi_files.add(osdi_file)
|
|
163
|
+
|
|
164
|
+
# OSDI files based on builtin models
|
|
165
|
+
for mt in cvt.data["default_models_needed"]:
|
|
166
|
+
osdi_file, module = cvt.cfg["default_models"][mt]
|
|
167
|
+
osdi_files.add(osdi_file)
|
|
168
|
+
dflmods.add((mt, module))
|
|
169
|
+
print("\n")
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
# Create .vacaskrc.toml
|
|
173
|
+
# with output path prefixes and path to osdi modules
|
|
174
|
+
print("Creating sample .vacaskrc.toml")
|
|
175
|
+
vacask_cfg = """# VACASK configuration file
|
|
176
|
+
[Paths]
|
|
177
|
+
include_path_prefix = [
|
|
178
|
+
"$(PDK_ROOT)/$(PDK)/libs.tech/vacask/models",
|
|
179
|
+
"$(PDK_ROOT)/$(PDK)/libs.ref/gf180mcu_fd_sc_mcu9t5v0/vacask",
|
|
180
|
+
"$(PDK_ROOT)/$(PDK)/libs.ref/gf180mcu_fd_io/vacask"
|
|
181
|
+
]
|
|
182
|
+
module_path_prefix = ["/opt/vacask/lib/vacask/mod"]
|
|
183
|
+
"""
|
|
184
|
+
with open(os.path.join(pdkroot, pdk, "libs.tech", "vacask", ".vacaskrc.toml"), "w") as f:
|
|
185
|
+
f.write(vacask_cfg)
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
# Common include file (load statements + default model declarations)
|
|
189
|
+
print("Creating common include file")
|
|
190
|
+
txt = ""
|
|
191
|
+
if len(osdi_files) > 0:
|
|
192
|
+
txt += "// OSDI files\n"
|
|
193
|
+
for f in sorted(list(osdi_files)):
|
|
194
|
+
txt += "load \"" + f + "\"\n"
|
|
195
|
+
if len(dflmods) > 0:
|
|
196
|
+
txt += "\n"
|
|
197
|
+
if len(dflmods) > 0:
|
|
198
|
+
txt += "// Default models\n"
|
|
199
|
+
for mt, module in sorted(dflmods, key=lambda p: p[0]):
|
|
200
|
+
txt += "model " + cfg["default_model_prefix"] + mt + " " + module + "\n"
|
|
201
|
+
|
|
202
|
+
common_include = os.path.realpath(
|
|
203
|
+
os.path.join(tech_src, "..", "vacask", "models", "gf180_vacask_common.lib")
|
|
204
|
+
)
|
|
205
|
+
print(" ", common_include)
|
|
206
|
+
os.makedirs(os.path.dirname(common_include), exist_ok=True)
|
|
207
|
+
with open(common_include, "w") as f:
|
|
208
|
+
f.write(txt)
|
|
209
|
+
|
|
210
|
+
# # Xschem symbol conversion
|
|
211
|
+
# if CONVERT_XSCHEM_SYMBOLS:
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
print("\nDone")
|
|
215
|
+
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import os
|
|
2
|
+
from ._vacask.parser_output import PTParameterValue
|
|
3
|
+
from ._vacask.parser_output import PTParameterExpression
|
|
4
|
+
from ._vacask.parser_output import PTParsedIdentifier
|
|
5
|
+
from ._vacask.id import Id
|
|
6
|
+
from ._vacask.value import Value
|
|
7
|
+
from ._vacask.rpnexpr import Rpn
|
|
8
|
+
from ._vacask.compiler import OpenvafCompiler
|
|
9
|
+
|
|
10
|
+
def PV(ident:str, value) -> PTParameterValue:
|
|
11
|
+
"""
|
|
12
|
+
Create a parameter value object.
|
|
13
|
+
|
|
14
|
+
Args:
|
|
15
|
+
ident (str): The identifier of the parameter.
|
|
16
|
+
value: The value of the parameter.
|
|
17
|
+
|
|
18
|
+
Returns:
|
|
19
|
+
PTParameterValue: A parameter value object.
|
|
20
|
+
"""
|
|
21
|
+
return PTParameterValue(Id(ident), Value(value))
|
|
22
|
+
|
|
23
|
+
def PE(ident:str, expr: Rpn) -> PTParameterExpression:
|
|
24
|
+
"""
|
|
25
|
+
Create a parameter expression object.
|
|
26
|
+
|
|
27
|
+
Args:
|
|
28
|
+
ident (str): The identifier of the parameter.
|
|
29
|
+
expr (Rpn): The RPN expression of the parameter.
|
|
30
|
+
|
|
31
|
+
Returns:
|
|
32
|
+
PTParameterExpression: A parameter expression object.
|
|
33
|
+
"""
|
|
34
|
+
return PTParameterExpression(Id(ident), expr)
|
|
35
|
+
|
|
36
|
+
def PTIds(ids: list[str]) -> list[PTParsedIdentifier]:
|
|
37
|
+
"""
|
|
38
|
+
Convert a list of string identifiers to a list of PTParsedIdentifier objects.
|
|
39
|
+
|
|
40
|
+
Args:
|
|
41
|
+
ids (list[str]): A list of string identifiers.
|
|
42
|
+
|
|
43
|
+
Returns:
|
|
44
|
+
list[PTParsedIdentifier]: A list of PTParsedIdentifier objects.
|
|
45
|
+
"""
|
|
46
|
+
return [PTParsedIdentifier(Id(i)) for i in ids]
|
|
47
|
+
|
|
48
|
+
def OpenvafCompilerBuiltin() -> OpenvafCompiler:
|
|
49
|
+
"""
|
|
50
|
+
Returns the pre-build in-packagen openvaf compililer object.
|
|
51
|
+
|
|
52
|
+
Args: /
|
|
53
|
+
|
|
54
|
+
Returns:
|
|
55
|
+
OpenvafCompiler: object
|
|
56
|
+
"""
|
|
57
|
+
this_file = os.path.abspath(__file__)
|
|
58
|
+
this_dir = os.path.dirname(this_file)
|
|
59
|
+
_def_openvaf_path = os.path.normpath(os.path.join(this_dir, "bin", "openvaf-r"))
|
|
60
|
+
return OpenvafCompiler(_def_openvaf_path)
|