GDS Translation Using XML Control Files

Model creation from GDS files can be automated, or greatly accelerated, by using an XML control file. The XML control file allows for definition of materials, layer mapping, via processing, net tracing, and many other setup parameters, including the simulation setup. Using this mechanism, it is possible to translate into a ready-to-solve model. XML control files can also be used to establish templates for best practices across an organization, which can be useful to jump-start users less familiar with using HFSS for on-chip structures.

The control file schema is defined by multiple *.xsd files, all of which can be found in the AnsysEM installation directory. An XML control file is referred to as an "instance document" for this schema, and can be validated using most text editors, or any number of 3rd-party XML editors. Additionally, virtually all programming languages provide libraries for validating and constructing XML files against schema definitions, making robust automation that much easier.

An XML control file is comprised of a root element, along with the following top-level elements:

From the following section, these elements are described in further detail. These sections do not cover all legal combinations of XML elements, but focus on common usage scenarios. Refer to an example of control file hierarchy for what these elements look like in practice.

Stackup

The <STACKUP> element is used to define materials, layers, and vias. These parameters can be duplicated:

Note:

If no dielectrics or vias are present, you may use the LAYERS element without an overarching ELAYERS element.

For more information, refer to Via Grouping and Snapping in XML Control Files.

LayerAttr

An attribute group of <STACKUP> containing seven attributes (i.e., <NAME>, <TARGETLAYER>, <COLOR>, <MATERIAL>, <CONVERTPOLYGONTOCIRCLE>, <CONVERTPOLYGONTOCIRCLERATIO>, and <UNIONPRIMITIVES>).

ConvertPolygonToCircle

An attribute in the <LAYERATTR> attribute group.

Example

<Layers>

<Layer Name="1“ TargetLayer="Metal9" Type="conductor“ Material="copper“ Thickness="0.500000" Elevation="300" ConvertPolygonToCircle="true" ConvertPolygonToCircleRatio="0.5"/>

/Layers>

ViaLayer

A subcomponent group of <STACKUP> containing four elements (i.e., <DCTHICKNESS>, <CREATEVIAGROUPS>, <SNAPVIAGROUPS>, and <TSVPROPERTIES>) and four attributes (i.e., <GDSDATATYPE>, <STARTLAYER>, <STOPLAYER>, and<SOLVEINSIDE>).

TSVProperties

A subcomponent of <VIALAYER> containing two attributes (i.e., <THICKNESS> and <MATERIAL>).

Example

<Vias>

<Layer Color="#2e43a0" Material="GDS_M1" Name="10" TargetLayer="TSV" SolveInside="false" StartLayer="UBMB" StopLayer="M1">

<TSVProperties Thickness="5um" Material="EFFDIEL_1" />

</Layer>

</Vias>

Geometry

The GEOMETRY element can be used to add polygons to the translated output. Most commonly, polygons impressed at this level are used to facilitate simulation setup details, such as the definition of model extents or a mesh seeding region.

Example

<Geometry LengthUnit="um">

<Polygon Layer="Outline">

<Point x="8985.37" y="4967.452"/>

<Point x="10636.639" y="4967.452"/>

<Point x="10636.639" y="10370.592"/>

<Point x="8985.37" y="10370.592"/>

<Point x="8985.37" y="4967.452"/>

</Polygon> </Geometry>

<Geometry LengthUnit="um">

<Polygon Layer=“user1“ Name=“seed region 1”>

<Point x="8985.37" y="4967.452"/>

<Point x="10636.639" y="4967.452"/>

<Point x="10636.639" y="10370.592"/>

<Point x="8985.37" y="10370.592"/>

<Point x="8985.37" y="4967.452"/>

</Polygon>

</Geometry>

PolygonWithHoles

A subcomponent group of <GEOMETRY> containing three elements (i.e., <POINT>, <ARC>, and <HOLE>) and four attributes (i.e., <LAYER>, <NET>, <NAME>, and <PRECUTOUT>).

PreCutout

An attribute in the <POLYGONWITHHOLES> attribute group. Used to create outline and seeding region.

Example 1

<Geometry PreCutout = "false">

<Polygon Layer="Metal9" PreCutout = "true">

