pdaMCSgridToLayerItem
The conversion from xsection to gdslayer is a key aspect. It is handled in this section where many map's can be defined.Each mapping adds a possibly modified copy using the widening or lengthening of the data to the respective gdslayer.
Structure
This element does not have elements. The attributes are shown below, in a sorted per type fashion.<pdaMCSgridToLayerItem accuracy="..." lengthen="..." lengthen_OptoDesigner="..." widen="..." widen_OptoDesigner="..." ... > ... </pdaMCSgridToLayerItem>
XSD The schema file can be downloaded or viewed at xPDK_Base.
Details
Type pdaGDSlayerReference
Reference on the GDS layer in the xPDK_Layout.xsd.Type pdaIdentifier
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_])*
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.
<!-- 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>
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.
lengthen
Define a (curve) lengthening with a fixed value.
<!-- 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>
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.
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:
- 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.
<!-- 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>
This is vendor specific and can be defined as functor {functor #} or expression {a -> f(a)} style. These are used in the lengthening and widening of curves for example.
widen
Define a (curve) widening with a fixed value.
<!-- 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>
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.
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:
- 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.
<!-- 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>