SimulationConfiguration#
- class pyedb.dotnet.database.edb_data.simulation_configuration.SimulationConfiguration(filename=None, edb=None)#
Bases:
objectProvides an ASCII simulation configuration file parser.
This parser supports all types of inputs for setting up and automating any kind of SI or PI simulation with HFSS 3D Layout or Siwave. If fields are omitted, default values are applied. This class can be instantiated directly from Configuration file.
Examples
This class is very convenient to build HFSS and SIwave simulation projects from layout. It is leveraging EDB commands from Pyaedt but with keeping high level parameters making more easy PCB automation flow. SYZ and DC simulation can be addressed with this class.
The class is instantiated from an open edb:
>>> from pyedb import Edb >>> edb = Edb() >>> sim_setup = edb.new_simulation_configuration()
The returned object sim_setup is a SimulationConfiguration object. From this class you can assign a lot of parameters related the project configuration but also solver options. Here is the list of parameters available:
>>> from dotnet.generic.constants import SolverType >>> sim_setup.solver_type = SolverType.Hfss3dLayout
Solver type can be selected, HFSS 3D Layout and Siwave are supported.
>>> sim_setup.signal_nets = ["net1", "net2"]
Set the list of net names you want to include for the simulation. These nets will have excitations ports created if corresponding pins are found on selected component. We usually refer to signal nets but power / reference nets can also be passed into this list if user wants to have ports created on these ones.
>>> sim_setup.power_nets = ["gnd", "vcc"]
Set the list on power and reference nets. These nets won’t have excitation ports created on them and will be clipped during the project build if the cutout option is enabled.
>>> sim_setup.components = ["comp1", "comp2"]
Set the list of components which will be included in the simulation. These components will have ports created on pins belonging to the net list.
>>> sim_setup.do_cutout_subdesign = True
When true activates the layout cutout based on net signal net selection and cutout expansion.
>>> from dotnet.generic.constants import CutoutSubdesignType >>> sim_setup.cutout_subdesign_type = CutoutSubdesignType.Conformal
Define the type of cutout used for computing the clippingextent polygon. CutoutSubdesignType.Conformal CutoutSubdesignType.BBox are surpported.
>>> sim_setup.cutout_subdesign_expansion = "4mm"
Define the distance used for computing the extent polygon. Integer or string can be passed. For example 0.001 is in meter so here 1mm. You can also pass the string “1mm” for the same result.
>>> sim_setup.cutout_subdesign_round_corner = True
Boolean to allow using rounded corner for the cutout extent or not.
>>> sim_setup.use_default_cutout = False
When True use the native edb API command to process the cutout. Using False uses the Pyaedt one which improves the cutout speed.
>>> sim_setup.generate_solder_balls = True
Boolean to activate the solder ball generation on components. When HFSS solver is selected in combination with this parameter, coaxial ports will be created on solder balls for pins belonging to selected signal nets. If Siwave solver is selected this parameter will be ignored.
>>> sim_setup.use_default_coax_port_radial_extension = True
When
Truethe default coaxial extent is used for the ports (only for HFSS). When the design is having dense solder balls close to each other (like typically package design), the default value might be too large and cause port overlapping, then solver failure. To prevent this issue set this parameter toFalsewill use a smaller value.>>> sim_setup.output_aedb = r"C: emp\my_edb.aedb"
Specify the output edb file after building the project. The parameter must be the complete file path. leaving this parameter blank will oervwritte the current open edb.
>>> sim_setup.dielectric_extent = 0.01
Gives the dielectric extent after cutout, keeping default value is advised unless for very specific application.
>>> sim_setup.airbox_horizontal_extent = "5mm"
Provide the air box horizonzal extent values. Unitless float value will be treated as ratio but string value like “5mm” is also supported.
>>> sim_setup.airbox_negative_vertical_extent = "5mm"
Provide the air box negative vertical extent values. Unitless float value will be treated as ratio but string value like “5mm” is also supported.
>>> sim_setup.airbox_positive_vertical_extent = "5mm"
Provide the air box positive vertical extent values. Unitless float value will be treated as ratio but string value like “5mm” is also supported.
>>> sim_setup.use_radiation_boundary = True
When
Trueuse radiation airbox boundary condition and perfect metal box when set toFalse. Default value isTrue, using enclosed metal box will greatly change simulation results. Setting this parameter asFalsemust be used cautiously.>>> sim_setup.do_cutout_subdesign = True
Trueactivates the cutout with associated parameters. SettingFalsewill keep the entire layout. Setting toFalsecan impact the simulation run time or even memory failure if HFSS solver is used.>>> sim_setup.do_pin_group = False
When circuit ports are used, setting to
Truewill force to create pin groups on components having pins belonging to same net. Setting toFalsewill generate port on each signal pin with taking the closest reference pin. The last configuration is more often used when users are creating ports on PDN (Power delivery Network) and want to connect all pins individually.>>> from dotnet.generic.constants import SweepType >>> sim_setup.sweep_type = SweepType.Linear
Specify the frequency sweep type, Linear or Log sweep can be defined.
SimulationCOnfiguration also inherit from SimulationConfigurationAc class for High frequency settings.
>>> sim_setup.start_freq = "OHz"
Define the start frequency from the sweep.
>>> sim_setup.stop_freq = "40GHz"
Define the stop frequency from the sweep.
>>> sim_setup.step_freq = "10MHz"
Define the step frequency from the sweep.
>>> sim_setup.decade_count = 100
Used when log sweep is defined and specify the number of points per decade.
>>> sim_setup.enforce_causality = True
Activate the option
Enforce Causalityfor the solver, recommended for signal integrity application>>> sim_setup.enforce_passivity = True
Activate the option
Enforce Passivityfor the solver, recommended for signal integrity application>>> sim_setup.do_lambda_refinement = True
Activate the lambda refinement for the initial mesh (only for HFSS), default value is
True. Keeping this activated is highly recommended.>>> sim_setup.use_q3d_for_dc = False
Enable when
Truethe Q3D DC point computation. Only needed when very high accuracy is required for DC point. Can eventually cause extra computation time.>>> sim_setup.sweep_name = "Test_sweep"
Define the frequency sweep name.
>>> sim_setup.mesh_freq = "10GHz"
Define the frequency used for adaptive meshing (available for both HFSS and SIwave).
>>> from dotnet.generic.constants import RadiationBoxType >>> sim_setup.radiation_box = RadiationBoxType.ConvexHull
Defined the radiation box type, Conformal, Bounding box and ConvexHull are supported (HFSS only).
>>> sim_setup.max_num_passes = 30
Default value is 30, specify the maximum number of adaptive passes (only HFSS). Reasonable high value is recommended to force the solver reaching the convergence criteria.
>>> sim_setup.max_mag_delta_s = 0.02
Define the convergence criteria
>>> sim_setup.min_num_passes = 2
specify the minimum number of consecutive coberged passes. Setting to 2 is a good practice to avoid converging on local minima.
>>> from dotnet.generic.constants import BasisOrder >>> sim_setup.basis_order = BasisOrder.Single
Select the order basis (HFSS only), Zero, Single, Double and Mixed are supported. For Signal integrity Single or Mixed should be used.
>>> sim_setup.minimum_void_surface = 0
Only for Siwave, specify the minimum void surface to be meshed. Void with lower surface value will be ignored by meshing.
SimulationConfiguration also inherits from SimulationDc class to handle DC simulation projects.
>>> sim_setup.dc_compute_inductance = True
Trueactivate the DC loop inductance computation (Siwave only),Falseis deactivated.>>> sim_setup.dc_slide_position = 1
The provided value must be between 0 and 2 and correspond ti the SIwave DC slide position in GUI. 0 : coarse 1 : medium accuracy 2 : high accuracy
>>> sim_setup.dc_plot_jv = True
Trueactivate the current / voltage plot with Siwave DC solver,Falsedeactivate.>>> sim_setup.dc_error_energy = 0.02
Fix the DC error convergence criteria. In this example 2% is defined.
>>> sim_setup.dc_max_num_pass = 6
Provide the maximum number of passes during Siwave DC adaptive meshing.
>>> sim_setup.dc_min_num_pass = 1
Provide the minimum number of passes during Siwave DC adaptive meshing.
>>> sim_setup.dc_mesh_bondwires = True
Truebondwires are meshed,Falsebond wires are ignored during meshing.>>> sim_setup.dc_num_bondwire_sides = 8
Gives the number of facets wirebonds are discretized.
>>> sim_setup.dc_refine_vias = True
Truemeshing refinement on nondwires activated during meshing process. Deactivated when set toFalse.>>> sim_setup.dc_report_show_Active_devices = True
Activate when
Truethe components showing in the DC report.>>> sim_setup.dc_export_thermal_data = True
Truethermal data are exported for Icepak simulation.>>> sim_setup.dc_full_report_path = r"C: emp\my_report.html"
Provides the file path for the DC report.
>>> sim_setup.dc_icepak_temp_file = r"C: emp\my_file"
Provides icepak temporary files location.
>>> sim_setup.dc_import_thermal_data = False
Import DC thermal data when True`
>>> sim_setup.dc_per_pin_res_path = r"C: emp\dc_pin_res_file" Provides the resistance per pin file path.
>>> sim_setup.dc_per_pin_use_pin_format = True
When
Trueactivate the pin format.>>> sim_setup.dc_use_loop_res_for_per_pin = True
Activate the loop resistance usage per pin when
True>>> sim_setup.dc_via_report_path = "C:\temp\via_report_file"
Define the via report path file.
>>> sim_setup.add_current_source(name="test_isrc", >>> current_value=1.2, >>> phase_value=0.0, >>> impedance=5e7, >>> positive_node_component="comp1", >>> positive_node_net="net1", >>> negative_node_component="comp2", >>> negative_node_net="net2" >>> )
Define a current source.
>>> sim_setup.add_dc_ground_source_term(source_name="test_isrc", node_to_ground=1)
Define the pin from a source which has to be set to reference for DC simulation.
>>> sim_setup.add_voltage_source(name="test_vsrc", >>> current_value=1.33, >>> phase_value=0.0, >>> impedance=1e-6, >>> positive_node_component="comp1", >>> positive_node_net="net1", >>> negative_node_component="comp2", >>> negative_node_net="net2" >>> )
Define a voltage source.
>>> sim_setup.add_dc_ground_source_term(source_name="test_vsrc", node_to_ground=1)
Define the pin from a source which has to be set to reference for DC simulation.
>>> edb.build_simulation_project(sim_setup)
Will build and save your project.
Overview#
Build active simulation project. This method requires to be run inside Edb Class. |
|
Add a dc ground source terminal for Siwave. |
|
Export Json file from SimulationConfiguration object. |
|
Import Json file into SimulationConfiguration object instance. |
|
Add a voltage source for the current SimulationConfiguration instance. |
|
Add a current source for the current SimulationConfiguration instance. |
|
Add a voltage source for the current SimulationConfiguration instance. |
Either if open the Edb after the build or not. |
|
DC Settings class. |
|
AC Settings class. |
|
Cutout and Batch Settings class. |
|
Retrieve the SolverType class to select the solver to be called during the project build. |
|
Retrieve the file name loaded for mapping properties value. |
|
Retrieve setup name for the simulation. |
Import detail#
from pyedb.dotnet.database.edb_data.simulation_configuration import SimulationConfiguration
Property detail#
- property SimulationConfiguration.open_edb_after_build#
Either if open the Edb after the build or not.
- Returns:
- property SimulationConfiguration.dc_settings: SimulationConfigurationDc#
DC Settings class.
- property SimulationConfiguration.ac_settings: SimulationConfigurationAc#
AC Settings class.
- property SimulationConfiguration.batch_solve_settings: SimulationConfigurationBatch#
Cutout and Batch Settings class.
- property SimulationConfiguration.solver_type#
Retrieve the SolverType class to select the solver to be called during the project build.
- Returns:
dotnet.generic.constants.SolverTypeselections are supported, Hfss3dLayout and Siwave.
Attribute detail#
- SimulationConfiguration.SOLVER_TYPE#
Method detail#
- SimulationConfiguration.__getattr__(item)#
- SimulationConfiguration.__setattr__(key, value)#
- SimulationConfiguration.build_simulation_project()#
Build active simulation project. This method requires to be run inside Edb Class.
- Returns:
- SimulationConfiguration.add_dc_ground_source_term(source_name=None, node_to_ground=1)#
Add a dc ground source terminal for Siwave.
- SimulationConfiguration.export_json(output_file)#
Export Json file from SimulationConfiguration object.
- Parameters:
- output_file
str Json file name.
- output_file
- Returns:
- bool
True when succeeded False when file name not provided.
Examples
>>> from dotnet.database.edb_data.simulation_configuration import SimulationConfiguration >>> config = SimulationConfiguration() >>> config.export_json(r"C:\Temp est_json est.json")
- SimulationConfiguration.import_json(input_file)#
Import Json file into SimulationConfiguration object instance.
- Parameters:
- input_file
str Json file name.
- input_file
- Returns:
- bool
True when succeeded False when file name not provided.
Examples
>>> from dotnet.database.edb_data.simulation_configuration import SimulationConfiguration >>> test = SimulationConfiguration() >>> test.import_json(r"C:\Temp est_json est.json")
- SimulationConfiguration.add_voltage_source(name='', voltage_value=1, phase_value=0, impedance=1e-06, positive_node_component='', positive_node_net='', negative_node_component='', negative_node_net='')#
Add a voltage source for the current SimulationConfiguration instance.
- Parameters:
- name
str Source name.
- voltage_value
float Amplitude value of the source. Either amperes for current source or volts for voltage source.
- phase_value
float Phase value of the source.
- impedance
float Impedance value of the source.
- positive_node_component
str Name of the component used for the positive node.
- negative_node_component
str Name of the component used for the negative node.
- positive_node_net
str Net used for the positive node.
- negative_node_net
str Net used for the negative node.
- name
- Returns:
- bool
Truewhen successful,Falsewhen failed.
Examples
>>> edb = Edb(target_file) >>> sim_setup = SimulationConfiguration() >>> sim_setup.add_voltage_source(voltage_value=1.0, phase_value=0, positive_node_component="V1", >>> positive_node_net="HSG", negative_node_component="V1", negative_node_net="SW")
- SimulationConfiguration.add_current_source(name='', current_value=0.1, phase_value=0, impedance=50000000.0, positive_node_component='', positive_node_net='', negative_node_component='', negative_node_net='')#
Add a current source for the current SimulationConfiguration instance.
- Parameters:
- name
str Source name.
- current_value
float Amplitude value of the source. Either amperes for current source or volts for voltage source.
- phase_value
float Phase value of the source.
- impedance
float Impedance value of the source.
- positive_node_component
str Name of the component used for the positive node.
- negative_node_component
str Name of the component used for the negative node.
- positive_node_net
str Net used for the positive node.
- negative_node_net
str Net used for the negative node.
- name
- Returns:
- bool
Truewhen successful,Falsewhen failed.
Examples
>>> edb = Edb(target_file) >>> sim_setup = SimulationConfiguration() >>> sim_setup.add_voltage_source(voltage_value=1.0, phase_value=0, positive_node_component="V1", >>> positive_node_net="HSG", negative_node_component="V1", negative_node_net="SW")
- SimulationConfiguration.add_rlc(name='', r_value=1.0, c_value=0.0, l_value=0.0, positive_node_component='', positive_node_net='', negative_node_component='', negative_node_net='', create_physical_rlc=True)#
Add a voltage source for the current SimulationConfiguration instance.
- Parameters:
- name
str Source name.
- r_value
float Resistor value in Ohms.
- l_value
float Inductance value in Henry.
- c_value
float Capacitance value in Farrad.
- positive_node_component
str Name of the component used for the positive node.
- negative_node_component
str Name of the component used for the negative node.
- positive_node_net
str Net used for the positive node.
- negative_node_net
str Net used for the negative node.
- create_physical_rlcbool
When True create a physical Rlc component. Recommended setting to True to be compatible with Siwave.
- name
- Returns:
- bool
Truewhen successful,Falsewhen failed.
Examples
>>> edb = Edb(target_file) >>> sim_setup = SimulationConfiguration() >>> sim_setup.add_voltage_source(voltage_value=1.0, phase_value=0, positive_node_component="V1", >>> positive_node_net="HSG", negative_node_component="V1", negative_node_net="SW")