GDS Translation Using XML Control Files (IC Mode)

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 (IC Mode).

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 chosen 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>

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.

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_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>