<Point x="133mm" y="-16mm"/>

<Point x="148mm" y="-16mm"/>

<Point x="148mm" y="0m"/>

<Point x="133mm" y="0mm"/>

<Point x="133mm" y="-16mm"/>

</Polygon>

<Polygon Layer="Metal9">

<Point x="183mm" y="-16mm"/>

<Point x="198mm" y="-16mm"/>

<Point x="198mm" y="0m"/>

<Point x="183mm" y="0mm"/>

<Point x="183mm" y="-16mm"/>

</Polygon>

</Geometry>

Example 2

<Geometry PreCutout = "false">

<Polygon Layer="Metal9" PreCutout = "true">

<Point x="133mm" y="-16mm"/>

<Point x="148mm" y="-16mm"/>

<Point x="148mm" y="0m"/>

<Point x="133mm" y="0mm"/>

<Point x="133mm" y="-16mm"/>

</Polygon>

<Polygon Layer="Metal9">

<Point x="183mm" y="-16mm"/>

<Point x="198mm" y="-16mm"/>

<Point x="198mm" y="0m"/>

<Point x="183mm" y="0mm"/>

<Point x="183mm" y="-16mm"/>

</Polygon>

</Geometry>

CriticalNet

A subcomponent of <GEOMETRY> containing one attribute (i.e., <NAME>).

CriticalNetGroup

A subcomponent group of <CRITICALNET> containing one element (i.e., <CRITICALNET>) and one attribute (i.e., <TOLERANCE>).

RemoveHoles

A subcomponent of <CRITICALNETGROUP> containing one element (i.e., <CRITICALNETGROUP>) and two attributes (i.e., <HOLEAREAMINIMUM> and <LENGTHUNIT>) used to remove small holes during GDS processing.

Example

<RemoveHoles HoleAreaMinimum="4.01" LengthUnit="mm">

<CriticalNetGroup Tolerance="3">

<CriticalNet Name="sig" />

</CriticalNetGroup>

</RemoveHoles>

Boundaries

For GDS translation, the schema applicable in the <Boundaries> element are limited to point-based Circuit Port creation <CIRCUITPORTPT>and definition of HFSS Extents (<EXTENTS>).

CircuitPortPt

Ports in HFSS can take various forms, but for automation purposes, perhaps the most straightforward is defined by a pair of XY points and layers.

A list of these ports can be defined for creation in the Boundaries element of the XML.

Example

<Boundaries LengthUnit="mm">

<CircuitPortPt Name="Port_1" x1="2.3" y1="3.4" Layer1="Top" x2="9.8" y2="8.7" Layer2="Bottom" />

<CircuitPortPt Name="Port_2" x1="3.1" y1="4.5" Layer1="Top" x2="7.6" y2="6.5" Layer2="Middle" />

<CircuitPortPt Name="Port_3" x1="5.6" y1="6.7" Layer1="Middle" x2="5.4" y2="4.3" Layer2="Bottom" />

</Boundaries>

Extents

HFSS Extents (i.e., the simulation region size) and airbox can be configured in the BOUNDARIES element after any <CIRCUITPORTPT> elements.

Example

<Boundaries LengthUnit="mm">

<CircuitPortPt Name="Port_1" x1="2.3" y1="3.4" Layer1="Top" x2="8.2" y2="2.4" Layer2="Bottom" Z0="77"/>

…

<Extents Type="bbox" DielType="bbox" DielHorizFactor="0.01" AirboxHorizFactor="0.15" AirboxVertFactorPos="2.0" AirboxVertFactorNeg="2.0" UseRadiationBoundary="True" DielHonorPrimitives="false" AirboxTruncateAtGround="false" />

</Boundaries>

BoundaryConditions

A subcomponent of <BOUNDARIES> containing two elements (i.e., <CIRCUITPORTPT> and <EXTENTS>) and one attribute (i.e., <LENGTHUNIT>). Use to add boundary conditions.

Example

<Boundaries LengthUnit="mm">

<CircuitPortPt Name="u2.67.dqd121" x1="9.48082" y1="10.003825" Layer1="UBM" x2="9.42582" y2="10.003825" Layer2="UBM" Z0="50"/>

