pdaDesignKit

Define a series of BB sources.

The BB definitions are needed to validate the data in the netlist, so we use the xPDK_BB data for that. A netlist can be a mixed technology provider and/or design house and/or software library.
The technology providers are typically: From design houses and software partners there are typically also For use in the netlist there are behaving in the same way, so we can combine them inside it.

Structure

This element does not have attributes. The 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.

<designkit> ...
  <
changelog> ... </changelog>   list
  <xPDK_BB> ... </xPDK_BB>   list
</designkit>

XSD

The schema file can be downloaded or viewed at xPDK_Netlist.

Details

changelog

Trace changes to the netlist; this field is not required to be kept up date with all changes made to the netlist, either by software or designer. Type xPDK_ChangeLog documentation: list, which can be empty. Software or design kit providers are not required to fill this data when changes are made, but it can help users to see what changed over time.

xPDK_BB

Type xPDK_BB documentation: This section in a xPDK extends from xPDK_Header.

This BB information contains the typical shared data between software: This information is needed in schematic design and circuit simulation as well as in layout.

This scope is therefore fairly broad and future extensions are likely to capture more information. The current common fields provide for a rich design kit already compared to other formats, while adressing different software.
Vendor extensions are supported in this section, so software specific details are possible therefore to tune behavior.

Extensive example

This example is part of the full file below. It is mostly listed here so you do not need to download it. It shows many fields and properties that can be defined and these are described in the child pages.
This file includes the technology file and adds the Met, Met1 and Met2 xsection's in the meta data to show both options work.

Use:
xmllint - -format - -xinclude - -schema xPDK_BB.xsd xPDK_BB.xml
to validate.
full file
  Demo Material
  </license>

 <doc>
  This file is a very cool one.
 </doc>

  <!-- triggers "duplicate glbA, glbB when using with the
       Python API.
    -->
 <global name="glbA" type="int"> 4 </global>
 <global name="glbB" type="double"> exp(glbA*3) </global>
  <!-- triggers "duplicate key-sequence" glbB
  <global name="glbB" type="double"/>exp(glbA*3)</global>
  -->

 <extend>
   <!-- Series of supplier extensions for supplier side for trace-ability.
  -->
  <foundryDatabase app="SQL" version="2.0.0">See ISO forms - software release documents</foundryDatabase>
  <foundryDatabase app="GUI" version="1.0.42">See ISO forms - software release documents</foundryDatabase>
  <foundryReporter waveguide_module="2.0.1">Loss, neff, groupindex</foundryReporter>
  <foundryReporter active_module="1.2.9">groupindex</foundryReporter>
  <labRuns>march-june 2021, december 2021-april 2022.</labRuns>
 </extend>

 <!-- Include the technology file to ensure correct references.
   -->
  <xi:include href="xPDK_Layout.xml" parse="xml"/>
  <!-- Include the compact model list to ensure correct references.
   -->
  <xi:include href="xPDK_CompactModel_List.xml" parse="xml"/>


 <!-- Some xsection's for port's that are not defined in the basic technology
    - file. Such a list can include parts of the technology file instead of
    - the full include.
    - Note - adding xsection's here that include GDS layer mapportgs is ok for
    - the XML, but you risk that the software that only uses the technology
    - file does not use all data.
    -->
 <xsection name="Met"/>
 <xsection name="Met1"/><xsection name="Met2"/>


 <!-- very simple BB -->
 <bb name="myBB">
  <library>Basic components/demo</library>
  <version>1.0</version>
  <!-- implicit layout ports, here just for testing the portref.
       comment when using the DemoPDK.
    -->
  <!--
  <port label="bil"/> <port label="bcl"/> <port label="bol"/>
  <port label="bic"/> <port label="bcc"/> <port label="boc"/>
  <port label="bir"/> <port label="bcr"/> <port label="bor"/>
  <port label="org"/>
  -->

  <port label="in0">
    <domain>Optical</domain>
    <position> <!-- units for x,y,z: um; for angle,pitch,roll: degree -->
      <x>0</x><y>0</y>
      <angle>10</angle>
    </position>
    <width unit="um" min="2" max="100000">5</width>
    <radius unit="um" min="5" max="100000">50</radius>
  </port>
  <boundary>
    <rectangle width="10" length="20" x="0" y="0"/>
  </boundary>
  <boundary>
    <rectangle portref="in0" width="1" length="2" x="5" y="0"/>
  </boundary>
 </bb>

 <bb name="myDate">
  <lastChangedDate>2022-04-29</lastChangedDate>
 </bb>

 <bb name="mySOA">
   <bbtype>soa</bbtype>
 </bb>

 <bb name="myParam">
   <parameter name="MinL" type="int" min="1">5</parameter>
   <parameter name="MaxL" max="100"> 5.0 </parameter>
   <parameter name="RangeL" min="1" max="100"> 5.0 </parameter>
   <parameter name="IntSet" type="int" allowedValues="1 2 5 6 10">5</parameter>
   <parameter name="StringSet" type="string" allowedValues="a1 b2 c5 6 10">"c5"</parameter>
   <parameter name="noexpr" type="double" min="1"/>
 </bb>

 <bb name="myDoc">
   <doc>This is the short one.

    Can still span lines though.</doc>
   <tex>And here I go for some Tex docu like $\rightarrow$ or even \input{sub.tex}.

    Can be manu lines too.</tex>
 </bb>



 <!-- simple BB with multiple port & parameters -->
 <bb name="myBB1">
  <version>2.0</version>
  <doc>I am a really nice BB with 2 parameters</doc>
  <align style="Manhattan"/>
  <!-- implicit layout ports, here just for testing the portref. -->
  <port label="orgx"/>

   <parameter name="L"> 5.0 </parameter>
   <parameter name="IntSet" type="int" allowedValues="1 2 5 6 10">5</parameter>
   <parameter name="StringSet" type="string" allowedValues="a1 b2 c5 6 10">"c5"</parameter>

  <port label="in0">
    <domain>Optical</domain>
    <position> <!-- units for x,y,z: um; for angle,pitch,roll: degree -->
     <x doc="We are symmetric">0</x><y>0</y>
      <angle>10</angle>
    </position>
  </port>
  <port label="out0">
    <domain>Optical</domain>
    <position> <!-- units for x,y,z: um; for angle,pitch,roll: degree -->
      <x>L</x><y>0</y>
      <angle>0</angle>
    </position>
    <drcAngles>0 45 90 135 180</drcAngles>
  </port>
   <parameter name="Width" type="int" min="10" max="500"
          doc="The width is key for this BB">
    42
   </parameter>
   <local name="Length" min="0.5">
     3*Width+7.0
   </local>
 </bb>

 <bb name="myIcon1" exportclass="amplifier">
  <icon> <!-- this data is not actually a PNG ! -->
   <file format="png">4oVIUNDopNMHqhuzLaDOFXnzCT+cRkQM/NroSIdxnALeS1kYcYMKeRGrdRnc
