PhotoCAD
  • Introduction
    • PhotoCAD Introduction
      • fnpcell
      • link
  • Installation
    • Installing PhotoCAD
      • System Requirement
      • Install Python IDE and Python package
      • Install PhotoCAD
      • PhotoCAD file structure
  • PhotoCAD Hands-on
  • gpdk (generic PDK)
    • Components: gpdk built-in components
      • Passive components
      • Active components
    • Examples: gpdk built-in examples
    • Routing: gpdk built-in routing method
    • Technology: gpdk-related process setting
      • Default process
      • Customized process
      • Waveguide information
    • layout01: Project Development
  • fnpcell
    • Definition of each component class in fnpcell
      • Full script
      • Section Script Description
    • The use of classes in fnpcell (generating components)
      • Section Script Description
    • Example of using fnpcell to build class
      • Example1: bend_bezier.py
        • Full script
        • Section Script Definition
      • Example2: bend_circular.py
        • Full script
        • Section Script Definition
    • Design Rule Check(DRC)
      • Generate SVRFTM template
      • Generate DRC template files using SVRFTM templates
        • Full script
        • Section Script Definition
      • Using DRC template files
      • Format instructions
    • Writing a user-defined PCell in PhotoCAD
      • Import module
      • Define RingResonator
      • Define RingResonator2
      • Create examples(layout units) using classes RingResonator and RingResonator2
      • GDS Layout

