Skip to content

Commit 3f988c4

Browse files
authored
Create symmetric stackup (#1034)
* new * new * new * new * new
1 parent 3b7ed28 commit 3f988c4

File tree

2 files changed

+87
-0
lines changed

2 files changed

+87
-0
lines changed

_unittest/test_00_EDB.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1099,3 +1099,15 @@ def test_84_create_coax_port_on_component_pin(self):
10991099
def test_85_deactivate_rlc(self):
11001100
assert self.edbapp.core_components.deactivate_rlc_component(component="C1", create_circuit_port=True)
11011101
assert self.edbapp.core_components.deactivate_rlc_component(component="C2", create_circuit_port=False)
1102+
1103+
def test_86_create_symmetric_stackup(self):
1104+
from pyaedt import Edb as local_edb
1105+
1106+
app_edb = local_edb(edbversion="2022.1")
1107+
assert not app_edb.core_stackup.create_symmetric_stackup(9)
1108+
assert app_edb.core_stackup.create_symmetric_stackup(8)
1109+
app_edb.close_edb()
1110+
1111+
app_edb = local_edb(edbversion="2022.1")
1112+
assert app_edb.core_stackup.create_symmetric_stackup(8, soldermask=False)
1113+
app_edb.close_edb()

pyaedt/edb_core/stackup.py

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -762,3 +762,78 @@ def stackup_limits(self, only_metals=False):
762762
)
763763
h_stackup = abs(float(topz) - float(bottomz))
764764
return topl.GetName(), topz, bottoml.GetName(), bottomz
765+
766+
def create_symmetric_stackup(
767+
self,
768+
layer_count,
769+
inner_layer_thickness="17um",
770+
outer_layer_thickness="50um",
771+
dielectric_thickness="100um",
772+
dielectric_material="FR4_epoxy",
773+
soldermask=True,
774+
soldermask_thickness="20um",
775+
):
776+
"""Create a symmetric stackup.
777+
778+
Parameters
779+
----------
780+
layer_count : int
781+
Number of layer count.
782+
inner_layer_thickness : str, float, optional
783+
Thickness of inner conductor layer.
784+
outer_layer_thickness : str, float, optional
785+
Thickness of outer conductor layer.
786+
dielectric_thickness : str, float, optional
787+
Thickness of dielectric layer.
788+
dielectric_material : str, optional
789+
Material of dielectric layer.
790+
soldermask : bool, optional
791+
Whether to create soldermask layers. The default is``True``.
792+
soldermask_thickness : str, optional
793+
Thickness of soldermask layer.
794+
Returns
795+
-------
796+
bool
797+
"""
798+
if not layer_count % 2 == 0:
799+
return False
800+
801+
if soldermask:
802+
self.stackup_layers.add_layer("SMB", None, "SolderMask", thickness=soldermask_thickness, layerType=1)
803+
layer_name = "BOTTOM"
804+
self.stackup_layers.add_layer(layer_name, "SMB", fillMaterial="SolderMask", thickness=outer_layer_thickness)
805+
else:
806+
layer_name = "BOTTOM"
807+
self.stackup_layers.add_layer(layer_name, fillMaterial="Air", thickness=outer_layer_thickness)
808+
809+
for layer in range(layer_count - 1, 1, -1):
810+
new_layer_name = "D" + str(layer - 1)
811+
self.stackup_layers.add_layer(
812+
new_layer_name, layer_name, dielectric_material, thickness=dielectric_thickness, layerType=1
813+
)
814+
layer_name = new_layer_name
815+
new_layer_name = "L" + str(layer - 1)
816+
self.stackup_layers.add_layer(
817+
new_layer_name, layer_name, "copper", dielectric_material, inner_layer_thickness
818+
)
819+
layer_name = new_layer_name
820+
821+
new_layer_name = "D1"
822+
self.stackup_layers.add_layer(
823+
new_layer_name, layer_name, dielectric_material, thickness=dielectric_thickness, layerType=1
824+
)
825+
layer_name = new_layer_name
826+
827+
if soldermask:
828+
new_layer_name = "TOP"
829+
self.stackup_layers.add_layer(
830+
new_layer_name, layer_name, fillMaterial="SolderMask", thickness=outer_layer_thickness
831+
)
832+
layer_name = new_layer_name
833+
self.stackup_layers.add_layer("SMT", layer_name, "SolderMask", thickness=soldermask_thickness, layerType=1)
834+
else:
835+
new_layer_name = "TOP"
836+
self.stackup_layers.add_layer(
837+
new_layer_name, layer_name, fillMaterial="Air", thickness=outer_layer_thickness
838+
)
839+
return True

0 commit comments

Comments
 (0)