pdaXsection

Define mcs/cad/design layers with optical related properties.

Design layers which map via gridding onto GDS/Oasis/OpenAccess layers. mcs's provide for "optical" logic like default width, bend radius, coupling length and so on.
Each design layer can map to multipe GDS layers, so you can define a layer stack relating to a waveguide in a single definition.
Take for example a typical core, cladding and trench or some under/over etch compensation. This approach is not only suitable for photonics, but is practical in many technologies. The picture below shows a cross-section of a (printed) transistor.



Instead of writing in many GDS layers, you can simply use the xsection which represents OptoDesigner's mcs concept which is shown in the picture.

xsection

This defines a xsection which in EDA-design is often called a cad or design layer. In OptoDesigner this is a mcs. The xsection's define what the port should refer to. A xsection is normally something like a waveguide or metal track and is often using multiple (gds) layers.

Very basic definition.

full file
 <xsection name="WGbase">
  <purpose>Base waveguide</purpose>
 </xsection>
This definition is good for marking things up, but elements placed in this design layer will not go to a mask file.

Including GDS mapping and some properties

full file
<!-- define GDS layers for the <map> sections -->
<layer name="layer1" >
 <gds_number>1</gds_number> <gds_datatype>0</gds_datatype>
</layer>

<layer name="layer2" >
 <gds_number>2</gds_number> <gds_datatype>0</gds_datatype>
</layer>

<!-- define MCS layers -->
<xsection name="WG" >
  <purpose type="active">Waveguide with grid</purpose>
  <grid>
   <map accuracy="0.1">layer1</map>
   <map widen="2">layer2</map>
  </grid>
  <mcsSetWidth useDrc="false">0.5</mcsSetWidth>
  <mcsSetRadius min="100">200</mcsSetRadius>
 </xsection>

 <xsection name="Doc" >
  <purpose type="doc">Metal highlighting</purpose>
  <grid>
   <map accuracy="0.1">layer2</map>
   <map widen="2">layer2</map>
  </grid>
  <mcsSetWidth useDrc="false">0.5</mcsSetWidth>
  <mcsSetRadius min="100">200</mcsSetRadius>
 </xsection>

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.

<pdaXsection  name="..." ... > ...
  <color> ... </color>    optional
  <doc> ... </doc>    optional
  <fillstyle> ... </fillstyle>    optional
  <grid> ... </grid>    optional
  <linestyle> ... </linestyle>    optional
  <mcsSetGap> ... </mcsSetGap>    optional
  <mcsSetRadius> ... </mcsSetRadius>    optional
  <mcsSetSBOffset> ... </mcsSetSBOffset>    optional
  <mcsSetTaperAngle> ... </mcsSetTaperAngle>    optional
  <mcsSetTextExpand> ... </mcsSetTextExpand>    optional
  <mcsSetUncoupledDistance> ... </mcsSetUncoupledDistance>    optional
  <mcsSetWidth> ... </mcsSetWidth>    optional
  <module> ... </module>    optional
  <od_spt> ... </od_spt>    optional
  <purpose> ... </purpose>    optional
  <tex> ... </tex>    optional
  <visible> ... </visible>    optional
</pdaXsection>

XSD

The schema file can be downloaded or viewed at xPDK_Base.

Details

color

Use a RGB color for the default settings in software; this is intended to have more consistent look over different software. Type pdaColor documentation: Define a RGB color using the attributes R, G and B.
Each of R, G and B is required and be between 0 and 256.

doc

Type pdaDocumentation documentation: Document anything relevant for the topic you want to define.

This field allows some (short, few lines) documentation to be written. It can be a long string, but the idea is not to replace a design manual.
This fields is like tex which allows documentation in LaTex format; doc is restricted to plain text.

extend

Type AllowExtend documentation: This section allows to add your own field or attributes.

Allows to extend with any (complex) data for enriching a design kit. The sub-data of an extend will normally be vendor or provider specific, but may span multiple software vendors or suppliers.

Provider extensions can be references to (or embedded) reporting scripts or their versions; source database references and so on. Such data is helpful in cross-referencing production issues or differences between export snapshots. Embedding such data in the XML rather then side-files enhances tracebility and reduces errors.