Guides

  • Create a Parametrized Cell(PCell)
    • Create shapes and boundaries
      • fp.el API
        • fp.el
      • fp.g API
        • fp.g
    • Default values for PCell Parameters
      • Ways to implement default values for PCell parameter
    • Define Ports/Pins
      • Ports/Pins from existing PCells
      • Manually adding Ports/Pins
        • Full Script
        • Section Script Description
        • View the layout
    • Generate array of cells
      • new_array
        • Full script
        • Section Script Description
        • Export GDS Layout
    • List of gpdk components
      • BendEuler
        • Full script
        • Section Script Description
        • Extend PCells from BendEuler
        • Export GDS Layout
      • Taper
        • Full script
        • Section Script Description
        • Extension of the taper ports
      • Splitter
        • Full Script
        • Section Script Description
        • Run the script and view the layout
      • Directional Coupler Bend
        • Full script
        • Parameter description
      • Ring filter
        • Full script
        • Parameters and testing descriptions
      • Elliptical Rings
        • Full script
        • fp.el.Ring Description
        • fp.el.EllipticalRing Description
      • Phase Shifter
        • Full script
        • Segment Description
          • 1. Import function module
          • 2. Main function
          • 3. Define function
      • Sampler Periodic
        • Full script
        • Left graph
        • Right graph
      • Mach-Zehnder modulator
        • Full Script
        • Section Script Description
        • Export GDS Layout
      • Grating Coupler with linecap
        • Full script
          • Section Script Description
          • Run the script and view the layout
  • Create a CUSTOM PDK
    • technology
      • layers.csv
      • waveguide factory.py
        • Straight
        • CircularBend
        • Implementation
      • wg.py
        • waveguide configuration
        • Define parameters in each waveguide types
        • Generate waveguide class
        • Generate wg information to csv file
      • auto_transition.py
        • Create transition components
        • Set up transition settings
        • Example
      • auto_link.py
        • LESS_TRANS
        • MAX_SWG
        • Usage
      • linker.py
    • components
      • Straight
      • bend_circular
      • Taper
      • Transition
      • grating_coupler
      • MMI
    • Standard Procedure
      • technology
        • layers.csv
        • waveguide factory.py
          • Straight
          • CircularBend
          • Implementation
        • wg.py
          • waveguide configuration
          • Define parameters in each waveguide types
          • Generate waveguide class
          • Generate wg information to csv file
        • auto_transition.py
          • Create transition components
          • Set up transition settings
          • Example
        • auto_link.py
          • LESS_TRANS
          • MAX_SWG
          • Usage
        • linker.py
      • components
        • Straight
        • bend_circular
        • Taper
        • Transition
        • grating_coupler
        • MMI
  • Design a circuit
    • Common used transformation
      • place
      • translated
      • scaled
      • rotated
      • mirrored
    • Waveguide Routing
      • Single-port to Single-port
        • Examples
      • Multi-port to Multi-port
        • fp.Linked example ( Recommendation★★★ )
        • fp.create_links example ( Recommendation★★★★★ )
      • Routing Path Selection
        • waylines
          • Absolute control points provided
          • Relative control points provided
        • waypoints
        • target_length
    • Electrical wire Routing
      • Link Electrical Pad
        • Full script
        • Parameters and testing descriptions
        • Connections
          • Top connection
          • Middle connection
          • Bottom connection
      • Link Electrical pad with turning angle
        • Full script
        • Parameters and testing description
          • Components positioning
    • Advanced Waveguide Routing
      • Routing in batch form
        • Components Scan
          • Full script
          • Section Script Definition
        • Importing python libraries and functional modules of PhotoCAD
        • Define device adaptation, fiber coupling, constant fiber coupler and several other classes
        • Define the batch class Block
        • Define Alignment
        • Define Title
        • Define Blank
        • Define method to get the port center
        • Define methods for obtaining module content
        • Define CompScan
        • Define CompScanBuilder
        • Create the component and export the layout
          • Script Description
          • GDS Layout
      • Extension of the ports
      • Extended
        • Full script
        • Section Script Definition
          • Create extended ports and export layout
        • GDS Layout
      • Expand the footprint for downstream devices
      • HFanout
        • Full script
        • Section Script Definition
          • Importing libraries and modules
          • Define HFanout
          • Create components and export layouts
        • GDS Layout
      • Horizontalization of device ports
      • Horizontalized
        • Full script
        • Section Script Definition
          • Create horizontalized components ports and export layouts
        • GDS Layout
      • LinkBetween
        • Import function module
        • Main function
        • Define function
        • Test for waypoints in LinkBetween
      • Routing automation between components ports
        • Linked
          • Full Script
          • Section Script Description
        • AutoTransitioned
      • LinkSmooth
        • Full script
    • Design rule check(DRC)
      • What is DRC?
        • Exclusion
        • Inclusion
        • Minimum_width
      • DRC check in KLayout
        • View designs in KLayout
        • Import DRC file to KLayout
        • View design rule errors
        • Make adjustments or waive the error
      • Examples files to test your knowledge
  • Post Layout Simulation
    • Component level simulation model
      • WGModel class
      • Script description
      • Other simulation models
    • MZI post-simulation
      • Full script
      • Build simulation models for WG, DC
      • Implement simulation models to components
      • Build MZI circuit and define poet-simulation functions
      • Generate GDS file and run post-simulation
  • Useful function when scripting PhotoCAD
    • Placing PCell ports
    • Get PCell information
      • Get PCell name
      • Get PCell region
      • Get ports information
      • Get two points relative information
    • Boolean operations between elements and layers
      • Boolean with different layers
      • Boolean with elements
    • Importing/Exporting GDS/Json file
      • Import GDS file
      • Export GDS file
      • Export Json file
    • Simplify layout by fp.use_sketch_view
      • Implement fp.use_sketch_view
      • Different usage of fp.use_sketch_view
      • GDS file build-time results
      • Example Scripts
    • Manually add ports/pins on PCells
    • Get the coordinates of the cell
    • Change the cell name in GDS file
      • Cell naming rules
    • Pytest: Prevent unexpected changes to the layout
      • Accidental modification of PCell with completed design
      • Accidental modification of other shared methods
    • Max-Optics simulation interface: runner.py
      • Interface usage:
      • Interface script description:
  • Quick Start: Create a Circuit
    • Step 1: Build basic building blocks
      • Bend
      • Straight
      • Taper
    • Step 2: Build basic circuits with basic building blocks
      • DirectionalCoupler
      • MMI
    • Step 3: Build complex circuits using basic building blocks
      • target_length
      • waypoints
      • waylines
    • Step 4: Drawing of common shapes and layout design by Boolean operations
      • Commonly_used_shape
        • Rectangle
        • Circle
        • Polygon
        • Ring
        • Regular_Polygon
      • Boolean_operation
        • OR
        • AND
        • NOT
        • XOR
        • Examples
    • Step 5: Example(MMI Tree)

Examples

  • Programmable Photonic Integrated Circuit
    • Part I. Building a Rectangular Network
    • Part II. Parameter Description
    • Part III. Test Description
    • Part IV. Summary
  • Triangle MZI mesh
    • Part I. Build MZI units
    • Part II. Build programmable triangular MZI mesh
      • MZI Mesh with 8 external optical ports (MZI_triangle_mesh)
      • MZI Mesh with 8 Grating Couplers (MZI_triangle_mesh_with_GC)
      • Triangle MZI array (MZI_triangle_array)
  • Demultiplexer
    • Full script
    • View GDS layout file
    • Instantiation of components
    • Testing and Analysis
    • Get Pcells information via get
    • Summary
  • Cascaded Mach-Zehnder (CMZ) wavelength filter
    • Implement simulation models for auto-link
    • Wavelength Splitters
    • CMZ wavelength demultiplexer
  • Visualize in Jupyter Notebook
    • MZI circuit layout generation in Jupyter notebook
      • Create a Jupyter Notebook
      • Code cell & Markdown cell
      • Generate MZI layout

