xPDK_applayer

Virtual / application layer definitons including some user interface related properties. There are a series of common DRC rules available also.

It is often handy for more complex (boolean) operations to have some "gds" layers that are not actually written to GDS files, but are just used by the application to save repeated work. Allowing the use of such interim layers simplifies the layer operation definitions also as they do not need to be recursive and repeated.
In addition to their use in boolean operations, the same aspects often holds for more complex geometrical design rule checks.
Skip to XML structure
The fields for an applayer are almost the same as for a layer (see GDS Layer), but it does not have the gds_number, gds_datatype, polarity and masksupplier as the output should not go to file.
The documentation on the other fields is the same and is not repeated here.

Simple example

The following example shows a very minimal set, which is ok, but lacks the information like purpose or doc to be easy to maintain in the longer run.
full file

 <!-- some output layers for interim results -->
<applayer name="layerA0"/>
<applayer name="layerA1"/>
<applayer name="layerA2"/>
This example shows it very shortly, but it is recommended to document the purpose of the interim layer for future understanding / new colleques. This is done in the next example with the layerAnyData where both the purpose and doc are used (see GDS layer for details).

More realistic example

An example that uses the layerOr to merge data for a possible “data in cell area” test can be written this way. It uses the SingleLayerOps field layerOr (see single layer operations) instead of a series of the multi-layer versions.
full file

 <!-- some real layers for interim results -->
<layer name="layer0">
 <gds_number>0</gds_number> <gds_datatype>0</gds_datatype>
</layer>

<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>


<applayer name="layerAnyData">
 <purpose>Join of data layers</purpose>
 <doc>This join is intended for a "data inside chip area" design
      rule test.
 </doc>
  <SingleLayerOps>
   <layerOr>
     <layer>layer0</layer>
     <layer>layer1</layer>
     <layer>layer2</layer>
   </layerOr>
  </SingleLayerOps>
</applayer>

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.

<xPDK_applayer  autoXsection="..."  drc="..."  layerIgnoreAsData="..."  layerIsDieArea="..."  maskNumber="..."  mcsAnnotateBoundary="..."  mcsAnnotateCellName="..."  mcsAnnotateParameter="..."  mcsAnnotatePinDC="..."  mcsAnnotatePinInfo="..."  mcsAnnotatePinOptical="..."  mcsAnnotatePinRF="..."  mcsAnnotatePinSize="..."  mcsAnnotateText="..."  mcsAnnotateWaveguide="..."  name="..."  pdkSelect="..."  techIncludeElectricalTag="..."  techLayerFunction="..."  techLayerID="..."  techLayerRouting="..."  techPurpose="..." ... > ...
  <WaiveReport> ... </WaiveReport>   list   optional
  <color> ... </color>   list
  <doc> ... </doc>   list
  <drcAngleCheck> ... </drcAngleCheck>   list
  <drcConvex> ... </drcConvex>   list
  <drcFixedWidth> ... </drcFixedWidth>   list
  <drcGlobalDensity> ... </drcGlobalDensity>   list
  <drcLocalDensity> ... </drcLocalDensity>   list
  <drcMaxArea> ... </drcMaxArea>   list
  <drcMaxRadius> ... </drcMaxRadius>   list
  <drcMaxVertices> ... </drcMaxVertices>   list
  <drcMaxWidth> ... </drcMaxWidth>   list
  <drcMinArea> ... </drcMinArea>   list
  <drcMinCornerSpacing> ... </drcMinCornerSpacing>   list
  <drcMinCornerWidth> ... </drcMinCornerWidth>   list
  <drcMinLength> ... </drcMinLength>   list
  <drcMinNotch> ... </drcMinNotch>   list
  <drcMinRadius> ... </drcMinRadius>   list
  <drcMinSpace> ... </drcMinSpace>   list
  <drcMinVertices> ... </drcMinVertices>   list
  <drcMinWidth> ... </drcMinWidth>   list
  <drcNoOverlap> ... </drcNoOverlap>   list
  <drcShortEdgeCheck> ... </drcShortEdgeCheck>   list
  <drcSingularPoint> ... </drcSingularPoint>   list
  <fillstyle> ... </fillstyle>   list   optional
  <groupRef> ... </groupRef>   list
  <layerAnd> ... </layerAnd>   list
  <layerAnotB> ... </layerAnotB>   list
  <layerAnotBnotC> ... </layerAnotBnotC>   list
  <layerCount> ... </layerCount>   list
  <layerGrow> ... </layerGrow>   list
  <layerHeal> ... </layerHeal>   list
  <layerIsCoveredBy> ... </layerIsCoveredBy>   list
  <layerNot> ... </layerNot>   list
  <layerOffset> ... </layerOffset>   list
  <layerOr> ... </layerOr>   list
  <layerScript> ... </layerScript>   list
  <layerSelect> ... </layerSelect>   list
  <layerShrink> ... </layerShrink>   list
  <layerSize> ... </layerSize>   list
  <layerSnap> ... </layerSnap>   list
  <layerTrench> ... </layerTrench>   list
  <layerXor> ... </layerXor>   list
  <linestyle> ... </linestyle>   list   optional
  <purpose> ... </purpose>   list
  <techLayerConnection> ... </techLayerConnection>   list   optional
  <tex> ... </tex>   list
  <ticket> ... </ticket>   list
  <visible> ... </visible>   list   optional
