From c566040e7e4a7279414e3e7b936f90b0ac3a00c9 Mon Sep 17 00:00:00 2001 From: svandenb-dev Date: Wed, 29 May 2024 16:02:30 +0200 Subject: [PATCH] stackup config file --- src/pyedb/configuration/cfg_stackup.py | 29 ++++++++++++------- src/pyedb/configuration/configuration.py | 4 +-- .../TEDB/edb_config_json/stackup.json | 2 +- tests/legacy/system/test_edb_config_json.py | 14 +++++++++ 4 files changed, 35 insertions(+), 14 deletions(-) diff --git a/src/pyedb/configuration/cfg_stackup.py b/src/pyedb/configuration/cfg_stackup.py index a39af8e8e1..afa35c7f84 100644 --- a/src/pyedb/configuration/cfg_stackup.py +++ b/src/pyedb/configuration/cfg_stackup.py @@ -73,7 +73,7 @@ def __apply_layers(self): for layer in self.layers: if layer.type == LayerType.SIGNAL: clone = layer_clones.pop(0) - clone.update(layer.__dict__()) + clone.update(**layer.to_dict) lc_new.add_layer_bottom(name=clone.name, layer_clone=clone) signal_layer_ids[clone.name] = clone.id @@ -89,10 +89,10 @@ def __apply_layers(self): if layer.type == LayerType.SIGNAL: prev_layer_clone = lc_new.layers[layer.name] else: - prev_layer_clone = lc_new.add_layer_top(layer.__dict__()) + prev_layer_clone = lc_new.add_layer_top(**layer.to_dict) for idx, layer in enumerate(self.layers): if layer.type == LayerType.DIELECTRIC: - prev_layer_clone = lc_new.add_layer_below(base_layer_name=prev_layer_clone.name, **layer.__dict__()) + prev_layer_clone = lc_new.add_layer_below(base_layer_name=prev_layer_clone.name, **layer.to_dict) else: prev_layer_clone = lc_new.layers[layer.name] @@ -107,7 +107,7 @@ def __init__(self, pedb, material_dict=None): self._material_dict = material_dict self.name = "" self.conductivity = 0.0 - self.loss_tangent = 0.0 + self.dielectric_loss_tangent = 0.0 self.magnetic_loss_tangent = 0.0 self.mass_density = 0.0 self.permittivity = 1.0 @@ -128,7 +128,7 @@ def __update(self): if self._material_dict: self.name = self._material_dict.get("name", "") self.conductivity = self._material_dict.get("conductivity", 0.0) - self.loss_tangent = self._material_dict.get("loss_tangent", 0.0) + self.dielectric_loss_tangent = self._material_dict.get("dielectric_loss_tangent", 0.0) self.magnetic_loss_tangent = self._material_dict.get("magnetic_loss_tangent", 0.0) self.mass_density = self._material_dict.get("mass_density", 0.0) self.permittivity = self._material_dict.get("permittivity", 1.0) @@ -147,8 +147,8 @@ def __update(self): def apply(self): edb_materials = {i.lower(): i for i, _ in self._pedb.materials.materials.items()} if self.name.lower() in edb_materials: - self._pedb.materials.delete_material(edb_materials[self.name]) - self._pedb.materials.add_material(self.__dict__) + self._pedb.materials.delete_material(edb_materials[self.name.lower()]) + self._pedb.materials.add_material(**self.__dict__) class Layer: @@ -159,7 +159,7 @@ def __init__(self, pedb, layer_dict=None): self.color = [random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)] self.type = LayerType.SIGNAL self.material = "copper" - self.dielectric_fill = "fr4" + self.fill_material = "fr4" self.thickness = 35e-6 self.etch_factor = 0.0 self.roughness_enabled = False @@ -169,17 +169,25 @@ def __init__(self, pedb, layer_dict=None): self.bottom_hallhuray_surface_ratio = 0.0 self.side_hallhuray_nodule_radius = 0.0 self.side_hallhuray_surface_ratio = 0.0 - self.upper_elevation = 0.0 self.lower_elevation = 0.0 self.__update() + @property + def to_dict(self): + layer_dict = self.__dict__ + if "type" in layer_dict: + layer_dict["type"] = self.type.name.lower() + del layer_dict["_pedb"] + del layer_dict["_layer_dict"] + return layer_dict + def __update(self): if self._layer_dict: self.name = self._layer_dict.get("name", self.name) self.color = self._layer_dict.get("color", self.color) self.__map_layer_type() self.material = self._layer_dict.get("material", self.material) - self.dielectric_fill = self._layer_dict.get("dielectric_fill", self.dielectric_fill) + self.fill_material = self._layer_dict.get("fill_material", self.fill_material) self.thickness = self._layer_dict.get("thickness", self.thickness) self.etch_factor = self._layer_dict.get("etch_factor", self.etch_factor) self.roughness_enabled = self._layer_dict.get("roughness_enabled", self.roughness_enabled) @@ -201,7 +209,6 @@ def __update(self): self.side_hallhuray_surface_ratio = self._layer_dict.get( "side_hallhuray_surface_ratio", self.side_hallhuray_surface_ratio ) - self.upper_elevation = self._layer_dict.get("upper_elevation", self.upper_elevation) self.lower_elevation = self._layer_dict.get("lower_elevation", self.lower_elevation) def __map_layer_type(self): diff --git a/src/pyedb/configuration/configuration.py b/src/pyedb/configuration/configuration.py index e2802c361f..bbe7b02404 100644 --- a/src/pyedb/configuration/configuration.py +++ b/src/pyedb/configuration/configuration.py @@ -142,8 +142,8 @@ def run(self): setup.apply() # Configure stackup - if "stackup" in self.data: - self._load_stackup() + if self.cfg_data.stackup: + self.cfg_data.stackup.apply() # Configure S-parameter for s_parameter_model in self.cfg_data.s_parameters: diff --git a/tests/example_models/TEDB/edb_config_json/stackup.json b/tests/example_models/TEDB/edb_config_json/stackup.json index 8578b8d9a3..2e186c827a 100644 --- a/tests/example_models/TEDB/edb_config_json/stackup.json +++ b/tests/example_models/TEDB/edb_config_json/stackup.json @@ -3,7 +3,7 @@ "materials": [ { "name": "copper", - "conductivity": 58000000 + "conductivity": 570000000 }, { "name": "Megtron4", diff --git a/tests/legacy/system/test_edb_config_json.py b/tests/legacy/system/test_edb_config_json.py index aafa36dff3..eed35a34c0 100644 --- a/tests/legacy/system/test_edb_config_json.py +++ b/tests/legacy/system/test_edb_config_json.py @@ -254,6 +254,20 @@ def test_12_setup_siwave_dc(self, edb_examples): def test_13_stackup(self, edb_examples): edbapp = edb_examples.get_si_verse() assert edbapp.configuration.load(str(self.local_input_folder / "stackup.json"), apply_file=True) + assert edbapp.materials["copper"].conductivity == 5.7e8 + assert edbapp.materials["Megtron4"].permittivity == 3.77 + assert edbapp.materials["Megtron4"].dielectric_loss_tangent == 0.005 + assert edbapp.materials["Megtron4_2"].permittivity == 3.77 + assert edbapp.materials["Megtron4_2"].dielectric_loss_tangent == 0.005 + assert edbapp.materials["Solder Resist"].permittivity == 4 + assert edbapp.stackup.layers["SMT"].thickness == 20e-6 + assert edbapp.stackup.layers["SMT"].material == "Solder Resist" + assert edbapp.stackup.layers["1_Top"].material == "copper" + assert edbapp.stackup.layers["1_Top"].thickness == 50e-6 + assert edbapp.stackup.layers["1_Top"].fill_material == "Solder Resist" + assert edbapp.stackup.layers["DE5"].thickness == 100e-6 + assert edbapp.stackup.layers["DE5"].material == "Megtron4" + edbapp.close() def test_14_setup_siwave_syz(self, edb_examples):