<CircuitPortPt Name="u1.8.dqd121" x1="9.48067" y1="6.180355" Layer1="UBM" x2="9.42567" y2="6.180355" Layer2="UBM" Z0="50"/>

<Extents Type="bbox" DielType="bbox" DielHorizFactor="0.008" AirboxHorizFactor="0.16" AirboxVertFactorPos="1.55" AirboxVertFactorNeg="1.55" UseRadiationBoundary="True"/>

</Boundaries>

Components

A component group containing nine elements (i.e., <DIEPROPERTIES>, <SOLDERBALLPROPERTIES>, <PORTPROPERTIES>, <RLCMODEL>, <NPORTMODEL>, <NETLISTMODEL>, <SPICEMODEL>, <PINGROUP>, and <COMPONENTPORT> ) and six attributes (i.e., <REFDES>, <PARTTYPE>, <PARTNAME>, <NUMPINS>, <NETS>, and <LENGTHUNIT>). The <COMPONENTS> element defines the component schema version.

Example

<Components schemaVersion="1.0"/>

COMPONENTPORT

A subcomponent group of <COMPONENTS> containing eight elements (i.e., <POSPIN>, <REFPIN>, <REFPINGROUP>, <REFNET>, <POSPINGROUP>, <REFPIN>, <REFPINGROUP>, and <REFNET>) and two attributes (i.e., <NAME> and <Z0>). Use to port reference the closest pin on the net.

SPICEMODEL

A subcomponent group of <COMPONENTS> containing one element (i.e., <TERMINALPINMAPPING>) and five attributes (i.e., <MODELNAME>, <FILENAME>, <SUBCKT>, SOLVEINDEPENDENT>, and <REFERENCE NET>). <SPICEMODEL> is an element that contains the name and location of the selected spice (.sp) file. If the spice file's path is not given, it's assumed relative to the .xml file and that the files share a directory. The path can also be restricted to subdirectories of the .xml file's path. If the spice file's path is relative when an Ansys Electronic Desktop (.aedt) file is created, the spice file will be relocated to the .aedt file's directory, so that the path remains relative. This is not the case if an absolute path is set.

Example - Absolute Path

<GDS_COMPONENT>

<GDS_PIN Name="3" x="-19.925" y="11.385" Layer="Top"/>

<GDS_PIN Name="4" x="6.915" y="9.35" Layer="Top"/>

<Component RefDes="C1" PartName="12344-CAP" PartType="Capacitor">

<SpiceModel ModelName="2pin_Ind“ FileName="F:/IC_ON_PKG/testcase/hbm/testcomponentmodels2port_ind.sp" SubCkt="Test_2pin_Ind">

<TerminalPinMapping term="1" pin="3"/>

<TerminalPinMapping term="2" pin="4"/>

</SpiceModel>

</Component>

</GDS_COMPONENT>

Example - Relative Path

<GDS_COMPONENT>

<GDS_PIN Layer="Metal9" Name="3" x="-0.8" y="0"/>

<GDS_PIN Layer="Metal9" Name="4" x="0.8" y="0"/>

<Component PartName="12344-CAP" PartType="Capacitor" RefDes="C1">

<SpiceModel FileName="datafiles/2port_ind.sp" ModelName="2pin_Ind" ReferenceNet="4" SolveIndependent="false" SubCkt="Test_2pin_Ind">

<TerminalPinMapping pin="3" term="1"/>

<TerminalPinMapping pin="4" term="2"/>

</SpiceModel>

</Component>

</GDS_COMPONENT>

CutoutSubdesign

Geometry clipping can be executed against a polygon using the <CUTOUTSUBDESIGN> element.

Example

<CutoutSubdesign>

<Polygon>

<Point x="8985.37um" y="4967.452um"/>

<Point x="10636.639um" y="4967.452um"/>

<Point x="10636.639um" y="10264.592um"/>

<Point x="8985.37um" y="10264.592um"/>

<Point x="8985.37um" y="4967.452um"/>

</Polygon>

</CutoutSubdesign>

SimulationSetups

The <SIMULATIONSETUPS> element contains an <HFSSSETUP> element for each setup being defined. Refer to this example of Control File Schema (from Simulation Setup) for an example of the schema in action.