</xPDK_applayer>

XSD

The schema file can be downloaded or viewed at xPDK_Layout.

Details

WaiveReport

Type WaiveReport documentation: Waive an issue in the Report.html

autoXsection

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: Each of R, G and B is required and be between 0 and 256.

doc

Type pdaDocumentation documentation:
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.

drc

Set 'drc marker'.
You can use this flag to identify this applayer is only used in design rule checking, so if you do not need that, you can ignore any operations involving this applayer.
The visible field will be false automatically also in OptoDesigner.
The od:layerIgnoreAsData="true" is implied by having drc=true.

drcAngleCheck

Type pdaDrcAngleCheck documentation: Define angular DRC check.

drcConvex

Type pdaDrcLayerNoArgument documentation: Define a single layer DRC test without argument.

drcFixedWidth

Type pdaDrcLayerArgumentDirection documentation:

drcGlobalDensity

Type pdaDrcGlobalDensity documentation: Single layer DRC check on global density.

drcLocalDensity

Type pdaDrcLocalDensity documentation: Single layer DRC check on local density.

drcMaxArea

Type pdaDrcLayerArgument documentation: Define a single layer DRC test with argument.

drcMaxRadius

Type pdaDrcLayerArgument documentation: Define a single layer DRC test with argument.

drcMaxVertices

Type pdaDrcLayerUnsignedArguement documentation: Define a single layer DRC test with unsigned-int as argument.

drcMaxWidth

Type pdaDrcLayerArgumentDirection documentation:

drcMinArea

Type pdaDrcLayerArgument documentation: Define a single layer DRC test with argument.

drcMinCornerSpacing

Type pdaDrcLayerArgument documentation: Define a single layer DRC test with argument.

drcMinCornerWidth

Type pdaDrcLayerArgument documentation: Define a single layer DRC test with argument.

drcMinLength

Type pdaDrcLayerArgumentDirection documentation:

drcMinNotch

Type pdaDrcLayerArgument documentation: Define a single layer DRC test with argument.

drcMinRadius

Type pdaDrcLayerArgument documentation: Define a single layer DRC test with argument.

drcMinSpace

Type drcMinSpaceType documentation: Validate the space between the center of (healed) polygons.
Value is the minimum space (um) between the centers.

Download the xsl/xml/xsd's and run the (bash) command line below to convert the XML to a SPT example in OptoDesigner (see short docu):

xsltproc --xinclude -stringparam standalone true -stringparam example drc0 xPDK_toOptoDesigner02.xsl layer_drcMinSpace.xml
full file
  <layer name="layer1">
    <gds_number>1</gds_number>
    <gds_datatype>0</gds_datatype>
    <grid>0.001</grid>
    <purpose>Waveguide layer</purpose>
    <color R="100" G="200" B="255"/>
    <visible>true</visible>
    <fillstyle>open</fillstyle>
    <linestyle>fill</linestyle>
    <SingleLayerOps>
      <drcMinSpace value="2">DRC</drcMinSpace>
    </SingleLayerOps>
  </layer>
Spt:

drcMinVertices

Type pdaDrcLayerUnsignedArguement documentation: Define a single layer DRC test with unsigned-int as argument.

drcMinWidth

Type pdaDrcLayerArgumentDirection documentation:

drcNoOverlap

Type pdaDrcLayerNoArgument documentation: Define a single layer DRC test without argument.

drcShortEdgeCheck

Type pdaDrcShortEdgeCheck documentation: Define short-edge DRC check.

drcSingularPoint

Type pdaDrcLayerNoArgument documentation: Define a single layer DRC test without argument.

extend

Type AllowExtend documentation: 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