Support and Changelog

  • fnpcell API
    • Commonly used interface
      • Graphics
      • Routing
      • Transform
      • Information
    • PCell Parameters
      • Classes
      • AnchorParam
      • BooleanParam
      • DegreeParam
      • DeviceParam
      • FloatParam
      • IParam
      • IntParam
      • LayerParam
      • ListParam
      • MappingParam
      • MetalLineTypeParam
      • NameListParam
      • NameParam
      • NonNegFloatParam
      • NonNegIntParam
      • Param
      • PointsParam
      • PortOptionsParam
      • PositionParam
      • PositiveFloatParam
      • PositiveIntParam
      • SetParam
      • TextParam
      • TransformParam
      • WaveguideTypeParam
  • Release notes
    • PhotoCAD V1.5.0
    • PhotoCAD V1.6.0
  • Frequently Asked Questions
    • Data Compression
    • Smooth curve for routing using bend_factory
    • Differences between __post_pcell_init__ & __post_init__
  • About Us
PhotoCAD
  • Create a CUSTOM PDK
  • technology
  • auto_link.py
  • View page source

auto_link.py

This function mainly defines the type of transition waveguide and bends when connecting between multiple waveguide types:

from >> to,  default link_type, default bend_factory
port 1 >> port 2, default waveguide link type, default bend waveguide type

There are two default methods, and users can also define their own.

LESS_TRANS

In the first linking method, the default waveguide link type goes with the end type of the waveguide we want to link together, and the bend used here is set to be an Euler bend to minimize waveguide loss according from the experiment.

class LINKING_POLICY:
    @fpt.classconst
    @classmethod
    def LESS_TRANS(cls):
        return fpt.LinkingPolicy().updated(
            [
                (type(WG.FWG.C.WIRE) >> type(WG.FWG.C.WIRE), LinkPrefer(WG.FWG.C.WIRE), BendUsing(WG.FWG.C.WIRE.BEND_EULER)),
                (type(WG.MWG.C.WIRE) >> type(WG.MWG.C.WIRE), LinkPrefer(WG.MWG.C.WIRE), BendUsing(WG.MWG.C.WIRE.BEND_EULER)),
                (type(WG.SWG.C.WIRE) >> type(WG.SWG.C.WIRE), LinkPrefer(WG.SWG.C.WIRE), BendUsing(WG.SWG.C.WIRE.BEND_EULER)),
                #
                (type(WG.FWG.C.WIRE) >> type(WG.MWG.C.WIRE), LinkPrefer(WG.MWG.C.WIRE), BendUsing(WG.MWG.C.WIRE.BEND_EULER)),
                (type(WG.MWG.C.WIRE) >> type(WG.SWG.C.WIRE), LinkPrefer(WG.SWG.C.WIRE), BendUsing(WG.SWG.C.WIRE.BEND_EULER)),
                (type(WG.FWG.C.WIRE) >> type(WG.SWG.C.WIRE), LinkPrefer(WG.SWG.C.WIRE), BendUsing(WG.SWG.C.WIRE.BEND_EULER)),
                #
                (type(WG.FWG.C.WIRE) >> type(WG.FWG.C.EXPANDED), LinkPrefer(WG.FWG.C.EXPANDED), BendUsing(WG.FWG.C.WIRE.BEND_EULER)),
                (type(WG.MWG.C.WIRE) >> type(WG.MWG.C.EXPANDED), LinkPrefer(WG.MWG.C.EXPANDED), BendUsing(WG.MWG.C.WIRE.BEND_EULER)),
                (type(WG.SWG.C.WIRE) >> type(WG.SWG.C.EXPANDED), LinkPrefer(WG.SWG.C.EXPANDED), BendUsing(WG.SWG.C.WIRE.BEND_EULER)),
                #
                (type(WG.FWG.C.WIRE) >> type(WG.MWG.C.EXPANDED), LinkPrefer(WG.MWG.C.EXPANDED), BendUsing(WG.MWG.C.EXPANDED.BEND_EULER)),
                (type(WG.MWG.C.WIRE) >> type(WG.SWG.C.EXPANDED), LinkPrefer(WG.SWG.C.EXPANDED), BendUsing(WG.SWG.C.EXPANDED.BEND_EULER)),
                (type(WG.FWG.C.WIRE) >> type(WG.SWG.C.EXPANDED), LinkPrefer(WG.SWG.C.EXPANDED), BendUsing(WG.SWG.C.EXPANDED.BEND_EULER)),
                #
                (type(WG.FWG.C.EXPANDED) >> type(WG.FWG.C.EXPANDED), LinkPrefer(WG.FWG.C.EXPANDED), BendUsing(WG.FWG.C.WIRE.BEND_EULER)),
                (type(WG.MWG.C.EXPANDED) >> type(WG.MWG.C.EXPANDED), LinkPrefer(WG.MWG.C.EXPANDED), BendUsing(WG.MWG.C.WIRE.BEND_EULER)),
                (type(WG.SWG.C.EXPANDED) >> type(WG.SWG.C.EXPANDED), LinkPrefer(WG.SWG.C.EXPANDED), BendUsing(WG.SWG.C.WIRE.BEND_EULER)),
                #
                (type(WG.FWG.C.EXPANDED) >> type(WG.MWG.C.EXPANDED), LinkPrefer(WG.MWG.C.EXPANDED), BendUsing(WG.MWG.C.EXPANDED.BEND_EULER)),
                (type(WG.MWG.C.EXPANDED) >> type(WG.SWG.C.EXPANDED), LinkPrefer(WG.SWG.C.EXPANDED), BendUsing(WG.SWG.C.EXPANDED.BEND_EULER)),
                (type(WG.FWG.C.EXPANDED) >> type(WG.SWG.C.EXPANDED), LinkPrefer(WG.SWG.C.EXPANDED), BendUsing(WG.SWG.C.EXPANDED.BEND_EULER)),
                #
            ]
        )

