pyedb 0.15.dev0__py3-none-any.whl → 0.17.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/configuration/cfg_common.py +1 -3
- pyedb/configuration/cfg_components.py +49 -5
- pyedb/configuration/cfg_data.py +3 -6
- pyedb/configuration/cfg_package_definition.py +3 -5
- pyedb/configuration/cfg_setup.py +214 -176
- pyedb/configuration/cfg_stackup.py +4 -4
- pyedb/configuration/configuration.py +9 -5
- pyedb/dotnet/edb.py +64 -44
- pyedb/dotnet/edb_core/cell/__init__.py +0 -0
- pyedb/dotnet/edb_core/cell/hierarchy/component.py +12 -17
- pyedb/dotnet/edb_core/cell/hierarchy/hierarchy_obj.py +50 -0
- pyedb/dotnet/edb_core/cell/layout.py +0 -6
- pyedb/dotnet/edb_core/cell/voltage_regulator.py +143 -0
- pyedb/dotnet/edb_core/components.py +2 -2
- pyedb/dotnet/edb_core/dotnet/primitive.py +129 -3
- pyedb/dotnet/edb_core/edb_data/hfss_pi_simulation_setup_data.py +0 -460
- pyedb/dotnet/edb_core/edb_data/primitives_data.py +38 -38
- pyedb/dotnet/edb_core/edb_data/raptor_x_simulation_setup_data.py +1 -1
- pyedb/dotnet/edb_core/layout.py +25 -1
- pyedb/dotnet/edb_core/layout_validation.py +26 -0
- pyedb/dotnet/edb_core/nets.py +1 -1
- pyedb/dotnet/edb_core/sim_setup_data/data/mesh_operation.py +63 -49
- 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 +424 -0
- pyedb/dotnet/edb_core/sim_setup_data/data/sweep_data.py +131 -96
- pyedb/dotnet/edb_core/siwave.py +63 -0
- pyedb/dotnet/edb_core/utilities/hfss_simulation_setup.py +469 -0
- pyedb/dotnet/edb_core/utilities/simulation_setup.py +112 -773
- pyedb/dotnet/edb_core/utilities/siwave_simulation_setup.py +369 -0
- pyedb/misc/siw_feature_config/xtalk_scan/fd_xtalk_scan_config.py +91 -0
- pyedb/misc/siw_feature_config/xtalk_scan/impedance_scan_config.py +70 -0
- pyedb/misc/siw_feature_config/xtalk_scan/net.py +69 -0
- pyedb/misc/siw_feature_config/xtalk_scan/pins.py +60 -0
- pyedb/misc/siw_feature_config/xtalk_scan/scan_config.py +88 -0
- pyedb/misc/siw_feature_config/xtalk_scan/td_xtalk_config.py +104 -0
- pyedb/workflow.py +32 -0
- {pyedb-0.15.dev0.dist-info → pyedb-0.17.0.dist-info}/METADATA +1 -1
- {pyedb-0.15.dev0.dist-info → pyedb-0.17.0.dist-info}/RECORD +42 -28
- {pyedb-0.15.dev0.dist-info → pyedb-0.17.0.dist-info}/LICENSE +0 -0
- {pyedb-0.15.dev0.dist-info → pyedb-0.17.0.dist-info}/WHEEL +0 -0
pyedb/dotnet/edb.py
CHANGED
|
@@ -48,6 +48,7 @@ from pyedb.dotnet.edb_core.cell.terminal.padstack_instance_terminal import (
|
|
|
48
48
|
from pyedb.dotnet.edb_core.cell.terminal.pingroup_terminal import PinGroupTerminal
|
|
49
49
|
from pyedb.dotnet.edb_core.cell.terminal.point_terminal import PointTerminal
|
|
50
50
|
from pyedb.dotnet.edb_core.cell.terminal.terminal import Terminal
|
|
51
|
+
from pyedb.dotnet.edb_core.cell.voltage_regulator import VoltageRegulator
|
|
51
52
|
from pyedb.dotnet.edb_core.components import Components
|
|
52
53
|
from pyedb.dotnet.edb_core.dotnet.database import Database
|
|
53
54
|
from pyedb.dotnet.edb_core.dotnet.layout import LayoutDotNet
|
|
@@ -57,9 +58,6 @@ from pyedb.dotnet.edb_core.edb_data.control_file import (
|
|
|
57
58
|
)
|
|
58
59
|
from pyedb.dotnet.edb_core.edb_data.design_options import EdbDesignOptions
|
|
59
60
|
from pyedb.dotnet.edb_core.edb_data.edbvalue import EdbValue
|
|
60
|
-
from pyedb.dotnet.edb_core.edb_data.hfss_pi_simulation_setup_data import (
|
|
61
|
-
HFSSPISimulationSetup,
|
|
62
|
-
)
|
|
63
61
|
from pyedb.dotnet.edb_core.edb_data.ports import (
|
|
64
62
|
BundleWavePort,
|
|
65
63
|
CircuitPort,
|
|
@@ -93,10 +91,13 @@ from pyedb.dotnet.edb_core.nets import EdbNets
|
|
|
93
91
|
from pyedb.dotnet.edb_core.padstack import EdbPadstacks
|
|
94
92
|
from pyedb.dotnet.edb_core.siwave import EdbSiwave
|
|
95
93
|
from pyedb.dotnet.edb_core.stackup import Stackup
|
|
96
|
-
from pyedb.dotnet.edb_core.utilities.
|
|
94
|
+
from pyedb.dotnet.edb_core.utilities.hfss_simulation_setup import (
|
|
95
|
+
HFSSPISimulationSetup,
|
|
97
96
|
HfssSimulationSetup,
|
|
97
|
+
)
|
|
98
|
+
from pyedb.dotnet.edb_core.utilities.siwave_simulation_setup import (
|
|
98
99
|
SiwaveDCSimulationSetup,
|
|
99
|
-
|
|
100
|
+
SiwaveSimulationSetup,
|
|
100
101
|
)
|
|
101
102
|
from pyedb.generic.constants import AEDT_UNITS, SolverType
|
|
102
103
|
from pyedb.generic.general_methods import (
|
|
@@ -111,6 +112,7 @@ from pyedb.generic.process import SiwaveSolve
|
|
|
111
112
|
from pyedb.generic.settings import settings
|
|
112
113
|
from pyedb.ipc2581.ipc2581 import Ipc2581
|
|
113
114
|
from pyedb.modeler.geometry_operators import GeometryOperators
|
|
115
|
+
from pyedb.workflow import Workflow
|
|
114
116
|
|
|
115
117
|
if is_linux and is_ironpython:
|
|
116
118
|
import subprocessdotnet as subprocess
|
|
@@ -156,7 +158,7 @@ class Edb(Database):
|
|
|
156
158
|
--------
|
|
157
159
|
Create an ``Edb`` object and a new EDB cell.
|
|
158
160
|
|
|
159
|
-
>>> from pyedb
|
|
161
|
+
>>> from pyedb import Edb
|
|
160
162
|
>>> app = Edb()
|
|
161
163
|
|
|
162
164
|
Add a new variable named "s1" to the ``Edb`` instance.
|
|
@@ -510,6 +512,15 @@ class Edb(Database):
|
|
|
510
512
|
terms = [term for term in self.layout.terminals if int(term.GetBoundaryType()) in [3, 4, 7]]
|
|
511
513
|
return {ter.GetName(): ExcitationSources(self, ter) for ter in terms}
|
|
512
514
|
|
|
515
|
+
@property
|
|
516
|
+
def voltage_regulator_modules(self):
|
|
517
|
+
"""Get all voltage regulator modules"""
|
|
518
|
+
vrms = [VoltageRegulator(self, edb_object) for edb_object in list(self.active_layout.VoltageRegulators)]
|
|
519
|
+
_vrms = {}
|
|
520
|
+
for vrm in vrms:
|
|
521
|
+
_vrms[vrm.name] = vrm
|
|
522
|
+
return _vrms
|
|
523
|
+
|
|
513
524
|
@property
|
|
514
525
|
def probes(self):
|
|
515
526
|
"""Get all layout probes."""
|
|
@@ -791,7 +802,7 @@ class Edb(Database):
|
|
|
791
802
|
|
|
792
803
|
Examples
|
|
793
804
|
--------
|
|
794
|
-
>>> from pyedb
|
|
805
|
+
>>> from pyedb import Edb
|
|
795
806
|
>>> edbapp = Edb("myproject.aedb")
|
|
796
807
|
>>> comp = edbapp.components.get_component_by_name("J1")
|
|
797
808
|
"""
|
|
@@ -808,7 +819,7 @@ class Edb(Database):
|
|
|
808
819
|
|
|
809
820
|
Examples
|
|
810
821
|
--------
|
|
811
|
-
>>> from pyedb
|
|
822
|
+
>>> from pyedb import Edb
|
|
812
823
|
>>> edbapp = Edb("myproject.aedb")
|
|
813
824
|
>>> comp = edbapp.components.get_component_by_name("J1")
|
|
814
825
|
"""
|
|
@@ -851,7 +862,7 @@ class Edb(Database):
|
|
|
851
862
|
|
|
852
863
|
Examples
|
|
853
864
|
--------
|
|
854
|
-
>>> from pyedb
|
|
865
|
+
>>> from pyedb import Edb
|
|
855
866
|
>>> edbapp = Edb("myproject.aedb")
|
|
856
867
|
>>> edbapp.stackup.layers["TOP"].thickness = 4e-5
|
|
857
868
|
>>> edbapp.stackup.layers["TOP"].thickness == 4e-05
|
|
@@ -869,7 +880,7 @@ class Edb(Database):
|
|
|
869
880
|
|
|
870
881
|
Examples
|
|
871
882
|
--------
|
|
872
|
-
>>> from pyedb
|
|
883
|
+
>>> from pyedb import Edb
|
|
873
884
|
>>> edbapp = Edb()
|
|
874
885
|
>>> edbapp.materials.add_material("air", permittivity=1.0)
|
|
875
886
|
>>> edbapp.materials.add_debye_material("debye_mat", 5, 3, 0.02, 0.05, 1e5, 1e9)
|
|
@@ -893,7 +904,7 @@ class Edb(Database):
|
|
|
893
904
|
|
|
894
905
|
Examples
|
|
895
906
|
--------
|
|
896
|
-
>>> from pyedb
|
|
907
|
+
>>> from pyedb import Edb
|
|
897
908
|
>>> edbapp = Edb("myproject.aedb")
|
|
898
909
|
>>> p = edbapp.padstacks.create(padstackname="myVia_bullet", antipad_shape="Bullet")
|
|
899
910
|
>>> edbapp.padstacks.get_pad_parameters(
|
|
@@ -915,7 +926,7 @@ class Edb(Database):
|
|
|
915
926
|
|
|
916
927
|
Examples
|
|
917
928
|
--------
|
|
918
|
-
>>> from pyedb
|
|
929
|
+
>>> from pyedb import Edb
|
|
919
930
|
>>> edbapp = Edb("myproject.aedb")
|
|
920
931
|
>>> p = edbapp.padstacks.create(padstackname="myVia_bullet", antipad_shape="Bullet")
|
|
921
932
|
>>> edbapp.padstacks.get_pad_parameters(
|
|
@@ -940,7 +951,7 @@ class Edb(Database):
|
|
|
940
951
|
|
|
941
952
|
Examples
|
|
942
953
|
--------
|
|
943
|
-
>>> from pyedb
|
|
954
|
+
>>> from pyedb import Edb
|
|
944
955
|
>>> edbapp = Edb("myproject.aedb")
|
|
945
956
|
>>> p2 = edbapp.siwave.create_circuit_port_on_net("U2A5", "V3P3_S0", "U2A5", "GND", 50, "test")
|
|
946
957
|
"""
|
|
@@ -957,7 +968,7 @@ class Edb(Database):
|
|
|
957
968
|
|
|
958
969
|
Examples
|
|
959
970
|
--------
|
|
960
|
-
>>> from pyedb
|
|
971
|
+
>>> from pyedb import Edb
|
|
961
972
|
>>> edbapp = Edb("myproject.aedb")
|
|
962
973
|
>>> p2 = edbapp.siwave.create_circuit_port_on_net("U2A5", "V3P3_S0", "U2A5", "GND", 50, "test")
|
|
963
974
|
"""
|
|
@@ -978,7 +989,7 @@ class Edb(Database):
|
|
|
978
989
|
|
|
979
990
|
Examples
|
|
980
991
|
--------
|
|
981
|
-
>>> from pyedb
|
|
992
|
+
>>> from pyedb import Edb
|
|
982
993
|
>>> edbapp = Edb("myproject.aedb")
|
|
983
994
|
>>> edbapp.hfss.configure_hfss_analysis_setup(sim_config)
|
|
984
995
|
"""
|
|
@@ -999,7 +1010,7 @@ class Edb(Database):
|
|
|
999
1010
|
|
|
1000
1011
|
Examples
|
|
1001
1012
|
--------
|
|
1002
|
-
>>> from pyedb
|
|
1013
|
+
>>> from pyedb import Edb
|
|
1003
1014
|
>>> edbapp = Edb("myproject.aedb")
|
|
1004
1015
|
>>> sim_config = edbapp.new_simulation_configuration()
|
|
1005
1016
|
>>> sim_config.mesh_freq = "10Ghz"
|
|
@@ -1022,7 +1033,7 @@ class Edb(Database):
|
|
|
1022
1033
|
|
|
1023
1034
|
Examples
|
|
1024
1035
|
--------
|
|
1025
|
-
>>> from pyedb
|
|
1036
|
+
>>> from pyedb import Edb
|
|
1026
1037
|
>>> edbapp = Edb("myproject.aedb")
|
|
1027
1038
|
>>> edbapp.nets.find_or_create_net("GND")
|
|
1028
1039
|
>>> edbapp.nets.find_and_fix_disjoint_nets("GND", keep_only_main_net=True)
|
|
@@ -1040,7 +1051,7 @@ class Edb(Database):
|
|
|
1040
1051
|
|
|
1041
1052
|
Examples
|
|
1042
1053
|
--------
|
|
1043
|
-
>>> from pyedb
|
|
1054
|
+
>>> from pyedb import Edb
|
|
1044
1055
|
>>> edbapp = Edb"myproject.aedb")
|
|
1045
1056
|
>>> edbapp.nets.find_or_create_net("GND")
|
|
1046
1057
|
>>> edbapp.nets.find_and_fix_disjoint_nets("GND", keep_only_main_net=True)
|
|
@@ -1061,7 +1072,7 @@ class Edb(Database):
|
|
|
1061
1072
|
|
|
1062
1073
|
Examples
|
|
1063
1074
|
--------
|
|
1064
|
-
>>> from pyedb
|
|
1075
|
+
>>> from pyedb import Edb
|
|
1065
1076
|
>>> edbapp = Edb("myproject.aedb")
|
|
1066
1077
|
>>> edbapp.net_classes
|
|
1067
1078
|
"""
|
|
@@ -1079,7 +1090,7 @@ class Edb(Database):
|
|
|
1079
1090
|
|
|
1080
1091
|
Examples
|
|
1081
1092
|
--------
|
|
1082
|
-
>>> from pyedb
|
|
1093
|
+
>>> from pyedb import Edb
|
|
1083
1094
|
>>> edbapp = Edb("myproject.aedb")
|
|
1084
1095
|
>>> edbapp.extended_nets
|
|
1085
1096
|
"""
|
|
@@ -1097,7 +1108,7 @@ class Edb(Database):
|
|
|
1097
1108
|
|
|
1098
1109
|
Examples
|
|
1099
1110
|
--------
|
|
1100
|
-
>>> from pyedb
|
|
1111
|
+
>>> from pyedb import Edb
|
|
1101
1112
|
>>> edbapp = Edb("myproject.aedb")
|
|
1102
1113
|
>>> edbapp.differential_pairs
|
|
1103
1114
|
"""
|
|
@@ -1119,7 +1130,7 @@ class Edb(Database):
|
|
|
1119
1130
|
|
|
1120
1131
|
Examples
|
|
1121
1132
|
--------
|
|
1122
|
-
>>> from pyedb
|
|
1133
|
+
>>> from pyedb import Edb
|
|
1123
1134
|
>>> edbapp = Edb("myproject.aedb")
|
|
1124
1135
|
>>> top_prims = edbapp.modeler.primitives_by_layer["TOP"]
|
|
1125
1136
|
"""
|
|
@@ -1136,7 +1147,7 @@ class Edb(Database):
|
|
|
1136
1147
|
|
|
1137
1148
|
Examples
|
|
1138
1149
|
--------
|
|
1139
|
-
>>> from pyedb
|
|
1150
|
+
>>> from pyedb import Edb
|
|
1140
1151
|
>>> edbapp = Edb("myproject.aedb")
|
|
1141
1152
|
>>> top_prims = edbapp.modeler.primitives_by_layer["TOP"]
|
|
1142
1153
|
"""
|
|
@@ -1233,7 +1244,7 @@ class Edb(Database):
|
|
|
1233
1244
|
|
|
1234
1245
|
Examples
|
|
1235
1246
|
--------
|
|
1236
|
-
>>> from pyedb
|
|
1247
|
+
>>> from pyedb import Edb
|
|
1237
1248
|
>>> edbapp = Edb("myproject.aedb")
|
|
1238
1249
|
>>> pin_net_name = edbapp.pins[424968329].netname
|
|
1239
1250
|
"""
|
|
@@ -1835,7 +1846,7 @@ class Edb(Database):
|
|
|
1835
1846
|
|
|
1836
1847
|
Examples
|
|
1837
1848
|
--------
|
|
1838
|
-
>>> from pyedb
|
|
1849
|
+
>>> from pyedb import Edb
|
|
1839
1850
|
>>> edb = Edb(r'C:\\test.aedb', edbversion="2022.2")
|
|
1840
1851
|
>>> edb.logger.info_timer("Edb Opening")
|
|
1841
1852
|
>>> edb.logger.reset_timer()
|
|
@@ -2451,7 +2462,7 @@ class Edb(Database):
|
|
|
2451
2462
|
|
|
2452
2463
|
Examples
|
|
2453
2464
|
--------
|
|
2454
|
-
>>> from pyedb
|
|
2465
|
+
>>> from pyedb import Edb
|
|
2455
2466
|
>>> edb = Edb(r'C:\\test.aedb', edbversion="2022.2")
|
|
2456
2467
|
>>> edb.logger.info_timer("Edb Opening")
|
|
2457
2468
|
>>> edb.logger.reset_timer()
|
|
@@ -2884,7 +2895,7 @@ class Edb(Database):
|
|
|
2884
2895
|
Examples
|
|
2885
2896
|
--------
|
|
2886
2897
|
|
|
2887
|
-
>>> from pyedb
|
|
2898
|
+
>>> from pyedb import Edb
|
|
2888
2899
|
>>> edb = Edb(edbpath=r"C:\temp\myproject.aedb", edbversion="2023.2")
|
|
2889
2900
|
|
|
2890
2901
|
>>> options_config = {'UNITE_NETS' : 1, 'LAUNCH_Q3D' : 0}
|
|
@@ -2927,7 +2938,7 @@ class Edb(Database):
|
|
|
2927
2938
|
Examples
|
|
2928
2939
|
--------
|
|
2929
2940
|
|
|
2930
|
-
>>> from pyedb
|
|
2941
|
+
>>> from pyedb import Edb
|
|
2931
2942
|
>>> edb = Edb(edbpath=r"C:\temp\myproject.aedb", edbversion="2021.2")
|
|
2932
2943
|
>>> options_config = {'UNITE_NETS' : 1, 'LAUNCH_Q3D' : 0}
|
|
2933
2944
|
>>> edb.write_export3d_option_config_file(r"C:\temp", options_config)
|
|
@@ -2977,7 +2988,7 @@ class Edb(Database):
|
|
|
2977
2988
|
Examples
|
|
2978
2989
|
--------
|
|
2979
2990
|
|
|
2980
|
-
>>> from pyedb
|
|
2991
|
+
>>> from pyedb import Edb
|
|
2981
2992
|
|
|
2982
2993
|
>>> edb = Edb(edbpath=r"C:\temp\myproject.aedb", edbversion="2021.2")
|
|
2983
2994
|
|
|
@@ -3136,7 +3147,7 @@ class Edb(Database):
|
|
|
3136
3147
|
Examples
|
|
3137
3148
|
--------
|
|
3138
3149
|
|
|
3139
|
-
>>> from pyedb
|
|
3150
|
+
>>> from pyedb import Edb
|
|
3140
3151
|
>>> edb_app = Edb()
|
|
3141
3152
|
>>> boolean_1, ant_length = edb_app.add_project_variable("my_local_variable", "1cm")
|
|
3142
3153
|
>>> print(edb_app["$my_local_variable"]) #using getitem
|
|
@@ -3172,7 +3183,7 @@ class Edb(Database):
|
|
|
3172
3183
|
Examples
|
|
3173
3184
|
--------
|
|
3174
3185
|
|
|
3175
|
-
>>> from pyedb
|
|
3186
|
+
>>> from pyedb import Edb
|
|
3176
3187
|
>>> edb_app = Edb()
|
|
3177
3188
|
>>> boolean_1, ant_length = edb_app.add_design_variable("my_local_variable", "1cm")
|
|
3178
3189
|
>>> print(edb_app["my_local_variable"]) #using getitem
|
|
@@ -3210,7 +3221,7 @@ class Edb(Database):
|
|
|
3210
3221
|
Examples
|
|
3211
3222
|
--------
|
|
3212
3223
|
|
|
3213
|
-
>>> from pyedb
|
|
3224
|
+
>>> from pyedb import Edb
|
|
3214
3225
|
>>> edb_app = Edb()
|
|
3215
3226
|
>>> boolean, ant_length = edb_app.add_design_variable("ant_length", "1cm")
|
|
3216
3227
|
>>> boolean, ant_length = edb_app.change_design_variable_value("ant_length", "1m")
|
|
@@ -3255,7 +3266,7 @@ class Edb(Database):
|
|
|
3255
3266
|
Examples
|
|
3256
3267
|
--------
|
|
3257
3268
|
|
|
3258
|
-
>>> from pyedb
|
|
3269
|
+
>>> from pyedb import Edb
|
|
3259
3270
|
>>> from pyedb.dotnet.edb_core.edb_data.simulation_configuration import SimulationConfiguration
|
|
3260
3271
|
>>> config_file = path_configuration_file
|
|
3261
3272
|
>>> source_file = path_to_edb_folder
|
|
@@ -3455,7 +3466,7 @@ class Edb(Database):
|
|
|
3455
3466
|
|
|
3456
3467
|
Examples
|
|
3457
3468
|
--------
|
|
3458
|
-
>>> from pyedb
|
|
3469
|
+
>>> from pyedb import Edb
|
|
3459
3470
|
>>>edb = Edb()
|
|
3460
3471
|
>>> edb.hfss.create_edge_port_vertical(prim_1_id, ["-66mm", "-4mm"], "port_ver")
|
|
3461
3472
|
>>> edb.hfss.create_edge_port_horizontal(
|
|
@@ -3556,7 +3567,7 @@ class Edb(Database):
|
|
|
3556
3567
|
if i.GetType() == self.edb_api.utility.utility.SimulationSetupType.kHFSS:
|
|
3557
3568
|
setups[i.GetName()] = HfssSimulationSetup(self, i)
|
|
3558
3569
|
elif i.GetType() == self.edb_api.utility.utility.SimulationSetupType.kSIWave:
|
|
3559
|
-
setups[i.GetName()] =
|
|
3570
|
+
setups[i.GetName()] = SiwaveSimulationSetup(self, i)
|
|
3560
3571
|
elif i.GetType() == self.edb_api.utility.utility.SimulationSetupType.kSIWaveDCIR:
|
|
3561
3572
|
setups[i.GetName()] = SiwaveDCSimulationSetup(self, i)
|
|
3562
3573
|
elif i.GetType() == self.edb_api.utility.utility.SimulationSetupType.kRaptorX:
|
|
@@ -3594,7 +3605,7 @@ class Edb(Database):
|
|
|
3594
3605
|
-------
|
|
3595
3606
|
Dict[str, :class:`legacy.edb_core.edb_data.siwave_simulation_setup_data.SiwaveSYZSimulationSetup`]
|
|
3596
3607
|
"""
|
|
3597
|
-
return {name: i for name, i in self.setups.items() if isinstance(i,
|
|
3608
|
+
return {name: i for name, i in self.setups.items() if isinstance(i, SiwaveSimulationSetup)}
|
|
3598
3609
|
|
|
3599
3610
|
def create_hfss_setup(self, name=None):
|
|
3600
3611
|
"""Create an HFSS simulation setup from a template.
|
|
@@ -3610,7 +3621,7 @@ class Edb(Database):
|
|
|
3610
3621
|
|
|
3611
3622
|
Examples
|
|
3612
3623
|
--------
|
|
3613
|
-
>>> from pyedb
|
|
3624
|
+
>>> from pyedb import Edb
|
|
3614
3625
|
>>> edbapp = Edb()
|
|
3615
3626
|
>>> setup1 = edbapp.create_hfss_setup("setup1")
|
|
3616
3627
|
>>> setup1.hfss_port_settings.max_delta_z0 = 0.5
|
|
@@ -3620,7 +3631,7 @@ class Edb(Database):
|
|
|
3620
3631
|
return False
|
|
3621
3632
|
elif not name:
|
|
3622
3633
|
name = generate_unique_name("setup")
|
|
3623
|
-
setup = HfssSimulationSetup(self
|
|
3634
|
+
setup = HfssSimulationSetup(self, name=name)
|
|
3624
3635
|
setup.set_solution_single_frequency("1GΗz")
|
|
3625
3636
|
return setup
|
|
3626
3637
|
|
|
@@ -3671,7 +3682,7 @@ class Edb(Database):
|
|
|
3671
3682
|
return False
|
|
3672
3683
|
return HFSSPISimulationSetup(self).create(name)
|
|
3673
3684
|
|
|
3674
|
-
def create_siwave_syz_setup(self, name=None):
|
|
3685
|
+
def create_siwave_syz_setup(self, name=None, **kwargs):
|
|
3675
3686
|
"""Create a setup from a template.
|
|
3676
3687
|
|
|
3677
3688
|
Parameters
|
|
@@ -3685,7 +3696,7 @@ class Edb(Database):
|
|
|
3685
3696
|
|
|
3686
3697
|
Examples
|
|
3687
3698
|
--------
|
|
3688
|
-
>>> from pyedb
|
|
3699
|
+
>>> from pyedb import Edb
|
|
3689
3700
|
>>> edbapp = Edb()
|
|
3690
3701
|
>>> setup1 = edbapp.create_siwave_syz_setup("setup1")
|
|
3691
3702
|
>>> setup1.add_frequency_sweep(frequency_sweep=[
|
|
@@ -3698,10 +3709,12 @@ class Edb(Database):
|
|
|
3698
3709
|
name = generate_unique_name("Siwave_SYZ")
|
|
3699
3710
|
if name in self.setups:
|
|
3700
3711
|
return False
|
|
3701
|
-
|
|
3712
|
+
setup = SiwaveSimulationSetup(self, name=name)
|
|
3713
|
+
for k, v in kwargs.items():
|
|
3714
|
+
setattr(setup, k, v)
|
|
3702
3715
|
return self.setups[name]
|
|
3703
3716
|
|
|
3704
|
-
def create_siwave_dc_setup(self, name=None):
|
|
3717
|
+
def create_siwave_dc_setup(self, name=None, **kwargs):
|
|
3705
3718
|
"""Create a setup from a template.
|
|
3706
3719
|
|
|
3707
3720
|
Parameters
|
|
@@ -3715,7 +3728,7 @@ class Edb(Database):
|
|
|
3715
3728
|
|
|
3716
3729
|
Examples
|
|
3717
3730
|
--------
|
|
3718
|
-
>>> from pyedb
|
|
3731
|
+
>>> from pyedb import Edb
|
|
3719
3732
|
>>> edbapp = Edb()
|
|
3720
3733
|
>>> setup1 = edbapp.create_siwave_dc_setup("setup1")
|
|
3721
3734
|
>>> setup1.mesh_bondwires = True
|
|
@@ -3725,7 +3738,9 @@ class Edb(Database):
|
|
|
3725
3738
|
name = generate_unique_name("Siwave_DC")
|
|
3726
3739
|
if name in self.setups:
|
|
3727
3740
|
return False
|
|
3728
|
-
setup = SiwaveDCSimulationSetup(self
|
|
3741
|
+
setup = SiwaveDCSimulationSetup(self, name=name)
|
|
3742
|
+
for k, v in kwargs.items():
|
|
3743
|
+
setattr(setup, k, v)
|
|
3729
3744
|
return setup
|
|
3730
3745
|
|
|
3731
3746
|
def calculate_initial_extent(self, expansion_factor):
|
|
@@ -4442,3 +4457,8 @@ class Edb(Database):
|
|
|
4442
4457
|
from pyedb.dotnet.edb_core.definition.definitions import Definitions
|
|
4443
4458
|
|
|
4444
4459
|
return Definitions(self)
|
|
4460
|
+
|
|
4461
|
+
@property
|
|
4462
|
+
def workflow(self):
|
|
4463
|
+
"""Workflow class."""
|
|
4464
|
+
return Workflow(self)
|
|
File without changes
|
|
@@ -24,6 +24,7 @@ import logging
|
|
|
24
24
|
import re
|
|
25
25
|
import warnings
|
|
26
26
|
|
|
27
|
+
from pyedb.dotnet.edb_core.cell.hierarchy.hierarchy_obj import Group
|
|
27
28
|
from pyedb.dotnet.edb_core.cell.hierarchy.model import PinPairModel, SPICEModel
|
|
28
29
|
from pyedb.dotnet.edb_core.cell.hierarchy.netlist_model import NetlistModel
|
|
29
30
|
from pyedb.dotnet.edb_core.cell.hierarchy.pin_pair_model import PinPair
|
|
@@ -44,7 +45,7 @@ if not is_ironpython:
|
|
|
44
45
|
from pyedb.generic.general_methods import get_filename_without_extension
|
|
45
46
|
|
|
46
47
|
|
|
47
|
-
class EDBComponent(
|
|
48
|
+
class EDBComponent(Group):
|
|
48
49
|
"""Manages EDB functionalities for components.
|
|
49
50
|
|
|
50
51
|
Parameters
|
|
@@ -56,9 +57,9 @@ class EDBComponent(object):
|
|
|
56
57
|
|
|
57
58
|
"""
|
|
58
59
|
|
|
59
|
-
def __init__(self, pedb,
|
|
60
|
-
|
|
61
|
-
self.edbcomponent =
|
|
60
|
+
def __init__(self, pedb, edb_object):
|
|
61
|
+
super().__init__(pedb, edb_object)
|
|
62
|
+
self.edbcomponent = edb_object
|
|
62
63
|
self._layout_instance = None
|
|
63
64
|
self._comp_instance = None
|
|
64
65
|
|
|
@@ -186,7 +187,10 @@ class EDBComponent(object):
|
|
|
186
187
|
@property
|
|
187
188
|
def enabled(self):
|
|
188
189
|
"""Get or Set the component to active mode."""
|
|
189
|
-
|
|
190
|
+
if self.type.lower() in ["resistor", "capacitor", "inductor"]:
|
|
191
|
+
return self.component_property.IsEnabled()
|
|
192
|
+
else:
|
|
193
|
+
return
|
|
190
194
|
|
|
191
195
|
@enabled.setter
|
|
192
196
|
def enabled(self, value):
|
|
@@ -319,11 +323,11 @@ class EDBComponent(object):
|
|
|
319
323
|
str
|
|
320
324
|
Reference Designator Name.
|
|
321
325
|
"""
|
|
322
|
-
return self.
|
|
326
|
+
return self.name
|
|
323
327
|
|
|
324
328
|
@refdes.setter
|
|
325
329
|
def refdes(self, name):
|
|
326
|
-
self.
|
|
330
|
+
self.name = name
|
|
327
331
|
|
|
328
332
|
@property
|
|
329
333
|
def is_null(self):
|
|
@@ -395,12 +399,7 @@ class EDBComponent(object):
|
|
|
395
399
|
"""
|
|
396
400
|
if self.model_type == "RLC":
|
|
397
401
|
if not self._pin_pairs:
|
|
398
|
-
|
|
399
|
-
return 1e-9
|
|
400
|
-
elif self.type == "Resistor":
|
|
401
|
-
return 1e6
|
|
402
|
-
else:
|
|
403
|
-
return 1
|
|
402
|
+
return
|
|
404
403
|
else:
|
|
405
404
|
pin_pair = self._pin_pairs[0]
|
|
406
405
|
if len([i for i in pin_pair.rlc_enable if i]) == 1:
|
|
@@ -731,10 +730,6 @@ class EDBComponent(object):
|
|
|
731
730
|
"""Set component part name."""
|
|
732
731
|
self.edbcomponent.GetComponentDef().SetName(name)
|
|
733
732
|
|
|
734
|
-
@property
|
|
735
|
-
def _edb(self):
|
|
736
|
-
return self._pedb.edb_api
|
|
737
|
-
|
|
738
733
|
@property
|
|
739
734
|
def placement_layer(self):
|
|
740
735
|
"""Placement layer.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Copyright (C) 2023 - 2024 ANSYS, Inc. and/or its affiliates.
|
|
2
|
+
# SPDX-License-Identifier: MIT
|
|
3
|
+
#
|
|
4
|
+
#
|
|
5
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
# of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
# in the Software without restriction, including without limitation the rights
|
|
8
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
# copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
# furnished to do so, subject to the following conditions:
|
|
11
|
+
#
|
|
12
|
+
# The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
# copies or substantial portions of the Software.
|
|
14
|
+
#
|
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
# SOFTWARE.
|
|
22
|
+
|
|
23
|
+
import logging
|
|
24
|
+
|
|
25
|
+
from pyedb.dotnet.edb_core.cell.layout_obj import Connectable
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class HierarchyObj(Connectable):
|
|
29
|
+
def __init__(self, pedb, edb_object):
|
|
30
|
+
super().__init__(pedb, edb_object)
|
|
31
|
+
|
|
32
|
+
@property
|
|
33
|
+
def component_def(self):
|
|
34
|
+
"""Component definition."""
|
|
35
|
+
return self._edb_object.GetComponentDef().GetName()
|
|
36
|
+
|
|
37
|
+
@property
|
|
38
|
+
def location(self):
|
|
39
|
+
"""XY Coordinates."""
|
|
40
|
+
flag, x, y = self._edb_object.GetLocation()
|
|
41
|
+
if flag:
|
|
42
|
+
return [x, y]
|
|
43
|
+
else: # pragma no cover
|
|
44
|
+
logging.warning(f"Failed to get location of '{self.name}'.")
|
|
45
|
+
return
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
class Group(HierarchyObj):
|
|
49
|
+
def __init__(self, pedb, edb_object):
|
|
50
|
+
super().__init__(pedb, edb_object)
|
|
@@ -84,8 +84,6 @@ class Layout(EdbLayout):
|
|
|
84
84
|
|
|
85
85
|
Parameters
|
|
86
86
|
----------
|
|
87
|
-
layout : :class:`Layout <ansys.edb.layout.Layout>`
|
|
88
|
-
Layout this bondwire will be in.
|
|
89
87
|
bondwire_type : :class:`BondwireType`
|
|
90
88
|
Type of bondwire: kAPDBondWire or kJDECBondWire types.
|
|
91
89
|
definition_name : str
|
|
@@ -96,16 +94,12 @@ class Layout(EdbLayout):
|
|
|
96
94
|
Bondwire width.
|
|
97
95
|
material : str
|
|
98
96
|
Bondwire material name.
|
|
99
|
-
start_context : :class:`CellInstance <ansys.edb.hierarchy.CellInstance>`
|
|
100
|
-
Start context: None means top level.
|
|
101
97
|
start_layer_name : str
|
|
102
98
|
Name of start layer.
|
|
103
99
|
start_x : :class:`Value <ansys.edb.utility.Value>`
|
|
104
100
|
X value of start point.
|
|
105
101
|
start_y : :class:`Value <ansys.edb.utility.Value>`
|
|
106
102
|
Y value of start point.
|
|
107
|
-
end_context : :class:`CellInstance <ansys.edb.hierarchy.CellInstance>`
|
|
108
|
-
End context: None means top level.
|
|
109
103
|
end_layer_name : str
|
|
110
104
|
Name of end layer.
|
|
111
105
|
end_x : :class:`Value <ansys.edb.utility.Value>`
|