Skip to content

Commit

Permalink
stackup config file
Browse files Browse the repository at this point in the history
  • Loading branch information
svandenb-dev committed May 29, 2024
1 parent cd33b1e commit c566040
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 14 deletions.
29 changes: 18 additions & 11 deletions src/pyedb/configuration/cfg_stackup.py
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand All @@ -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]

Expand All @@ -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
Expand All @@ -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)
Expand All @@ -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:
Expand All @@ -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
Expand All @@ -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)
Expand All @@ -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):
Expand Down
4 changes: 2 additions & 2 deletions src/pyedb/configuration/configuration.py
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
2 changes: 1 addition & 1 deletion tests/example_models/TEDB/edb_config_json/stackup.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"materials": [
{
"name": "copper",
"conductivity": 58000000
"conductivity": 570000000
},
{
"name": "Megtron4",
Expand Down
14 changes: 14 additions & 0 deletions tests/legacy/system/test_edb_config_json.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down

0 comments on commit c566040

Please sign in to comment.