pyedb 0.14.0__py3-none-any.whl → 0.15.0__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.
Potentially problematic release.
This version of pyedb might be problematic. Click here for more details.
- pyedb/__init__.py +1 -1
- pyedb/dotnet/edb.py +18 -8
- pyedb/dotnet/edb_core/cell/__init__.py +0 -0
- pyedb/dotnet/edb_core/cell/voltage_regulator.py +148 -0
- pyedb/dotnet/edb_core/sim_setup_data/data/settings.py +1 -1
- pyedb/dotnet/edb_core/sim_setup_data/data/sim_setup_info.py +81 -0
- pyedb/dotnet/edb_core/sim_setup_data/data/simulation_settings.py +67 -0
- pyedb/dotnet/edb_core/sim_setup_data/data/sweep_data.py +100 -84
- pyedb/dotnet/edb_core/siwave.py +49 -0
- pyedb/dotnet/edb_core/utilities/hfss_simulation_setup.py +386 -0
- pyedb/dotnet/edb_core/utilities/simulation_setup.py +76 -770
- pyedb/dotnet/edb_core/utilities/siwave_simulation_setup.py +369 -0
- pyedb/siwave.py +24 -16
- {pyedb-0.14.0.dist-info → pyedb-0.15.0.dist-info}/METADATA +3 -3
- {pyedb-0.14.0.dist-info → pyedb-0.15.0.dist-info}/RECORD +17 -11
- {pyedb-0.14.0.dist-info → pyedb-0.15.0.dist-info}/LICENSE +0 -0
- {pyedb-0.14.0.dist-info → pyedb-0.15.0.dist-info}/WHEEL +0 -0
|
@@ -20,6 +20,8 @@
|
|
|
20
20
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
21
|
# SOFTWARE.
|
|
22
22
|
|
|
23
|
+
import warnings
|
|
24
|
+
|
|
23
25
|
|
|
24
26
|
class SweepData(object):
|
|
25
27
|
"""Manages EDB methods for a frequency sweep.
|
|
@@ -29,47 +31,36 @@ class SweepData(object):
|
|
|
29
31
|
sim_setup : :class:`pyedb.dotnet.edb_core.edb_data.siwave_simulation_setup_data.SiwaveSYZSimulationSetup`
|
|
30
32
|
name : str, optional
|
|
31
33
|
Name of the frequency sweep.
|
|
32
|
-
|
|
34
|
+
edb_object : :class:`Ansys.Ansoft.Edb.Utility.SIWDCIRSimulationSettings`, optional
|
|
33
35
|
EDB object. The default is ``None``.
|
|
34
36
|
"""
|
|
35
37
|
|
|
36
|
-
def __init__(self,
|
|
37
|
-
self.
|
|
38
|
+
def __init__(self, pedb, edb_object=None, name: str = None, sim_setup=None):
|
|
39
|
+
self._pedb = pedb
|
|
40
|
+
self.sim_setup = sim_setup
|
|
38
41
|
|
|
39
|
-
if
|
|
40
|
-
self.
|
|
41
|
-
self._name = self.
|
|
42
|
+
if edb_object is not None:
|
|
43
|
+
self._edb_object = edb_object
|
|
44
|
+
self._name = self._edb_object.Name
|
|
42
45
|
else:
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
self._name = name
|
|
47
|
-
self._edb_sweep_data = self._pedb.simsetupdata.SweepData(self._name)
|
|
48
|
-
self.set_frequencies(frequency_sweep)
|
|
49
|
-
|
|
50
|
-
@property
|
|
51
|
-
def _edb_object(self):
|
|
52
|
-
return self._edb_sweep_data
|
|
53
|
-
|
|
54
|
-
@property
|
|
55
|
-
def _pedb(self):
|
|
56
|
-
"""EDB."""
|
|
57
|
-
return self._sim_setup._pedb
|
|
46
|
+
self._name = name
|
|
47
|
+
self._edb_object = self._pedb.simsetupdata.SweepData(self._name)
|
|
48
|
+
self.clear()
|
|
58
49
|
|
|
59
50
|
def _update_sweep(self):
|
|
60
51
|
"""Update the sweep."""
|
|
61
|
-
self.
|
|
62
|
-
self.
|
|
52
|
+
self.sim_setup.delete_frequency_sweep(self)
|
|
53
|
+
self.sim_setup._add_frequency_sweep(self)
|
|
63
54
|
return
|
|
64
55
|
|
|
65
56
|
@property
|
|
66
57
|
def name(self):
|
|
67
58
|
"""Name of the sweep."""
|
|
68
|
-
return self.
|
|
59
|
+
return self._edb_object.Name
|
|
69
60
|
|
|
70
61
|
@name.setter
|
|
71
62
|
def name(self, value):
|
|
72
|
-
self.
|
|
63
|
+
self._edb_object.Name = value
|
|
73
64
|
self._update_sweep()
|
|
74
65
|
|
|
75
66
|
@property
|
|
@@ -80,7 +71,7 @@ class SweepData(object):
|
|
|
80
71
|
@property
|
|
81
72
|
def frequencies(self):
|
|
82
73
|
"""List of frequency points."""
|
|
83
|
-
return list(self.
|
|
74
|
+
return [float(i) for i in list(self._edb_object.Frequencies)]
|
|
84
75
|
|
|
85
76
|
@property
|
|
86
77
|
def adaptive_sampling(self):
|
|
@@ -91,7 +82,7 @@ class SweepData(object):
|
|
|
91
82
|
bool
|
|
92
83
|
``True`` if adaptive sampling is used, ``False`` otherwise.
|
|
93
84
|
"""
|
|
94
|
-
return self.
|
|
85
|
+
return self._edb_object.AdaptiveSampling
|
|
95
86
|
|
|
96
87
|
@property
|
|
97
88
|
def adv_dc_extrapolation(self):
|
|
@@ -102,22 +93,22 @@ class SweepData(object):
|
|
|
102
93
|
bool
|
|
103
94
|
``True`` if advanced DC Extrapolation is used, ``False`` otherwise.
|
|
104
95
|
"""
|
|
105
|
-
return self.
|
|
96
|
+
return self._edb_object.AdvDCExtrapolation
|
|
106
97
|
|
|
107
98
|
@property
|
|
108
99
|
def compute_dc_point(self):
|
|
109
100
|
"""Flag indicating if computing the exact DC point is turned on."""
|
|
110
|
-
return self.
|
|
101
|
+
return self._edb_object.ComputeDCPoint
|
|
111
102
|
|
|
112
103
|
@compute_dc_point.setter
|
|
113
104
|
def compute_dc_point(self, value):
|
|
114
|
-
self.
|
|
105
|
+
self._edb_object.ComputeDCPoint = value
|
|
115
106
|
self._update_sweep()
|
|
116
107
|
|
|
117
108
|
@property
|
|
118
109
|
def auto_s_mat_only_solve(self):
|
|
119
110
|
"""Flag indicating if Auto SMatrix only solve is turned on."""
|
|
120
|
-
return self.
|
|
111
|
+
return self._edb_object.AutoSMatOnlySolve
|
|
121
112
|
|
|
122
113
|
@property
|
|
123
114
|
def enforce_causality(self):
|
|
@@ -128,7 +119,7 @@ class SweepData(object):
|
|
|
128
119
|
bool
|
|
129
120
|
``True`` if enforce causality is used, ``False`` otherwise.
|
|
130
121
|
"""
|
|
131
|
-
return self.
|
|
122
|
+
return self._edb_object.EnforceCausality
|
|
132
123
|
|
|
133
124
|
@property
|
|
134
125
|
def enforce_dc_and_causality(self):
|
|
@@ -139,7 +130,7 @@ class SweepData(object):
|
|
|
139
130
|
bool
|
|
140
131
|
``True`` if enforce dc point and causality is used, ``False`` otherwise.
|
|
141
132
|
"""
|
|
142
|
-
return self.
|
|
133
|
+
return self._edb_object.EnforceDCAndCausality
|
|
143
134
|
|
|
144
135
|
@property
|
|
145
136
|
def enforce_passivity(self):
|
|
@@ -150,7 +141,7 @@ class SweepData(object):
|
|
|
150
141
|
bool
|
|
151
142
|
``True`` if enforce passivity is used, ``False`` otherwise.
|
|
152
143
|
"""
|
|
153
|
-
return self.
|
|
144
|
+
return self._edb_object.EnforcePassivity
|
|
154
145
|
|
|
155
146
|
@property
|
|
156
147
|
def freq_sweep_type(self):
|
|
@@ -166,7 +157,7 @@ class SweepData(object):
|
|
|
166
157
|
str
|
|
167
158
|
Sweep type.
|
|
168
159
|
"""
|
|
169
|
-
return self.
|
|
160
|
+
return self._edb_object.FreqSweepType.ToString()
|
|
170
161
|
|
|
171
162
|
@property
|
|
172
163
|
def interpolation_use_full_basis(self):
|
|
@@ -177,7 +168,7 @@ class SweepData(object):
|
|
|
177
168
|
bool
|
|
178
169
|
``True`` if full basis interpolation is used, ``False`` otherwise.
|
|
179
170
|
"""
|
|
180
|
-
return self.
|
|
171
|
+
return self._edb_object.InterpUseFullBasis
|
|
181
172
|
|
|
182
173
|
@property
|
|
183
174
|
def interpolation_use_port_impedance(self):
|
|
@@ -188,7 +179,7 @@ class SweepData(object):
|
|
|
188
179
|
bool
|
|
189
180
|
``True`` if port impedance is used, ``False`` otherwise.
|
|
190
181
|
"""
|
|
191
|
-
return self.
|
|
182
|
+
return self._edb_object.InterpUsePortImpedance
|
|
192
183
|
|
|
193
184
|
@property
|
|
194
185
|
def interpolation_use_prop_const(self):
|
|
@@ -199,7 +190,7 @@ class SweepData(object):
|
|
|
199
190
|
bool
|
|
200
191
|
``True`` if propagation constants are used, ``False`` otherwise.
|
|
201
192
|
"""
|
|
202
|
-
return self.
|
|
193
|
+
return self._edb_object.InterpUsePropConst
|
|
203
194
|
|
|
204
195
|
@property
|
|
205
196
|
def interpolation_use_s_matrix(self):
|
|
@@ -210,7 +201,7 @@ class SweepData(object):
|
|
|
210
201
|
bool
|
|
211
202
|
``True`` if S matrix are used, ``False`` otherwise.
|
|
212
203
|
"""
|
|
213
|
-
return self.
|
|
204
|
+
return self._edb_object.InterpUseSMatrix
|
|
214
205
|
|
|
215
206
|
@property
|
|
216
207
|
def max_solutions(self):
|
|
@@ -220,7 +211,7 @@ class SweepData(object):
|
|
|
220
211
|
-------
|
|
221
212
|
int
|
|
222
213
|
"""
|
|
223
|
-
return self.
|
|
214
|
+
return self._edb_object.MaxSolutions
|
|
224
215
|
|
|
225
216
|
@property
|
|
226
217
|
def min_freq_s_mat_only_solve(self):
|
|
@@ -231,7 +222,7 @@ class SweepData(object):
|
|
|
231
222
|
str
|
|
232
223
|
Frequency with units.
|
|
233
224
|
"""
|
|
234
|
-
return self.
|
|
225
|
+
return self._edb_object.MinFreqSMatOnlySolve
|
|
235
226
|
|
|
236
227
|
@property
|
|
237
228
|
def min_solved_freq(self):
|
|
@@ -242,7 +233,7 @@ class SweepData(object):
|
|
|
242
233
|
str
|
|
243
234
|
Frequency with units.
|
|
244
235
|
"""
|
|
245
|
-
return self.
|
|
236
|
+
return self._edb_object.MinSolvedFreq
|
|
246
237
|
|
|
247
238
|
@property
|
|
248
239
|
def passivity_tolerance(self):
|
|
@@ -252,7 +243,7 @@ class SweepData(object):
|
|
|
252
243
|
-------
|
|
253
244
|
float
|
|
254
245
|
"""
|
|
255
|
-
return self.
|
|
246
|
+
return self._edb_object.PassivityTolerance
|
|
256
247
|
|
|
257
248
|
@property
|
|
258
249
|
def relative_s_error(self):
|
|
@@ -262,7 +253,7 @@ class SweepData(object):
|
|
|
262
253
|
-------
|
|
263
254
|
float
|
|
264
255
|
"""
|
|
265
|
-
return self.
|
|
256
|
+
return self._edb_object.RelativeSError
|
|
266
257
|
|
|
267
258
|
@property
|
|
268
259
|
def save_fields(self):
|
|
@@ -273,7 +264,7 @@ class SweepData(object):
|
|
|
273
264
|
bool
|
|
274
265
|
``True`` if save fields is enabled, ``False`` otherwise.
|
|
275
266
|
"""
|
|
276
|
-
return self.
|
|
267
|
+
return self._edb_object.SaveFields
|
|
277
268
|
|
|
278
269
|
@property
|
|
279
270
|
def save_rad_fields_only(self):
|
|
@@ -284,7 +275,7 @@ class SweepData(object):
|
|
|
284
275
|
bool
|
|
285
276
|
``True`` if save radiated field only is used, ``False`` otherwise.
|
|
286
277
|
"""
|
|
287
|
-
return self.
|
|
278
|
+
return self._edb_object.SaveRadFieldsOnly
|
|
288
279
|
|
|
289
280
|
@property
|
|
290
281
|
def use_q3d_for_dc(self):
|
|
@@ -295,113 +286,114 @@ class SweepData(object):
|
|
|
295
286
|
bool
|
|
296
287
|
``True`` if Q3d for DC point is used, ``False`` otherwise.
|
|
297
288
|
"""
|
|
298
|
-
return self.
|
|
289
|
+
return self._edb_object.UseQ3DForDC
|
|
299
290
|
|
|
300
291
|
@adaptive_sampling.setter
|
|
301
292
|
def adaptive_sampling(self, value):
|
|
302
|
-
self.
|
|
293
|
+
self._edb_object.AdaptiveSampling = value
|
|
303
294
|
self._update_sweep()
|
|
304
295
|
|
|
305
296
|
@adv_dc_extrapolation.setter
|
|
306
297
|
def adv_dc_extrapolation(self, value):
|
|
307
|
-
self.
|
|
298
|
+
self._edb_object.AdvDCExtrapolation = value
|
|
308
299
|
self._update_sweep()
|
|
309
300
|
|
|
310
301
|
@auto_s_mat_only_solve.setter
|
|
311
302
|
def auto_s_mat_only_solve(self, value):
|
|
312
|
-
self.
|
|
303
|
+
self._edb_object.AutoSMatOnlySolve = value
|
|
313
304
|
self._update_sweep()
|
|
314
305
|
|
|
315
306
|
@enforce_causality.setter
|
|
316
307
|
def enforce_causality(self, value):
|
|
317
|
-
self.
|
|
308
|
+
self._edb_object.EnforceCausality = value
|
|
318
309
|
self._update_sweep()
|
|
319
310
|
|
|
320
311
|
@enforce_dc_and_causality.setter
|
|
321
312
|
def enforce_dc_and_causality(self, value):
|
|
322
|
-
self.
|
|
313
|
+
self._edb_object.EnforceDCAndCausality = value
|
|
323
314
|
self._update_sweep()
|
|
324
315
|
|
|
325
316
|
@enforce_passivity.setter
|
|
326
317
|
def enforce_passivity(self, value):
|
|
327
|
-
self.
|
|
318
|
+
self._edb_object.EnforcePassivity = value
|
|
328
319
|
self._update_sweep()
|
|
329
320
|
|
|
330
321
|
@freq_sweep_type.setter
|
|
331
322
|
def freq_sweep_type(self, value):
|
|
332
|
-
edb_freq_sweep_type = self.
|
|
323
|
+
edb_freq_sweep_type = self._edb_object.TFreqSweepType
|
|
333
324
|
if value in [0, "kInterpolatingSweep"]:
|
|
334
|
-
self.
|
|
325
|
+
self._edb_object.FreqSweepType = edb_freq_sweep_type.kInterpolatingSweep
|
|
335
326
|
elif value in [1, "kDiscreteSweep"]:
|
|
336
|
-
self.
|
|
327
|
+
self._edb_object.FreqSweepType = edb_freq_sweep_type.kDiscreteSweep
|
|
337
328
|
elif value in [2, "kBroadbandFastSweep"]:
|
|
338
|
-
self.
|
|
329
|
+
self._edb_object.FreqSweepType = edb_freq_sweep_type.kBroadbandFastSweep
|
|
339
330
|
elif value in [3, "kNumSweepTypes"]:
|
|
340
|
-
self.
|
|
341
|
-
self.
|
|
331
|
+
self._edb_object.FreqSweepType = edb_freq_sweep_type.kNumSweepTypes
|
|
332
|
+
self._edb_object.FreqSweepType.ToString()
|
|
342
333
|
|
|
343
334
|
@interpolation_use_full_basis.setter
|
|
344
335
|
def interpolation_use_full_basis(self, value):
|
|
345
|
-
self.
|
|
336
|
+
self._edb_object.InterpUseFullBasis = value
|
|
346
337
|
self._update_sweep()
|
|
347
338
|
|
|
348
339
|
@interpolation_use_port_impedance.setter
|
|
349
340
|
def interpolation_use_port_impedance(self, value):
|
|
350
|
-
self.
|
|
341
|
+
self._edb_object.InterpUsePortImpedance = value
|
|
351
342
|
self._update_sweep()
|
|
352
343
|
|
|
353
344
|
@interpolation_use_prop_const.setter
|
|
354
345
|
def interpolation_use_prop_const(self, value):
|
|
355
|
-
self.
|
|
346
|
+
self._edb_object.InterpUsePropConst = value
|
|
356
347
|
self._update_sweep()
|
|
357
348
|
|
|
358
349
|
@interpolation_use_s_matrix.setter
|
|
359
350
|
def interpolation_use_s_matrix(self, value):
|
|
360
|
-
self.
|
|
351
|
+
self._edb_object.InterpUseSMatrix = value
|
|
361
352
|
self._update_sweep()
|
|
362
353
|
|
|
363
354
|
@max_solutions.setter
|
|
364
355
|
def max_solutions(self, value):
|
|
365
|
-
self.
|
|
356
|
+
self._edb_object.MaxSolutions = value
|
|
366
357
|
self._update_sweep()
|
|
367
358
|
|
|
368
359
|
@min_freq_s_mat_only_solve.setter
|
|
369
360
|
def min_freq_s_mat_only_solve(self, value):
|
|
370
|
-
self.
|
|
361
|
+
self._edb_object.MinFreqSMatOnlySolve = value
|
|
371
362
|
self._update_sweep()
|
|
372
363
|
|
|
373
364
|
@min_solved_freq.setter
|
|
374
365
|
def min_solved_freq(self, value):
|
|
375
|
-
self.
|
|
366
|
+
self._edb_object.MinSolvedFreq = value
|
|
376
367
|
self._update_sweep()
|
|
377
368
|
|
|
378
369
|
@passivity_tolerance.setter
|
|
379
370
|
def passivity_tolerance(self, value):
|
|
380
|
-
self.
|
|
371
|
+
self._edb_object.PassivityTolerance = value
|
|
381
372
|
self._update_sweep()
|
|
382
373
|
|
|
383
374
|
@relative_s_error.setter
|
|
384
375
|
def relative_s_error(self, value):
|
|
385
|
-
self.
|
|
376
|
+
self._edb_object.RelativeSError = value
|
|
386
377
|
self._update_sweep()
|
|
387
378
|
|
|
388
379
|
@save_fields.setter
|
|
389
380
|
def save_fields(self, value):
|
|
390
|
-
self.
|
|
381
|
+
self._edb_object.SaveFields = value
|
|
391
382
|
self._update_sweep()
|
|
392
383
|
|
|
393
384
|
@save_rad_fields_only.setter
|
|
394
385
|
def save_rad_fields_only(self, value):
|
|
395
|
-
self.
|
|
386
|
+
self._edb_object.SaveRadFieldsOnly = value
|
|
396
387
|
self._update_sweep()
|
|
397
388
|
|
|
398
389
|
@use_q3d_for_dc.setter
|
|
399
390
|
def use_q3d_for_dc(self, value):
|
|
400
|
-
self.
|
|
391
|
+
self._edb_object.UseQ3DForDC = value
|
|
401
392
|
self._update_sweep()
|
|
402
393
|
|
|
403
394
|
def _set_frequencies(self, freq_sweep_string="Linear Step: 0GHz to 20GHz, step=0.05GHz"):
|
|
404
|
-
|
|
395
|
+
warnings.warn("Use new property :func:`add` instead.", DeprecationWarning)
|
|
396
|
+
self._edb_object.SetFrequencies(freq_sweep_string)
|
|
405
397
|
self._update_sweep()
|
|
406
398
|
|
|
407
399
|
def set_frequencies_linear_scale(self, start="0.1GHz", stop="20GHz", step="50MHz"):
|
|
@@ -421,7 +413,8 @@ class SweepData(object):
|
|
|
421
413
|
bool
|
|
422
414
|
``True`` if correctly executed, ``False`` otherwise.
|
|
423
415
|
"""
|
|
424
|
-
|
|
416
|
+
warnings.warn("Use new property :func:`add` instead.", DeprecationWarning)
|
|
417
|
+
self._edb_object.Frequencies = self._edb_object.SetFrequencies(start, stop, step)
|
|
425
418
|
return self._update_sweep()
|
|
426
419
|
|
|
427
420
|
def set_frequencies_linear_count(self, start="1kHz", stop="0.1GHz", count=10):
|
|
@@ -441,9 +434,10 @@ class SweepData(object):
|
|
|
441
434
|
bool
|
|
442
435
|
``True`` if correctly executed, ``False`` otherwise.
|
|
443
436
|
"""
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
437
|
+
warnings.warn("Use new property :func:`add` instead.", DeprecationWarning)
|
|
438
|
+
start = self.sim_setup._pedb.arg_to_dim(start, "Hz")
|
|
439
|
+
stop = self.sim_setup._pedb.arg_to_dim(stop, "Hz")
|
|
440
|
+
self._edb_object.Frequencies = self._edb_object.SetFrequencies(start, stop, count)
|
|
447
441
|
return self._update_sweep()
|
|
448
442
|
|
|
449
443
|
def set_frequencies_log_scale(self, start="1kHz", stop="0.1GHz", samples=10):
|
|
@@ -463,9 +457,10 @@ class SweepData(object):
|
|
|
463
457
|
bool
|
|
464
458
|
``True`` if correctly executed, ``False`` otherwise.
|
|
465
459
|
"""
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
460
|
+
warnings.warn("Use new property :func:`add` instead.", DeprecationWarning)
|
|
461
|
+
start = self.sim_setup._pedb.arg_to_dim(start, "Hz")
|
|
462
|
+
stop = self.sim_setup._pedb.arg_to_dim(stop, "Hz")
|
|
463
|
+
self._edb_object.Frequencies = self._edb_object.SetLogFrequencies(start, stop, samples)
|
|
469
464
|
return self._update_sweep()
|
|
470
465
|
|
|
471
466
|
def set_frequencies(self, frequency_list=None, update=True):
|
|
@@ -484,6 +479,7 @@ class SweepData(object):
|
|
|
484
479
|
bool
|
|
485
480
|
``True`` if correctly executed, ``False`` otherwise.
|
|
486
481
|
"""
|
|
482
|
+
warnings.warn("Use new property :func:`add` instead.", DeprecationWarning)
|
|
487
483
|
if not frequency_list:
|
|
488
484
|
frequency_list = [
|
|
489
485
|
["linear count", "0", "1kHz", 1],
|
|
@@ -495,15 +491,35 @@ class SweepData(object):
|
|
|
495
491
|
frequency_list = [frequency_list]
|
|
496
492
|
for i in frequency_list:
|
|
497
493
|
if i[0] == "linear count":
|
|
498
|
-
temp.extend(list(self.
|
|
494
|
+
temp.extend(list(self._edb_object.SetFrequencies(i[1], i[2], i[3])))
|
|
499
495
|
elif i[0] == "linear scale":
|
|
500
|
-
temp.extend(list(self.
|
|
496
|
+
temp.extend(list(self._edb_object.SetFrequencies(i[1], i[2], i[3])))
|
|
501
497
|
elif i[0] == "log scale":
|
|
502
|
-
temp.extend(list(self.
|
|
498
|
+
temp.extend(list(self._edb_object.SetLogFrequencies(i[1], i[2], i[3])))
|
|
503
499
|
else:
|
|
504
500
|
return False
|
|
505
|
-
self.
|
|
501
|
+
self._edb_object.Frequencies.Clear()
|
|
506
502
|
for i in temp:
|
|
507
|
-
self.
|
|
503
|
+
self._edb_object.Frequencies.Add(i)
|
|
508
504
|
if update:
|
|
509
505
|
return self._update_sweep()
|
|
506
|
+
|
|
507
|
+
def add(self, sweep_type, start, stop, increment):
|
|
508
|
+
sweep_type = sweep_type.replace(" ", "_")
|
|
509
|
+
if sweep_type in ["linear_count", "linear_scale"]:
|
|
510
|
+
freqs = list(self._edb_object.SetFrequencies(start, stop, increment))
|
|
511
|
+
elif sweep_type == "log_scale":
|
|
512
|
+
freqs = list(self._edb_object.SetLogFrequencies(start, stop, increment))
|
|
513
|
+
else:
|
|
514
|
+
raise ValueError("sweep_type must be either 'linear_count', 'linear_scale' or 'log_scale")
|
|
515
|
+
self.add_frequencies(freqs)
|
|
516
|
+
|
|
517
|
+
def add_frequencies(self, frequencies):
|
|
518
|
+
if not isinstance(frequencies, list):
|
|
519
|
+
frequencies = [frequencies]
|
|
520
|
+
for i in frequencies:
|
|
521
|
+
i = str(self._pedb.edb_value(i).ToDouble())
|
|
522
|
+
self._edb_object.Frequencies.Add(i)
|
|
523
|
+
|
|
524
|
+
def clear(self):
|
|
525
|
+
self._edb_object.Frequencies.Clear()
|
pyedb/dotnet/edb_core/siwave.py
CHANGED
|
@@ -113,6 +113,11 @@ class EdbSiwave(object):
|
|
|
113
113
|
"""Get all probes."""
|
|
114
114
|
return self._pedb.probes
|
|
115
115
|
|
|
116
|
+
@property
|
|
117
|
+
def voltage_regulator_modules(self):
|
|
118
|
+
"""Get all voltage regulator modules"""
|
|
119
|
+
return self._pedb.voltage_regulator_modules
|
|
120
|
+
|
|
116
121
|
@property
|
|
117
122
|
def pin_groups(self):
|
|
118
123
|
"""All Layout Pin groups.
|
|
@@ -1429,6 +1434,50 @@ class EdbSiwave(object):
|
|
|
1429
1434
|
n_terminal = self._pedb.get_point_terminal(name + "_ref", negative_net_name, negative_location, negative_layer)
|
|
1430
1435
|
return self._pedb.create_voltage_probe(p_terminal, n_terminal)
|
|
1431
1436
|
|
|
1437
|
+
def create_vrm_module(
|
|
1438
|
+
self,
|
|
1439
|
+
name=None,
|
|
1440
|
+
is_active=True,
|
|
1441
|
+
voltage="3V",
|
|
1442
|
+
positive_sensor_pin=None,
|
|
1443
|
+
negative_sensor_pin=None,
|
|
1444
|
+
load_regulation_current="1A",
|
|
1445
|
+
load_regulation_percent=0.1,
|
|
1446
|
+
):
|
|
1447
|
+
"""Create a voltage regulator module.
|
|
1448
|
+
|
|
1449
|
+
Parameters
|
|
1450
|
+
----------
|
|
1451
|
+
name : str
|
|
1452
|
+
Name of the voltage regulator.
|
|
1453
|
+
is_active : bool optional
|
|
1454
|
+
Set the voltage regulator active or not. Default value is ``True``.
|
|
1455
|
+
voltage ; str, float
|
|
1456
|
+
Set the voltage value.
|
|
1457
|
+
positive_sensor_pin : int, .class pyedb.dotnet.edb_core.edb_data.padstacks_data.EDBPadstackInstance
|
|
1458
|
+
defining the positive sensor pin.
|
|
1459
|
+
negative_sensor_pin : int, .class pyedb.dotnet.edb_core.edb_data.padstacks_data.EDBPadstackInstance
|
|
1460
|
+
defining the negative sensor pin.
|
|
1461
|
+
load_regulation_current : str or float
|
|
1462
|
+
definition the load regulation current value.
|
|
1463
|
+
load_regulation_percent : float
|
|
1464
|
+
definition the load regulation percent value.
|
|
1465
|
+
"""
|
|
1466
|
+
from pyedb.dotnet.edb_core.cell.voltage_regulator import VoltageRegulator
|
|
1467
|
+
|
|
1468
|
+
voltage = self._pedb.edb_value(voltage)
|
|
1469
|
+
load_regulation_current = self._pedb.edb_value(load_regulation_current)
|
|
1470
|
+
load_regulation_percent = self._pedb.edb_value(load_regulation_percent)
|
|
1471
|
+
edb_vrm = self._edb_object = self._pedb._edb.Cell.VoltageRegulator.Create(
|
|
1472
|
+
self._pedb.active_layout, name, is_active, voltage, load_regulation_current, load_regulation_percent
|
|
1473
|
+
)
|
|
1474
|
+
vrm = VoltageRegulator(self._pedb, edb_vrm)
|
|
1475
|
+
if positive_sensor_pin:
|
|
1476
|
+
vrm.positive_remote_sense_pin = positive_sensor_pin
|
|
1477
|
+
if negative_sensor_pin:
|
|
1478
|
+
vrm.negative_remote_sense_pin = negative_sensor_pin
|
|
1479
|
+
return vrm
|
|
1480
|
+
|
|
1432
1481
|
@property
|
|
1433
1482
|
def icepak_use_minimal_comp_defaults(self):
|
|
1434
1483
|
"""Icepak default setting. If "True", only resistor are active in Icepak simulation.
|