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:
-
Stackup – used to define materials, layers, and vias.
-
Geometry – can be used to add polygons to the translated output.
-
Boundaries – for GDS translation, the schema applicable here are limited to point-based Circuit port creation and definition of HFSS extents.
-
Components – selects the components' schema version.
-
CutoutSubdesign – geometry clipping can be executed against a polygon using this element.
-
SimulationSetups – defines HFSS simulation setups and sweeps.
-
ImportOptions – specifies various import options.
-
GDS_CELL_RULES – allows for control of which cells are imported.
-
GDS_NET_DEFINITIONS – allows you to define VDD, Ground, and Signal nets.
-
GDS_COMPONENTS – used to create component groups. This can be done automatically using the GDS_AUTO_COMPONENT> element.
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:
- <MATERIALS> – may contain elements to define the permittivity, permeability, thermal properties, mechanical properties, conductivity, magnetic loss tangent, and dielectric loss tangent.
- <ELAYERS> – contains LAYER elements, which may be grouped under dielectrics, layers, or vias.
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"/>
<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:
- <BLACK_BOX_CELLS> – no geometry is imported on these cells. They are deleted prior to net assignment and flattening.
- <GRAY_BOX_CELLS> – geometry on these cells are only assigned nets if they are connected to other cells. This assignment could be generated by either <WHITE_BOX_CELLS> or <GDS_NET_DEFINITIONS>. In either case, all geometries not assigned a net are deleted. If neither are defined, it is assumed that all cells except <BLACK_BOX_CELLS> and <GRAY_BOX_CELLS> can be used to generate net assignments.
- <WHITE_BOX_CELLS> – geometry on these cells is used to generate net assignments, unless <GDS_NET_DEFINITIONS> rules are defined. Metal in other cells may be assigned nets if they connect to the geometry in <WHITE_BOX_CELLS>.
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:
- <VDD_NETS>
- <GND_NETS>
- <SIGNAL_NETS>
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:
- <USE_TEXT_FROM_HIERARCHY_LEVEL> – the text at specified hierarchy levels is used to generate nets. 0 is the top. White space denotes a separation. A dash (-) indicates all intermediate layers. "MAX" indicates all hierarchical elements under the previous entry and should always follow a dash.
- <USE_TEXT_FROM_CELLS> – the text in specified cells is used to generate nets. Wild cards are allowed.
- <USE_TEXT_FROM_HIERARCHY_BLOCK> – the text of an exactly placed hierarchy block is used to generate nets. Wild cards are not allowed.
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>
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>