yXtMtUAk6Xmnoje2X6EnYll/Zn0+GEfFl/6birD2W6ZVc3HhoRQ5Fnl8DObg
WhiGthy1dwNPhKULEzVoDEsffEilx1FfnRWaNSQr0sMfVPIUXH5Gpfb0+zvn
69+xutJmQa9cCrUgsNpYPQFZQLNj7B/gxzYywQHlNQPjO2OakXW7zruTfrgU
TYJlSTSmdJXwdBNN0Vbbn0giRM7RHDgJy/XA6Yvm2BIJci4K41fu+DEhtq+e
L8zzN6cDA6SzeOBcSDd4LWf6nvdmKdX9tIBw5zPlDO+kFSg/ldUPiSJG5udy
PnoaiBfw6faCyV3lTMD13w+HR0EUZCYWF+pu5swDlYstQidbSO59isRQsi7j
+VZb+D/l8SI0JpB2HCpw97gePmXuVKIKuXKmfpOqSWC9nSRlc1qm+++m270p
b2sdpETAstnriFLgcn98jrvKzbCQPRyLJteBzqBOyIaTe50zcDjwENSoVTzI
gwquDVYndjqZIR/ZrcCG7R3ic0LqFzuznQB0BIFN3sbBaVwquCS5Fd9vr0hp
96HXjpSz3NQouc5fMYPYcwK2QU1m+w5L/e5DFqLzbTpbWKO2MvGz5tlPuqoR
1hi7iZHduuKAwyba1acptLGw9zp6ZmtSFaqWKHHcQFV2Uu+vFnM24lunQHW/
VfpLIx5joVsncxfVDYbDcqlffKM3RmszKIt/NRVRbNwKTRteO3EhE4SrRKNi
FX19GlCWXz9vjqFDBvq4cRf+4XLG6IHk6lLxo6QY4zzRNo1p</file>
  </icon>
 </bb>

 <bb name="myIcon2" exportclass="amplifier">
  <icon>
   <!-- use fixed files -->
   <filename format="png">icon.png</filename>
   <filename format="svg">icon.svg</filename>
   <!-- call some drawing code, specific per software -->
   <function trigger="onChange">
      <software app="Software1" version="1.0.0"/>
      <code>call_something_to_draw();</code>
   </function>
   <function trigger="onUpdate">
      <software app="Software2" version="1.0.0"/>
      <code>
       n=Shape()
       n.draw_me()
      </code>
     </function>
  </icon>
 </bb>

 <!-- more content in BB -->
 <bb name="myBB2" exportclass="source">
  <library>Advanced components/Using parameters</library>
  <version>1.0.0</version>
  <icon>
   <!-- call some drawing code, specific per software -->
   <function trigger="onChange">
      <software app="Software1" version="1.0.0"/>
      <code>call_something_to_draw();</code>
   </function>
   <function trigger="onUpdate">
      <software app="Software2" version="1.0.0"/>
      <code>
       n=Shape()
       n.draw_me()
      </code>
     </function>
  </icon>
  <port label="out0">
    <domain>Optical</domain>
    <position>
      <x>0</x><y>0</y>
      <angle>10</angle>
    </position>
    <drcMinimumX>200</drcMinimumX>
    <drcMaximumY>400</drcMaximumY>
  </port>
  <port label="out1" refport="out0">
    <domain>Optical</domain>
    <position>
      <x>0</x><y>0</y>
      <angle>10</angle>
    </position>
    <drcMinimumX>200</drcMinimumX>
    <drcMaximumY>400</drcMaximumY>
  </port>
  <port label="rf0">
    <domain>RF</domain>
    <position>
      <x>100</x><y>200+myLength/2</y>
      <angle>10+sqrt(Length)</angle>
    </position>
  </port>
   <parameter name="myWidth" type="int" min="10" max="500"
          doc="The width is key for this BB">42
   </parameter>
   <parameter name="myLength" min="0.5"> 3*2.+7.0 </parameter>
   <parameter name="Length"   min="0.5"> 3*2.+7.0 </parameter>
   <parameter name="myPos" type="point" unit="um"
          doc="A location is a 2 value expression">
     [ 3*2.+7.0 , sqrt(4.0) ]
   </parameter>
   <attribute key="justStarted">InitialStage</attribute>
   <attribute key="pleaseDoSomeGUIplacement"/>
  <!-- PDAFlow views. The code in PDAFlow allocates the views & sets parameters.
       Here just arbitrary names and values.
  -->
  <view name="pdaLayoutView">
     <parameter name="myWidth" type="int"> 42 </parameter>
  </view>
  <view name="pdaModelView">
    <parameter name="myNeff" type="double"> 1.0/myWidth </parameter>
  </view>
  <view name="pdaModelReference">
    <parameter name="ref" type="string"> "WaveguideModel" </parameter>
  </view>
  <!-- Some specialized views -->
  <SpecView name="loss">5 dB/cm</SpecView>
  <SpecView name="maturity">very high</SpecView>

  <boundary>
   <polygon>
   <point x="0" y="-myWidth/2"/>
   <point x="myLength" y="-myWidth/2"/>
   <point x="myLength" y="myWidth/2"/>
   <point x="0" y="myWidth/2"/>
   </polygon>
  </boundary>
 </bb>

 <bb name="myStraight">
   <parameter name="Width" type="int" min="10" max="500"
          doc="The width is key for this BB"> 42 </parameter>
   <parameter name="Length" min="0.5"> 3*1.0+7.0 </parameter>

     <xsection>WG</xsection>
     <xsection>Met</xsection>
  <port label="in0" org="true">
    <domain>Optical</domain>
  </port>
 </bb>

 <!-- simple BB with multiple port & parameters -->
 <bb name="myBB3">
  <version>2.0</version>
  <doc>I am a really nice BB with 2 parameters</doc>
  <align style="Manhattan"/>
  <port label="in0">
    <domain>Optical</domain>
    <position>
      <x>0</x><y>0</y>
      <angle>10</angle>
    </position>
     <xsection>WG</xsection>
  </port>
  <port label="out0">
    <domain>Optical</domain>
    <position>
      <x>Length</x> <y>0</y>
      <angle>0</angle>
    </position>
    <drcAngles>0 45 90 135 180</drcAngles>
  </port>

   <port label="out1">
    <domain>Optical</domain>
    <position>
      <x>Length</x> <y>0</y>
      <angle>0</angle>
    </position>
    <drcAngles>0 45 90 135 180</drcAngles>
  </port>

   <parameter name="Width" type="int" min="10" max="500"
          doc="The width is key for this BB"> 42 </parameter>
   <parameter name="Length" min="0.5"> 3*1.0+7.0 </parameter>
   <!-- gives Duplicate key-sequence ['Length'] - ->
   <parameter name="Length" min="0.5">3*W+7.0</parameter>-->
   <local name="xlW" type="int" min="10" max="500"
          doc="The width is key for this BB">42
   </local>
   <local name="xlL" min="0.5">3*Width+7.0</local>
   <!-- gives Duplicate key-sequence ['xlL'] - ->
   <local name="xlL" min="0.5">3*Width+7.0</local> -->
  <boundary>
    <rectangle width="10" length="20"/>
  </boundary>
  <boundary purpose="metal">
    <rectangle portref="in0" width="4" length="2"/>
  </boundary>
  <boundary purpose="metal">
    <rectangle portref="out0" align="boc" width="4" length="2"/>
  </boundary>
  <boundary purpose="metal">
    <circle portref="out0" align="bcc" radius="42.24" y="10"/>
     <xsection>Doc</xsection>
  </boundary>
  <boundary purpose="metal">
    <od:sptHeader> ml::Straight(cin->[0] : );
    </od:sptHeader>
  </boundary>
  <boundary purpose="waveguide">
    <circle portref="out0" align="bcc" radius="42.24" y="10"/>
     <xsection>WG</xsection>
  </boundary>
 </bb>


  <!-- simple BB with multiple port & defaults xsection -->
 <bb name="myBB_manyport">
  <xsection>Met</xsection>
  <xsection>WG</xsection>
  <port label="in0"/>
  <port label="out0"/>
  <port label="rf0"/>
  <port label="rf1"/>
 </bb>