pyedb 0.14.1__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.

@@ -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
- edb_sweep_data : :class:`Ansys.Ansoft.Edb.Utility.SIWDCIRSimulationSettings`, optional
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, sim_setup, frequency_sweep=None, name=None, edb_sweep_data=None):
37
- self._sim_setup = sim_setup
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 edb_sweep_data:
40
- self._edb_sweep_data = edb_sweep_data
41
- self._name = self._edb_sweep_data.Name
42
+ if edb_object is not None:
43
+ self._edb_object = edb_object
44
+ self._name = self._edb_object.Name
42
45
  else:
43
- if not name:
44
- self._name = generate_unique_name("sweep")
45
- else:
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._sim_setup.delete_frequency_sweep(self)
62
- self._sim_setup._add_frequency_sweep(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._edb_sweep_data.Name
59
+ return self._edb_object.Name
69
60
 
70
61
  @name.setter
71
62
  def name(self, value):
72
- self._edb_sweep_data.Name = value
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._edb_sweep_data.Frequencies)
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._edb_sweep_data.AdaptiveSampling
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._edb_sweep_data.AdvDCExtrapolation
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._edb_sweep_data.ComputeDCPoint
101
+ return self._edb_object.ComputeDCPoint
111
102
 
112
103
  @compute_dc_point.setter
113
104
  def compute_dc_point(self, value):
114
- self._edb_sweep_data.ComputeDCPoint = value
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._edb_sweep_data.AutoSMatOnlySolve
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._edb_sweep_data.EnforceCausality
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._edb_sweep_data.EnforceDCAndCausality
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._edb_sweep_data.EnforcePassivity
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._edb_sweep_data.FreqSweepType.ToString()
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._edb_sweep_data.InterpUseFullBasis
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._edb_sweep_data.InterpUsePortImpedance
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._edb_sweep_data.InterpUsePropConst
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._edb_sweep_data.InterpUseSMatrix
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._edb_sweep_data.MaxSolutions
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._edb_sweep_data.MinFreqSMatOnlySolve
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._edb_sweep_data.MinSolvedFreq
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._edb_sweep_data.PassivityTolerance
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._edb_sweep_data.RelativeSError
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._edb_sweep_data.SaveFields
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._edb_sweep_data.SaveRadFieldsOnly
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._edb_sweep_data.UseQ3DForDC
289
+ return self._edb_object.UseQ3DForDC
299
290
 
300
291
  @adaptive_sampling.setter
301
292
  def adaptive_sampling(self, value):
302
- self._edb_sweep_data.AdaptiveSampling = value
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._edb_sweep_data.AdvDCExtrapolation = value
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._edb_sweep_data.AutoSMatOnlySolve = value
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._edb_sweep_data.EnforceCausality = value
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._edb_sweep_data.EnforceDCAndCausality = value
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._edb_sweep_data.EnforcePassivity = value
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._edb_sweep_data.TFreqSweepType
323
+ edb_freq_sweep_type = self._edb_object.TFreqSweepType
333
324
  if value in [0, "kInterpolatingSweep"]:
334
- self._edb_sweep_data.FreqSweepType = edb_freq_sweep_type.kInterpolatingSweep
325
+ self._edb_object.FreqSweepType = edb_freq_sweep_type.kInterpolatingSweep
335
326
  elif value in [1, "kDiscreteSweep"]:
336
- self._edb_sweep_data.FreqSweepType = edb_freq_sweep_type.kDiscreteSweep
327
+ self._edb_object.FreqSweepType = edb_freq_sweep_type.kDiscreteSweep
337
328
  elif value in [2, "kBroadbandFastSweep"]:
338
- self._edb_sweep_data.FreqSweepType = edb_freq_sweep_type.kBroadbandFastSweep
329
+ self._edb_object.FreqSweepType = edb_freq_sweep_type.kBroadbandFastSweep
339
330
  elif value in [3, "kNumSweepTypes"]:
340
- self._edb_sweep_data.FreqSweepType = edb_freq_sweep_type.kNumSweepTypes
341
- self._edb_sweep_data.FreqSweepType.ToString()
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._edb_sweep_data.InterpUseFullBasis = value
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._edb_sweep_data.InterpUsePortImpedance = value
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._edb_sweep_data.InterpUsePropConst = value
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._edb_sweep_data.InterpUseSMatrix = value
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._edb_sweep_data.MaxSolutions = value
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._edb_sweep_data.MinFreqSMatOnlySolve = value
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._edb_sweep_data.MinSolvedFreq = value
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._edb_sweep_data.PassivityTolerance = value
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._edb_sweep_data.RelativeSError = value
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._edb_sweep_data.SaveFields = value
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._edb_sweep_data.SaveRadFieldsOnly = value
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._edb_sweep_data.UseQ3DForDC = value
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
- self._edb_sweep_data.SetFrequencies(freq_sweep_string)
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
- self._edb_sweep_data.Frequencies = self._edb_sweep_data.SetFrequencies(start, stop, step)
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
- start = self._sim_setup._pedb.arg_to_dim(start, "Hz")
445
- stop = self._sim_setup._pedb.arg_to_dim(stop, "Hz")
446
- self._edb_sweep_data.Frequencies = self._edb_sweep_data.SetFrequencies(start, stop, count)
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
- start = self._sim_setup._pedb.arg_to_dim(start, "Hz")
467
- stop = self._sim_setup._pedb.arg_to_dim(stop, "Hz")
468
- self._edb_sweep_data.Frequencies = self._edb_sweep_data.SetLogFrequencies(start, stop, samples)
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._edb_sweep_data.SetFrequencies(i[1], i[2], i[3])))
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._edb_sweep_data.SetFrequencies(i[1], i[2], i[3])))
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._edb_sweep_data.SetLogFrequencies(i[1], i[2], i[3])))
498
+ temp.extend(list(self._edb_object.SetLogFrequencies(i[1], i[2], i[3])))
503
499
  else:
504
500
  return False
505
- self._edb_sweep_data.Frequencies.Clear()
501
+ self._edb_object.Frequencies.Clear()
506
502
  for i in temp:
507
- self._edb_sweep_data.Frequencies.Add(i)
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()
@@ -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.