Using this section is not considered part of the xPDK format therefore, but as long as the files validate with the Stichting PDAFlow Foundation schema's, it is not considered a (not allowed) Derivative version.
For conventions, please check also Extensions.
See also xPDK License.

fillstyle

Fillstyle is default unfilled
Set fillstyle (polygon area) default settings in software; this is intended to have more consistent look over different software.
Type pdaIdentifier documentation: Defines a valid name for an identifier.

Identifiers are used in the Python library for the getName() and setName() function and can thus be used to identify the different elements in lists.
In text the specification is a letter, followed by letters, numbers, underscore or dot. The XSD schema validation is a regular expression: [A-Za-z]([A-Za-z0-9_])*

grid

The conversion from xsection / mcs to gdslayer is a key aspect. It is handled in the grid section where many maps can be defined.
Each mapping adds a possibly modified copy using the widening or lengthening of the data to the respective gdslayer.

You can define a mix of widen, lengthen, accuracy and so on per map and they will be jointly used for one mapping to the GDS layer in the <map>...</map>. The name in<map>...</map> should be the name of a layer or applayer.
The examples show only a single attribute per map to keep the example more focussed and the documentation more specific.

An xsection can have zero grids, this makes it a display-only layer. To get something into GDS/Oasis/OpenAccess you need to have one or more gds-layers associated. Each can have a different widening. Type pdaCMSgridToLayer documentation:

linestyle

Linestyle is default filled.
Set linestyle (polygon contour) default settings in software; this is intended to have more consistent look over different software.
Type pdaIdentifier documentation: Defines a valid name for an identifier.

Identifiers are used in the Python library for the getName() and setName() function and can thus be used to identify the different elements in lists.
In text the specification is a letter, followed by letters, numbers, underscore or dot. The XSD schema validation is a regular expression: [A-Za-z]([A-Za-z0-9_])*

mcsSetGap

This sets the gap (in um) for two curves to stay uncoupled. It relates to mcsSetUncoupledDistance, but this is suitable for tapering elements also.
full file
 <xsection name="WG">
  <mcsSetGap>2.0</mcsSetGap>
 </xsection>
Type pdaExpression documentation: Define an expression.

Expression need to be commonly evaluated by many software, so having a restricted set of math / types and so on is key. In PDAFlow lib2/expr there is a yacc/lex parser available with some unit support as well as double / complex expressions. An alternative is tinyexpr, but this is more restrictive, so may be very unhandy for things like waveguide model expressions.

mcsSetRadius

This sets the default radius (in um) for the xsection for curved / bended waveguides.
The waveguide/port bend radius is measured with respect to the geometrical waveguide center (in the case of most common symmetric waveguides).
Using this value in the BB-sections of xPDK simplifies maintenance. It also shows better the intent of certain equations / values.
full file
 <xsection name="WG">
    <mcsSetRadius useDrc="false" min="1">50.0</mcsSetRadius>
 </xsection>
Type pdaMCSitem documentation: With the optional attribute min you can give a value for the minimum also. This can be used in BB design or parameter.
If min is set, then OptoDesigner will also validate curves against this value - so the "logical" value rather (per-se) the geometrical value as due to grid/map you may have different values for that.
If this is not intended, use useDrc="false" as attribute.

mcsSetSBOffset

Define a good straight/bend offset (in um) for a transistion for the default width/radius.
You can use the <spt> to define more complex (radius dependent) values also or apply a complete mcsModeModel for that.
These are OptoDesigner specific values, but the typical width/radius is often used.
full file
 <xsection name="WG">
  <mcsSetSBOffset>0.01</mcsSetSBOffset>
 </xsection>
Type pdaExpression documentation: Define an expression.

Expression need to be commonly evaluated by many software, so having a restricted set of math / types and so on is key. In PDAFlow lib2/expr there is a yacc/lex parser available with some unit support as well as double / complex expressions. An alternative is tinyexpr, but this is more restrictive, so may be very unhandy for things like waveguide model expressions.

mcsSetTaperAngle

Define a tapering angle (in degree) which should be used for automatic tapers when width-changes are detected.
Recommended is to use an angle that is low enough to avoid mode or polarisation conversion.
full file
 <xsection name="WGbase">
  <mcsSetTaperAngle>1.0</mcsSetTaperAngle>
 </xsection>
Type pdaExpression documentation: Define an expression.

