xPDK 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.XSD(xsection):
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.
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.
Very basic definition.
<xsection name="WGbase">
<purpose>Base waveguide</purpose>
</xsection>
Including GDS mapping and some properties
<!-- 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>
Documentation of the fields
purpose
XSD(purpose):
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.
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.
doc
The doc can be a longer text (few paragraphs) to document the layer in more detail if needed.XSD(doc):
Document anything relevant for the topic you want to define.
Multiple paragraphs is fine. Format is plain text.
Multiple paragraphs is fine. Format is plain text.
tex
The tex can be a long text in LaTex format to document the layer in more detail if needed.XSD(tex):
Document anything relevant for the topic you want to define.
Multiple paragraphs is fine. Format is Latex, so more complex content is possible.
Multiple paragraphs is fine. Format is Latex, so more complex content is possible.
color
Use a RGB color for the default settings in software; this is intended to have more consistent look over different software.XSD(xPDK_color):
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.
Each of R, G and B is required and be between 0 and 256.
visible
Set visibility default settings in software; this is intended to have more consistent look over different software.fillstyle
Set fillstyle (polygon area) default settings in software; this is intended to have more consistent look over different software.XSD(fillstyle):
fillstyle is default unfilled
linestyle
Set linestyle (polygon contour) default settings in software; this is intended to have more consistent look over different software.XSD(linestyle):
linestyle is default filled
grid
See Gridding.XSD(grid):
An mcs 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.
mcsSetWidth
<xsection name="WG">
<mcsSetWidth useDrc="false" min="0.1">0.5</mcsSetWidth>
</xsection>
XSD(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.
Using this value in the BB-sections of xPDK simplifies maintenance. It also shows better the intent of certain equations / values.
XSD(mcsSetWidth:attributes):
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.
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.
mcsSetRadius
<xsection name="WG">
<mcsSetRadius useDrc="false" min="1">50.0</mcsSetRadius>
</xsection>
XSD(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.
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.
XSD(mcsSetRadius:attributes):
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.
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.
mcsSetUncoupledDistance
<xsection name="WG">
<mcsSetUncoupledDistance>2.0</mcsSetUncoupledDistance>
</xsection>
XSD(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.
The reasonable is not a hard specification, but indicative. Reasonable values are when the coupling length will be close to the chip length.
mcsSetTaperAngle
<xsection name="WGbase">
<mcsSetTaperAngle>1.0</mcsSetTaperAngle>
</xsection>
XSD(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.
Recommended is to use an angle that is low enough to avoid mode or polarisation conversion.
mcsSetSBOffset
<xsection name="WG">
<mcsSetSBOffset>0.01</mcsSetSBOffset>
</xsection>
XSD(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.
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.
mcsSetGap
<xsection name="WG">
<mcsSetGap>2.0</mcsSetGap>
</xsection>
XSD(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.
mcsSetTextExpand
<xsection name="WG">
<mcsSetTextExpand>20</mcsSetTextExpand>
</xsection>
XSD(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.
This is often needed to prevent design rule fails on small vertices or sharp angles.
spt
<xsection name="WG">
<od_spt>// This section does some special OptoDesigner things.
mcsSetCurveCheck();
mcsSetAltWG("WGhigh","WGlow");
</od_spt>
</xsection>
XSD(spt):
extend
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.
More details on extensions naming & conventions.
name
The name must be defined, be unique and be "identifier".XSD(name):
Defines a valid name for an identifier.
In text this is a letter, followed by letters, numbers, underscore or dot. The check is regular expression: [A-Za-z]([A-Za-z0-9_])*
In text this is a letter, followed by letters, numbers, underscore or dot. The check is regular expression: [A-Za-z]([A-Za-z0-9_])*
Gridding: xsection → gdslayer
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.
accuracy
<!-- define GDS layers for the <map> sections -->
<layer name="layer1" >
<gds_number>1</gds_number> <gds_datatype>0</gds_datatype>
</layer>
<!-- define MCS layers -->
<xsection name="WG">
<grid>
<map accuracy="0.1">layer1</map>
</grid>
</xsection>
XSD(accuracy):
This defines how accurate (in um) a curve should be approximated and does not directly relate
to a GDS database grid. For photonic waveguides the 0.001 default is typical, while metal routing
can use a lower accuracy like 0.01 um.
A rule of thumb is that each 10x more accurate approximation gives about 3x data size increase.
A rule of thumb is that each 10x more accurate approximation gives about 3x data size increase.
widen
<!-- define GDS layers for the <map> sections -->
<layer name="layer1" >
<gds_number>1</gds_number> <gds_datatype>0</gds_datatype>
</layer>
<!-- define MCS layers -->
<xsection name="WG">
<grid>
<map widen="4">layer1</map>
</grid>
</xsection>
XSD(widen):
Define a (curve) widening with a fixed value.
lengthen
<!-- define GDS layers for the <map> sections -->
<layer name="layer1" >
<gds_number>1</gds_number> <gds_datatype>0</gds_datatype>
</layer>
<!-- define MCS layers -->
<xsection name="WG">
<grid>
<map lengthen="2">layer1</map>
</grid>
</xsection>
XSD(lengthen):
Define a (curve) lengthening with a fixed value.
widen_OptoDesigner
<!-- define GDS layers for the <map> sections -->
<layer name="layer1" >
<gds_number>1</gds_number> <gds_datatype>0</gds_datatype>
</layer>
<!-- define MCS layers -->
<xsection name="WG">
<grid>
<map widen_OptoDesigner="{functor= #+4}">layer1</map>
<map widen_OptoDesigner="{functor= #^2+4}">layer1</map>
<map widen_OptoDesigner="{w -> cos(w)+4}">layer1</map>
</grid>
</xsection>
XSD(widen_OptoDesigner):
A widening of a track is with respect to the center of the curve.
It can be width-dependent in OptoDesigner, for example to auto-taper a RF GSG track correctly. Other software may or may not have this capability, but if so, they can use this field also.
For OptoDesigner the style should be one of:
It can be width-dependent in OptoDesigner, for example to auto-taper a RF GSG track correctly. Other software may or may not have this capability, but if so, they can use this field also.
For OptoDesigner the style should be one of:
- functor (preferred & fast option)
{functor= #+10.0}
. Here the # is the local waveguide width and this example shows a 1 um widening.
Using something like{functor= #*#+10.0*#+5}
would lead to a quadratic widening. - local function (more flexible / general)
{w -> w+ 10}
. You can use define your own variable name before the -> and can use any expression possible in OptoDesigner.
lengthen_OptoDesigner
<!-- define GDS layers for the <map> sections -->
<layer name="layer1" >
<gds_number>1</gds_number> <gds_datatype>0</gds_datatype>
</layer>
<!-- define MCS layers -->
<xsection name="WG">
<grid>
<map lengthen_OptoDesigner="{functor= #+4}">layer1</map>
<map lengthen_OptoDesigner="{functor= #^2+4}">layer1</map>
<map lengthen_OptoDesigner="{w -> cos(w)+4}">layer1</map>
</grid>
</xsection>
XSD(lengthen_OptoDesigner):
A lengthening extends the input and output of a curve.
It can be width-dependent in OptoDesigner, for example to auto-taper a RF GSG track correctly. Other software may or may not have this capability, but if so, they can use this field also.
For OptoDesigner the style should be one of:
Note If both lengthen_OptoDesigner and lengthen are available, OptoDesigner will use only the former.
It can be width-dependent in OptoDesigner, for example to auto-taper a RF GSG track correctly. Other software may or may not have this capability, but if so, they can use this field also.
For OptoDesigner the style should be one of:
- functor (preferred & fast option)
{functor= #+10.0}
. Here the # is the local waveguide width and this example shows a 10 um widening.
Using something like{functor= #*#+10.0*#+5}
would lead to a quadratic widening. - local function (more flexible / general)
{w -> w+ 10}
. You can use define your own variable name before the -> and can use any expression possible in OptoDesigner.
Note If both lengthen_OptoDesigner and lengthen are available, OptoDesigner will use only the former.