.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "examples\00-EDB\06_Advanced_EDB.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note :ref:`Go to the end ` to download the full example code .. rst-class:: sphx-glr-example-title .. _sphx_glr_examples_00-EDB_06_Advanced_EDB.py: EDB: parametric via creation ---------------------------- This example shows how you can use EDB to create a layout. .. GENERATED FROM PYTHON SOURCE LINES 7-10 Perform required imports ~~~~~~~~~~~~~~~~~~~~~~~~ Perform required imports. .. GENERATED FROM PYTHON SOURCE LINES 10-18 .. code-block:: default import os import numpy as np import pyaedt aedb_path = os.path.join(pyaedt.generate_unique_folder_name(), pyaedt.generate_unique_name("via_opt") + ".aedb") .. GENERATED FROM PYTHON SOURCE LINES 19-23 Create stackup ~~~~~~~~~~~~~~ The ``StackupSimple`` class creates a stackup based on few inputs. This stackup is used later. .. GENERATED FROM PYTHON SOURCE LINES 26-29 Create ground plane ~~~~~~~~~~~~~~~~~~~ Create a ground plane on specific layers. .. GENERATED FROM PYTHON SOURCE LINES 29-36 .. code-block:: default def _create_ground_planes(edb, layers): plane = edb.modeler.Shape("rectangle", pointA=["-3mm", "-3mm"], pointB=["3mm", "3mm"]) for i in layers: edb.modeler.create_polygon(plane, i, net_name="GND") .. GENERATED FROM PYTHON SOURCE LINES 37-40 Create EDB ~~~~~~~~~~ Create EDB. If the path doesn't exist, PyAEDT automatically generates a new AEDB folder. .. GENERATED FROM PYTHON SOURCE LINES 40-43 .. code-block:: default edb = pyaedt.Edb(edbpath=aedb_path, edbversion="2023.2") .. GENERATED FROM PYTHON SOURCE LINES 44-47 Create stackup layers ~~~~~~~~~~~~~~~~~~~~~ Create stackup layers. .. GENERATED FROM PYTHON SOURCE LINES 47-64 .. code-block:: default layout_count = 12 diel_material_name = "FR4_epoxy" diel_thickness = "0.15mm" cond_thickness_outer = "0.05mm" cond_thickness_inner = "0.017mm" soldermask_thickness = "0.05mm" trace_in_layer = "TOP" trace_out_layer = "L10" gvia_num = 10 gvia_angle = 30 edb.stackup.create_symmetric_stackup(layer_count=layout_count, inner_layer_thickness=cond_thickness_inner, outer_layer_thickness=cond_thickness_outer, soldermask_thickness=soldermask_thickness, dielectric_thickness=diel_thickness, dielectric_material=diel_material_name) .. rst-class:: sphx-glr-script-out .. code-block:: none True .. GENERATED FROM PYTHON SOURCE LINES 65-69 Create variables ~~~~~~~~~~~~~~~~ Create all variables. If a variable has a ``$`` prefix, it is a project variable. Otherwise, is a design variable. .. GENERATED FROM PYTHON SOURCE LINES 69-79 .. code-block:: default giva_angle_rad = gvia_angle / 180 * np.pi edb["$via_hole_size"] = "0.3mm" edb["$antipaddiam"] = "0.7mm" edb["$paddiam"] = "0.5mm" edb.add_design_variable("via_pitch", "1mm", is_parameter=True) edb.add_design_variable("trace_in_width", "0.2mm", is_parameter=True) edb.add_design_variable("trace_out_width", "0.1mm", is_parameter=True) .. rst-class:: sphx-glr-script-out .. code-block:: none (True, ) .. GENERATED FROM PYTHON SOURCE LINES 80-84 Create definitions ~~~~~~~~~~~~~~~~~~ Create two definitions, one for the ground and one for the signal. The definitions are parametric. .. GENERATED FROM PYTHON SOURCE LINES 84-94 .. code-block:: default edb.padstacks.create(padstackname="SVIA", holediam="$via_hole_size", antipaddiam="$antipaddiam", paddiam="$paddiam", start_layer=trace_in_layer, stop_layer=trace_out_layer ) edb.padstacks.create(padstackname="GVIA", holediam="0.3mm", antipaddiam="0.7mm", paddiam="0.5mm") .. rst-class:: sphx-glr-script-out .. code-block:: none 'GVIA' .. GENERATED FROM PYTHON SOURCE LINES 95-98 Place padstack for signal ~~~~~~~~~~~~~~~~~~~~~~~~~ Place the padstack for the signal. .. GENERATED FROM PYTHON SOURCE LINES 98-101 .. code-block:: default edb.padstacks.place([0, 0], "SVIA", net_name="RF") .. rst-class:: sphx-glr-script-out .. code-block:: none .. GENERATED FROM PYTHON SOURCE LINES 102-106 Place padstack for ground ~~~~~~~~~~~~~~~~~~~~~~~~~ Place the padstack for the ground. A loop iterates and places multiple ground vias on different positions. .. GENERATED FROM PYTHON SOURCE LINES 106-134 .. code-block:: default gvia_num_side = gvia_num / 2 if gvia_num_side % 2: # Even number of ground vias on each side edb.padstacks.place(["via_pitch", 0], "GVIA", net_name="GND") edb.padstacks.place(["via_pitch*-1", 0], "GVIA", net_name="GND") for i in np.arange(1, gvia_num_side / 2): xloc = "{}*{}".format(np.cos(giva_angle_rad * i), "via_pitch") yloc = "{}*{}".format(np.sin(giva_angle_rad * i), "via_pitch") edb.padstacks.place([xloc, yloc], "GVIA", net_name="GND") edb.padstacks.place([xloc, yloc + "*-1"], "GVIA", net_name="GND") edb.padstacks.place([xloc + "*-1", yloc], "GVIA", net_name="GND") edb.padstacks.place([xloc + "*-1", yloc + "*-1"], "GVIA", net_name="GND") else: # Odd number of ground vias on each side for i in np.arange(0, gvia_num_side / 2): xloc = "{}*{}".format(np.cos(giva_angle_rad * (i + 0.5)), "via_pitch") yloc = "{}*{}".format(np.sin(giva_angle_rad * (i + 0.5)), "via_pitch") edb.padstacks.place([xloc, yloc], "GVIA", net_name="GND") edb.padstacks.place([xloc, yloc + "*-1"], "GVIA", net_name="GND") edb.padstacks.place([xloc + "*-1", yloc], "GVIA", net_name="GND") edb.padstacks.place([xloc + "*-1", yloc + "*-1"], "GVIA", net_name="GND") .. GENERATED FROM PYTHON SOURCE LINES 135-138 Generate traces ~~~~~~~~~~~~~~~ Generate and place parametric traces. .. GENERATED FROM PYTHON SOURCE LINES 138-152 .. code-block:: default edb.modeler.create_trace( [[0, 0], [0, "-3mm"]], layer_name=trace_in_layer, net_name="RF", width="trace_in_width", start_cap_style="Flat", end_cap_style="Flat" ) edb.modeler.create_trace( [[0, 0], [0, "3mm"]], layer_name=trace_out_layer, net_name="RF", width="trace_out_width", start_cap_style="Flat", end_cap_style="Flat", ) .. rst-class:: sphx-glr-script-out .. code-block:: none .. GENERATED FROM PYTHON SOURCE LINES 153-156 Generate ground layers ~~~~~~~~~~~~~~~~~~~~~~ Generate and place ground layers. .. GENERATED FROM PYTHON SOURCE LINES 156-162 .. code-block:: default ground_layers = [i for i in edb.stackup.signal_layers.keys()] ground_layers.remove(trace_in_layer) ground_layers.remove(trace_out_layer) _create_ground_planes(edb=edb, layers=ground_layers) .. GENERATED FROM PYTHON SOURCE LINES 163-166 Plot Layout ~~~~~~~~~~~ Generate and plot the layout. .. GENERATED FROM PYTHON SOURCE LINES 166-171 .. code-block:: default #edb.nets.plot(layers=["TOP", "L10"]) edb.stackup.plot(plot_definitions=["GVIA", "SVIA"]) .. image-sg:: /examples/00-EDB/images/sphx_glr_06_Advanced_EDB_001.png :alt: Stackup :srcset: /examples/00-EDB/images/sphx_glr_06_Advanced_EDB_001.png :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out .. code-block:: none .. GENERATED FROM PYTHON SOURCE LINES 172-175 Save EDB and close ~~~~~~~~~~~~~~~~~~ Save EDB and close. .. GENERATED FROM PYTHON SOURCE LINES 175-180 .. code-block:: default edb.save_edb() edb.close_edb() print("aedb Saved in {}".format(aedb_path)) .. rst-class:: sphx-glr-script-out .. code-block:: none aedb Saved in D:\Temp\pyaedt_prj_6V0\via_opt_JY5W82.aedb .. rst-class:: sphx-glr-timing **Total running time of the script:** (0 minutes 6.016 seconds) .. _sphx_glr_download_examples_00-EDB_06_Advanced_EDB.py: .. only:: html .. container:: sphx-glr-footer sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: 06_Advanced_EDB.py <06_Advanced_EDB.py>` .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: 06_Advanced_EDB.ipynb <06_Advanced_EDB.ipynb>` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_