pyibis-ami 7.2.3__py3-none-any.whl → 7.2.5__py3-none-any.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.
- {pyibis_ami-7.2.3.dist-info → pyibis_ami-7.2.5.dist-info}/METADATA +133 -134
- pyibis_ami-7.2.5.dist-info/RECORD +27 -0
- {pyibis_ami-7.2.3.dist-info → pyibis_ami-7.2.5.dist-info}/WHEEL +1 -1
- {pyibis_ami-7.2.3.dist-info → pyibis_ami-7.2.5.dist-info}/licenses/LICENSE +8 -8
- pyibisami/IBIS_AMI_Checker.ipynb +1693 -1693
- pyibisami/IBIS_AMI_Tester.ipynb +1457 -1457
- pyibisami/__init__.py +22 -22
- pyibisami/__main__.py +7 -7
- pyibisami/ami/config.py +297 -297
- pyibisami/ami/generic.ami.em +20 -20
- pyibisami/ami/generic.ibs.em +176 -139
- pyibisami/ami/model.py +631 -631
- pyibisami/ami/parameter.py +325 -324
- pyibisami/ami/parser.py +680 -680
- pyibisami/ami/reserved_parameter_names.py +84 -84
- pyibisami/common.py +42 -42
- pyibisami/ibis/file.py +325 -325
- pyibisami/ibis/model.py +399 -399
- pyibisami/ibis/parser.py +525 -525
- pyibisami/tools/run_notebook.py +144 -144
- pyibisami/tools/run_tests.py +273 -273
- pyibisami/tools/test_results.xsl +42 -42
- pyibis_ami-7.2.3.dist-info/RECORD +0 -27
- {pyibis_ami-7.2.3.dist-info → pyibis_ami-7.2.5.dist-info}/entry_points.txt +0 -0
- {pyibis_ami-7.2.3.dist-info → pyibis_ami-7.2.5.dist-info}/top_level.txt +0 -0
pyibisami/ami/generic.ami.em
CHANGED
@@ -1,20 +1,20 @@
|
|
1
|
-
(@model_name
|
2
|
-
|
3
|
-
(Description "@description")
|
4
|
-
|
5
|
-
@{
|
6
|
-
import sys
|
7
|
-
from pyibisami.ami import config as ac
|
8
|
-
|
9
|
-
for (sec_name, sec_key) in [('Reserved_Parameters', 'reserved'), ('Model_Specific', 'model')]:
|
10
|
-
print(" (%s" % sec_name)
|
11
|
-
for param_name in ami_params[sec_key]:
|
12
|
-
param = ami_params[sec_key][param_name]
|
13
|
-
try:
|
14
|
-
ac.print_param(" ", param_name, param)
|
15
|
-
except Exception as e:
|
16
|
-
e.args += (param_name,)
|
17
|
-
raise
|
18
|
-
print(" )")
|
19
|
-
}
|
20
|
-
)
|
1
|
+
(@model_name
|
2
|
+
|
3
|
+
(Description "@description")
|
4
|
+
|
5
|
+
@{
|
6
|
+
import sys
|
7
|
+
from pyibisami.ami import config as ac
|
8
|
+
|
9
|
+
for (sec_name, sec_key) in [('Reserved_Parameters', 'reserved'), ('Model_Specific', 'model')]:
|
10
|
+
print(" (%s" % sec_name)
|
11
|
+
for param_name in ami_params[sec_key]:
|
12
|
+
param = ami_params[sec_key][param_name]
|
13
|
+
try:
|
14
|
+
ac.print_param(" ", param_name, param)
|
15
|
+
except Exception as e:
|
16
|
+
e.args += (param_name,)
|
17
|
+
raise
|
18
|
+
print(" )")
|
19
|
+
}
|
20
|
+
)
|
pyibisami/ami/generic.ibs.em
CHANGED
@@ -1,139 +1,176 @@
|
|
1
|
-
@{
|
2
|
-
from numpy import array
|
3
|
-
|
4
|
-
version = ibis_params['version']
|
5
|
-
file_name = ibis_params['file_name']
|
6
|
-
file_rev = ibis_params['file_rev']
|
7
|
-
copyright = ibis_params['copyright']
|
8
|
-
source = ibis_params['source']
|
9
|
-
component = ibis_params['component']
|
10
|
-
manufacturer = ibis_params['manufacturer']
|
11
|
-
r_pkg = ibis_params['r_pkg']
|
12
|
-
l_pkg = ibis_params['l_pkg']
|
13
|
-
c_pkg = ibis_params['c_pkg']
|
14
|
-
model_name = ibis_params['model_name']
|
15
|
-
model_type = ibis_params['model_type']
|
16
|
-
c_comp = ibis_params['c_comp']
|
17
|
-
c_ref = ibis_params['c_ref']
|
18
|
-
v_ref = ibis_params['v_ref']
|
19
|
-
v_meas = ibis_params['v_meas']
|
20
|
-
r_ref = ibis_params['r_ref']
|
21
|
-
temperature_range = ibis_params['temperature_range']
|
22
|
-
voltage_range = ibis_params['voltage_range']
|
23
|
-
impedance = ibis_params['impedance']
|
24
|
-
slew_rate = ibis_params['slew_rate']
|
25
|
-
}
|
26
|
-
|
27
|
-
[IBIS Ver] @(version)
|
28
|
-
[File Name] @(file_name)
|
29
|
-
[File Rev] @(file_rev)
|
30
|
-
|
31
|
-
[Date] @(date)
|
32
|
-
|
33
|
-
[Source] @(source)
|
34
|
-
|
35
|
-
[Disclaimer]
|
36
|
-
THIS MODEL IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
37
|
-
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
38
|
-
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
39
|
-
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
40
|
-
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
41
|
-
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
42
|
-
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
43
|
-
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
44
|
-
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
45
|
-
OF THIS MODEL, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
46
|
-
|
47
|
-
[Notes]
|
48
|
-
This IBIS file was generated using the template file: "generic.ibs.em".
|
49
|
-
|
50
|
-
[Copyright] @(copyright)
|
51
|
-
|
52
|
-
[
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
print("
|
59
|
-
print("
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
[
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
print("
|
80
|
-
if(model_type ==
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
print("
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
print("
|
99
|
-
print("
|
100
|
-
}
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
print("
|
105
|
-
print("
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
print("
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
print("
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
print("
|
122
|
-
|
123
|
-
print("")
|
124
|
-
|
125
|
-
|
126
|
-
print("
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
print("")
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
print("")
|
137
|
-
|
138
|
-
|
139
|
-
|
1
|
+
@{
|
2
|
+
from numpy import array
|
3
|
+
|
4
|
+
version = ibis_params['version']
|
5
|
+
file_name = ibis_params['file_name']
|
6
|
+
file_rev = ibis_params['file_rev']
|
7
|
+
copyright = ibis_params['copyright']
|
8
|
+
source = ibis_params['source']
|
9
|
+
component = ibis_params['component']
|
10
|
+
manufacturer = ibis_params['manufacturer']
|
11
|
+
r_pkg = ibis_params['r_pkg']
|
12
|
+
l_pkg = ibis_params['l_pkg']
|
13
|
+
c_pkg = ibis_params['c_pkg']
|
14
|
+
model_name = ibis_params['model_name']
|
15
|
+
model_type = ibis_params['model_type']
|
16
|
+
c_comp = ibis_params['c_comp']
|
17
|
+
c_ref = ibis_params['c_ref']
|
18
|
+
v_ref = ibis_params['v_ref']
|
19
|
+
v_meas = ibis_params['v_meas']
|
20
|
+
r_ref = ibis_params['r_ref']
|
21
|
+
temperature_range = ibis_params['temperature_range']
|
22
|
+
voltage_range = ibis_params['voltage_range']
|
23
|
+
impedance = ibis_params['impedance']
|
24
|
+
slew_rate = ibis_params['slew_rate']
|
25
|
+
}
|
26
|
+
|
27
|
+
[IBIS Ver] @(version)
|
28
|
+
[File Name] @(file_name)
|
29
|
+
[File Rev] @(file_rev)
|
30
|
+
|
31
|
+
[Date] @(date)
|
32
|
+
|
33
|
+
[Source] @(source)
|
34
|
+
|
35
|
+
[Disclaimer]
|
36
|
+
THIS MODEL IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
37
|
+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
38
|
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
39
|
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
40
|
+
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
41
|
+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
42
|
+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
43
|
+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
44
|
+
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
45
|
+
OF THIS MODEL, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
46
|
+
|
47
|
+
[Notes]
|
48
|
+
This IBIS file was generated using the template file: "generic.ibs.em".
|
49
|
+
|
50
|
+
[Copyright] @(copyright)
|
51
|
+
|
52
|
+
[Component] @(component)
|
53
|
+
[Manufacturer] @(manufacturer)
|
54
|
+
|
55
|
+
[Package]
|
56
|
+
|
57
|
+
@{
|
58
|
+
print("R_pkg %5.2f %5.2f %5.2f" % (r_pkg[0], r_pkg[1], r_pkg[2]))
|
59
|
+
print("L_pkg %5.2fn %5.2fn %5.2fn" % (l_pkg[0] * 1.e9, l_pkg[1] * 1.e9, l_pkg[2] * 1.e9))
|
60
|
+
print("C_pkg %5.2fp %5.2fp %5.2fp" % (c_pkg[0] * 1.e12, c_pkg[1] * 1.e12, c_pkg[2] * 1.e12))
|
61
|
+
}
|
62
|
+
|
63
|
+
[Pin] signal_name model_name R_pin L_pin C_pin
|
64
|
+
@{
|
65
|
+
if model_type.startswith("Output") or model_type == "Repeater":
|
66
|
+
for n in range(3):
|
67
|
+
print(f"{n + 1}p Tx_{n + 1}_P {model_name}_Tx")
|
68
|
+
print(f"{n + 1}n Tx_{n + 1}_N {model_name}_Tx")
|
69
|
+
if model_type.startswith("Input") or model_type == "Repeater":
|
70
|
+
for n in range(3):
|
71
|
+
print(f"{n + 4}p Rx_{n + 4}_P {model_name}_Rx")
|
72
|
+
print(f"{n + 4}n Rx_{n + 4}_N {model_name}_Rx")
|
73
|
+
}
|
74
|
+
|
75
|
+
[Diff_Pin] inv_pin vdiff tdelay_typ tdelay_min tdelay_max
|
76
|
+
@{
|
77
|
+
if model_type.startswith("Output") or model_type == "Repeater":
|
78
|
+
for n in range(3):
|
79
|
+
print(f"{n + 1}p {n + 1}n 0.1V NA NA NA")
|
80
|
+
if model_type.startswith("Input") or model_type == "Repeater":
|
81
|
+
for n in range(3):
|
82
|
+
print(f"{n + 4}p {n + 4}n 0.1V NA NA NA")
|
83
|
+
}
|
84
|
+
|
85
|
+
@{
|
86
|
+
if model_type == "Repeater":
|
87
|
+
print("[Repeater Pin] tx_non_inv_pin")
|
88
|
+
for n in range(3):
|
89
|
+
print(f" {n + 4}p {n + 1}p")
|
90
|
+
}
|
91
|
+
|
92
|
+
@{
|
93
|
+
if model_type.startswith("Output") or model_type == "Repeater":
|
94
|
+
print(f"[Model] {model_name}_Tx")
|
95
|
+
print("Model_type Output")
|
96
|
+
print(f"C_comp {c_comp[0]*1.e12:5.2f}p {c_comp[1]*1.e12:5.2f}p {c_comp[2]*1.e12:5.2f}p")
|
97
|
+
print(f"Cref = {c_ref}")
|
98
|
+
print(f"Vref = {v_ref}")
|
99
|
+
print(f"Vmeas = {v_meas}")
|
100
|
+
print(f"Rref = {r_ref}")
|
101
|
+
print("")
|
102
|
+
print("[Algorithmic Model]")
|
103
|
+
print(f"Executable linux_gcc4.1.2_32 {model_name}_tx_x86.so {model_name}_tx.ami")
|
104
|
+
print(f"Executable linux_gcc4.1.2_64 {model_name}_tx_x86_amd64.so {model_name}_tx.ami")
|
105
|
+
print(f"Executable Windows_VisualStudio_32 {model_name}_tx_x86.dll {model_name}_tx.ami")
|
106
|
+
print(f"Executable Windows_VisualStudio_64 {model_name}_tx_x86_amd64.dll {model_name}_tx.ami")
|
107
|
+
print("[End Algorithmic Model]")
|
108
|
+
print("")
|
109
|
+
print("[Pulldown]")
|
110
|
+
print(f"{-1.*voltage_range[0]:-5.2f} -10.0 -10.0 -10.0")
|
111
|
+
for v in [k * voltage_range[0] for k in range(2)]:
|
112
|
+
i = v / array(impedance)
|
113
|
+
print(f"{v:-5.2f} {i[0]:-10.3e} {i[1]:-10.3e} {i[2]:-10.3e}")
|
114
|
+
print(f"{2.*voltage_range[0]:-5.2f} 10.0 10.0 10.0")
|
115
|
+
|
116
|
+
print("[Pullup]")
|
117
|
+
print(f"{-1.*voltage_range[0]:-5.2f} 10.0 10.0 10.0")
|
118
|
+
for v in [k * voltage_range[0] for k in range(2)]:
|
119
|
+
i = -1. * v / array(impedance)
|
120
|
+
print(f"{v:-5.2f} {i[0]:-10.3e} {i[1]:-10.3e} {i[2]:-10.3e}")
|
121
|
+
print(f"{2.*voltage_range[0]:-5.2f} -10.0 -10.0 -10.0")
|
122
|
+
|
123
|
+
print("[Ramp]")
|
124
|
+
dv = 0.6 * array([v * 50. / (50. + z) for (v, z) in zip(voltage_range, impedance)])
|
125
|
+
dt = 1.e12 * dv / array(slew_rate)
|
126
|
+
print(f"dV/dt_r {dv[0]:5.3f}/{dt[0]:05.2f}p {dv[1]:5.3f}/{dt[1]:05.2f}p {dv[2]:5.3f}/{dt[2]:05.2f}p")
|
127
|
+
print(f"dV/dt_f {dv[0]:5.3f}/{dt[0]:05.2f}p {dv[1]:5.3f}/{dt[1]:05.2f}p {dv[2]:5.3f}/{dt[2]:05.2f}p")
|
128
|
+
print("")
|
129
|
+
print("[GND Clamp]")
|
130
|
+
print(f"{-1.*voltage_range[0]:-5.2f} 0.0 0.0 0.0")
|
131
|
+
for v in [k * voltage_range[0] for k in range(3)]:
|
132
|
+
i = v / array(impedance) / 2
|
133
|
+
print(f"{v:-5.2f} 0.0 0.0 0.0")
|
134
|
+
print("")
|
135
|
+
print("[Power Clamp]")
|
136
|
+
print(f"{-1.*voltage_range[0]:-5.2f} 0.0 0.0 0.0")
|
137
|
+
for v in [k * voltage_range[0] for k in range(3)]:
|
138
|
+
i = v / array(impedance) / 2
|
139
|
+
print(f"{v:-5.2f} 0.0 0.0 0.0")
|
140
|
+
print("")
|
141
|
+
print(f"[Temperature_Range] {temperature_range[0]:5.1f} {temperature_range[1]:5.1f} {temperature_range[2]:5.1f}")
|
142
|
+
print(f"[Voltage_Range] {voltage_range[0]:5.2f} {voltage_range[1]:5.2f} {voltage_range[2]:5.2f}")
|
143
|
+
}
|
144
|
+
|
145
|
+
@{
|
146
|
+
if model_type.startswith("Input") or model_type == "Repeater":
|
147
|
+
print(f"[Model] {model_name}_Rx")
|
148
|
+
print("Model_type Input")
|
149
|
+
print(f"C_comp {c_comp[0]*1.e12:5.2f}p {c_comp[1]*1.e12:5.2f}p {c_comp[2]*1.e12:5.2f}p")
|
150
|
+
print(f"Vinl = {voltage_range[0]/2.-0.025}")
|
151
|
+
print(f"Vinh = {voltage_range[0]/2.+0.025}")
|
152
|
+
print("")
|
153
|
+
print("[Algorithmic Model]")
|
154
|
+
print(f"Executable linux_gcc4.1.2_32 {model_name}_rx_x86.so {model_name}_rx.ami")
|
155
|
+
print(f"Executable linux_gcc4.1.2_64 {model_name}_rx_x86_amd64.so {model_name}_rx.ami")
|
156
|
+
print(f"Executable Windows_VisualStudio_32 {model_name}_rx_x86.dll {model_name}_rx.ami")
|
157
|
+
print(f"Executable Windows_VisualStudio_64 {model_name}_rx_x86_amd64.dll {model_name}_rx.ami")
|
158
|
+
print("[End Algorithmic Model]")
|
159
|
+
print("")
|
160
|
+
print("[GND Clamp]")
|
161
|
+
print(f"{-1.*voltage_range[0]:-5.2f} -10.0 -10.0 -10.0")
|
162
|
+
for v in [k * voltage_range[0] for k in range(3)]:
|
163
|
+
i = v / array(impedance) / 2
|
164
|
+
print(f"{v:-5.2f} {i[0]:-10.3e} {i[1]:-10.3e} {i[2]:-10.3e}")
|
165
|
+
print("")
|
166
|
+
print("[Power Clamp]")
|
167
|
+
print(f"{-1.*voltage_range[0]:-5.2f} 10.0 10.0 10.0")
|
168
|
+
for v in [k * voltage_range[0] for k in range(3)]:
|
169
|
+
i = v / array(impedance) / 2
|
170
|
+
print(f"{v:-5.2f} {-i[0]:-10.3e} {-i[1]:-10.3e} {-i[2]:-10.3e}")
|
171
|
+
print("")
|
172
|
+
print(f"[Temperature_Range] {temperature_range[0]:5.1f} {temperature_range[1]:5.1f} {temperature_range[2]:5.1f}")
|
173
|
+
print(f"[Voltage_Range] {voltage_range[0]:5.2f} {voltage_range[1]:5.2f} {voltage_range[2]:5.2f}")
|
174
|
+
}
|
175
|
+
|
176
|
+
[END]
|