pdaBoundaryView
Annotate the topview with different aspects. The typical aspect is the "geometric" boundary, but you can specify multiple regions with other aspects like "metal", "rf" or special optical exclusions and so on.You can define as many boundaries as needed.
You can define a polygon (use point), a rectangle, circle or ellips now. Additional types will be added later.
Via the <spt> tag you can use OptoDesigner specific shapes also in case you want a white-box building block.
The "purpose" attribute set more details in case multiple boundaries are used. And the "xsection" can be used to use the xsection's to write to GDS, support DRC and so on.
Structure
The attributes and elements are shown below, in a sorted per type fashion.In case a list is printed after an element, it indicates that you can have many, otherwise it should be a single element. With a optional it tells the element is not required.
<boundary purpose="..." ... > ...
<arc> ... </arc> optional
<circle> ... </circle> optional
<cosinebend> ... </cosinebend> optional
<ellipse> ... </ellipse> optional
<lineartaper> ... </lineartaper> optional
<od_sptFooter> ... </od_sptFooter> optional
<od_sptHeader> ... </od_sptHeader> optional
<parabolictaper> ... </parabolictaper> optional
<point> ... </point> list
<rectangle> ... </rectangle> optional
<sinebend> ... </sinebend> optional
<xsection> ... </xsection> optional
</boundary>
XSD The schema file can be downloaded or viewed at xPDK_Base.
Details
arc
Define a arc / polar bend. Type pdaPolarBend documentation: Define a polar bend; radius and width are in micron.circle
Define a circle with radius and [x,y] defined in micron.
<bb name="myBB">
<port label="org"/>
<port label="in0" org="true">
<position>
<x>0</x>
</position>
</port>
<boundary> <!-- using align=bcc puts the circle's center on [x,y] -->
<circle portref="in0" align="bcc" x="25" y="5" radius="10"/>
</boundary>
</bb>
cosinebend
Define a cosine bend. Type pdaCosineBend documentation: Define a cosine bend; length, width and offset are in micron.ellipse
Define a ellipse with radiusX, radiusY and [x,y] defined in micron.
<bb name="myBB">
<port label="org"/>
<port label="in0" org="true">
<position>
<x>0</x>
</position>
</port>
<boundary> <!-- using align=bcc puts the ellips's center on [x,y] -->
<ellipse portref="in0" align="bcc" x="25" y="5" radiusX="10" radiusY="5"/>
</boundary>
</bb>
lineartaper
Define a taper. Type pdaLinearTaper documentation: Define a linear taper, that tapers from width0 to width1. Values are in micron.od_sptFooter
This section is copied into the '04' file into the layout itself and can be used to mark up complex boundaries. Also the use of multiple mcs/gds layers for DRC can be simpler this way.Instead of using spt, you can also use the xsection for typical cases and reduce vendor dependence for this section.
<bb name="myBB">
<port label="in0">
<position>
<x>0</x>
</position>
</port>
<boundary>
<od_sptHeader>
ml::Straight(cin-> this@in0 : wopar(1,3),20);
</od_sptHeader>
</boundary>
</bb>
od_sptHeader
This section is copied into the '04' file into the layout itself and can be used to mark up complex boundaries. Also the use of multiple mcs/gds layers for DRC can be simpler this way.Instead of using spt, you can also use the xsection for typical cases and reduce vendor dependence for this section.
<bb name="myBB">
<port label="in0">
<position>
<x>0</x>
</position>
</port>
<boundary>
<od_sptHeader>
ml::Straight(cin-> this@in0 : wopar(1,3),20);
</od_sptHeader>
</boundary>
</bb>
parabolictaper
Define a taper. Type pdaParabolicTaper documentation: Define a (optical) parabolic taper, that tapers from width0 to width1. Values are in micron.point
Define a series of points using [x,y] pairs. The values for x & y can be expressions and have unit micron.The [x,y] are defined always with respect to the port org and the portref/align can thus not be used for a polygon. This is defined this way to avoid complex boundary calculations to find the bic/boc and so on.
<bb name="myBB">
<port label="org"/>
<port label="in0" org="true">
<position>
<x>0</x>
</position>
</port>
<boundary>
<point x="0" y="-myWidth/2"/>
<point x="myLength" y="-myWidth/2"/>
<point x="myLength" y="myWidth/2"/>
<point x="0" y="myWidth/2"/>
</boundary>
</bb>
purpose
This optional field is a general string and thus can have any value. However design software is likely to ignore "nice" names and just uses the listed ones. You can propose & use new ones however.Typical region purposes are: boundary, metal, waveguide, dc, rf but you can add others like thermal, mechanical and so on.
Without a purpose string it is defined as the global boundary and should contain all the other regions. This avoids the need of calculating (by software) the outer boundary which is used in the designs.
<bb name="myBB">
<port label="in0">
<position>
<x>0</x>
</position>
</port>
<boundary purpose="waveguide">
<rectangle portref="in0" width="10" length="20" x="0" y="0"/>
</boundary>
</bb>
rectangle
Define a rectangle with width, length and [x,y] defined in micron.
<!-- define xsection for use in boundary -->
<xsection name="A"/>
<bb name="myBB">
<port label="org"/>
<port label="in0" org="true">
<position>
<x>0</x>
</position>
</port>
<port label="out0">
<position>
<x>200</x><y>50</y><angle>45</angle>
</position>
</port>
<port label="out1">
<position>
<x>200</x><y>-50</y><angle>-45</angle>
</position>
</port>
<boundary>
<!-- default alignment: portref="org" align="bic"
- does not need to be defined.
-->
<rectangle width="60" length="200"/>
</boundary>
<boundary>
<rectangle portref="in0" align="bic" width="10" length="20"/>
</boundary>
<boundary>
<rectangle portref="out0" align="boc" width="10" length="20"/>
</boundary>
<boundary>
<rectangle portref="out1" align="boc" width="10" length="20"/>
</boundary>
</bb>
sinebend
Define a sine bend. Type pdaSineBend documentation: Define a sine bend; length, width and offset are in micron.xsection
The xsection allows to specify this boundary is also used via the design / mcs / cad layer. This is oriented at gray-box and black-box design rule checking, where you do not have the full data for things like distance checks.Using the xsection can reduce the amount of cases where you need spt-sections in the cell definition as it allows to easily use white-box designs also.
<!-- define xsection for use in boundary -->
<xsection name="A"/>
<bb name="myBB">
<port label="in0">
<position>
<x>0</x>
</position>
</port>
<boundary>
<rectangle portref="in0" width="10" length="20" x="0" y="0"/>
<xsection>A</xsection>
</boundary>
</bb>