MAX_SWG

The second link method designated SWG as the default waveguide link type no matter which type of the waveguide is going to be connected. On the other hand, the bend type is set to be FWG.C.WIRE.BEND_EULER for the whole scenario.

@fpt.classconst
@classmethod
def MAX_SWG(cls):
    return fpt.LinkingPolicy().updated(
        [
            (type(WG.FWG.C.WIRE) >> type(WG.FWG.C.WIRE), LinkPrefer(WG.SWG.C.EXPANDED), BendUsing(WG.FWG.C.WIRE.BEND_EULER)),
            (type(WG.MWG.C.WIRE) >> type(WG.MWG.C.WIRE), LinkPrefer(WG.SWG.C.EXPANDED), BendUsing(WG.FWG.C.WIRE.BEND_EULER)),
            (type(WG.SWG.C.WIRE) >> type(WG.SWG.C.WIRE), LinkPrefer(WG.SWG.C.EXPANDED), BendUsing(WG.FWG.C.WIRE.BEND_EULER)),
            #
            (type(WG.FWG.C.WIRE) >> type(WG.MWG.C.WIRE), LinkPrefer(WG.SWG.C.EXPANDED), BendUsing(WG.FWG.C.WIRE.BEND_EULER)),
            (type(WG.MWG.C.WIRE) >> type(WG.SWG.C.WIRE), LinkPrefer(WG.SWG.C.EXPANDED), BendUsing(WG.FWG.C.WIRE.BEND_EULER)),
            (type(WG.FWG.C.WIRE) >> type(WG.SWG.C.WIRE), LinkPrefer(WG.SWG.C.EXPANDED), BendUsing(WG.FWG.C.WIRE.BEND_EULER)),
            #
            (type(WG.FWG.C.EXPANDED) >> type(WG.FWG.C.EXPANDED), LinkPrefer(WG.SWG.C.EXPANDED), BendUsing(WG.FWG.C.WIRE.BEND_EULER)),
            (type(WG.MWG.C.EXPANDED) >> type(WG.MWG.C.EXPANDED), LinkPrefer(WG.SWG.C.EXPANDED), BendUsing(WG.FWG.C.WIRE.BEND_EULER)),
            (type(WG.SWG.C.EXPANDED) >> type(WG.SWG.C.EXPANDED), LinkPrefer(WG.SWG.C.EXPANDED), BendUsing(WG.FWG.C.WIRE.BEND_EULER)),
            #
            (type(WG.FWG.C.EXPANDED) >> type(WG.MWG.C.EXPANDED), LinkPrefer(WG.SWG.C.EXPANDED), BendUsing(WG.FWG.C.WIRE.BEND_EULER)),
            (type(WG.MWG.C.EXPANDED) >> type(WG.SWG.C.EXPANDED), LinkPrefer(WG.SWG.C.EXPANDED), BendUsing(WG.FWG.C.WIRE.BEND_EULER)),
            (type(WG.FWG.C.EXPANDED) >> type(WG.SWG.C.EXPANDED), LinkPrefer(WG.SWG.C.EXPANDED), BendUsing(WG.FWG.C.WIRE.BEND_EULER)),
            #
        ]
    )

Default rule set

DEFAULT = LESS_TRANS

Usage

When setting linking_policy = TECH.LINKING_POLICY, link_type and bend_factory will not be needed to define. However, when linking_policy, link_type and bend_factory are all set in the same time, link_type and bend_factory has the higher priority.

  1. Linked(linking_policy = TECH.LINKING_POLICY.DEFAULT)

  2. LinkBetween(linking_policy = TECH.LINKING_POLICY.DEFAULT)

  3. create_links(linking_policy = TECH.LINKING_POLICY.DEFAULT)

Previous Next

© Copyright 2024, Latitudeds.com.

Built with Sphinx using a theme provided by Read the Docs.