Expression need to be commonly evaluated by many software, so having a restricted set of math / types and so on is key. In PDAFlow lib2/expr there is a yacc/lex parser available with some unit support as well as double / complex expressions. An alternative is tinyexpr, but this is more restrictive, so may be very unhandy for things like waveguide model expressions.

mcsSetTextExpand

This value (in nm) is used in OptoDesigner to shrink or grow the pixels of a text font.
This is often needed to prevent design rule fails on small vertices or sharp angles.
full file
 <xsection name="WG">
  <mcsSetTextExpand>20</mcsSetTextExpand>
 </xsection>
Type pdaExpression documentation: Define an expression.

Expression need to be commonly evaluated by many software, so having a restricted set of math / types and so on is key. In PDAFlow lib2/expr there is a yacc/lex parser available with some unit support as well as double / complex expressions. An alternative is tinyexpr, but this is more restrictive, so may be very unhandy for things like waveguide model expressions.

mcsSetUncoupledDistance

Define the center/center distance (in um) between two curves for which they are to be reasonably uncoupled.
The reasonable is not a hard specification, but indicative. Reasonable values are when the coupling length will be close to the chip length.
full file
 <xsection name="WG">
  <mcsSetUncoupledDistance>2.0</mcsSetUncoupledDistance>
 </xsection>
Type pdaExpression documentation: Define an expression.

Expression need to be commonly evaluated by many software, so having a restricted set of math / types and so on is key. In PDAFlow lib2/expr there is a yacc/lex parser available with some unit support as well as double / complex expressions. An alternative is tinyexpr, but this is more restrictive, so may be very unhandy for things like waveguide model expressions.

mcsSetWidth

Define the default width (in um) for a curve / waveguide.
Using this value in the BB-sections of xPDK simplifies maintenance. It also shows better the intent of certain equations / values.
full file
 <xsection name="WG">
  <mcsSetWidth useDrc="false" min="0.1">0.5</mcsSetWidth>
 </xsection>
Type pdaMCSitem documentation: With the optional attribute min you can give a value for the minimum also. This can be used in BB design or parameter.
If min is set, then OptoDesigner will also validate curves against this value - so the "logical" value rather (per-se) the geometrical value as due to grid/map you may have different values for that.
If this is not intended, use useDrc="false" as attribute.

module

Specify which proces module adds this layer. Type pdaIdentifier documentation: Defines a valid name for an identifier.

Identifiers are used in the Python library for the getName() and setName() function and can thus be used to identify the different elements in lists.
In text the specification is a letter, followed by letters, numbers, underscore or dot. The XSD schema validation is a regular expression: [A-Za-z]([A-Za-z0-9_])*

name

The name must be defined and be unique. Type pdaIdentifier documentation: Defines a valid name for an identifier.

Identifiers are used in the Python library for the getName() and setName() function and can thus be used to identify the different elements in lists.
In text the specification is a letter, followed by letters, numbers, underscore or dot. The XSD schema validation is a regular expression: [A-Za-z]([A-Za-z0-9_])*

od_spt

This section is copied into the '02' file below the mcs definition and is intended for more complex properties like waveguide models and so on.
It provides also for less common mcsSet*() functions or feeding them with values that xPDK does not support.
full file
 <xsection name="WG">
  <od_spt>// This section does some special OptoDesigner things.
   mcsSetCurveCheck();
   mcsSetAltWG("WGhigh","WGlow");
  </od_spt>
 </xsection>
Type od_VendorExtension documentation:

purpose

Define the (foundry) purpose of this layer. Typically this is a short line. Type pdaLayerPurpose documentation: Define the purpose of the layer. Expected is a single liner.
An optional attribute is type which can have one of the following values: passive, active, doc, misc, metal, metalalt, metalrouting, metal1, metal2, metal3, metal4, metal5, metal6, metal7, metal8, metal9, rf, rf_gsg, rf_gssg, rf_s, rf_g.
Metal1-9 are for multi-layer metal, with '1' being closes to the photonics; moving up to higher numbers is typically done with VIA's.

tex

Type pdaTexDocumentation documentation: As doc, but tex can be a long text in LaTex format to document the layer in more detail if needed.

You can document anything relevant for the topic you want to define.

Multiple paragraphs is fine. Format is Latex, so more complex content is possible.

visible