Chapter 8: Creating New Technologies
plug
8-10: Technology XML File Format
plug


Introduction

Layout technologies in Electric can be described by Xml technology files. These files are automatically generated by the technology editor and the technology-creation wizard, but some users may prefer to edit them by hand. For these users, the following is a description of the technology XML file format.

Electric currently has Xml technology files that are unparameterized (all values are explicitly entered and there is no symbolic information). Technology distances are specified as double-precision numbers in display units. Future versions of Electric may implement a symbolic style of Xml technology files.

Currently technology files contain two kinds of information:

  1. Electric-independent information. This includes physical and electrical details of the foundry process. Most of these details are attached to Layers and includes design rules, simulation information, etc.
  2. Electric-specific information. This includes the primitive nodes and arcs that Electric uses for design. It also has connectivity rules, display and print styles, component menus for the technology, etc.

Primitive nodes and arcs can be considered to be layout macros. Node description consists of a set of two-dimensional shapes. Arcs description consists of a set of one-dimensional intervals, which are stretched in the other dimension. The technology file describes primitive nodes and arcs of a standard size (usually the DRC minimum) and also includes information about how they can grow larger. Instances of these nodes and arcs in Libraries can be larger than standard.

A primitive node or arc can consists of many shapes in different technology Layers. Each shape in a primitive node is called a NodeLayer. Each interval in a primitive arc is called an ArcLayer.

The minimum bounding box of all NodeLayers of a primitive node is called its FullRectangle. Description of a primitive node can also define the FullRectangle explicitly. The largest of all ArcLayers in a primitive arc defines its FullWidth.

Primitive nodes and arcs also have the notion of a BaseRectangle and a BaseWidth. They relate to the shape of the most important layer in this node or arc. The BaseRectangle of a primitive node is described explicitly. The BaseWidth of primitive arc is the width of the first 'ArcLayer' in the arc description. The BaseRectangle and BaseWidth are highlighted in the Edit Window and they appear in Properties dialogs.

Instances of nodes and arcs in a library can have sizes larger than standard. Electric writes size information of each instance in the library files. Since release 8.05 of Electric (or more precisely since the 8.05o development version) library files contain the extent of the node/arc over its standard size described in the technology file. When you switch a design library from one technology to another compatible technology, the standard size node/arc in old technology is converted to the standard size node/arc in the new technology. The node/arc which extends by 1 unit beyond the standard node/arc in old technology is converted to a node/arc which extends by 1 unit beyond the standard node/arc in new technology.

Older Electric releases wrote sizes of node/arc instances in another way. Jelib format before Electric 8.05 (actually, the 8.05g development version) and all Elib files saved the size of the FullRectangle and FullWidth. Jelib format between 8.05g and 8.05n wrote sizes of BaseRectangle and BaseWidth. The Full and Base sizes can be redefined in future versions of technology file. To be able to read older Jelib formats correctly after redefinition of Full and Base, Technology file can contain explicit sizes of standard nodes and arcs in older library files.

All sizes in technology files are in display units. There is a scale declaration which relates this unit to nanometers.

Overall Structure

Here is a description of Xml technology file in Electric releases 8.05 and 8.06.

<technology> is the main element of the Xml technology file. It has many Xml-specific attributes:

Example:
   <technology name="mocmos"
      class="com.sun.electric.technology.technologies.MoCMOS"
      xmlns="http://electric.sun.com/Technology"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://electric.sun.com/Technology
         ../../technology/Technology.xsd">

Inside of the <technology> element are these subelements:

Layers

The <layer> elements define layers in the technology. They contains these attributes:

Example:
   <layer name="Poly-Cut" fun="CONTACT1" extraFun="connects-poly">

Inside of the <layer> element are these subelements:

Arcs

<arcProto> elements describe primitive arcs in the technology. They have these attributes:

Example:
   <arcProto name="P-Active" fun="DIFFP">

Inside of the <arcProto> element are these subelements:

Example:
   <arcProto name="P-Active" fun="DIFFP">
      <wipable/>
      <extended>true</extended>
      <fixedAngle>true</fixedAngle>
      <angleIncrement>90</angleIncrement>
      <antennaRatio>200.0</antennaRatio>
      <diskOffset untilVersion="1" width="7.5"/>
      <diskOffset untilVersion="2" width="1.5"/>
      <arcLayer layer="P-Active" style="FILLED">
         <lambda>1.5</lambda>
      </arcLayer>
      <arcLayer layer="N-Well" style="FILLED">
         <lambda>7.5</lambda>
      </arcLayer>
      <arcLayer layer="P-Select" style="FILLED">
         <lambda>3.5</lambda>
      </arcLayer>
   </arcProto>

Nodes

<primitiveNode> elements describe primitive node in the technology. They have these attributes:

Example:
   <primitiveNode name="Metal-1-Metal-2-Con" fun="CONTACT">

Inside of the <primitiveNode> element are these subelements:

Example:
   <primitiveNode name="Metal-1-Metal-2-Con" fun="CONTACT">
      <diskOffset untilVersion="1" x="2.5" y="2.5"/>
      <diskOffset untilVersion="2" x="2.0" y="2.0"/>
      <sizeOffset lx="0.5" hx="0.5" ly="0.5" hy="0.5"/>
      <nodeLayer layer="Metal-1" style="FILLED">
         <box>
            <lambdaBox klx="-2.0" khx="2.0" kly="-2.0" khy="2.0"/>
         </box>
      </nodeLayer>
      <nodeLayer layer="Metal-2" style="FILLED">
         <box>
            <lambdaBox klx="-2.0" khx="2.0" kly="-2.0" khy="2.0"/>
         </box>
      </nodeLayer>
      <nodeLayer layer="Via1" style="FILLED">
         <multicutbox sizex="2.0" sizey="2.0" sep1d="3.0" sep2d="3.0">
            <lambdaBox klx="0.0" khx="0.0" kly="0.0" khy="0.0"/>
         </multicutbox>
      </nodeLayer>
      <primitivePort name="metal-1-metal-2">
         <portAngle primary="0" range="180"/>
         <portTopology>0</portTopology>
         <box>
            <lambdaBox klx="-1.0" khx="1.0" kly="-1.0" khy="1.0"/>
         </box>
         <portArc>Metal-1</portArc>
         <portArc>Metal-2</portArc>
      </primitivePort>
      <minSizeRule width="5.0" height="5.0" rule="8.3, 9.3"/>
   </primitiveNode>

Node Layers

<nodeLayer> elements describe NodeLayers in the primitive nodes. They have these attributes:

Example:
   <nodeLayer layer="Metal-2" style="FILLED">

Inside of the <nodeLayer> element are these subelements:

When there are multiple primitive nodes that are similar, a <primitiveNodeGroup> can be used to define them. A <primitiveNodeGroup> has <primitiveNode> subelements that define the variations among the primitives in the group. Individual nodes in a <primitiveNodeGroup> can differ from each other only by name, function, some flags, and their node layers. Specifically:

  1. The <name> and <fun> attributes are moved from the <primitiveNodeGroup> element and appear inside the <primitiveNode> subelements.
  2. The <oldName>, <lowVt>, <highVt>, <nativeBit>, <od18>, <od25>, and <od33> subelements are also moved into the <primitiveNode> subelements.
  3. The <nodeLayer> elements inside of a <primitiveNodeGroup> may have an optional <inNodes> subelement. This subelement defines a list of primitive nodes in the group where this <nodeLayer> can occur.
Example:
   <primitiveNodeGroup>
      <primitiveNode name="P-Transistor" fun="TRAPMOS"/>
      <primitiveNode name="Thick-P-Transistor" fun="TRAPMOSHV1">
         <od18/>
      </primitiveNode>
      <nodeBase>
         <box><lambdaBox klx="-1.5" khx="1.5" kly="-1.0" khy="1.0"/></box>
      </nodeBase>
      <nodeLayer layer="P-Active" style="FILLED" portNum="1" electrical="true">
         <serpbox kly="1" lWidth="4" rWidth="0" tExtent="0" bExtent="0">
            <lambdaBox klx="-1.5" khx="1.5" kly="1" khy="4"/>
         </serpbox>
      </nodeLayer>
      <nodeLayer layer="Thick-Active" style="FILLED" portNum="-1">
         <inNodes>
            <primitiveNode name="Thick-P-Transistor"/>
         </inNodes>
         <serpbox lWidth="8.0" rWidth="8.0" tExtent="4.0" bExtent="4.0">
            <lambdaBox klx="-5.5" khx="5.5" kly="-8.0" khy="8.0"/>
         </serpbox>
      </nodeLayer>
      <primitivePort name="poly-left">
         <portAngle primary="180" range="90"/>
         <portTopology>0</portTopology>
         <box khx="-1.0">
            <lambdaBox klx="-3.5" khx="-3.5" kly="0.0" khy="0.0"/>
         </box>
         <portArc>Polysilicon-1</portArc>
      </primitivePort>
   </primitiveNodeGroup>

Foundry

The Foundry section has design rules and GDS layers. The section is usually found at the end of the XML file. This section starts with:
   <Foundry name="foundryname">
where foundryname is the name of the integrated-circuit manufacturer whose rules are enclosed. The section ends with </Foundry>.

Each rule in the section has some common attributes:

Here are the possible rules: In addition to design-rules, the GDS layer assignments are also found in the Foundry section. Each GDS layer line has this format:
   <layerGds layer="XXXX" gds="YYYY"/>
Where XXXX is the layer name and YYYY is the GDS information for that layer. The GDS information can include multiple layer numbers, for example "21,49,98". GDS layers can have type information if separated by a slash, for example layer 14 type 141 is "21/141". GDS layers can be used for Pins (export locations) and Text (export names) by appending a "p" or "t" to the layer number, for example "21,49p,74/2t". Example:
   <layerGds layer="Metal-1" gds="49,80p,80t"/>
   <layerGds layer="Metal-2" gds="41/40,141p"/>
   <layerGds layer="Metal-3" gds="98"/>
Defines Metal-1 to be on GDS layer 49, or 80 for pins or text; defines Metal-2 to be on GDS layer 41, type 40 or on layer 141 for pins; and defines Metal-3 to be on GDS layer 98.


Prev Previous     Contents Table of Contents     Next Next