Set fillstyle (polygon area) default settings in software; this is intended to have more consistent look over different software.
Fillstyle is default unfilled. Type pdaFillStyle documentation:

groupRef

Type pdaIdentifier documentation:
Identifiers are used in the Python library for the getName() and setName() function and can thus be used to identify the different elements in list s.
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_])*

layerAnd

Type pdaOPSdual documentation: A base class for multi-layer operations with target layer.

You can use the elements doc and tex to document the operation. This is often useful for later changes as the logic behind complex chains of operations is often not easy to follow by colleques and/or partners.
Attributes:

layerAnotB

Type pdaOPSdual documentation: A base class for multi-layer operations with target layer.

You can use the elements doc and tex to document the operation. This is often useful for later changes as the logic behind complex chains of operations is often not easy to follow by colleques and/or partners.
Attributes:

layerAnotBnotC

Type pdaOPStriple documentation: A base class for multi-layer operations.

You can use the elements doc and tex to document the operation. This is often useful for later changes as the logic behind complex chains of operations is often not easy to follow by colleques and/or partners.
Attributes:

layerCount

Type pdaOPSlayerCount documentation: Count amount of polygons in layer.

layerGrow

Type pdaOPSlayerGrow documentation: Single layer GROW operation.

layerHeal

layerIgnoreAsData

Type layerIgnoreAsData documentation: OptoDesigner extension, mark this layer as 'non data' for a "data inside die/design area" test.

layerIsCoveredBy

Type pdaOPSisCoveredByLayer documentation: Store partly/not/fully/partly_including/partly_excluding part of object layer definition.
This is a complex operation that stores the covered objects contour for the list of In layers.
You can use the elements doc and tex to document the operation. This is often useful for later changes as the logic behind complex chains of operations is often not easy to follow by colleques and/or partners.
Sub elements:
In is the list of input layers.
Cover is the list of cover layers.
how defines the style (partly/not/fully/partly_including/partly_excluding); default is partly.
healOutput defines whether a heal operation should be done or not to keep the individual pieces.

layerIsDieArea

Type layerIsDieArea documentation: OptoDesigner extension, mark this layer as "die/design area".

layerNot

Type pdaOPSLayerNot documentation: Single layer NOT operation.

layerOffset

Type pdaOPSoffsetLayer documentation: Offset layer.
This is a complex operation that creates an offset contour for the list of In layers. Different grow shapes can be used, detault is ellipse.
You can use the elements doc and tex to document the operation. This is often useful for later changes as the logic behind complex chains of operations is often not easy to follow by colleques and/or partners.
Sub elements:
In is the list of input layers.
dist is the distance for the offset (in um), default 0.1.
how defines the style (ellipse, miter, rectangle).

layerOr

Type pdaGDSlayerReferenceList documentation:

layerScript

Type pdaOPSinLayer documentation:

layerSelect

Type pdaOPSselectLayer documentation: Store part of object layer definition.
This is a complex operation that stores the covered objects contour for the list of In layers.
You can use the elements doc and tex to document the operation. This is often useful for later changes as the logic behind complex chains of operations is often not easy to follow by colleques and/or partners.
Sub elements:
In is the list of input layers.
Compare is the list of cover layers.
how defines the style (covering | in | inside | interacting | not_covering | not_in | not_inside | not_interacting | not_outside | not_overlapping | outside | overlapping); default is covering.
healOutput defines whether a heal operation should be done or not to keep the individual pieces.

layerShrink

Type pdaOPSlayerShrink documentation: Single layer SHRINK operation.

layerSize

Type pdaOPSlayerSize documentation: Single layer SIZE operation.

layerSnap

Type pdaOPSlayerSnap documentation: Single layer SNPA operation.

layerTrench

Type pdaOPSlayerTrench documentation: Tgt=Trench | (Clad & ! Core)
Define a trench operation; Tgt=Trench | (Clad - Core).
The operation is called "trench" as it is often used for waveguide trench definitions, where you draw the "core" but need to get the "trench" in GDS output. Widening the "core" to "clad" and invert will give you the "trench". This is simple to do with the xsection definition and using multiple maps. The boolean operation that combines the output is then this trenching operation.

     <xsection name="wg">
      <grid>
       <map>core</map>
       <mag widen="5">clad</map>
      </grid>
     </xsection>
    
You can use it for other operations where you need a: "direct write" or (A - B).
You can use the elements doc and tex to document the operation. This is often useful for later changes as the logic behind complex chains of operations is often not easy to follow by colleques and/or partners.
Attributes:

layerXor

Type pdaOPSdual documentation: A base class for multi-layer operations with target layer.

You can use the elements doc and tex to document the operation. This is often useful for later changes as the logic behind complex chains of operations is often not easy to follow by colleques and/or partners.
Attributes:

linestyle

Set linestyle (polygon contour) default settings in software; this is intended to have more consistent look over different software.
Linestyle is default filled. Type pdaIdentifier documentation:
Identifiers are used in the Python library for the getName() and setName() function and can thus be used to identify the different elements in list s.
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_])*

maskNumber

Type maskNumber documentation: Define tech maskNumber.
This number somewhat reflects the layerstack and is used in LVS. The lower numbers should be the lower layers in the chip. The range does not need to be continous.

mcsAnnotateBoundary

Type mcsAnnotateBoundary documentation: OptoDesigner extension, use this MCS for the BB/pcell name in xpdkAnnotator().

mcsAnnotateCellName

Type mcsAnnotateCellName documentation: OptoDesigner extension, use this MCS for the BB/pcell name in xpdkAnnotator().

mcsAnnotateParameter

Type mcsAnnotateParameter documentation: OptoDesigner extension, use this MCS for BB/pcell parameters in xpdkAnnotator().

mcsAnnotatePinDC

Type mcsAnnotatePinDC documentation: Tag DC port in this layer via rectangle.

mcsAnnotatePinInfo

Type mcsAnnotatePinInfo documentation: OptoDesigner extension, use this MCS for BB/pcell ports in xpdkAnnotator(). This layer is used for the port name and properties.

mcsAnnotatePinOptical

Type mcsAnnotatePinOptical documentation: Tag optical port in this layer via rectangle.

mcsAnnotatePinRF

Type mcsAnnotatePinRF documentation: Tag RF port in this layer via rectangle.

mcsAnnotatePinSize

Type mcsAnnotatePinSize documentation: OptoDesigner extension, use this MCS for BB/pcell ports in xpdkAnnotator(). This layer is used for a rectangle that indicates the width of the port.

mcsAnnotateText

Type mcsAnnotateText documentation: Extension, use this MCS for plain text.

mcsAnnotateWaveguide

Type mcsAnnotateWaveguide documentation: This information is intended for Layout-vs-Schematic (LVS) with ICvalidator in OptoCompiler.

name

Type pdaIdentifier documentation:
Identifiers are used in the Python library for the getName() and setName() function and can thus be used to identify the different elements in list s.
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_])*

pdkSelect

Type pdkSelect documentation: Use in layout.xml's to have a single foundry database, where you select layer/xsection/.. sub-sets for a given PDK.

purpose

Define the purpose of the layer
Expected is a single liner.

techIncludeElectricalTag

Type techIncludeElectricalTag documentation: Specify that the electrical tag library will be added to the OptoDesigner 02-file/
This pcell library will be used in the BBs to generate a spt-based side-file for mask assembly.

techLayerConnection

Type techLayerConnection documentation: Define OA-Tech layer connection.
This field can be used to link layers and/or xsections; this tells that routing-wise ('design intent') they are directly connecting, possibly with a byLayer value.
You can define the connection in either layer/xsection, no need to define it twice.
For layer/xsection's that connect to more than one, define them from one layer, otherwise multiple lines will be written in the tech file.
Only use this for layers that have at least one of techLayerRouting='true' or techIncludeElectricalTag='true'.

techLayerFunction

Type techLayerFunction documentation: Define the function value in OptoCompiler tech file, section 'function'

techLayerID

Type techLayerID documentation: Define OA-Tech ID.
The OA Tech file needs to have unique numbers that are PDK version constant for design migration. The default behavior is use to use for layer definitions 65536*gds_number+gds_datatype and for the xsection the value 10000+N with N being the index in the xsection list.
Those values are very likely to be unique per PDK, but the xsection numbers are unlikely to be PDK version constant (adding or removing xsection's will fail this).
You can overrule the Tech ID with this field; the range is 256-10000 to avoid overlapping the default range. The number is free within this range, but as guideline:

techLayerRouting

Type techLayerRouting documentation: Mark for routing in in OptoCompiler tech file, section 'constraintGroups'

techPurpose

Type techPurpose documentation: Define the 'OpenAccess' purpose for a layer.
This will be used in writing to the tech-file and if a layer does not have it specified, it will be used as drawing.
You can add your own values in addition to the standard provided names:

tex

Type pdaTexDocumentation documentation: 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.

ticket

Type pdaTicket documentation:

visible