Trace bundles

A trace bundle combines multiple traces in one bundle. After defining the trace template and the shape of every trace in the bundle, it is possible to visualize the full bundle. It is also possible to add cover layers that cover the whole area of the bundle. Trace bundles can be used to implement a bus or a set of waveguides which are routed together over the chip.

class ipkiss3.all.TraceBundle

A base class for bundles of traces

Bundles can be used to implement a bus, a set of waveguides which are routed together over the chip, and so forth.

The traces can be different in nature (e.g. template)

Parameters:
traces: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>

the traces in this bundle

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Views

class Layout

Bundle of traces layout with a shape covering all of the traces, on a given set of cover layers

The traces can be different in nature (e.g. having different trace templates). The cover layer takes into account the facets and total width of each trace

Each trace can be given a transformation, using the trace_transformations property.

Parameters:
area_layer_on:

When True, the entire bundle area will be covered by all the cover layers.

trace_transformations: list and List with type restriction, allowed types: <class ‘ipkiss.geometry.transform.Transform’>

transformations to be applied to each of the traces

cover_layers: List with type restriction, allowed types: <class ‘ipkiss.primitives.layer.Layer’>

layers that can be used to generate additional coverage of the trace (e.g. manhattan corners)

view_name: String that contains only alphanumeric characters from the ASCII set or contains _$. ASCII set is extended on PY3.

The name of the view

Examples

# create a trace bundle from 5 traces with differening trace templates
from ipkiss3.ipkiss2_all import Layer
from ipkiss3.pcell.trace.bundle import TraceBundle
from ipkiss3.ipkiss2_all import Translation
from ipkiss3.pcell.trace.window.window import PathTraceWindow
from ipkiss3.pcell.trace.window_trace import TemplatedWindowTrace, WindowTraceTemplate

# Example 1: create a trace bundle from 5 traces with differening trace templates

# Windows

trace_widths = [
    0.5,
    1.0,
    2.0,
    3.0,
    4.0,
]  # we'll use this to generate a trace template for each of the 5 traces
trace_shape = [(0.0, 0.0), (20.0, 5.0)]  # all traces will have the same shape
trace_positions = [0.0, 5.0, 10.0, 15.0, 20.0]  # but their position will be different

traces = []  # list of traces we'll pass to the TraceBundle
trace_transformations = []

for w, p in zip(trace_widths, trace_positions):  # loop over all trace parameters
    # create a template for this trace based on windows
    windows = [
        PathTraceWindow(layer=Layer(0), start_offset=-0.5 * w, end_offset=0.5 * w),
        PathTraceWindow(layer=Layer(1), start_offset=-0.25 * w, end_offset=0.25 * w),
    ]

    trace_t = WindowTraceTemplate()
    trace_t.Layout(windows=windows)
    # create the trace itself
    trace = TemplatedWindowTrace(template=trace_t)
    trace.Layout(shape=trace_shape)
    # add it to our list of traces
    traces.append(trace)
    trace_transformations.append(Translation(translation=(0.0, p)))

# create a TraceBundle and visualize its layout
bundle = TraceBundle(traces=traces)
bundle_layout = bundle.Layout(trace_transformations=trace_transformations, cover_layers=[Layer(2)])
bundle_layout.visualize(annotate=True)
../../../_images/bundle-1.png