HFSSSetup

A subcomponent group of <SIMULATIONSETUPS> containing two elements (i.e., <HFSSSIMULATIONSETTINGS> and <HFSSSWEEPDATALIST>) and two attributes (i.e., <NAME> and <SCHEMAVERSION>).

HFSSSimulationSettings

An element group of <HFSSSETUP> containing fifteen elements (i.e., <ENABLED>, <SAVEFIELDS>, <SAVERADFIELDSONLY>, <HFSSADAPTIVESETTINGS>, <HFSSINITIALMESHSETTINGS>, <HFSSDEFEATURESETTINGS>, <HFSSVIASETTINGS>, <HFSSCURVEAPPROXSETTINGS>, <HFSSADVANCEDMESHSETTINGS>, <HFSSMODELLINGSETTINGS>, <HFSSSETUPOUTPUTVARIABLES>, <HFSSPORTSETTINGS>, <HFSSSOLVERSETTINGS>, <HFSSDCRSETTINGS>, and <HFSSMESHOPERATIONS>).

HFSSSweepDataList

An element group of <HFSSSIMULATIONSETTINGS> containing one element (i.e., <FREQSWEEP).

Example

<HFSSSweepDataList>

<FreqSweep>

<Name>Sweep 1</Name>

<Enabled>True</Enabled>

<UseQ3DForDC>False</UseQ3DForDC>

<Interpolating>

<LinearStep>

<Start>500mhz</Start>

<Stop>10ghz</Stop>

<Step>500mhz</Step>

</LinearStep>

</Interpolating>

</FreqSweep>

</HFSSSweepDataList>

RemoveIslandsTolerance

An optional attribute of <ELayers> that exposes the Remove small islands command in the XML control file for GDS translation.

Example

<ELayers LengthUnit="mm" RemoveIslandsTolerance="1mm2">
  <Layers>
    <Layer Name="metal1" Material="metal1" Thickness="0.002" Type="conductor"/>
  </Layers>
</ELayers>
ImportOptions

The <IMPORTOPTIONS> element specifies various import options in one line.

Example

ImportOptions

The <IMPORTOPTIONS>> element specifies various import options in one line.

Example

<ImportOptions Flatten="true" GDSIIConvertPolygonToCircles="false" ImportDummyNet="false"/>

Note:

<ImportDummyNet="false"> deletes all metal that has not been assigned a net. This may result in all the metal in the design being deleted if conductive layers are set to assign nets but none are assigned.

GDS_CELL_RULES

The <GDS_CELL_RULES> element allows for control of which cells are imported. Substitutions are supported using any number of Wildcard characters (*) and any number of single characters (?). Cell names are case-insensitive and are separated by white space (including tabs and end-of-lines).

Cells are divided into three elements:

Example

<GDS_CELL_RULES>

<BLACK_BOX_CELLS> Bl* Bad </BLACK_BOX_CELLS>

<GRAY_BOX_CELLS> Gra? </GRAY_BOX_CELLS>

<WHITE_BOX_CELLS>White</WHITE_BOX_CELLS>

</GDS_CELL_RULES>

GDS_NET_DEFINITIONS

Nets are defined as one of:

All three allow you to select which nets/text you want to import. They also allow the assignment of net names based on a location (layer name, x microns, y microns) . Additional elements under <GDS_NET_DEFINITIONS> are:

Rules defined in all three of these elements may be applied at once.

Example

<GDS_NET_DEFINITIONS NET_NAME_CASE_SENSITIVE="false" USE_TOP_LEVEL_TEXT_ONLY="false">

<USE_TEXT_FROM_HIERARCHY_LEVEL>0 2 4-MAX</USE_TEXT_FROM_HIERARCHY_LEVEL>

<USE_TEXT_FROM_CELLS>TextC*</USE_TEXT_FROM_CELLS>

<USE_TEXT_FROM_HIERARCHY_BLOCK> Top/Text </USE_TEXT_FROM_HIERARCHY_BLOCK>

<VDD_NETS>MODE {MODE? MODE@ layer_7 5000.0 7000.0} VBA* VCC@layer_1 4000.0 3000.0</VDD_NETS>

<GND_NETS>RFO</GND_NETS>

<SIGNAL_NETS>SENSdin</SIGNAL_NETS>

</GDS_NET_DEFINITIONS>

Note:

Though all options are displayed, typically they are not used together, and they can be contradictory. Net creations for all <GDS_NET_DEFINITIONS> stem from text defined in the GDSII file or from point locations included in <VDD_NETS>, <GND_NETS>, and <SIGNAL_NETS>. If the rules are self-contradictory or too restrictive it is possible that no nets are generated.

Auto Net Tracing in GDS/OASIS Designs

If designs in GDS/OASIS format have no text labels defined, tracing is impossible. Net tracing requires text labels and custom rules in the XML control file. Auto net tracing allows tracing of the largest nets (i.e., the largest physically connected elements with the greatest total area.

Configuration

To enable auto nets, use the following attributes in the <GDS_NET_DEFINITIONS> tag of the XML control file:

Auto nets are listed in descending order of size.

Example

			<GDS_NET_DEFINITIONS AUTO_NETS="10" AUTO_NETS_PREFIX="MYNETS"/>
			<GDS_NET_DEFINITIONS AUTO_NETS="5"/>
		

The system will first trace nets defined in GND_NETS, then attempt to trace the N largest nets as specified.

Example 2

The following snippet shows example output entries from <GDS_NETS> after auto net tracing:

			<GDS_NETS>
			PADS_PLL0_PVDD1P5@ubmb 2150.87 ...
			...
			</GDS_NETS>
		

These entries are not required for configuration, but they can be useful for verification.

GDS_COMPONENTS

A component group containing two elements (i.e., <GDS_COMPONENT> and <GDS_AUTO_COMPONENT>) and one attribute (i.e., <LENGTHUNIT>). Using <GDS_COMPONENT>, components can be created using XML. Component Groups can also be created manually, or automatically using the <GDS_AUTO_COMPONENT> element. When using <GDS_AUTO_COMPONENT>, pins are created from all geometry on a given layer. Those pins are then partitioned into component groups, based on the provided tolerance. Component type, solderball definitions, and reference size can also be defined. Finally, ports can be created on pins belonging to specified nets.

Example 1

<GDS_COMPONENTS LengthUnit="um">

<GDS_AUTO_COMPONENT Layer="UBM" Tolerance="100">

<DieProperties Type="Flip chip" Orientation="Chip down" Height="0.0"/>

<SolderballProperties Shape="Cylinder" Diameter="6um" Height="10um" Material="solder"/>

<PortProperties ReferenceOffset="0" ReferenceSizeAuto="True"/>

<PadPort Net="HBM_DQd*"/>

</GDS_AUTO_COMPONENT>

</GDS_COMPONENTS>

Example 2 (Pad Ports)

<GDS_COMPONENT>

<GDS_PIN Name="0" x="9425.670000" y="6276.355000" Layer="UBM"/>

<GDS_PIN Name="1" x="9480.670000" y="6276.355000" Layer="UBM"/>

<GDS_PIN Name="2" x="9535.670000" y="6276.355000" Layer="UBM"/>

<GDS_PIN Name="3" x="9590.670000" y="6276.355000" Layer="UBM"/>

…

<Component RefDes="U1" PartName="DIE1" PartType="IO">

<DieProperties Type="Flip chip" Orientation="Chip down" Height="0"/>

<SolderballProperties Shape="Cylinder" Diameter="6um" Height="10um" Material="solder"/>

<PortProperties ReferenceOffset="0" ReferenceSizeAuto="True"/>

<Port Name="u1.4.dqd120">

<Pin Name="4"/>

<Pin Name=""/>

</Port>

<Port Name="u1.5.dqd112">

<Pin Name="5"/>

<Pin Name=""/>

</Port>

Example 3 (Netlist)

A model can be added to a component using XML.

<GDS_COMPONENTS LengthUnit="um">

<GDS_COMPONENT>

<GDS_PIN Name="1" x="-19.925" y="11.385" Layer="Top"/>

<GDS_PIN Name="2" x="6.915" y="9.35" Layer="Top"/>

<Component RefDes="C1" PartName="12344-CAP" PartType="Capacitor" >

<NetlistModel>

<Netlist>C4 1 2 1e-12</Netlist>

</NetlistModel>

</Component>

</GDS_COMPONENT>

</GDS_COMPONENTS>

Example 4 (Spice)

<GDS_COMPONENT>

<GDS_PIN Name="3" x="-19.925" y="11.385" Layer="Top"/>

<GDS_PIN Name="4" x="6.915" y="9.35" Layer="Top"/>

<Component RefDes="C1" PartName="12344-CAP" PartType="Capacitor">

<SpiceModel ModelName="2pin_Ind“ FileName="F:/IC_ON_PKG/testcase/hbm/testcomponentmodels2port_ind.sp" SubCkt="Test_2pin_Ind">

<TerminalPinMapping term="1" pin="3"/>

<TerminalPinMapping term="2" pin="4"/>

</SpiceModel>

</Component>

</GDS_COMPONENT>

GDS_TEXT_PINS

A subcomponent option of <GDS_COMPONENT> that allows automatic creation of pins from text labels in the design. This option uses the names and coordinates of text labels to define pins, removing the need to manually list pin locations.

Under <GDS_TEXT_PINS>:

Pin creation logic remains the same as with <GDS_PIN>, including handling of overlapping pins. Duplicate pin names are automatically incremented (e.g., N7_GND, N7_GND_1, N7_GND_2).

Examples

			<GDS_COMPONENT>
			<GDS_TEXT_PINS Text="N7*" Layer="M17"/>
			<Component RefDes="U1"/>
			</GDS_COMPONENT>

			<GDS_COMPONENT>
			<GDS_TEXT_PINS Text="HBM*" Layer="M17"/>
			<Component RefDes="U2"/>
			</GDS_COMPONENT>

			<GDS_COMPONENT>
			<GDS_TEXT_PINS Text="*HBM*" Layer="M6"/>
			<Component RefDes="U5" PartType="IO" PartName="BGA"/>
			</GDS_COMPONENT>

			<GDS_COMPONENT>
			<GDS_TEXT_PINS Text="*SoC*" Layer="M6"/>
			<Component RefDes="U6" PartType="IO" PartName="BGA"/>
			</GDS_COMPONENT>
		

Both <GDS_TEXT_PINS> and <GDS_PIN> can coexist under the same component.

			<GDS_COMPONENT>
			<GDS_TEXT_PINS Text="TEXT_2" Layer="M17"/>
			<GDS_TEXT_PINS Text="PIN_*" Layer="M17"/>
			<GDS_PIN Name="PIN_1" x="1um" y="1um" Layer="M17"/>
			<GDS_PIN Name="PIN_2" x="1um" y="2um" Layer="M17"/>
			<Component RefDes="U1"/>
			</GDS_COMPONENT>
		
Note:

Control file changes are backwards compatible. If text names are not unique, they are incremented automatically (e.g., pin, pin_1, pin_2).

GDS_AUTO_COMPONENT

A subcomponent group of <GDS_COMPONENTS> containing four elements (i.e., <DIEPROPERTIES>, <SOLDIERBALLPROPERTIES>, <PORTPROPERTIES>, <AUTOCOMPONENTPORT>) and two attributes (i.e., <LAYER> and <TOLERANCE>).

AUTOCOMPONENTPORT

A subcomponent group of <GDS_AUTO_COMPONENT> containing two elements: <GDS_COMPONENT> and <GDS_AUTO_COMPONENT>.

Use to port reference the closest pin on the net.

Example - Auto

<AutoComponentPort>

<PosNet Name="HBM_DQd*"/>

<RefNet Name="VSS"/>

</AutoComponentPort>

Example - Manual

<Component RefDes="U2" PartName="DIE2" PartType="IO">

<DieProperties Type="Flip chip" Orientation="Chip down" Height="0"/>

<SolderballProperties Shape="Cylinder" Diameter="6um" Height="10um" Material="solder"/>

<PortProperties ReferenceOffset="0" ReferenceSizeAuto="True"/>

<ComponentPort Name="u2.38.dqd119">

<PosPin Name="38"/>

<RefNet Name="VSS"/>

</ComponentPort>

</Component>