Product Documentation
Spectre Classic Simulator, Spectre APS, Spectre X, Spectre XPS, Spectre FMC Analysis, and Legato Reliability Solution User Guide
Product Version 23.1, September 2023

17


Postlayout Simulation

This chapter consists of the following topics:

Performance Improvement

For postlayout designs with RC parasitics, the +postlayout option enables various performance technologies to speed up the simulation, including RC reduction, efficient coupling capacitor handling, DC algorithms optimized for large post-layout circuits, along with other advanced numerical techniques.

To turn on postlayout simulation technologies, use the following command-line options:

% spectre +aps +postlayout ...
% spectre +aps +postlayout=hpa ...
% spectre +aps +postlayout=upa ...

The +postlayout option delivers best simulation performance, with acceptable accuracy, for custom digital designs, memory designs, and analog/mixed-signal designs where high simulation precision is not required. +postlayout=hpa provides higher simulation precision for analog/mixed-signal designs. +postlayout=upa delivers the ultimate post-layout simulation accuracy, similar to +postlayout=hpa, but with RC reduction completely disabled.

Even though not recommended, you can use the +rcnet_fmax=N command-line option to adjust simulation accuracy associated with +postlayout. The unit for N is in GHz and the default value is 125. N=25 is considered aggressive, whereas N=250 is considered conservative. The +rcnet_fmax option not only controls RC reduction accuracy with any local RC net, but also defines the accuracy/performance trade-off of other non-reduction based techniques.

The +postlayout command-line option enables RC reduction because of which some parasitic RC nodes are reduced. Therefore, if you have specified save statements in the netlist to save all internal RC nodes, some of these nodes are not saved. To save these nodes, set the value of the savefilter option to none in the netlist, as shown below.

opt options savefilter=none

You can use the preserve_inst option to preserve instances from any component reduction and parasitic reduction, as shown in example below:

simulationOptions options preserve_inst=[inst1, inst2, ...] 

inst1 and inst2 can be the instances of any device or subcircuit; they will not be reduced by APS, or the parasitic reduction technology.

The +parasitics option is now obsolete and should not be used. You can use the +postlayout=legacy option to get the same behavior as +parasitics. In addition, you can use the +postlayout=legacy_rf option for RF designs, which provides the same functionality as the +parasitics=rf option. The +postlayout=legacy and +postlayout=legacy_rf options will be removed in a future release.
The +postlayout command-line option is available only in Spectre® APS.

EMIR Analysis

With Spectre® APS, and Spectre® X, Cadence delivers a powerful transistor-level EMIR solution. This dynamic power net and signal net EMIR capability uses a patented technology and is designed to provide high capacity and high performance EMIR analyses. Within the same flow, Spectre APS and Spectre X can be used for high accuracy EMIR analyses; while Spectre X provides higher capacity and performance. The Spectre EMIR solution provides a set of advanced features covering dynamic EMIR, static EMIR, point-to-point resistance analysis, power gate support, differential IR drop, design resistor EM calculation, macro model generation, black boxing, and what-if analysis. The flow is fully integrated into Cadence Virtuoso® ADE environment. Results of the analysis can be visualized with Voltus-Fi XL).

This section discusses the following:

Spectre EMIR Technology, Product, and Flow Overview

Technology Overview

In an EMIR flow, a circuit is evaluated together with the parasitic resistor and capacitor network, which models the IR drop or the EM effect. There are two general approaches of solving such a problem:

For high accuracy EMIR analysis of small design blocks, or designs with smaller numbers of RC nets, the Spectre® APS and Spectre X based direct EMIR analysis is recommended.

To gain higher performance and higher capacity on medium-to-large designs, the iterated EMIR analysis method is recommended. Both Spectre APS and Spectre X support iterated EMIR analysis.

The Spectre EMIR flow requires a complete testbench that contains the DSPF files (with the parasitic and instance sections describing the circuit to be analyzed) stimuli, device models, and so on. The EMIR analysis can be applied to a transient or DC analysis.

The presence of a +emir option on the Spectre command line enables the EMIR analysis during circuit simulation. The details of EMIR analysis - type of analyses, nets to be analyzed, output to be created - are specified using an EMIR configuration file.

Using either direct EMIR analysis or iterated EMIR analysis, the circuit simulation is performed first with various voltages and currents being calculated. Next, a standalone tool, emirreport/emirutil, is called to post-process the simulation results and generate the IR and EM reports. By default, the post-processing step is invoked automatically.

The output of the EMIR analysis is an EMIR text/html report, which lists the EM and/or IR information of all the nets requested. In addition, Voltus-Fi XL can be used to visualize the IR drop and EM current violations in Virtuoso Layout Editor.

Note that while the Spectre EMIR flow uses the DSPF representation of the designs, it is not relying on any post-layout back-annotation or "stitching" capability. The flow covers designs with power gates and package models.

Product Overview and EMIR Flow

The EMIR product consists of the Spectre EMIR simulation and the Voltus-Fi XL visualization. The circuit and the RC network simulation are handled by Spectre EMIR. The result is stored in a binary database which contains the average, rms, max IR drop, and EM values. Voltus-Fi XL reads the information from the binary database, evaluates whether the currents are above the limits defined in the technology file, and visualizes the results in the layout.

Different utilities are responsible for creating the IR drop and EM text reports. For advanced node designs for which the technology file format is ICT or qrctechfile, the utility emirreport (or vpsbatch) is used to generate the text report. For older technology nodes which use emdatafile format, the utility emirutil is used to create the text reports.

DSPF requirements

The Spectre EMIR flow is based on a DSPF representation of the analyzed design. The DSPF file is required to contain all electrical and geometric information needed for EMIR analysis. The following figure shows a representative DSPF netlist with all important information for EMIR being marked in color.

EM Rule Support

EM rules are defined in DRM, and part of the technology files. The Voltus-Fi XL– Spectre EMIR solution supports the following technology file formats.

Advanced node technologies require special EM rules that are only supported in ICT/ICT-EM and qrctechfile format. Refer to the Quantus QRC Techgen Reference Manual for details.

emdatafile format is used for legacy technology nodes. In future, it is expected to be replaced by ICT and qrctechfile format.

Various Cadence EMIR tools support only subsets of these techfile formats (for example, Voltus does not support ICT file, but supports ICT_em). ICT_em is the only format supported by all Cadence EMIR technologies, Voltus, EAD, and Voltus-Fi L and XL.

Getting Started with Spectre EMIR Analysis

To perform EMIR analysis, first create a complete simulation testbench with the DSPF files containing the postlayout data of the design. Specify the fingered devices in the instance section and the parasitic resistors and capacitors in the net section. Use the dspf_include statement to read the DSPF content, as shown below.

dspf_include "sram.spf     "   (Spectre syntax)

.dspf_include "sram.spf "   (SPICE syntax)

dspf_include provides special features like port order adjustments, or handling of duplicated subcircuits, which are not available in include/.include. Therefore, do not use include/.include in the EMIR flow for including the DSPF file.

Large DSPF files may be split into multiple files, for example, sram.dspf, sram.dspf.1, sram.dspf.2, and so on. If the top-level DSPF file (sram.dspf) is included with the dspf_include statement, Spectre will search for any related file (sram.dspf.1, sram.dspf.2, ...) and read them automatically.

EMIR analysis can be applied to several subcircuits within the same design. Each block needs to be described with a DSPF file, and each DSPF file needs to be included with the dspf_include statement.

Setting up a correct postlayout simulation test bench is vital to successful EMIR analysis (see Handling the Complexity of DSPF/SPEF files).

Once the testbench is set up, you can perform a regular (non-EMIR) postlayout simulation with the spectre command to ensure that the testbench contains no error, and the circuit behavior is as expected.

% spectre ++aps=liberal input.scs //Spectre test bench

The Spectre command-line options can be used to adjust accuracy and performance. The command above initiates the simulation session with the ++aps engine and liberal errpreset setting.

To perform the same simulation with EMIR analysis added, you need to create and include an EMIR control file with the spectre command, as shown below.

% spectre  ++aps=liberal  +emir=emir.conf  input.scs //Spectre test bench

The EMIR analyses is enabled by using the +emir Spectre command-line option. All EMIR-related commands are defined in the EMIR control file.

EMIR Control File

EMIR analysis is performed based on the first transient analysis statement in the netlist. An EMIR control file contains all of the settings and options that are relevant to an EMIR analysis. Some of the options that can be specified using the EMIR control file are: the names of the nets to be analyzed, the type of analyses to be performed, the EMIR analysis time window, choice of direct or iterated methods, settings for RC simulation, location of EM rule file, and so on.

The following sample control file describes EMIR analysis based on the X1 instance. A maximum IR drop analysis is performed on nets VDD and VSS, while RMS-based EM analysis is performed on all nets inside the X1 instance. The two-stage iterated method is used, and the current density limits for the EM report are referenced from file ./em_dir/40n_emfile.txt. Only one subcircuit instance is allowed for EMIR analysis for a Spectre run.

Example EMIR control file (emir.config)

net name=[X1.VDD X1.VSS] analysis=[vmax iavg]
net name=[X1.*] analysis=[irms]
solver method=iterated
emirutil techfile="./em_dir/40n_emfile.txt"

The EMIR control file supports the Spectre line continuation character + and comment-line characters * and //.

The following table summarizes the EMIR control file options:

The following table summarizes the supported EMIR control file options:

Keyword

Option Set

Explanation

Default Value

net

name=[instance1.net1 instance1.net2....]

or

name=[net1 net2...] inst=[inst1]

Defines the nets for which the analysis is performed. instance defines the instance of the subcircuit containing the net. net defines the net name inside the subcircuit instance as it is defined in the DSPF *| NET definition. If the DSPF file is included at the top level, the instance name is not required. Wildcarding is supported for net names but not instance names.

none

analysis=[imax iavg iavgpos iavgneg iavgabs irms vmax vavg]

peakEM, avgEM, avgEM for i>0, avgEM for i<0, avgabsEM, rmsEM, peakIR, avgIR. imax, iavg, iavgabs, irms, and vmax data are always written to the binary database independent of user settings.

If Voltus-Fi acpeak analysis is required, then imax and irms analyses need to be enabled in Spectre EMIR.

imax means max(abs(current waveform))

iavg, vmax

dut_inst=name

This option defines the instance name of the DSPF subcircuit (for example, i0). It is required only if a name mapping is required between ADE net names (for example, i0.i1.i2.net5) and DSPF names (i0.x1/xi2/net5). By default, ADE name is modified by adding a leading X and replacing . with /. The DSPF subcircuit instance name and the leaf-level net name are not impacted. You can use the option spf netxtorprefix=dspf_hier_inst prefix schematic_hier_inst_prefix to customize the mapping.

none

pwrgate=[I1.VDD I1.VDD_INT...]global=[I1.VDD]

or

inst=[I1] pwrgate=[VDD VDD_NT...]

Enables power gate handling. You need to specify the power supply net driving the power gate (vsource connected) and the internal power supply net driven by the powergate. If one power supply net drives multiple power gates, you need to specify one statement with all internal power supply nets. If none of the powergate nets is driven by vsource, then the global statement can be used to define the global net.

none

coupled_nets = [VDD VDD1 VDD2 VDD3]

Defines nets being coupled by design resistors and solved together. Requires the definition of the design resistor model: eisopt coupled_nets_model=[rmw1]

none

analysis=[sigvmax sigvavg] reftype=[avg max min pin]
[findsrc=yes|no][refnode=name][vref=value]

analysis=sigvmax - max signal net IR drop.

analysis=sigvavg - avg signal net IR drop.

reftype=avg - reference voltage for IR drop is the average voltage of all subnodes at every time point. This is the default.

reftype=max - reference voltage for IR drop is the maximum voltage of all subnodes at every time point.

reftype=min - reference voltage for IR drop is the minimum voltage of all subnodes at every time point.

reftype=pin findsrc=yes - Reference voltage of IR drop is taken from vsource, which is traced back from *P| node.

reftype=pin findsrc=no - Reference voltage of IR drop is taken from *P| node.

refnode - use the reference voltage from the specified reference node.

vref - use the voltage value as reference and report the value as vmax and not as sigvmax in the report.

none

analysis=[ipwc] pwc_threshold=1e-6

Enables pulse-wise constant EM current calculation for violation visualization. The pwc_threshold option defines the current threshold for finding the start of the pulse. Any value below pwc_threshold (the default value is 1e-6) is considered as zero. The emirutil dump_pwc_info=1|2 option generates an ASCII report in the <name>.rpt.pwc file for debugging purpose only. dump_pwc_info =1 creates a compact report (default) while dump_pwc_info=2 creates a detailed PWC report.

none

net name=[vdd gnd] analysis=iacpeak

ACPEAK analysis with shifting constant time window. Window size is defined by acpeak_tpeak, and shifting by acpeak_tpeak/acpeak_n. Iacpeak value for worst case window is reported.

none

net name=[vdd gnd] analysis=[iacpeak ipwc] pwc_threshold=1e-6

Duty cycle analysis with varying time window, time windows defined by current value crossing pwc_threshold. Td and duty cycle for worst case window are reported.

none

net name=[vdd gnd] analysis=[iacpeak ipwc] tau=100p td_current_threshold=1e-6

Duty cycle analysis with constant time window (tau), time windows defined by current value crossing pwc_threshold. Td and duty cycle for worst case window are reported. Td isn't calculated when Imax<td_current_threshold (def. 1uA).

name [instance.net1...] r2r_refnet=VSS analysis=[r2rvmin] [r2rvmin_layer=mt1]r2rvmin_refnet_layer=[m2] r2rvmin_tap_inst=[MN1* MN2*] r2rvmin_refnet_tap_inst=[MN3* MN4*] r2rvmin_model=[pch_...] r2rvmin_refnet_model=[nch_...] r2rvmin_bbox=[1.0 1.0 269.5 279.5] r2rvmin_refnet_bbox=[...] r2rvmin_node_report=[on|off] r2rvmin_rule_name=name r2rvmin_excl_layer=[m6] r2rvmin_refnet_excl_layer=[m9] r2rvmin_excl_tap_inst=[MN5] r2rvmin_refnet_excl_tap_inst=[MN6] r2rvmin_excl_model=[pch...] r2rvmin_refnet_excl_model=[pch...] r2rvmin_excl_bbox=[32.99 95.92 41.01 99.659] r2rvmin_refnet_excl_bbox=[...]

Worst case differential (rail-to-rail) IR drop between the specified power supply node and the reference net written to the *.rpt.r2r file. If r2r_refnet is not specified, the ground node is automatically detected. At each time point, the sub node with the highest IR drop is selected for power and ground net and the differential voltage is calculated. The worst case differential IR drop over the EMIR time window is reported and the worst case power and ground waveforms are written to the waveform file. Optional scoping (combined with AND) includes layer names, tap device names, and tap device model names for both power supply node and refnet. A boundary box can be defined for power supply net and refnet.

Optionally, a name can be assigned to each r2rvmin option. r2rvmin_node_report enables additional report of nodes and XY coordinates (default is off). Exclude statements supported for layers, tap device instances, models, and bounding boxes. All exclude statements allow you to specify file content. For example, r2rvmin_refnet_excl_tap_inst_file=refexcl.txt.

none

design_res_models=[name=rhim_m l=... w=... layer=...unit=... term=3]
analysis=[iavg irms]

design_res_models=[resistor] analysis=[iavg irms]

Specifies EM analyses for design resistors in the form of subcircuit resistor models (name=...) or resistor primitives (resistor). W and L are optional parameters for mapping of subcircuit resistor subcircuit parameters between DSPF and subcircuit model, unit for W/L, and term that defines the terminal at which the current should be evaluated. The default is one terminal.

none

vref=value

Defines the optional voltage reference value for vmax and vavg analyses.

none

include=file

Specifies the file name with a list of net names.

none

exclude=[netname1 netname2...]

Excludes the specified nets when name=[*] is used.

none

solver

method=[auto|direct|iterated|profonly|iteronly | itereco|iterated_split]

auto - direct for Spectre APS and Spectre X
direct - forced direct method
iterated - forced iterated method
profonly - iterated flow - circuit profile generation
iteronly - iterated flow - RC network iteration (requires solver inputwf=iterated.emirtap.pwl)
itereco
- iterated flow - RC network iteration with What-If changes defined in the ECO file
iterated_split - iterated flow - Same as iterated; however, it runs the first and second stages as separate processes to reduce peak memory usage

auto

speed=[1|2|3|4|5|6|7|8]

Defines the speed/accuracy trade-off for PN and SN RC network solver.

1 - adaptive time step, highest accuracy, lowest speed

5 - adaptive time step, lowest accuracy, highest speed

6 - fixed time step with 2000 steps

8 - fixed time step with 1000 steps

5

rcr=[conly|selected|asis]

Defines EMIR RC reduction for the first stage of the iterated method.

conly - use the Conly database.

selected - use the selected RC reduction, if enabled.

asis - use the parser/solver RC reduction, if enabled.

EMIR RC reduction is performed during parsing. Solver RC reduction, if enabled, is performed additionally.

conly

rcr_netsize=value

Applies to rcr_selected only. All nets with value equal to or less than the specified resistor value are considered signal nets using conservative RC reduction. The signal net reduction method is defined by rcr_small_net_method. All nets having a value more than the specified resistor value are considered power nets.

30000

rcr_huge_netsize=value

Differentiates between the large and huge power nets. The large power net reduction is defined by rcr_big_net_method while the huge power net reduction uses the reff method. By default, there is no huge power net.

infinite

rcr_small_net_method=[conly|reff|rcr|rsnap|asis]

Specifies the reduction method for signal nets. Possible values are conly, reff, rcr, rsnap, and asis.

rcr

rcr_big_net_method=[conly|reff|rcr|rcr_pwr|rsnap|rsnap_reff|asis]

Specifies the reduction method for large power nets. Possible values are conly, reff, rcr, rcr_pwr, rsnap, rsnap_reff, and asis.

conly

rcr_net=[name1 name2...]

This option is applicable only when rcr is set to selected. All the specified nets are considered as signal nets. A conservative RC reduction is applied in the first stage. The reduction rate can be adjusted by using the solver option rcr_fmax=value (the default value is 20, and the unit is in GHz).

none

c_net=[name1 name2...]

This option is applicable only when rcr is set to selected. All the specified nets use Conly method in the first stage.

none

rcr_pwr_net[name1 name2...]

This option is applicable only when rcr is set to selected. All specified power nets use moderate RC reduction. The reduction rate can be adjusted by using the solver option rcr_pwr_fmax=value (the default value is 2, and the unit is in GHz).

none

reff_pwr_net=[name1 name2...]

This option is applicable only when rcr is set to selected. All specified power nets use Reff modeling between pin and tap nodes.

none

rsnap_reff_pwr_net=[name1 name2...] kept_layer=[layer1 layer2...] snap_layer=[layer1 layer2...]

This option is applicable only when rcr is set to selected. All power nets specified use a combined Rsnap/Reff modeling between the pin and tap nodes. You need to define either the layers that need to be modeled with Rsnap/Reff (with snap_layer, all non-specified layers are kept), or the layers that should be kept (with kept_layer, all non-specified layers are modeled with Rsnap/Reff).

none

asis_net=[name1 name2]

Applies to rcr=selected only. All specified nets use the asis method.

none

global_pwr_net=[name1 name2 …]

By default, IR drop is enabled ony for DSPF subcircuit ports that are driven by a DC vsource. If a subcircuit port is not connected to a DC vsource, it can be defined as a power supply node using the global_pwr_net option and IR drop on this net can be calculated by specifying the analysis=vmax statement on this net. The IR drop reference value used is the maximum value of the voltage waveform at the specified port. This feature is only supported in iterated method. Wildcarding is not allowed. Once enabled, the net can be used in the pwrgate statement.

none

ldo_net=[VDD_LDO] ldo_driver=[I1.X1/M1 I1.X1/M2] ldo_vref=max|avg|min|value

Defines LDO net for LDO IR drop analysis. LDO MOSFET drivers need to be defined in ldo_driver. IR drop reference voltage can be the min, the max, or the average voltage of the ldo_driver nodes over the EMIR time window. Alternatively, the user can define a fixed reference value, ldo_vref=1.1. Instead of ldo_drive, the instance name of the LDO can be specified with ldo_inst=[I1.X1]. Wildcards are supported ldo_drive but not in ldo_inst.

none

preset=0|1|2

Specifies whether or not the solver should be optimized.

0- Does not optimize the solver

1 - Performs solver optimization for accuracy

2 - Performs solver optimization for performance

1

tstep=value

Change the solver to a fixed timestep specified by value. The unit is in seconds.

none

min_tstep=value

Minimum time step for adaptive time step. The unit is in seconds.

1ps

maxiters=value

Defines the maximum iteration number in the transient stage of RC solver. Value 0 can be used for performance optimization.

100

rcsolve_multi_proc=[on|off]

If set to on, enables parallel (forked) processes for second stage network solving. You can use the +mt command-line option to specify the maximum number of cores to use. Small-sized nets (< rcsolve_1t_netsize) are solved first with eight forked single-thread processes. Medium-sized nets are solved next with two forked four-thread processes. Large nets (>rcsolve_4t_netsize) are solved with one main process using eight threads.

off

rcsolve_1t_netsize=value

Specifies the small net threshold value for parallel (forked) processing of second stage network solving.

10000

rcsolve_4t_netsize=value

Specifies the large net threshold value for parallel (forked) processing of second stage network solving.

unlimited

ignore_tap=[name1 name2...]

Ignores the specified tap devices in dynamic, static EMIR, and SPGS. The specified tap devices are changed to subnodes and do not carry any current. In addition, they are not reported. It applies to only the second stage of the iterated method and is not supported in the direct method. Wildcarding is supported.

none

report_tapc=[off|text]

Report the net and tap device capacitance values for nets being defined in the UTI command. The capacitance report is written to a file with extension rpt_tapc.

off

concurrent_ratio=value

Defines the concurrent tap device handling. The value should be greater than or equal to 0 but less than or equal to 1.

1 - concurrent

0 - not concurrent

1

mosfet_subckt=[name1 name2...]

Defines the subcircuits describing the complex powergate subcircuits. The first four terminals should connect to MOSFET d, g, s, b, and terminals 0 and 2 should connect to the global and virtual power nets.

none

inputwf=file_name

Specifies the waveform file that contains the results from circuit simulation when method=iteronly is used.

none

static

ifile=filename

Enables static EMIR analysis. The filename defines the subcircuit instance port currents. Static EMIR analysis cannot be combined with dynamic EMIR analysis.

none

exclude=[net=[name1 name2] dev=[name1 name2]]

Exclude the tap devices from static current distribution. A 0A current is assigned to the specified tap devices. Wildcarding is supported for both exclude and dev. For example:

exclude=[net=[I1.VDD] dev=[MPM3*]].

none

net=[name1] dev=[name1 name 2] current_scale=1.5

Allows individual tap device current scaling after the currents were distributed. Dev and current_scale are required parameters. If net isn't defined then option is applied to all nets. Wildcarding is supported for net and dev. Example: static net=[I1.VDD] dev=[MPM3* MNM1] current_scale=1.5

none

ldo_net=[I1.VDD_LDO] ldo_driver=[I1.X1/M1 I1.X1/M2] ldo_vref=1.0

Defines LDO net and LDO drivers for which IR drop is calculated.

none

i_value = 1.1e-6 net=[net1 net2]  dev = [X1/X2/X5/*] model = [model_3]

Defines individual device current assignment. Current assigned by i_value is considered to be part of total current defined in static_ifile.

none

i_scale = 1.1 net=[net1 net2]  dev = [X1/X2/X5/*] model = [model_3]

Defines how the current is scaled for the given devices. First scaling is applied to W/L for all devices defined in i_scale. Second current distribution is performed based on W/L values. This approach doesn't change the total pin current being distributed.

none

current_scale_file=current_scale_file.txt

Supports tap device current scaling (above) through file definition. Content of current scaling file per line is: net dev scaling_factor, i.e. I1.VDD MPM3* 1.5

false

report_tapi=[true|false]

Enables the printing of individual tap device currents in static EMIR analysis. The current values are written to a file with the extension rpt_tapi.

false

emirutil

techfile="emDataFile"

Specifies the EM rule file in the emdatafile, qrctechfile, or ICT file format.

The EM rule file can be predefined in the configuration file using the EMTECHFILE environment variable, as shown below.
setenv EMTECHFILE="<path>/emdatafile"

It can also be defined in the .cdsinit file as follows:
envSetVal("spectre.envOpts" "emTechFile" string <path to the file>

Case-insensitive layer names are supported for easier match between the DPSF file and emData file.

The rule file defined in the configuration file has higher priority followed by the rule file specified in .cdsinit. The rule file specified using the environment variable has the least priority.

Alternatively, you can use the emdatafile="emDataFile" option to specify the techfile in the emdata format, qrctechfile="qrcTechFile" to specify the QRC tech files, and ictfile="ictfile" to specify the file in ICT format.

none

layermapfile="mapfile"

Optional file that defines the mapping between the layer names in the DSPF file and the layer names in the technology file.

none

EMOnlyICTFile="emOnlyICTfile"

Specifies the file containing only the EM rules. It is usually used in combination with qrcTechFile.

none

autorun=[true|false]

true - run emirutil automatically after the solver to generate a text report.

false - manually run emirutil.

true

report=[text|layout | html]

Defines the type of report created by emirutil.

text - creates only the text report.

layout - creates only the layout violation map.

html - creates the report in html format.

Multiple entries are supported.

text

notation=[s|e]

Notation for the text and html reports.

e - engineering scale number (for example, 5.02m)

s - scientific notation (for example, 5.02e-3)

e

sort_by_net=yes|no

Report IR and EM results per net, or all nets.

yes - report EMIR results per net.

no - combine EMIR results of all nets into one report.

yes

tap_model_report=yes|no

Report the device model names for all tap devices in dynamic and static *.rpt_ir and *.spgs.

no

filter_ir_percent=value

Defines the percentage of nodes being reported starting from the biggest IR drop. For example, filter_ir_percent=5 reports the top 5% IR drop nodes in the violation map and text report.

no filter

filter_ir_threshold=value

Defines the IR voltage drop threshold for the node being reported. For example, filter_ir_threshold=0.01 reports all nodes with IR drop above 0.01V.

no filter

filter_em_threshold

The EM current for resistor is written only to the EM current text report if its RJ value (current_density/current_density_limit) is greater than the value specified.

none

warning_limit=[value warning_type1 warning_type2...]

Defines the maximum number of warnings per EMIR warning message.

50

geounit=value

Defines the scaling of all DSPF geometry parameters (W, L, X, Y). It applies only to the *|NET section, and not to the instance section.

1um

geounit_wl=value

Defines the scaling of all DSPF geometry parameters W and L. The product of DSPF W/L*geounit_wl is equal to W/L in meters. It only applies to *|NET section and not the instance section. geounit_wl=1e-6 means W and L in DSPF are specified in um. geounit_wl=1 means W and L in DSPF are specified in m. W/L in the binary database are always stored in um.

1um

geounit_xy=value

Defines the scaling of DSPF geometry parameters X and Y. It applies only to the *|NET section, and not to the instance section. geounit_xy=1e-6 means that the X and Y in the DSPF file are specified in um. geounit_xy=1 means that the X and Y in the DSPF file are specified in m. X/Y in the binary database are always stored in um.

If the geounit_XY and geounit options are specified together, the geounit_XY option takes precedence over the geounit option.

1um

auto_detect_geounit [true|false]

emirutil generates an error message if the X, Y coordinates are outside the range of [-10cm 10cm] and the W, L values are outside the range of [1nm, 1mm]. If you intentionally want to keep the out-of-range values, set auto_detect_geounit to false to continue the simulation.

true

violation_map=[failed|all]

Defines the EM violation map to be created.

failed - create map only for resistors with EM violation.

all - create map for all resistors

failed

via_count=[useR|useArea]

Defines the method used for calculating the via count.

useR - calculation based on via resistance (emdatafile_via_resistance/dspf_via_resistance).

useArea - calculation based on via area (dspf_via_area/emdatafile_via_area).

useR

idirn=[true|false]

Prints the current direction in the EM report (Current Direction column). For metal resistors, the current direction is printed. That is, W means that the current is flowing from east to west. For via resistors, the current direction from/to layer is printed.

false

ir_in_em [true|false]

Reports the IR drop for each metal resistor/via in the EM current report (Max_ir column).

false

color_level=number

Defines the number of colors displayed in the violation map. Default value is 10.

10

iusercalc="file procedure"

Enables custom current calculation. The file contains the SKILL procedure, which contains the current calculation.

none

blech_path_report="file"

Enables the printing of the blech length path for each metal layer that belongs to the net specified in the file.

none

invalid_res_width

Ignores any resistor with R<=0.001. and width >=invalid_res_width, when calculating the path length. In addition, these resistors are not reported in the EM report.

10u

recovery_factor=value

Defines the recovery factor for iavg calculation with recovery factor. If specified, then iavg=max(|iavgpos|,|iavgneg|)-recovery_factor*min(|iavgpos|,|iavgneg|). If not specified, then iavg=iavgpos+iavgneg.

none

time

window=[start1 stop1 start2 stop2 ...]

Time window to which the EMIR analysis is applied. It applies to all nets for which the analysis is defined. Multiple and overlapping windows are supported. An individual report is created for each time window. You can use different time windows for emirutil v/s Spectre simulation.

[0 tend]

window=[start1 stop1 start2 stop2 ...] net=[net1 net2....] output=none

Black out window. The specified time windows are blacked out from the global EMIR time window. It applies only to the EMIR analysis for the specified nets.

none

window=[start1 stop1 start2 stop2 ...] exclude [t1 t2 t3 t4] net=[net1 net2....] output=power filename="file" [analysis=avg] fmstage=[1|2]

Creates average current report for static EMIR analysis. It reports the average port current for the specified nets for the active time window. The active time window is defined as user-defined window minus exclude window. The results are written to the specified file. If no file is specified, then a file with the extension avgpwr is created. The average current creation works independently of the dynamic EMIR feature. Average A for two active windows (t1->t2, t3->t4) is calculated as: A=(A1+A2)/(t2-t1+t4-t3). fmstage specifies whether the current should be taken from the first stage (default) or the second stage of EMIR analysis.

none

window=[start1 stop1 start2 stop2 ...] exclude [t1 t2 t3 t4] net=[net1 net2....] output=power filename="file" [analysis=max] fmstage=[1|2]

Creates the peak current report. It reports the peak port current and peak time for the specified nets for the active time window. The active time window is defined as user-defined window minus exclude window. The results are written to the specified file. If no file is specified, then a file with the extension peakpwr is created. fmstage specifies whether the current should be taken from the first stage (default) or the second stage of EMIR analysis.

none

vprobe

net=[net1 net2...]

Enables voltage waveform printing of the selected nets (*|NET in DSPF) for second stage iterated method. Waveforms can be printed only for nets for which IR drop or EM currents are analyzed. The waveform file is located in the *.emirtap-tran directory. Wildcards are supported. The format can be specified using -format uwi -uwifmt <format>.

Waveform printing for direct method and first-stage iterated method can be enabled by using the regular save/.probe statements.

none

scope=[netonly |taponly | all]

The selected scope.

netonly - save the net pin voltage waveform.

taponly - save all tap node voltage waveforms.

all - save voltage waveforms for net pin, all subnodes, and tap nodes.

netonly. If include/exclude is used, then the default is all.

include=[pattern]

Defines the names of subnodes and tap nodes to be included. Wildcards are supported.

*

exclude=[pattern]

Defines names of subnodes and tap nodes to be excluded. Wildcards are supported.

none

compression=[no|all]

Enables waveform compression.

no

compreltol=value

Defines the relative tolerance for waveform compression.

1.00E-03

compvabstol=value

Defines the absolute voltage tolerance for waveform compression.

1.00E-06

iprobe

net=[net1 net2...]

Enables current waveform printing of the selected nets (*|NET in DSPF) for second stage iterated method. Waveforms can be printed only for nets for which IR drop or EM currents are analyzed. The waveform file is located in the *.emirtap-tran directory. Wildcards are supported. The format can be specified using -format uwi -uwifmt <format>.

Waveform printing for direct method and first-stage iterated method can be enabled by using the regular save/.probe statements.

none

scope=[netonly|taponly|all]

The selected scope.

netonly - save total pin current, and power gate current, if power gate exists.

taponly - save all tap device currents.

all - save pin currents, power gate currents, and all tap device currents.

netonly. If include/exclude is used, then the default is all.

include=[pattern]

Defines names of the resistors to be included. Wildcards are supported.

*

exclude=[pattern]

Defines names of the resistors to be excluded. Wildcards are supported.

none

compression=[no|all]

Enables waveform compression.

no

compreltol=value

Defines the relative tolerance for waveform compression.

1.00E-03

compvabstol=value

Defines the absolute current tolerance for waveform compression.

1.00E-06

spf

aliasterm="alias library_terminal name"

Alias used when DSPF instance terminal names do not match the cell terminal name in the libraries.

none

check=[on|off]

Enable (on) or disable (off) automatic spfchecker run for creating spfxtorprefix and spfaliasterm configuration settings for the iterated method. Spfchecker can also be enabled by setting the MMSIM_SPF_CHECK environment variable, as follows:

setenv MMSIM_SPF_CHECK 1

off

rcr_report=[on|off]

Enable net-based Conly/RCR report. The report is written to a file with the extension *.rpt_rcr. The report generation can also be enabled by setting the MMSIM_DSPF_RCR_REPORT environment variable, as follows:

setenv MMSIM_DSPF_RCR_REPPORT 1

off

patch_island=[no_patch|skip_island|patch_active|patch_all]

no_patch: skips any net that has an island.

skip_island: solves the net but ignores the island.

patch_active: patches only the islands with tap devices and skips the islands without tap devices.

patch_all: patches all islands.

Patching is the creation of a random connection between the island and the main net with a resistor of 10kOhm; the resistor value can be set using spf patch_island_rval=value.

patch_active

ignore_pwr_gate_models=[model1...] nets=[pwg_net1 pwg_net2...] from_stage=[1|2]

All instances of the specified model are removed if their first and third terminals are connected to the specified nets. from_stage=1 (default) removes the element from the Spectre database and impacts the first and second stage. from_stage=2 keeps the instance in the first stage but removes it from the second stage. The net names must specified in pairs (GPN/VPN or VPN/VPN) and may contain wildcards.

none+C85:F85

auto_detect_ignore_instances=value

Enables EMIR iterated method to automatically remove elements that can be ignored. This option does not have any impact on the direct method

none

ignore_instances=[instance names from DSPF instance_section] from_stage=[0|1|2]

The specified DSPF instance is removed from EMIR simulation. from_stage =0 (default) removes the instance from the Spectre database and impacts the first and second stage. from_stage=1 removes the instance from the Spectre database and the RC solver database. from_stage=2 removes the instance from the RC solver database only. The instance names may contain wildcards.

none

spgs

net=[net1 net2...]

Enables the static power grid solver and defines the power nets to be analyzed.

none

short_res_layer=[layer1 layer2....]

Specifies the DSPF layer that needs to be shorted.

none

no_short_res_layer=[layer1 layer2...]

Specifies the DSPF layers that should not be shorted. All other layers are shorted.

none

open_res_layer=[layer1 layer2...]

Cuts the R on the specified layers (creating an open) and keeps the R on all other layers.

none

pwrgate=[powernet1 powernet2...]

Specifies the power gates that need to be analyzed in the power grid solver.

none

coupled_nets = [VDD VDD1]

Solve coupled nets together. Requires the definition of the design resistor model: eisopt coupled_nets_model=[rmw1].

none

ldo_net=[I1.VDD_LDO] ldo_driver=[X1/M1 X1/M2] ldo_voltage=1.0

Defines Ldo net and LDO drivers for reff calculation.

none

filter_moscap=true|false

If set to true, tap nodes that connect to MOSFET devices are filtered out.

FALSE

max_rpt=value

Report only the top value paths.

infinite

filter_res_threshold

Report only the paths that have the resistance value above the specified value.

0

rshort=value

Specifies that the resistors with R<rshort need to be shorted during static power grid analysis.

0

remove_dangle_res=true|false

Removes the dangling resistors.

FALSE

tap2sub net=<net_name> include=[<tap_name>] exclude=[<tap_name>]

Converts tap to subnodes.

none

tap2pin net=<net_name> include=[<tap_name>] exclude=[<tap_name>]

Converts tap to pin.

none

sub2tap net=<net_name> include=[<node_name>] exclude=[<node_name>]
layer=[m1 m2]

Converts subnode to tap.

none

sub2pin net=<net_name> include=[<node_name>] exclude=[<node_name>]

Converts subnode to pin.

none

tap2sub net=<net_name> include=[<tap_name>] exclude=[<tap_name>]

Converts tap to subnode

none

pin2sub net=<net_name> include=[<pin_name>] exclude=[<pin_name>]

Converts pin to subnode.

none

pin2tap net=<net_name> include=[<pin_name>] exclude=[<pin_name>]

Converts pin to tap.

none

shorted_nets=[VDD VVDD]

Short two nets together on their *|P and perform SPGS on the combined net

none

test_bench_less=1

Enables the simplified SPGS flow only requiring DSPF file and subcircuit instance call or the top-level subcircuit (+top).

0

pwr_macro

subckt=name

or

inst=name

Creates power macro model for all instances of the specified subcircuit or for the specified subcircuit instance.

none

port=[name1 name2....]

Specifies the subcircuit ports that are modeled. Wildcards are supported

*

type=[max|avg|avgabs| rms]

Specifies the type of current to be measured for defining the created port DC source value. Multiple entries are supported.

none

output=[subckt|table]

Specifies the output to be generated.

subckt - generate the subcircuit macro model

table - generate a table with current and capacitance information

Multiple entries are supported.

subckt

outdir

Specifies the directory to which the macro models are written.

raw

outname

Specifies the name for the created macro model files. The file extension is .inst_name.subckt_name.type.

netlist name

mode=0|1

Specifies the type of macro model to be generated.

mode=1 creates the macro model with what-if branches for resolving potential KCL problems.

mode=0 creates the macro model with parallel resistor branch for addressing potential KCL violations.

1

eco

file="eco_file_name"

Enables What-If analysis and applies the changes defined in the eco_file_name. This option is supported when method=iterated or method=itereco.

none

The EMIR control file supports the Spectre line continuation character +, and the comment lines start with character * or string //.

Checking the Progress of EMIR Analysis

As the simulation runs, Spectre sends messages to the screen and the simulation log file that show the progress of the simulation and provide statistical information. Following information may be significant to your EMIR analysis when you use the iterated method.

Hardware configuration and run-time machine loading

In the beginning of a simulation session, Spectre prints the hardware configuration (physical memory, CPU core specification) and the run-time machine status (available memory, CPU core operating frequency, CPU loading). Since EMIR analysis often involves large-scale designs with gigabytes of data, it is important to ensure that there is sufficient memory available, with CPU operating at full speed (not in power saving mode), and the machine loading is light.

User: user1 Host: lnx-user1 HostID: CD0A1190   PID: 26141
Memory  available: 10.2268 GB  physical: 16.6236 GB
CPU Type:        Intel(R) Xeon(R) CPU E5-1650 0 @ 3.20GHz
          Processor PhysicalID CoreID Frequency Load
              0         0        0     3192.5     0.3
              1         0        1     3192.5     0.2
              2         0        2     3192.5     0.3

Reading the EMIR Control File

Spectre reads the EMIR control file before processing the circuit being simulated. All valid EMIR options are reported in the following section:

Reading EMIR configuration file: …/iterated.conf
~~~~~~~~~~~~~~~~~~~~~~~~~~~
EMIR Analysis Configuration
~~~~~~~~~~~~~~~~~~~~~~~~~~~
nets            pwrgate = [i1.VDD i1.outp] analysis = [vmax]
nets            name = [i1.VSS] analysis = [vmax]
nets            name = [i1.*] analysis=[irms iavg]
spf             aliasterm = "gpdk090_nmos2v  1=d  2=g  3=s"
emirutil        techfile = emDataFile.txt
solver          method = iterated 

If one of the specified EMIR options is not displayed in the summary, check the related warnings, and correct the syntax.

Processing the DSPF Files

Spectre processes the DSPF files and prepares a reduced circuit to be simulated. This often includes identifying the power nets and reducing them to only include parasitic capacitors, as well as identifying the signal nets and reducing the parasitic resistors and capacitors according to accuracy requirement.

Time for Processing DSPF file: CPU = 128.981 ms, elapsed = 60.8708 s (1m  0.9s).
Time accumulated: CPU = 167.974 ms, elapsed = 60.8709 s (1m  0.9s).
Peak resident memory used = 42 Mbytes.
Time for Creating Parasitic Database: CPU = 0 s, elapsed = 403.166 us.
Time accumulated: CPU = 170.973 ms, elapsed = 60.874 s (1m  0.9s).
Peak resident memory used = 42.1 Mbytes.

All coupling capacitors with C<1e-16 are grounded, while others are preserved. The dspf_include option CapacitorSplitThreshold can be used to adjust the value. Direct method and first stage iterated method do not simplify coupling caps. The second stage iterated method includes coupling caps in individual net solving. It biases the other terminal of the coupling cap with a voltage waveform.

Running the Circuit Simulation to Produce Voltage Profiles

At this point, with the simplification of power and signal nets, Spectre is ready to simulate the nonlinear circuit and produce voltage profiles needed for iterated EMIR analyses. This step is similar to a regular circuit simulation, where Spectre first parses the circuit, reports circuit inventory, initiates a DC analysis, and finishes the step with a transient analysis.

Creating probes for EMIR analysis: 36 voltage probes, 0 current probes
Time for setting up EMIR tap devices: CPU = 10.0 ms (0h 0m 0s), elapsed = 10.0 ms (0h 0m 0s).
Time for setting up EMIR analysis: CPU = 30.0 ms (0h 0m 0s), elapsed = 30.0 ms (0h 0m 0s).
Peak resident memory used = 0.95 Mbytes
******************************************************
Transient Analysis `transient1': time = (0 s -> 20 ns)
******************************************************
......9......8......7......6......5......4......3......2......1......0
Number of accepted tran steps =             918
Initial condition solution time: CPU = 175.973 ms, elapsed = 176.348 ms.
Intrinsic tran analysis time:    CPU = 352.946 ms, elapsed = 354.783 ms.
Total time required for tran analysis `transient1': CPU = 531.918 ms, elapsed = 557.204 ms.
Time accumulated: CPU = 873.866 ms, elapsed = 62.0641 s (1m  2.1s).
Peak resident memory used = 65.2 Mbytes.
Creating EMIR waveform profile …/iterated.emirtap.pwl
Time for creating waveform database: CPU = 30.0 ms (0h 0m 0s), elapsed = 40.0 ms (0h 0m 0s).

The reported transient time and the accumulated time are important measures to be considered when optimizing performance. The voltage profiles of the tap devices (active devices connecting to the power and signal RC nets) are stored in the pwl files, and used as input for the second stage EMIR simulation.

This step of EMIR simulation is fully multi-threaded. It uses the number of cores defined by the +mt command-line option.

Simulating the Parasitic RC Nets

In the second stage of the iterated EMIR analysis, the power and signal nets are simulated together with the tap devices. During the simulation, the tap device terminal voltages over time is taken from the voltage profiles created in the first stage. In the second stage, nets are solved individually, except for coupled nets, which are solved together.

The RC network solver writes all IR drop voltage and EM current values to the binary database with the extension emir0_bin. Important log file content is written to the EMIR PARASITICS ANNOTATION SUMMARY section, which provides information on the nets and R/C elements processed. In addition, the number of solved time steps per net, and the elapsed time for the RC solving are essential when optimizing performance.

*****************
EMIR RC Analysis
*****************
Reading EMIR configuration file:  …/iterated.emirtap.conf
~~~~~~~~~~~~~~~~~~~~~~~~~~~
EMIR Analysis Configuration
~~~~~~~~~~~~~~~~~~~~~~~~~~~
solver          method = iteronly inputwf = …/iterated.emirtap.pwl 
Maximum grounded vsource value = 2.5v
Searching and processing cross coupling capacitors in SPF file
/grid/cic/nsdpe-2/stefanw/emir/logfile/./adc_sample_hold.dspf
.......9......8......7......6......5......4......3......2......1......0
Cross coupling capacitors found and processed: 0
Solving coupled nets "VDD outp": number of nodes = 594, time = (0n -> 20n)
.........9.........8.........7.........6.........5.........4.........3.........2.........1.........0
Total time required for EMIR RC analysis of coupled nets "VDD ... ": CPU = 480.0 ms (0h 0m 0s), elapsed = 240.0 ms (0h 0m 0s).
Completed transient analysis up to  100% at Tue Jan 12 03:53:44 2016
EMIR RC analysis accumulated time: CPU = 1.4  s (0h 0m 1s), elapsed = 1.0  s (0h 0m 1s).
Peak resident memory used = 68.40 Mbytes.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
EMIR PARASITICS ANNOTATION SUMMARY
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Nets:                      parsed            18 processed            18
Cross coupling capacitors: parsed             0 processed             0
Capacitors:                parsed             0 processed             0
Resistors:                 parsed          3052 processed          2933
Nodes:                     parsed          2205 processed          2205
Nets annotated with C-only:        0  Nets annotated with RC:       18
Detailed annotation report written in file "iterated.raw/iterated.emirtap.spfrpt"
0 errors and 28 warnings(fixed errors)
         Message statistics
        ===========================
        Instance section detected                             1
        Small R/C excluded                                   96
        Dangling R/C terminal                                28
Notice from spectre.
        EMIR binary file 'iterated.raw//iterated.emirtap.emir0_bin' is generated (start = 0, stop = 2e-08)..
Number of nets solved = 18
Number of accepted time steps = 3148 (average 174.889 per net)
Number of rejected time steps = 187 (average 10.3889 per net)
Total time required for EMIR RC analysis: CPU = 1.4  s (0h 0m 1s), elapsed = 1.0  s (0h 0m 1s).
Peak resident memory used = 68.4 Mbytes

This step of the EMIR simulation is fully multi-threaded. It uses the number of cores defined by the +mt command-line option.

After the EMIR data is available in the binary database, another step is performed to create the text reports for IR drop, EM currents, pin currents, and power gate information. The following output shows the related section in the log file (some content is only written to stdout):

Creating EMIR report, check '…/iterated.raw/iterated.emirtap.emirlog' for more information.
 Time usage: elapsed: 150.0 ms (0h 0m 0s), CPU: 90.0 ms (0h 0m 0s)
Find PDB file (./logfile.emirtap.pdb)
Pin current report ./logfile.emirtap.rpt_pin created.
Power gate report .logfile.emirtap.rpt_pwg created.
Completed processing EM/IR data up to:10 %
Completed processing EM/IR data up to:20 %
Completed processing EM/IR data up to:30 %
Completed processing EM/IR data up to:40 %
Completed processing EM/IR data up to:50 %
Completed processing EM/IR data up to:60 %
Completed processing EM/IR data up to:70 %
Completed processing EM/IR data up to:80 %
Completed processing EM/IR data up to:90 %
Completed processing EM/IR data up to:100 %
text IR report successfully generated.
text EM report successfully generated.
text PIN current report successfully generated.
text Power gate report successfully generated.
Note, found 4 warning messages, and 4 warnings printed.

At the end of the simulation, Spectre reports the total simulation time and peak memory used.

Aggregate audit (3:53:45 AM, Tue Jan 12, 2016):
Time used: CPU = 2.38 s, elapsed = 63.3 s (1m  3.3s), util. = 3.76%.
Time spent in licensing: elapsed = 60.1 s (1m  0.1s), percentage of total = 94.8%.
Peak memory used = 68.8 Mbytes.

Viewing EMIR Results

Spectre EMIR writes the IR voltage and EM current values to a binary database with the extension emir0_bin. In addition, it automatically calls the emirreport or emirutil binary for creating the text or html reports.

The textual/html IR drop report (file extension: rpt_ir/rpt_ir.html) lists the voltage drop per net (in the order of largest to smallest), and provides information about the time the maximum IR drop occurred, as well as the layer information and layer coordinates. An example section of an IR drop report is shown in the following figure:

The EM report (file extension: rpt_em/rpt_em.html) lists the pass/fail results for each resistor segment of a net, and provides information about the resistor name, layer, current, layer width, density (current divided by width), density limit, number of vias required, and the coordinates.

The EMIR text and html reports can also be created using an existing EMIR binary database using the following command:

$ emirutil -db aps.emir0_bin -control emir.conf

For more information on emirutil/vpsbatch utility for creating the reports, and for the visualization of the EMIR analysis results in the layout, refer to the Voltus-Fi user manual.

If there are multiple emir0_bin files created by the same Spectre EMIR simulation, it is sufficient to specify only the first binary database file with the -db option. The utility automatically identifies all other binary database files created by the Spectre EMIR simulation.

Data Flow

The data flow of the iterated EMIR flow is shown in the following flowchart. The first stage EMIR circuit simulation creates the tap device voltage profiles which are stored in the pwl files, and used in the second stage. The second stage RC network solver writes all IR drop and EM current values to a binary database with the extension emir0_bin. This binary database is used by emirutil/emirreport for creating the text/html reports, and by Voltus-Fi XL to visualize the results in the layout.

All intermediate and output files are written into the Spectre output (raw) directory. Some files shown in the figure are only created when the related feature is enabled in the EMIR config file.

If multiple EMIR windows are used in the same EMIR simulation, a set of files is created for each EMIR time window. For example:

Time window 1: emir0_bin, rpt_ir, rpt_em, …
Time window 2: emir1_bin, rpt_ir1, rpt_em1, …

The data flow for the APS direct method is the same except that the intermediate files are not created. Only the iterated method EMIR files have the emirtap file extension.

Direct method: design.emir0_bin, design.rpt_ir, design.rpt_em

Iterated method: design.emirtap.emir0_bin, design.emirtap.rpt_ir, design.emirtap.rpt_em

For large designs, the intermediate (pwl, pdb) and EMIR database files (emir0_bin) can be compressed by using the eisopt zipfiles=2 option in the EMIR config file.

Establishing an Accuracy Reference and Correlating EMIR Accuracy

To evaluate an EMIR solution and to select the appropriate level of accuracy and performance trade-off, it is important to establish a golden accuracy reference, and be able to correlate EMIR results compared to this reference.

Establishing an Accuracy Reference Using the APS Direct Method

For evaluating and optimizing the performance and accuracy of Spectre EMIR analysis results, a golden accuracy reference is required. It is recommended to select a representative small-to-medium sized design that can be simulated within reasonable time by using the APS direct method. APS direct method produces accurate EMIR golden accuracy. The following shows an example of APS direct method EMIR config:

net name=[X1.VDD X1.VSS] analysis=[vmax iavg]
net name=[X1.*] analysis=[irms]
solver method=direct

When correlating data between iterated and direct method, there is no need for including a technology file since only IR drop and EM current values are compared.

Correlating EMIR Accuracy

Once the iterated method is run on the same design, you can use the emirutil utility to compare the accuracy of iterated EMIR results with the golden APS direct EMIR results.

For example, the following command compares the IR drop results for the node vdd between the iterated and direct methods. All vdd tap points with more than 100mV and 1% of the maximum vdd IR drop are reported. The results are written to the file test.erclog in scientific notation.

emirutil -i iterated.rpt_ir -r direct.rpt_ir -o test -net "vdd" 
-ir_abstol 100e-6 -ir_reltol 0.01 -maxrpt all -notation s

The following is an example of the comparison report:

Alternatively, a GNUPLOT graph can be generated, as shown below:

emirutil -i input.emirtap.rpt_em -r input.rpt_em -net VDD -g 

This command creates a GNUPLOT command file (that is, out_VDD_em_max.plt), and a gnuplot database file (that is, out_VDD_em_max.dat). The plot can be shown in GNUPLOT using the following command.

gnuplot -persist  default_VDD_ir_avg.plt

The following gnuplot graph compares the IR drop for all nets of the design between iterated and direct method.

The following table describes the emirutil command-line options.

Command-line Option Description

-i input.emirtap.rpt_em

Input file with EM or IR data (that is, the iterated method).

-r input.rpt_em

Reference file with reference to EM or IR data (that is, the direct method).

-g v-v | rele-v |abse-v

Create gnuplot script and database for gnuplot visualization.

v-v compares the input value with the reference value (default)

rele-v compares the relative error of the input with the reference value

abse-v - compares the absolute error of the input value with the reference value

You can redirect the output to PNG, JPG, or PS files by using the EMIRUTIL_GPLOT_OUT environment variable as follows:

setenv EMIRUTIL_GPLOT_OUT png|jpg|ps

-gdesp title_addition

Add additional information to the gnuplot graph title.

-o EM_VSS

Define the output file name (for example, EM_VSS.erclog).

-print_shell

If specified, also print the result in the command shell

-net "VDD_AVTR"

The nets to be analyzed. The default is "*". Use -net all to create a single report for all nets.

-comp_exclude "q[*]clk"

The nets to be excluded.

-layer name

Layers to be analyzed. Default is "*".

-ir_abstol value

The absolute cut-off value for the IR drop values to be compared. The default is 1 mV.

-em_abstol value

The absolute cut-off value for the EM current values to be compared. The default is 50 uA.

-spgs_abstol value

The absolute cut-off value for effective resistors to be compared. The default value is 0.1 Ohm.

-ir_reltol value

The relative cut-off value for the IR drop values to be compared. The default is 33.3% of the maximum IR value per net.

-em_reltol value

The relative cut-off value for the EM current values to be compared. The default is 0% of the maximum EM value per net.

Only tap points/resistors with value above the cut-off value and the relative cut-off value are reported.

-spgs_reltol value

The relative cut-off value for effective resistors to be compared. Default is 0% of the max resistor value per net.

-maxrpt number

Report top numbers for absolute and relative errors, per specified nets. The default is 5. For a detailed report containing all tap points/resistors, use the option -maxrpt all.

-notation s|e

e is the engineering scale number. For example, 5.02m. This is the default.

s is the scientific notation. For example, 5.02e-3.

-c control.txt

Read the command-line options from the file control.txt.

The same syntax is used in the control file except that the dash (-) is not used.

-vref voltage|irdrop

Defines the reference for IR drop display.

voltage - use node voltage as reference. This is the default.

irdrop - use irdrop as reference.

All emirutil options can also be specified in a control file and included using the -c command-line option. The syntax in the control file does not require the dash.

The following is an example of specifying the emirutil options in a control file:

reference="/home/user/emir/direct/top2.rpt_ir"
input="/home/user/emir/iterated/top2.rpt_ir"
output=test
net="vdd avtr"
ir_abstol=1e-8
ir_reltol=0.01
maxrpt=all
notation=s
print_shell

The control file can be used with emirutil, as shown below.

emirutil -c control.txt
The emirutil can be used not only to compare the direct EMIR analysis results with iterated EMIR analysis results, but also to compare the results of any two EMIR analyses.

The outcome of the correlation between the iterated and direct methods provides a good understanding of the iterated method accuracy.

Optimizing EMIR Analysis for Accuracy and Performance

Understanding the Accuracy Impact and Performance Bottleneck

As discussed, the iterated method consists of a first stage circuit simulation with different simulation solver options (Spectre APS, Spectre X), and a second stage RC network solver analysis. Both stages can be optimized for accuracy and performance. The accuracy of the first stage can be improved by keeping some parasitics with the RC reduction option, in place of the default C-only simulation. Once the parasitics going into the first stage circuit simulation are decided, the performance and accuracy of the first stage circuit simulation is completely subject to the choice of simulation solver, and the solver accuracy setting (for example, errpreset, ++aps, +preset, +dcopt, +hsfe). The accuracy and performance trade-off in the second stage is defined by the speed option. A higher value of the speed option means higher performance, and a lower value means higher accuracy. For most designs, the default speed=5 provides the best accuracy/performance tradeoff.

The following figure shows the performance numbers for an individual EMIR analysis steps for a large representative design, and the options for trading between accuracy and performance.

When optimizing performance, it is important to check whether it is the first stage or the second stage that dominates the overall performance. The elapsed time and time steps for each stage are reported in the Spectre log file, as shown below.

The number of time steps used in the second stage RC simulation should track the first stage circuit simulation to some extent.

Performance and Accuracy Trade-Off in the First Stage Circuit Simulation

Since the first stage involves circuit simulation, all Spectre-related simulation options can be used for optimizing accuracy or performance. For very large digital and SRAM designs, use the following command-line options to obtain good performance in APS:

++aps=liberal - high performance APS solver with errpreset=liberal

+hsfe - hierarchical Spectre parser for improved parsing performance

+dcopt=11 - high speed DC operating point calculation

+postlayout=upa - postlayout optimized simulation technology without RC reduction

Analog and mixed-signal designs typically require higher accuracy. The following options may provide good performance for such designs:

++aps=moderate - high performance APS solver with errpreset=moderate

+dcopt - high speed DC operating point calculation

+postlayout=upa - postlayout optimized simulation technology without RC reduction

Alternatively, Spectre X can be used with the equivalent +preset option. If Spectre X is used, then there is no need for specifying +hsfe or +postlayout=upa. The +dcopt option may still be used for optimizing the DC performance.

EMIR analysis can be accurate only if the circuit behaves correctly in first stage. Therefore, always check the first stage voltage waveforms for correct circuit behavior, before analyzing EMIR accuracy.

EMIR accuracy can be significantly improved by changing the first stage from the default C-only method to RC modeling methods. When this is needed, it is recommended to apply RC reduction to the signal nets and leave the power nets to be C-only. You can use the rcr_netsize option to define signal versus power nets. A typical value is rcr_netsize=30000, which means that all (power) nets with more than 30000 resistors are processed with C-only while all (signal) nets with less or equal 30000 resistors are processed with RC reduction. The default value of rcr_netsize is 30000.

The accuracy can be further improved by additionally using the RSNAP or Reff method for the power nets. However, this needs to be performed carefully because power nets can be huge and applying RCR may cause the degrade performance to be similar to the direct method. The recommended approach is to use RCR on the smaller global power nets, and Reff on the larger virtual power nets. This is a very conservative approach and is recommended only for advanced node designs.

The following figure shows the three methods.

The first stage modeling method for the signal nets and power nets can be defined respectively using the options rcr_small_net_method and rcr_big_net_method. The advanced users may differentiate between the large and huge power nets by using the options rcr_huge_netsize (default is infinite). For huge nets, the Reff method is used.

Alternatively, there are options for assigning individual nets to the three categories of nets:

The name-based options support wildcard and have higher priority than the size-based rcr_pwr_netsize setting.

The accuracy of the RC reduction methods can be adjusted by setting the cut-off frequency.

Speeding Up Second Stage RC Simulation

The speed option defines the accuracy and performance of the second stage RC network solver. speed=8 provides the highest performance while speed=1 provides the highest accuracy. speed=1-5 use adaptive time steps while speed=6-8 use fixed time steps.

For most designs, the default speed=5 provides the best accuracy/performance tradeoff. Only rare cases require you to adjust the speed option.

If (for debugging) a fixed time step is required, you can use the tstep option, as follows:

solver tstep=1p

Also, the RC network solving performance can be improved by using multiple (forked) processes in addition to the default multi-threaded processing. Multi-processing can be enabled with the following option:

solver rcsolve_multi_proc=on

When enabled, the total number of cores at any time is defined by the +mt Spectre command-line option. Small nets (<rcsolve_1t_netsize) are solved first with eight forked single-thread processes. Medium nets are solved next with two forked four thread processes. Big nets (>rcsolve_4t_netsize) are solved with one main process using eight threads.

The overall EMIR performance can be improved by pipelining the first and second stage EMIR solving. By default, the Spectre EMIR flow runs the first and second stages sequentially. However, if both the stages are the dominant parts of the overall EMIR simulation, the second stage solving can be started while the first stage is still running. In the pipelined approach, the second stage solving reads the partial results from the first stage, and calculates the related EMIR data while the first stage continues in the transient simulation. You should define the large time-consuming (power) nets as pipelined nets, while smaller nets can be solved with the regular method. The pipelined processing can be enabled with the following option.

solver pipeline_nets = [net1 net2 …]

Pipelining is recommended when:

Spectre EMIR uses multiple processes when multi-processing and pipelining are enabled. Job distribution systems like lsf, rsh, and nc can be used to distribute EMIR subprocesses to a server farm.

The following flowchart describes the overall flow about how to optimize the EMIR accuracy and performance:

Power Gate Support

Power networks may contain power gates (four-terminal MOSFET device) which enable or disable the power supply in the circuit. These power gates split the power supply RC network into two parts; the RC network driving the power gate, and the RC network being driven by the power gate. These nets are strongly coupled together and they should be simulated together in EMIR analysis.

To invoke power gating handling, add the power gate setting in the EMIR control file (emir.config), as shown below.

net pwrgate=[vdd vdd_int] analysis=[vmax]

Both, the global power supply net vdd driving the power gates, and the virtual internal power supply net vdd_int driven by the power gates, need to be specified in the net statement in any order. Wildcards are supported for internal power supply nets, but not for power supply nets. If one power supply net drives multiple power gates, one statement with all power supply nets needs to be defined, as shown below.

net pwrgate=[vdd vdd_int1 vdd_int2] analysis=[vmax]

The IR drop report includes both the power supply net in the usual report file name, for example, input.rpt_ir and the internal power supply net is reported in a file, such as input.rpt_pwg or input.emirtap.rpt_pwg for direct and iterated methods respectively. The IR drop for the virtual power net includes the voltage drop on the global power net, the voltage over the power gate, and the voltage drop on the virtual power net. EM analysis is performed as usual, if specified.

In addition, an important parameter Ton is also reported in the .rpt_pwg file. It reports the time taken to power-up the terminal of the internal power supply net to 95% of the power supply level (VDD).

The parameter Ton can be infinity if the internal power supply level does not reach 95% of VDD.

Each pwrgate statement allows you to define only one global power node and the related virtual power nodes. If a design contains multiple global nodes with power gates and virtual nodes, then, for each of them, a separate pwrgate statement is required.

Serial power gate structures are supported. For such gate structures, not only the top-level power supply net and the internal supply net, but also the net between the serial power gates needs to be specified.

Complex power gate subcircuits are supported if the subcircuit terminals 0, 1, 2, 3 connect to the MOSFET terminals d, g, s, b, and if subcircuit terminals 0 and 2 connect to the global and virtual power nets. Other two-terminal devices are allowed in the subcircuit, but controlled elements and current sources inside the subcircuit are not supported. You may manually define the MOSFET subcircuit, as shown below.

solver mosfet_subckt=[subckt_name1 …]

Handling the Complexity of DSPF/SPEF files

SPF Checker

The DSPF files are created with parasitic extraction tools like QRC. The content and format of a DSPF file is heavily dependent on the extraction tool and the settings. Very often, simulation problems occur due to problems in the DSPF file.

SPF Checker is a utility shipped as a part of MMSIM release which analyses a DSPF file, reports problems which may cause simulation problems, and creates an EMIR configuration file with the recommended mapping statements for EMIR analysis. In addition, it creates a configuration file for the Spectre DSPF parasitic backannotation flow (SPF).

The DSPF checker is a binary shipped with MMSIM under the location .../lnx86/bin/spfchecker). The following command line arguments are supported:

spfchecker SPF_FILE_NAME[-detail <value>] [-message <value>] [-log LOG_FILE_NAME] –c EMIR_CONF_NAME] [-ckt=subckt_name] [-ctl=filename] [+lorder licenseList] -force –help

Argument Description

-dspf

If the input is in DSPF format (default).

-spef

If the input is in SPEF format.

-outdir <dir_name>

Set the output directory for the checker results. Default is .

-detail

Report detailed information (statistics) for NETs whose subnodes are more than the value specified using -d. Default is 0.

-message

Set the maximum number of messages for each type of error. Default is 50.

-log name

Set the checker log file name. If this argument is not specified, a file with the name SPF_FILE_NAME.chklog is created by default.

-c name

Create the EMIR configuration file. If this argument is not specified, a file with the name SPF_FILE_NAME.emir_conf is created by default.

-opt name

Create a back annotation option file. If this argument is not specified, a file with the name SPF_FILE_NAME.stitch_opt is created by default.

-ckt subckt

Define the subcircuit scope. Default is the first subcircuit definition found.

+lorder

Specify the license checkout order. The default checkout order is PRODUCT:MMSIM

-fix name

Fix the common connection errors and create a new DSPF file.

-dump_cc name

Dump the cross coupling capacitors into the named file

-dump_lvl level

Set the level to dump the original coupling capacitors. Default is 0.

-force

Overwrite the previous SPF checker results.

-ctl file

Exclude the parasitic resistors specified in the list. For example, ctl file: spf_ignore_layers = [M1 M2]

-help

Display help related to the SPF Checker utility.

The SPF checker creates the following files:

Before running any EMIR analyses, ensure that your DSPF file is clean. This can be achieved by running the spfchecker utility and by confirming that spfchecker does not report an error message in the *chklog file. Typical error messages in the chklog file are:

SPF-0003:    2           ERROR: NETs broken into pieces
SPF-0016:    6           ERROR:Instances with different connection from                                          the NET Section
SPF-0019:    430         ERROR: NETs with sub-nodes not connecting to any                                          parasitics
SPF-0028:     1           ERROR: Instance model terminal definition conflicts
SPF-0039:     3854807     ERROR: Layer is extracted as both via and metal layer

Simulating a DSPF file for which spfchecker reported errors may generate invalid EMIR simulation results. If spfchecker reports warnings and no errors, the DSPF file can be used in EMIR analysis.

Additionally, spfchecker prepares content for the EMIR config file into the *.emir_conf file. This content can either manually be copied into the EMIR config file, or included with an include statement:

include test.spf.emir_conf

Port Order Handling

When setting up the EMIR simulation, you need to ensure that the subcircuit port order in the DSPF file matches the port order of the instance call in the top-level netlist. Very often there may be cases where the port order between the top-level instance call and the DSPF subcircuit do not match. For such cases, the following three solutions are available:

  1. Manually change the port order of the instance call in the top-level netlist to match the port order in the DSPF subcircuit call.
  2. When setting up the simulation in ADE, copy the port order from the DSPF file to the CDF termOrder of the related cell and switch the cell view of this cell to the DSPF file using the Specify SPICE source File option. The netlister uses the CDF termOrder and creates the same order in the instance call.
  3. Reuse the instance call from the pre-layout schematic netlist, and read in the pre-layout schematic netlist to the DSPF file. In addition, use the .dspf_include command (instead of .include), which provides advanced functionality for port order mapping, as follows.
    .dpsf_include file.spf  port_order=[spf|sch] extra_port=[true|false] bus_delim="busdelim_schematic [busdelim_parasitic]" case_sensitive=[true|false] selected_inst="X1" shortPins=[yes|no]
    If you use .dspf_include, the following rules apply:
    1. By default, the subckt description is taken from the DSPF file independent on whether the same subckt description is available in the schematic netlist. If the same subckt is instantiated multiple times, and the subckt is defined in both, schematic netlist and DSPF, then the user can define which subckt definition to use in which instance.
      • selected_inst="X1" – Will use the DSPF subcircuit definition for instance X1 while all other instances will use the schematic subcircuit definition.
    2. Depending on the port_order option, the port order of the subcircuit definition is taken from the pre-layout schematic netlist or from the DSPF file subcircuit definition, as shown below.
      • port_order=sch – (Default). The port order is taken from schematic subcircuit definition. The same port number and names are required. If the schematic subcircuit definition is not available, a warning is issued in the log file, and DSPF port order is used.
      • port_order=spf – The port order is taken from the DSPF subcircuit definition.
    3. By default, the extra ports in the DSPF or schematic subcircuit definition cause the simulation to stop. However, the extra_port option enables a special handling of extra subcircuit ports.
      • extra_port=false – (Default) The port number in the schematic and the DSPF file needs to be the same. If not, the simulation will stop.
      • extra_port=true – The extra ports in the DSPF subcircuit call are changed to internal nodes. In addition, the extra ports in the schematic subcircuit definition are connected to nodes with the same name in the DSPF netlist, otherwise, they will be floating. A report is issued in the log file containing information on the subcircuit ports that do not match and how to handle them.
    4. The bus_delim option enables you to map the bus delimiter between the schematic and DSPF|SPEF files. This option defines the bus delimiter in the schematic netlist, and optionally the bus delimiter in the DSPF file. By default, the bus delimiter of the DSPF file is automatically taken from the DSPF file header (that is, *|BUSBIT [] or *|BUS_DELIMITER []). If the bus delimiter is not defined in the parasitic file header, you need to specify it in the dspf_include bus_delim statement. If both are specified, then the parasitic file bus delimiter is taken from the dspf_include bus_delim option.
      • bus_delim="<>"A <1> is mapped to A_1 in the DSPF file, if the bus delimiter in the DSPF file header is _.
      • bus_delim="@ []"A@1 is mapped to A[1] in the DSPF file.
    5. By default, the DSPF file is considered case insensitive (case_sensitive=false). You can set the case_sensitive option to true to make the DSPF file case sensitive. You can use the duplicate_subckt=warn|ignore option to use the last definition.
    6. By default, Spectre uses the subcircuit definition for all instances of a subcircuit from the DSPF file even if it is also defined in the schematic. If a subcircuit is instantiated multiple times, you can specify the instances for which the subcircuit definition is to be used from the DSPF file. For all other instances, the definition is used from the schematic.
      For example, if selected_inst="X1 X2", Spectre uses the subcircuit definition for instances X1 and X2 from the DSPF file. For other instances, it uses the definition from the schematic.
      Spectre does not support multiple definitions of a subcircuit in multiple DSPF files. If a subcircuit is defined in multiple DSPF files, Spectre returns an error.
    7. If the same subcircuit is defined multiple times in one or multiple DSPF files, the simulation stops.
    8. If the net contains multiple *| P split pins and if +emir is used on the command line, the extra pins are shorted to the primary pin because when +emir is used, shortPins is automatically set to yes. In the following example, pin VDD%1 and VDD%2 are shorted to primary pin VDD:
      *|NET VDD
      *|P VDD
      *|P VDD%1
      *|P VDD%2
      When +emir is not used on the command line, shortPins is set to no and the pins are not shorted.

The following table lists the differences between include and dspf_include:

Scenario include/.include dspf_include/.dspf_include

Same subcircuit definition in the schematic netlist and DSPF file

Default: Error out

Use duplicate_subckt=warn | ignore to use the last definition

Subcircuit content from the schematic or DSPF is taken depending on the order of the definition in the netlist

Subcircuit content from DSPF is taken independent of the order of the subcircuit definition in the netlist

Port order does not match between the instance call and the DSPF subcircuit definition

Port order needs to be manually adjusted

The port_order option can be used to automatically adjust the port order

Port number in DSPF does not match the port number in the schematic netlist instance call

Extra ports need to be removed manually

The extra_port option can be used to automatically handle extra ports.

Multiple DSPF files are included with the same subcircuit definition

Default: Error out

Use the duplicate_subckt= warn | ignore to use the last subcircuit definition

Default: Error out

Duplicated DSPF subcircuit definition is not supported.

*|NET contains multiple pins

*|NET VDD
*|P VDD
*|P VDD%1
*|P VDD%2

Pins need to be shorted manually

Pins are automatically shorted.

Pin VDD%1 and VDD%2 are automatically shorted to pin VDD.

Pins are not shorted when +emir is not used.

Additionally, dspf_include reads all the DSPF lines starting with * (*|NET, *|I, *|P, *|S), while include considers all related lines as comments. This enables dspf_include to fix the connectivity of broken nets, which cannot be done with include.

SPEF Netlist Support

The Spectre EMIR solution also supports SPEF postlayout netlists. Unlike the DSPF files, the SPEF netlist always contains the combination of a schematic netlist with the active devices and the SPEF netlist with the parasitic element information. Mismatches on the subcircuit instance names related to leading X's are automatically detected and resolved. Use the spef_include statement to include an SPEF file in the schematic netlist, as shown below.

spef_include "example.spef" inst="I0"        (Spectre Syntax)
.spef_include "example.spef" inst="I0"       (SPICE Syntax)

The SPEF flow uses the same EMIR control file as in the DSPF flow. You also need to specify the control file on the Spectre command line with the +emir=emir.config statement.

Advanced Analyses

Voltage Generator (LDO) IR Drop Analysis

IR drop analysis (analysis=[vmax vavg]) is typically applied to power nets, they are driven by voltage sources which provides a constant reference voltage over the EMIR window. Nevertheless, designs may have internal generators or regulators. For the generator driven nets an IR drop analysis may be important. These nets behave like signal nets since their voltage value is changing over time.

The Spectre EMIR LDO feature enables the user to perform IR drop analysis on LDO nets like the VDD_LDO in the following graphic.

The LDO feature is enabled with the ldo_net solver option in the EMIR config file. It works in dynamic, and static EMIR, as well as in SPGS.

Dynamic LDO IR Drop Analysis

In dynamic EMIR the net VDD_LDO is handled like any signal net. Nevertheless, there is an IR drop report created. Based on the users setting the IR drop reference voltage can be the min, the max, or the average voltage of the ldo_driver nodes over the EMIR time window. Alternatively, the user can define a fixed reference value, i.e. ldo_vref=1.1.

net name=[I1.VDD_LDO] analysis=[vmax iavg]
solver ldo_net=[I1.VDD_LDO] ldo_driver=[I1.X1/M1 I1.X1/M2] ldo_vref=max|avg|min|value

Instead if defining the individual ldo_driver MOSFET devices, the user may define the LDO MOSFET instance name, i.e. ldo_inst=[I1.X1]. In that case all MOSFET's with I1.X1 in instance name are considered LDO driver MOSFET devices. While the ldo_driver option supports wildcarding on the name inside DSPF, the ldo_inst doesn't support wildcarding.

Static LDO IR Drop Analysis

In static EMIR the ldo_driver nodes are shorted together and connected to a vsource with the voltage value defined in ldo_vref.

net name=[I1.VDD_LDO] analysis=[vmax iavg]
static ldo_net=[I1.VDD_LDO] ldo_driver=[I1.X1/M1 I1.X1/M2] ldo_vref=1.0

The static EMIR current distribution for this net is same as for any other power net. The static current for the VDD_LDO net needs to be defined in the "static ifile".

I1 VDD_LDO 0.02

It is distributed to all tap devices but not the ldo_driver devices (I1.X1/M1 and I1.X1/M2). If VDD_LDO has a *|P, then no current will be assigned to this pin and no loading from this pin will be considered in the static EMIR analysis.

SPGS LDO Handling

In SPGS the ldo_driver nodes are shorted together and used as *|P. If there are other *|P on the VDD_LDO net, then they are changed to subnodes (*|S).

spgs ldo_net=[I1.VDD_LDO] ldo_driver=[X1/M1 X1/M2] ldo_voltage=1.0

The SPGS reff value for all tap devices is calculated in reference to shorted ldo_driver nodes. The voltage value used for the reff calculation is defined by the ldo_voltage option. Instead of the ldo_voltage the option ldo_vref may be used.

Signal Net IR Drop Analysis

With the introduction of the LDO IR drop analysis, the signal net IR drop analysis has become less important. The main question you need to ask is, what is the value of calculating IR drop for a signal net, when there is no clearly defined voltage reference since all node voltages are changing at all times. Furthermore, since the number of signal nets is typically large, the feature will cause the creation of lots of IR drop data which may not be needed or may be challenging to read.

The signal net IR drop analysis is enabled with the vmax or vavg analysis statement.

Different methods for defining the reference voltage are supported:

The following are supported for defining the reference voltage:

When using reftype=max for a net with three subnodes: net1:1 (1V), net1:2 (2V), and net1:3 (3V), the detected reference voltage will be 3V, and the IR drop calculated will be 2V for net1:1, 1V for net1:2, and 0V for net1:3. When using reftype=avg the reference voltage will be 2V, and the IR drop calculated will be 1V for net1:1, 0V for net1:2, and -1V for net1:3.

The signal net IR drop analysis is automatically changed to a regular IR drop analysis (vmax), if vref=value is specified, or if the net (during the EMIR time window) is driven by a constant voltage source.

Design Resistor EM Current Analysis

By default, the EM current analysis is only performed on parasitic resistors defined in the RC net section of the DSPF file. If required, Spectre EMIR solution allows the EM analysis to be performed for design resistors in the DSPF instance section, as shown below. This analysis can be applied to primitive resistor elements, or resistors defined with subcircuit definitions.

net design_res_models=[resistor] analysis=[iavg] (primitive resistor)
net design_res_models=[name=rhim] analysis=[iavg] (resistor subckt rhim)

For design resistors, the parameters $l, $w, and $lvl are expected to be defined for primitive resistor calls, and l and w for subcircuit resistor calls in the DSPF instance section. When the parameter names are inconsistent in the DSPF file, name mapping rules can be specified in the EMIR configuration file, as shown below.

net design_res_models=[name=rhim_m l=lr w=wr] analysis=[iavg]

Layer information and units for l and w can be defined in the EMIR configuration file, as shown below.

net design_res_models=[name=rhim_m layer=mt1 unit=1] analysis=[iavg]

The product of design resistor W/L * unit defines W/L in meter. The default value of unit is 1.

The EM results related to design resistor are reported in the design.rpt_em file, as shown below.

If the layer name is not specified, but a resistor model name is defined, then the resistor model name is reported as the layer name.

By default, Spectre EMIR evaluates the current on the first terminal of the design resistor. However, you can define the index of the design resistor terminal you want the current to be evaluated at, as shown below.

net design_res_models=[name=rhim_m term=3] analysis=[iavg]

Differential (Rail-to-Rail) IR Drop Analysis

The differential IR drop feature allows you to identify the worst-case IR drop between the specified power supply and the ground node. At each time point, it calculates the worst IR drop over all the power supply sub nodes, and the worst IR drop over all the ground sub nodes. At each time point, it also calculates and reports the worst case rail-to-rail voltage for the given EMIR time window.

The differential IR drop analysis is enabled with the analysis=r2rvmin option. Multiple power supply nodes can be specified. If the ground node is not specified in the r2r_refnet statement, Spectre automatically detects the global ground node.

net name=[VDD] r2r_refnet=VSS analysis=[r2rvmin] 

The following is an example of a differential IR drop report:

The r2rvmin feature allows you to apply the analysis only to selected layers, selected tap devices, tap devices of a user-defined model, and selected bounding boxes. Combinations are supported and combined with the AND behavior. Excluding tap nodes based on their layer, model, or instance information is also supported. To differentiate between multiple r2rvmin reports, you can apply the rule names to each r2rvmin statement (r2rvmin_rule_name). Refer to the r2rvmin option in the table under the EMIR Control File section for more information. The differential (rail-to-rail) IR drop analysis is only supported in the direct method.

Static EMIR Analysis

Static EMIR analysis enables you to evaluate IR drop and EM currents based on the specified current consumptions for subcircuit instances without running a transient or DC simulation. The specified currents are distributed to the tap devices based on the width and length ratios of devices in the design. The IR drop and EM current analysis is performed based on the current at each tap device.

To enable static EMIR analysis, you need to use the static ifile option in the EMIR configuration file, as shown below.

net name=[I1.VDD I1.VSS] analysis=[vavg iavg]
static ifile="static_currents.txt"

For static EMIR analysis, vmax and vavg for IR drop and imax, irms, and iavg values for EM currents remain the same, and therefore, just one can be selected in the statement.

The subcircuit instance currents are defined (in A) in the static_currents.txt file with the subcircuit instance name, subcircuit port name, and the current flowing in the port. This current is distributed to all MOSFET tap devices. No current distribution is done for non-MOSFET tap devices. In that case, these devices are excluded from the block-level based current distribution. The following is an example of the file:

I1 VDD 0.001
I1.I2 VDD 0.005
I1.I2/I3 VDD 0.00001
I1.I2.I3/I4 VDD 0.000005
I1 VSS -0.005
I1.MPM1@19 VDD 0 //exclude tap device from current assignment
I1.MPM3@15 VDD 0.0001 //define tap device current,exclude from current assignment
x0.QQ0 VSS 0.1 b   //define current for non-MOSFET device and terminal

The accuracy of static EMIR analysis strongly depends on the detailed current information provided in static_ifile. Therefore, it is highly recommended to provide the current consumption for every subcircuit instance.

The results of static EMIR analysis are written to the same IR drop and EM current text reports, and into the same EM binary database as dynamic EMIR analysis.

Only one of static or dynamic EMIR analysis can be performed from the same simulation session, and not both. When you run an static EMIR analysis, all other Spectre analyses, such as dc and tran are ignored.

Static EMIR analysis can also be applied to designs with power gates. For this, you need to specify the pwrgate option, as follows:

net name=[I1.VDD] analysis=[vavg iavg]
static ifile="static_currents.txt" 
net pwrgate=[I1.VDD I1.VDD_INT] analysis=[vavg iavg]

You need to specify the power gate current in the static_currents.txt file, as shown below.

I1 VDD 0.001
I1 VDD_INT 0.0005

The static EMIR current file for the top-level EMIR subcircuit can be generated while running a dynamic EMIR analysis by using the output=power option in the time window statement.

Static Power Grid Solver

Static Power Grid Solver (SPGS) can be used to calculate pin-to-tap resistances based on the description of a DSPF file and the options set in a EMIR configuration file. The resistances calculated by SPGS are electrically-equivalent resistances, and not the summation of resistors. The calculation assumes that all pins are connected together to form a global pin. After calculation, the resistance between the global pin and all taps is generated and listed based on the significance of their values.

The definition of pin, subnodes, and tap nodes is given in the DSPF file, as shown below:

The static EMIR analysis is enabled with the spgs net=... statement in the EMIR configuration file. The net statement defines the power nets to be analyzed.

spgs net=[i1.vcc i1.vss]
spgs pwrgate = [i1.vcc i1.outp]
spgs maxrpt=200
spgs filter_res_threshold=50

If the power net contains a power gate, then the pwrgate option needs to be specified. You can optionally use the rshort option to short the resistors in the power net based on their resistor value. In addition, the report can be limited to the top 200 paths, and any path with less than 50 Ohms can be filtered out.

The SPGS flow requires the DSPF file to be included in the Spectre input file with the dspf_include statement, as shown below.

dspf_include "pll.spf"

The power nets need to be connected to the voltage sources, and the device models need to be defined for the devices in the instance section in the DSPF file. The SPGS feature is run as in the regular EMIR flow, as follows.

spectre +aps input.scs +emir=spgs.conf

The SPGS report provides a list of pin-to-tap node resistors ordered from highest to lowest. The W/L column either show the MOSFET W/L ratio or the NFIN/L ratio.

Count

R

W/L

(x:y)

(x:y) in GDSII

name

#1

1920.2579

5.00

(1440:366)

(1440:366)

xI107/mxP1:BULK

#2

1577.1482

10.00

(1440:476)

(1440:476)

xsvdc/mxP3@3

#3

1353.6123

4.00

(1440:509)

(1440:509)

xsvdc/mxP2:SRC

It is recommended to run the SPGS feature separately and not together with any other EMIR analysis.

SPGS also supports the conversion between pin, tap node, and sub node. The following statements convert tap node MPM3@44:s of net I1.vdd to a pin, and sub node VDD:5 to a tap node.

spgs tap2pin net=[i1.vdd] include=[MPM3@44:s]
spgs sub2tap net=[i1.vdd] include=[VDD:5]

All conversion options are described in the EMIR configuration file option table. The conversion options are processed incrementally. This enables you to first move all tap nodes to subnodes, and to move nodes of interest back to tap nodes.

spgs tap2sub net=[i1.VSS] include=[VSS:*]
spgs sub2tap net=[i1.VSS] include=[VSS:82305002 VSS:63148225]

SPGS can be applied to signal nets. If the signal net contains a pin definition (*|P), then the effective resistance is calculated starting from the pin. If the signal net does not contain any pin definition, then the resistance calculation is started from the first tap device connection (*|I) for this net in the DSPF file. The conversion options also apply to signal nets.

By default, the SPGS flow requires the full EMIR simulation setup including the DSPF file, device models, stimuli, and power supply definitions. A higher performance simplified SPGS flow is available which just requires the DSPF file in addition to either an instance call of the DSPF subcircuit, or a +top option using the DSPF subcircuit name. The simplified flow does not require any device models, stimuli, or power supply definitions. It can be enabled with the following option:

spgs test_bench_less=1
The simplified SPGS flow has the limitation that it cannot be applied to designs with power gates. For such requirements, you need to use the full SPGS flow.

By default, the SPGS flow solves nets in parallel (emirutil rcsolve_multi_proc=on). Individual nets are solved, either with single thread (small nets), or with multi-thread (large nets).

Advanced EMIR Features

Blackbox Handling

The Spectre EMIR flow supports the blackbox approach, which allows the exclusion of blocks from parasitic extraction and EMIR analysis. These blocks are represented in the simulation with a pre-layout netlist, and have only an instance call and an empty subcircuit definition in the DSPF netlist.

Blackbox handling is enabled by specifying the subcircuit name after the blackbox keyword in the dspf_include statement, as shown below.

.dpsf_include "top.spf"  … blackbox="black_box"

For the blackbox subcircuit instances, Spectre takes the port order from the DSPF subcircuit definition, and the content from the schematic (blackbox) subcircuit definition. This behavior is fixed. The port_order option of the dspf_include statement has no impact on the blackbox port order.

You can specify multiple subcircuits. The extra_port option also applies to the blackbox subcircuit ports.

Creating Power Macro Models

Spectre supports the creation of power macro models that can be used in the Spectre EMIR blackbox simulation flow. These macro models describe the subcircuit port current consumption and capacitive load. They are created in Spectre language and use the subcircuit definition. The macro model creation can be enabled either in a non-EMIR Spectre simulation, or in an Spectre EMIR simulation. Both dc and tran analyses are supported.

To create macro models, use the pwr_macro statement, as follows:

pwr_macro subckt=top port=[vdd X<0>] type=[avg rms] outdir=macrodir mode=1    
pwr_macro inst=i1 port=[*] type=[max] outname=macro output=[subckt table] window=[10n 20n 80n 100n]

Where:

subckt - specifies that the macro model is created for all instances of this subcircuit.

inst - specifies that the macro model is created for the specified subcircuit instance.

port - specifies the subcircuit ports that are modeled. Wildcards are supported.

type - specifies the type of current measurement for defining the created port current DC source value. Supported values are max, avg, avgabs, and rms. Multiple entries are supported.

output - specifies the output to be created. If you specify output=subckt, then the subcircuit macro model is created. This is the default. If you specify output=table, then a port current/capacitance table is created.

outdir - specifies the output directory name (relative to simulation directory).

outname - specifies the macro model file name. The file has an extension .inst_name.subckt_name.type

mode - mode=1 creates the macro model with what/if for separate pull and push currents. This is the default. mode=0 creates the macro model with parallel resistors.

window - defines the time window for which the macro model is created. Multiple time windows are supported. One model is created for each time window. The first window has no additional extension. The second window uses 1 as additional extension, the third window uses 2, and so on. For example, *.1.avg, *.2.avg, and so on.

To create a power macro model in a regular (non-EMIR) Spectre simulation, the pwr_macro statements need to be defined in a configuration file which is read with the Spectre +pwr_macro command-line option. This flow also works in the Spectre EMIR flow.

spectre +aps +pwr_macro=pwr_macro.conf input.ckt

In addition, you can create the macro model in a Spectre EMIR simulation as part of EMIR configuration. In this case, the pwr_macro statements need to be defined in the EMIR configuration file which is included with the +emir command-line option.

spectre +aps +emir=emir.conf input.ckt 

The following figure illustrates the macro modeling generation flow. Note that the figure shows only a simplified version of the model.

The created macro table model is written to a file for which the extension consists of the instance name, the subcircuit name, and the type of analysis of the subcircuit block. If multiple analyses are specified, multiple macro model files are created. For example, for a macro model for instance I1 of subcircuit adc_sample_hold, based on average current, the extension .I1.adc_sample_hold.avg will be used.

Macro models are generated in a regular (non-EMIR) simulation, direct EMIR analysis, and also in the first and second stages (extra emirtap in extension) of the iterated EMIR analysis.

The macro model created is slightly more complex than what is shown in the simplified figure above. Since the model is later used together with other macro models in a full chip simulation, there may be a problem that some of these models feed currents into the same net, but the sum of the currents does not satisfy Kirchhoff's law. To resolve such problems, the mode=1 macro model contains if/else sections that allow you to enable either driving (push) or driven (pull) currents. The following example shows a mode=1 macro model for a subcircuit for which vdd and gnd have been extracted:

// TITLE: Port Current Macro Model with Push and Pull Mode for subckt adc_sample_hold
simulator lang=spectre
// BB_MACRO_TOP PARAMETER DEFINITION
// 0 ... consider push and pull currents, may cause potential KCL problems
// 1 ... consider pull currents only (positive port current value)
// 2 ... consider push currents only (negative port current value)
// R_BB_MACRO_TOP defines internal serial resistor
// parameters bb_macro_top=0 r_bb_macro_top=10
subckt adc_sample_hold outm outp SIDDQ VDD VSS \
         bias100 hold hold_test inm inm_test inp \
         inp_test sample sample_test
parameters bb_macro=bb_macro_top r_bb_macro=r_bb_macro_top
wrongValue paramtest errorif=(bb_macro != 0 && bb_macro != 1 && bb_macro != 2) message="Unvalid bb_macro parameter value, valid values: 0, 1, 2"
// SIMULATION OF PULL AND PUSH PORT CURRENTS
if (bb_macro==0) {
        Rport0 (VDD VDD_int) resistor r=r_bb_macro
        Iport0 (VDD_int 0) isource  dc=0.00153621
        Cport0 (VDD 0) capacitor c=8.39577e-12
        Rport1 (VSS VSS_int) resistor r=r_bb_macro
        Iport1 (VSS_int 0) isource  dc=-0.00160214
        Cport1 (VSS 0) capacitor c=1.14779e-12
// SIMULATION OF PULL PORT CURRENTS ONLY
} elseif (bb_macro==1) {
        Rport0 (VDD VDD_int) resistor r=r_bb_macro
        Iport0 (VDD_int 0) isource  dc=0.00153621
        Cport0 (VDD 0) capacitor c=8.39577e-12
        Rport1 (VSS VSS_int) resistor r=r_bb_macro
        Vport1 (VSS_int 0) vsource  dc=0
// SIMULATION OF PUSH PORT CURRENTS ONLY
} elseif (bb_macro==2) {
        Rport0 (VDD VDD_int) resistor r=r_bb_macro
        Vport0 (VDD_int 0) vsource  dc=0
        Rport1 (VSS VSS_int) resistor r=r_bb_macro
        Iport1 (VSS_int 0) isource  dc=-0.00160214
        Cport1 (VSS 0) capacitor c=1.14779e-12
}
ends adc_sample_hold

You can specify the option bb_macro_top in your top-level netlist, and also specify which macro model mode to use. If bb_macro_top is set to 0, all macro model port currents are activated. If bb_macro_top is set to 1, only pull currents are modeled. If bb_macro_top is set to 2, only push currents are considered. In addition, the value of serial resistor r_bb_macro_top for the current and voltage sources in the macro model needs to be defined at the top level.

The alternative mode=0 macro model overcomes the potential KCL problem by adding a parallel resistor. The value of the parallel resistor and the voltage are extracted from the simulation during which the model is generated. The following example shows the mode=0 macro model for the same subcircuit.

simulator lang=spectre
pwr_macro_opt options preserve_subckt=[adc_sample_hold]
subckt adc_sample_hold outm outp SIDDQ VDD VSS \
         bias100 hold hold_test inm inm_test inp \
         inp_test sample sample_test
        parameters vavg_VDD=2.5 rmacro_VDD=32.8738
        Iport0 (VDD 0) isource  dc=0.0015325 - vavg_VDD/rmacro_VDD
        Cport0 (VDD 0) capacitor c=8.39538e-12
        Rport0 (VDD 0) resistor  r=rmacro_VDD
        parameters vavg_VSS=0 rmacro_VSS=216.051
        Iport1 (VSS 0) isource  dc=-0.00158744 - vavg_VSS/rmacro_VSS
        Cport1 (VSS 0) capacitor c=1.14816e-12
        Rport1 (VSS 0) resistor  r=rmacro_VSS
ends adc_sample_hold

In addition to the macro models, you can also generate a table with port current and capacitance values. The values are written to a file with the extension rpt_pwr_macro.

------------INST: "I1" SUBCKT "adc_sample_hold"-----------

Port

Imax(A)

Iavg(A)

Iavgabs(A)

Irms(A)

Cmax(F)

Cavg(F)

Cavgabs(F)

Crms(F)

VDD

0.00315119

0.00285237

0.00285237

0.00285231

8.55353e-12

8.54216e-12

8.542162e-12

8.54216e-12

VSS

-0.00364904

-0.00299747

0.00299747

0.00301076

1.38952e-12

1.38169e-12

1.38169e-12

1.38169e-12

...

If the above table exists from a previous simulation, and the table contains all ports of the extracted subcircuit, you can use the following script to create a power macro model using the information from the table:

tbl2macro test.rpt_pwr_macro -inst I2.I1 -type avg -outdir test_pwr_macro
tbl2macro test.rpt_pwr_macro -subckt bus_nand -type avg rms

The script is available in the SPECTRE installation (.../tools.lnx86/bin/tbl2macro), and can be used as follows:

tbl2macro <rpt_pwr_macro> [options]

-h - Print the help page

-inst <inst_name> - Name of the instance (OR)

-subckt <subckt_name> - Name of the subcircuit

-out <out_dir> - Name of the output directory name (default is .)

-type <list> -- List of max, avg, avgabs, and rms (default is all)

-fmt <spice|spectre> -- Output format (default is spectre)

-mode <0|1> - 0 means parallel resistor model, and 1 means what/if push-and-pull model (default is 1)

What-If EMIR Analysis

The What-If analysis enables you to analyze the impact of the potential layout changes without the need for implementing these changes in the layout, and to re-extract the DSPF file. These changes are also called ECO changes.

The What-If flow is supported in the regular EMIR flow using the direct or iterated method. There is also an incremental iterated flow that uses the itereco method. This flow reuses the circuit simulation results from a previous iterated mode EMIR analysis and reruns just the second stage EMIR analysis.

The What-If changes are defined in an ECO file which is included in the EMIR configuration file. All ECO changes are relative to the original DSPF content. In one What-If simulation, all changes defined in the ECO file are applied together at once, and then analyzed together in the second stage of the EMIR analysis.

Multiple incremental ECO runs are supported. For each run, the changes defined in the ECO file are applied to the original DSPF content. Changes from the previous ECO runs are not considered. In the incremental What-If analysis, only the nets with the ECO changes are analyzed.

All ECO changes for a specific What-If run are defined in one ECO file which is included in the EMIR configuration file. The following ECO commands are supported.

Here:

net_name is the name of the net as defined in DSPF *|net statement. Wildcard is not supported.

node1 node2 ... are the names of pin, sub, or tap nodes. Wildcard is not supported.

cvalue1 cvalue2.. are the values of the capacitance to be added. You can use a negative value for reducing net capacitance. The value is a floating number.

rvalue is the value of the resistor to be added. The value is a floating number

resistor1 resistor2... are the instance names of the resistors to be deleted or scaled.

scalefactor is the scaling factor. The value is a floating number

dspf_layer_name specifies that the nodes of all resistors on the specified layer are changed to pins.

The following is an example of an emir.co file:

add_pin    net=[VDD] name=[VDD#9]
del_res net=[bias1] name=[Rj3652]
scale_res net=[VDD] name=[Rg1 Rg2 Rg3 Rg4] scale=0.5
delete_res net=[VDD] name=[Rg5]
add_res net=[VDD] node=[VDD#80 VDD#81] r=10 $l=10.0 $w=0.25 $lvl=mt1
add_cap   net=[VDD] cap=[VDD#80 10e-15 VDD#81 5e-15]

When performing a regular iterated method EMIR analysis with What-If, the only change required in the EMIR configuration file is the reference to the ECO file, as shown below.

solver method=iterated
eco file="emir.eco"

The following statements need to be defined in the EMIR configuration file to enable an incremental What-If EMIR analysis.

solver method=itereco inputwf="./input.emirtap.pwl"
eco file="emir.eco"

In an incremental EMIR analysis, Spectre loads the following database files from the previous EMIR simulation: <netlist>.emirtap.pdb, <netlist>.emirtap.cc, <netlist>.emirtap.pdb_2, and <netlist>.emirtap.pwl. You need to ensure that these files are available in the same directory as the <netlist>.emirtap.pwl file that you define in the solver statement.

All ECO changes are summarized in the ECO SUMMARY section of the Spectre log file. The What-If EMIR flow generates exactly the same text and binary database output as any other Spectre EMIR simulation. The only difference is that the result file names of the incremental What-If analyses use the filename of the ECO file as prefix. For example, if the ECO file name is emir.eco, then the EM current text report file will be named emir.eco.input.rpt_em.

The Spectre What-If EMIR flow also supports a pin location file for changing subnodes to pins. This special flow is important when all subnodes in a user-specified layout area should be changed to pins. The following statements can be used in the ECO file for defining the pin location files:

add_pin net=VDD loc_file=pinloc loc_threshold=0.1
add_pin net=VSS loc_file=pinloc_vss loc_threshold=0.1

The net statement defines the DSPF net to which the pin location file is applied to, while the loc_threshold
(unit um, default value 0.1) defines the area in which all subnodes are changed to pin. The area is defined with: x-
<x <x+
, y-
<y <y+
.

The pin location files define the x and y coordinates, the layer name, and whether the type is POWER or GROUND. Following is an example of the pin location file for power net VDD:

#<pad_name> <X_loc> <Y_loc> <metal name-DEF> <POWER or GROUND>
VDD:2 30.0 103.0 mt3 POWER
VDD:3 20.2150 94.2250 mt1 POWER

Following is an example of the pin location file for the ground net VSS:

#<pad_name> <X_loc> <Y_loc> <metal name-DEF> <POWER or GROUND>
VSS:2 15.6000 27.9600 mt1 GROUND

Alternatively, all subnodes inside a bounding box may be changed to pins. This can be done by using the following option:

add_pin net=VDD bbox=[lx ly ux uy] layer=[dspf_layer_name]

For example:

add_pin net=I1.VDD bbox=[20 80 22 86] layer=[mt1]

An incremental pin addition is also supported. From a reference node [x,y] incrementally add/subtract
x/
y, check for any sub node on the grid within the proximity, and change the identified sub node to a pin. If no reference node is defined, all pins are used as reference node.

add_pin net=VDD layer=metal5 ref_node=[x y] h_x=value h_y=value proxim_abstol=value 

For example:

add_pin net=inm layer=mt3 ref_node=[105.0 105.0] h_x=8.0 h_y=-6.0 proxim_abstol=1

Event Triggered EMIR Analysis

Spectre EMIR enables you to control the EMIR time windows in the second stage of iterated method by first stage events. A measure statement may be used to define the first stage events, as shown below.

.meas tran blkout3 when v(TEST_INP)='vhi/2.0' td=30n fall=1
.meas tran blkout4 param='blkout3+20n'

The created events can be used to define the time windows in the EMIR config file, as shown below.

time window=[@blkout3 @blkout4] net=[I101.VDD] output=none

If an event is used but not available at the time of evaluation, Spectre EMIR generates an error and the simulation is stopped.

Other Features

Spectre EMIR Analysis Using Voltus-XFi

Voltus-XFi Custom Power Integrity Solution is used for transistor-level power and signal integrity analysis, which includes multi-mode simulation for EM and IR analysis. This solution combines Cadence® Quantus™ RC extraction, Spectre EMIR simulation, and Voltus-XFi visualization in the Cadence Virtuoso® platform. This combination of products simplifies the use model of the flow by using a common setup for all the tools. You do not have to run the flow in separate steps.

The Spectre EMIR Voltus-XFi solution provides two major enhancements over Spectre EMIR Voltus-Fi:

Simplified Use Model for the Iteration Method

The Spectre EMIR setup with Voltus-Fi requires you to set up options in the first and second stages of the iteration method to optimize the accuracy and performance of simulation.

However, in the Spectre EMIR Voltus-XFi solution, the +emirpreset command-line option simplifies the EMIR use model. This option predefines all first- and second-stage EMIR settings. This technology works only with the Spectre X solver.

Similar to the Spectre X technology, the value of the +emirpreset option can be cx, ax, mx, lx, and vx, where cx is the most conservative setting and vx is the setting for highest performance.

spectre +preset=ax +emirpreset=mx input.scs +emir=iterated.conf

The +emirpreset option internally sets the solver rcr and solver rcsolve_multi_proc settings. Therefore, when +emirpreset is set to enable the solution, Spectre ignores the following settings specified in the EMIR config file:

solver rcr=… solver rcsolve_multi_proc=…

Advanced users can set individual EMIR solver settings in the EMIR config file and give preference to them over +emirpreset by using the -emirpreset_override option on the Spectre command line, as shown below.
spectre +preset=ax +emirpreset=mx input.scs +emir=iterated.conf 
-emirpreset_override

When running the direct EMIR method, as shown below, the use model, performance, and accuracy of Spectre EMIR Voltus-XFi solution is same as that of Spectre EMIR Voltus-Fi.

spectre +preset=ax input.scs +emir=direct.conf

Enhanced Distribution of EMIR Analysis

In the second stage of the iterated EMIR simulation, typically a few large power nets and a large set of smaller signal nets are solved individually.

The Spectre EMIR Voltus-XFi solution provides an enhanced mechanism to distribute RC net solving to multiple computers. This feature is based on the XPDB database solution. It optimizes the performance in the second stage.

To enable distribution of net solving to multiple computers:

  1. Create the XPDB database by using the -dump_xpdb option of the spfchecker command.
    The following example creates the adc_sample_hold.dspf.xpdb file:
    spfchecker -dump_xpdb adc_sample_hold.dspf
  2. Specify that you need to use the XPDB database created in step 1.
    You can do this in two ways:
    • Run Spectre by using the +xpdb command-line option to enable the use of the .xpdb file.
      spectre +aps +xpdb adc_sample_hold.scs +emir=adc_sample_hold.conf
    • Use the dspf_include command to include the XPDB database.
      dspf_include "adc_sample_hold.spf.xpdb"
      If you use the dspf_include command, you do not need to specify the +xpdb in the command line.
  3. (Optional) Use the +mp and +mt command-line options to specify the number of processes and the number of cores per job. The individual RC net solving processes are managed by a scheduler that is launched by the master process.
    spectre +mp=N +mt=M +preset=ax +emirpreset=mx input.scs +emir=iterated.conf +xpdb
    The following example distributes jobs using rsh to run 4 processes with 16 threads each on hostA and hostB:
    spectre +mp=rsh +mt=16 +hosts "hostA:1 hostB:2" +preset=ax …
    The main process on hostA is not defined because it is automatically assigned.
    You can distribute jobs on an LSF farm by using the bsub command, as shown below.
    "bsub -n 16 <other_bsub_params> "spectre +mp=4 +mt=16 +preset=ax …"

Parasitic Backannotation of DSPF/SPEF/DPF Files

This section covers the following topics:

Postlayout Simulation Methodologies

In general, there are three postlayout simulation methodologies:

Parasitic Backannotation - Concept

The simulation database is built upon the pre-layout netlist, as shown in the left of the figure. The parasitics from the parasitic files (DSPF/SPEF/DPF) are backannotated into the database, as shown in the right. The hierarchy and the net names from the pre-layout netlist are retained, and the device models are regenerated according to device parasitic information (DPF/Instance Section from the SPF). The nodes are backannotated with R and C from the SPEF/SPF Net section.

Control Options for Parasitic Backannotation Flow

The control options for the parasitic backannotation flow can be grouped under four categories:

Unlike traditional simulation options, wherein if the same option is specified multiple times, the last one takes precedence, most backannotation options, when specified multiple times, accumulate the assigned values.

The following table provides a summary of the options:

Category Option Name Syntax Description

Parasitic File Loading Options

dpf

dpf="scope filename"

Specifies the name and scope of the DPF file that needs to be backannotated.

spf

spf="scope filename"

Specifies the name and scope of the SPF file that needs to be backannotated.

spef

spef="scope filename"

Specifies the name and scope of the SPEF file that needs to be backannotated.

Parsing Options

spfswapterm

spfswapterm="terminal1 terminal2 subcktname"

Specifies the terminals of the subcircuit macro-model that can be swapped.

spfxtorprefix

spfxtorprefix="substring [replacement_substring]"

Specifies the prefix for the device and net names in the DSPF/SPEF/DPF file.

spfaliasterm

spfaliasterm="model|subckt prelayout_term1=spf_alias1 prelayout_term2=spf_alias2 … prelayout_termN=spf_aliasN"

Specifies an alias for the terminal names of devices. This option is useful when the terminal names of devices in the DSPF/SPEF/DPF files are different from those in the simulation model library.

speftriplet

speftriplet=1|2|3

Specifies which value from the triplet should be used for backannotation in the SPEF file. This option is effective only when the values in the SPEF file are represented as triplets. The default value is 2.

spfrcr

spfrcr=0|1

Specifies whether RC reduction in parasitic backannotation should be enabled. The default value is 1.

spfrcrfmax

spfrcrfmax=value

Defines the maximum frequency for RC reduction performed during parasitic backannotation. The unit is in GHz. The default value is 25.

spfinstancesection

spfinstancesection=0|1

Controls the device parameter backannotation from the instance section of the DSPF file. The default value is 1.

spfbusdelim

spfbusdelim="schematic_busdelim [DSPF_busdelim]"

Allows to map the bus delimiter between schematic and DSPF, SPEF, and cap file. The option defines the bus delimiter in the schematic netlist, and optionally the bus delimiter in the DSPF file. The default value is the bus delimiter taken from the DSPF file.

spfshortpin

spfshortpin=yes|no

Enables or disables the shorting of pins (*|P) for the same net (*|NET). The default value is yes.

spfscale

spfscale=value

Sets the scaling factor of all instances in the parasitic file. The default value is 1.

spfcaponly

spfcaponly=0|1

Specifies whether only capacitors should be backannotated (C-only stitching). The default value is 0.

spfreppin

spfreppin=0|1|2|3

Specifies whether to choose the first instance pin, last instance pin, first instance pin after sorting, or the last instance pin after sorting as the representative node. The default value is 0.

spfrepgate

spfrepgate=1

Picks the first gate pin as representative node. If no gate pin exists, pin selection follows spfreppin. Default is 0 and pin selection follows spfreppin.

It can be used together with spfreppin, and has higher priority.

sim_opt_probe_spf_node

sim_opt_probe_spf_node=0|1|2|3|4

Controls the probing of backannotated nodes. The default value is 0.

sim_opt_spf_probe_mode

sim_opt_spf_probe_mode=0|1

Controls the probe name for the SPF node.

spfhierdelim

spfhierdelim=char

Changes the spf hierarchical delimiter. The default value is the hierarchical delimiter taken from the DSPF file header.

dpfprefix

dpfprefix="m r d x"

Backannotates all devices with M (mosfet), R (resistor), D (diode), and instance X.

Selective Backannotation Options

spfcnet

spfcnet=[netname 1 netname2..]

Backannotates the total capacitance of the specified nets.

spfcnetfile

spfcnetfile=filename

Backannotates the total capacitance of the net specified in the given text file, which contains a list of C-only backannotated nets.

spfrcnet

spfrcnet=[netname 1 netname2..]

Specifies the name of the net to be backannotated with parasitic resistors and capacitors.

spfrcnetfile

spfrcnetfile=filename

Specifies a text file containing a list of RC backannotated nets.

spfnetcmin

spfnetcmin=value

Selects the nets for backannotation using the value of their total node capacitance.

spfskipnet

spfskipnet=[netname 1 netname2..]

Specifies the nets that need to be skipped for backannotation.

spfskipnetfile

spfskipnetfile=filename

Specifies the file containing a list of nets that need to be skipped for backannotation.

Backannotation Control Message Options

spfmsglimit

spfmsglimit='number [STITCH-ID_1] [STITCH-ID_2]'

Sets the maximum number of messages (message limit) for a specified message category identifier (STITCH-ID) to be printed in the .spfrpt file. The default value is 50.

spfprintlargercnet

spfprintlargercnet=value

Sets the threshold for large RC nets by specifying the number of resistors and capacitors in one net.

Parasitic File Loading Options

dpf

Syntax

Spectre format

name options dpf="scope filename"

SPICE format

.options dpf="scope filename"

Description

Specifies the DPF file that is to be backannotated and its scope. If you specify this option multiple times, all specified settings are considered.

Arguments

scope

Specifies a subcircuit or an instance. When a subcircuit is specified, the DPF file is backannotated with all the instances of that subcircuit. When an instance is specified, the DPF file is backannotated with the specified instance only. Wildcards are supported.

filename

Specifies the name of the DPF file. Multiple DPF files can be specified for backannotation by using the option multiple times. If you specify a DSPF file, only the instance section of the DSPF file is backannotated.

Example

Spectre format

opt1 options dpf="X1.XPLL PLL.dpf" dpf="X1.XMEM mem.dpf"

SPICE format

.options dpf="X1.XPLL PLL.dpf" dpf="X1.XMEM mem.dpf"

tells the simulator that the PLL.dpf file is to be backannotated into the X1.XPLL instance and mem.dpf file is to be backannotated into the X1.XMEM instance.

spf

Syntax

Spectre format

name options spf="scope filename"

SPICE format

.options spf="scope filename"

Description

This option specifies the DSPF file that is to be backannotated and its scope. If you specify this option multiple times, all specified settings are considered.

Arguments

scope

Specifies a subcircuit or an instance. When a subcircuit is specified, the DSPF file is backannotated to all the instances of that subcircuit. When an instance is specified, the DSPF file is backannotated to the specified instance only. Wildcards are supported.

filename

Specifies the name of the DSPF file. Multiple DSPF files can be specified for backannotation by using the option multiple times.

Example

Spectre format

opt1 options  spf="mem mem.dspf" 

SPICE format

.options spf="mem mem.dspf"

tells the simulator to stitch mem.dspf to subcircuit mem.

spef

Syntax

Spectre format

name options spef=" scope filename"

SPICE format

.options spef=" scope filename"

Description

Specifies the SPEF file that is to be backannotated and its scope. If you specify this option multiple times, all specified settings are considered.

Arguments

scope

Specifies the subcircuit or instance name. When a subcircuit is specified, the SPEF file is backannotated to all the instances of that subcircuit. When an instance is specified, the SPEF file is backannotated to the specified instance only.

filename

Specifies the name of the SPEF file. Multiple SPEF files can be specified for backannotation by using the option multiple times.

Example

Spectre format

opt1 options spef="adc a.spef"

SPICE format

.options spef="adc a.spef"

tells the simulator to stitch a.spef to the subcircuit adc.

Parsing Options Used in Backannotation

spfswapterm

Syntax

Spectre format

name options spfswapterm="terminal1 terminal2 subcktname" 

SPICE format

.options spfswapterm="terminal1 terminal2 subcktname".

Specifies the terminals of a subcircuit macro-model that can be swapped. In general, this is needed when devices are modeled by subcircuits. If you specify this option multiple times, all specified settings are considered.

Example

Spectre format

opt1 options spfswapterm= "n1 n2  nch_mac" 

SPICE format

.options spfswapterm= "n1 n2  nch_mac"

tells the simulator that terminals n1 and n2 of subcircuit nch_mac can be swapped.

spfxtorprefix

Syntax

Spectre syntax

name options spfxtorprefix="substring [replacement_substring]"

SPICE syntax

.options spfxtorprefix="substring [replacement_substring]"

Description

Specifies the prefix for the device and net names in the DSPF/SPEF/DPF file. The device names in the pre-layout netlist and the DSPF/SPEF file often do not match, and this option can be used to match them. If you specify this option multiple times, all specified settings are considered.

Example

Spectre syntax

opt1 options spfxtorprefix="XM  X" 

SPICE syntax

.options spfxtorprefix="XM  X"

Considering that XX1/XM1 exists in the pre-layout netlist but the corresponding device name in the DSPF file is XMX1/XM1, the above setting changes XM to X for successful backannotation.

spfaliasterm

Syntax

Spectre format

name options spfaliasterm="model|subckt prelayout_term1=spf_alias1 prelayout_term2=spf_alias2prelayout_termN=spf_aliasN"

SPICE syntax

.options spfaliasterm="model|subckt prelayout_term1=spf_alias1 prelayout_term2=spf_alias2prelayout_termN=spf_aliasN"

Description

Specifies an alias for the terminal names of devices. This option is useful when the terminal names of devices in DSPF/SPEF/DPF files are different from those in the simulation model library. The terminal names of devices can be different in technology nodes that use subcircuits to model devices. If you specify this option multiple times, all specified settings are considered.

Example

Spectre format

opt1 options  spfaliasterm="nfet_mac n1=D n2=G n3=S n4=B"

SPICE format

.options  spfaliasterm="nfet_mac n1=D n2=G n3=S n4=B"

tells the simulator that in subcircuit nfet_mac, terminal n1 corresponds to terminal D in the DSPF file. Similarly, terminal n1 corresponds to terminal G, terminal n3 corresponds to terminal S, and terminal n4 corresponds to terminal B.

speftriplet

Syntax

Spectre format

name options speftriplet=1|2|3

SPICE format

.options speftriplet=1|2|3

Description

Specifies which value out of the triplet should be used for backannotation in the SPEF file. This option is effective only when the values in the SPEF file are represented as triplets (for example, 0.325:0.41:0.495). The default value is 2, which means that the second value will be used.

Example

Spectre format

name options speftriplet=1

SPICE format

.options speftriplet=1

tells the simulator to choose the first value for backannotation from the triplet in the SPEF file.

spfrcr

Syntax

Spectre syntax

name options spfrcr = 0 | 1

SPICE syntax

.options spfrcr = 0 | 1

Description

Specifies whether RC reduction in parasitic backannotation be enabled. The default value is 1, which enables RC reduction. When spfrcr is set to 0, RC reduction is disabled. This options works independently of the +parasitics option.

Example

Spectre syntax

opt1 options spfrcr = 0 

SPICE syntax

.options spfrcr = 0

tells the simulator to disable RC reduction during parasitic backannotation.

spfrcrfmax

Syntax

Spectre syntax

name options spfrcrmax = value

SPICE syntax

.options spfrcrmax = value

Description

Defines the maximum frequency for RC reduction performed during parasitic backannotation. The unit is in GHz and the default value is 25GHz.

Example

Spectre syntax

opt1 options spfrcrfmax=10

SPICE syntax

.options spfrcrfmax=10

The above statement sets the maximum frequency for parasitic backannotation RC reduction to 10GHz.

spfinstancesection

Syntax

Spectre Syntax

name options spfinstancesection = 0 | 1

SPICE syntax

.options spfinstancesection = 0 | 1

Description

Controls the device parameter backannotation from the instance section of the DSPF file. If spfinstancesection is turned off (0), the instance section is ignored in backannotation. Default is on (1).

Example

Spectre syntax

opt1 options spfinstancesection=0

SPICE syntax

.options spfinstancesection=0

The above statement disables the backannotation of the DSPF instance section device parameters.

spfbusdelim

Syntax

Spectre syntax

name options spfbusdelim="schematic_busdelim [DSPF_busdelim]"

SPICE syntax

.options spfbusdelim="schematic_busdelim [DSPF_busdelim]"

Description

Allows to map the bus delimiter between schematic and DSPF, SPEF, and cap file. The option defines the bus delimiter in the schematic netlist, and optionally the bus delimiter in the DSPF file.

By default, the bus delimiter of the DSPF file is taken from the DSPF file header (that is, *|BUSBIT [], *|BUS_BIT [], or *|BUS_DELIMITER []).

If the bus delimiter is not defined in the parasitic file header, you need specify it by using the spfbusdelim option in schematic netlist.

Example 1

Spectre syntax

opt1 options spfbusdelim="<>"

SPICE syntax

.options spfbusdelim="<>"

A<1> is mapped to A_1 in the DSPF file, if the bus delimiter in the DSPF file is _.

Example 2

Spectre syntax

opt1 options spfbusdelim="@ []"

SPICE syntax

.options spfbusdelim="@ []"

A@1 is mapped to A[1] in the DSPF file.

spfshortpin

Syntax

Spectre syntax

name options spfshortpin=yes|no

SPICE syntax

.option spfshortpin=yes|no

Description

Enables or disables the shorting of pins (*|P) for same net (*|NET). If the value of spfshortpin is set to yes, all *|P pins in the same net section are shorted. If the value is set to no, then pins are not shorted.

Example

opt1 options spfshortpin=no

spfscale

Syntax

Spectre syntax

name options spfscale=value

SPICE syntax

.options spfscale=value

Description

Specifies the scaling factor of all instances in the parasitic file. The default value is 1.

Example

Consider that the MOSFET width is defined as w=2 in the DSPF file.

Spectre format

opt1 options spfscale=1u

SPICE syntax

.options spfscale=1u

Scales the width of the MOSFET to 2u.

spfcaponly

Syntax

Spectre syntax

name options spfcaponly=0|1

SPICE syntax

.options spfcaponly=0|1

Description

Specifies whether only capacitors need to be backannotated (C-only stitching). The default value is 0 (both R and C are backannotated).

Example

Spectre format

opt1 options spfcaponly=1

SPICE syntax

.options spfcaponly=1

Tells the simulator to backannotate capacitors only and discard the parasitic resistors.

spfreppin

Syntax

Spectre syntax

name options spfreppin=0|1|2|3

SPICE syntax

.options spfreppin=0|1|2|3

Description

Specifies whether to choose the first instance pin, last instance pin, first instance pin after sorting, or the last instance pin after sorting as the representative node. Default is 0, which means that the first instance pin is chosen as the representative mode.

Example

Spectre format

opt1 options spfreppin=1

SPICE syntax

.options spfreppin=1

Tells the simulator to choose the last instance pin as the representative mode.

sim_opt_probe_spf_node

Syntax

Spectre syntax

name options sim_opt_probe_spf_node=0|1|2|3|4

SPICE syntax

.options sim_opt_probe_spf_node=0|1|2|3|4

Description

Controls the probing of backannotated nodes. This option is supported only in Spectre XPS.

0 - Do not probe backannotated nodes. This is the default.

1 - Probe the instance pins of the SPF net.

2 - Probe all instance pins internal nodes of the SPF net.

3 - Probe the instance pins of all device gates

4 - Probe the instance pins of the primary device gate (skip finger devices)

Examples

Spectre format

opt1 options sim_opt_probe_spf_node=1

SPICE syntax

.options sim_opt_probe_spf_node=1

tells the simulator to probe the instance pin of the SPF net.

sim_opt_spf_probe_mode

Syntax

Spectre syntax

name options sim_opt_spf_probe_mode=0|1

SPICE syntax

.options sim_opt_spf_probe_mode=0|1

Description

Controls the probe name of spf nodes. This option is supported only in Spectre XPS.

0 - Flattened node name in <net_name>#<flatten_nodename> format.

1 - Hierarchical node name following the net. This is default.

Examples

Spectre format

opt1 options sim_opt_spf_probe_mode=1

SPICE syntax

.options sim_opt_spf_probe_mode=1

Tells the simulator to probe signals in format <net_name>#<flatten_nodename>. For example, net074#xi0/xi0/xgi1/mna:g.

spfhierdelim

Syntax

Spectre syntax

name options spfhierdelim=char

SPICE syntax

.options spfhierdelim=char

Description

Specifies the hierarchical delimiter to be used in the SPF file. The default value is "."

Example

Spectre format

opt1 options spfhierdelim=/

SPICE syntax

.options spfhierdelim=/

Tells the simulator to use / as the hierarchical delimiter in the SPF file.

dpfprefix

Syntax

Spectre syntax

name options dpfprefix=char

SPICE syntax

.options dpfprefix=char

Description

Backannotates the instances with the leading character(s) specified by this option. The default value is "."

Example

Spectre format

opt1 options dpfprefix="m x"

SPICE syntax

.options dpfprefix="m x"

Tells the simulator to only backannotate the instances with leading char m or x.

Selective Backannotation Options

spfcnet

Syntax

Spectre Syntax

name options spfcnet=netname

SPICE syntax

.options spfcnet=netname

Description

Backannotates the total capacitance of the specified net. All other parasitic components such as parasitic resistors that are associated with this net are ignored. The complete hierarchical net names should be specified. If you specify this option multiple times, all specified settings are considered.

Backannotation attaches only one grounded capacitor with value computed by the total capacitance (defined in *NET statement in the DSPF file) subtracted by the total capacitance of all cross-coupling capacitors of this net. All terminals of cross-coupling capacitors which are connected to the subnodes of the specified net are reconnected to the node of the net, and their values are subtracted from the total capacitance.

Example

Spectre format

opt1 options spfcnet=X1.netA spfcnet=netB

SPICE format

.options spfcnet=X1.netA spfcnet=netB

tells the simulator to stitch only the total lumped capacitance to nets X1.netA and netB.

spfcnetfile

Syntax

Spectre syntax

name options spfcnetfile=filename

SPICE syntax

.options spfcnetfile=filename

Description

Specifies a text file, which contains a list of C-only backannotated nets. The format of the text file requires you to specify one net per line. This option stitches the lumped capacitance to the nets specified in the text file, similar to the spfcnet option. Only one file name can be specified per option. If you specify this option multiple times, all specified values are considered.

Example

Spectre format

opt1 options spfcnetfile=nets.text

SPICE syntax

.options spfcnetfile=nets.text

Considering that the file nets.text contains:

netA
netB
netC

tells the simulator to stitch lumped total capacitance to netA, netB, and netC.

spfrcnet

Syntax

Spectre syntax

name options spfrcnet=netname

SPICE syntax

.options spfrcnet=netname

Description

Specifies the name of the net to be backannotated with parasitic resistors and capacitors. The other nets are backannotated with lumped total capacitances. Wildcards are supported and you can specify as many nets as needed. Full hierarchical net names are required.

Example

Spectre syntax

opt1 options spfrcnet=netA

SPICE syntax

.options spfrcnet=netA

tells the simulator to stitch netA with parasitic resistors and capacitors. Also, if is the only spfrcnet option specified, backannotate other nets with lumped total capacitance.

spfrcnetfile

Syntax

Spectre syntax

name options spfrcnetfile="filename"

SPICE syntax

options spfrcnetfile="filename"

Description

Specifies a text file, which contains a list of RC backannotated nets. The format of the text file requires you to specify one net per line. The net names specified in the file are backannotated with parasitic resistors and capacitors, similar to the spfrcnet option. The other nets are backannotated with lumped total capacitances. Only one file name can be specified per option.

Example

Spectre syntax

opt1 options spfrcnetfile=nets.text

SPICE syntax

.options spfrcnetfile=nets.text

nets.text file contains:

netA
netB
netC

tells the simulator to stitch resistance and capacitance to nets netA, netB and netC, and stitch only capacitance to all other nets.

spfnetcmin

Syntax

Spectre syntax

name options spfnetcmin=value

SPICE syntax

.options spfnetcmin=value

Description

Selects the nets for backannotation using the value of their total node capacitance. If a net's total node capacitance exceeds the spfnetcmin value, all the parasitics associated with the net are backannotated correctly; otherwise, only the total capacitance is added to the net node.

Example

Spectre syntax

op1 options spfnetcmin=1.0e-16.

SPICE syntax

options spfnetcmin=1.0e-16.

tells the simulator to stitch resistance and capacitance on the nets whose total capacitance is more than 1.0e-16, and only capacitance for the nets whose total capacitance is less than 1.0e-16.

spfskipnet

Syntax

Spectre syntax

name options spfskipnet=netname

SPICE syntax

.options spfskipnet=netname

Description

Specifies the nets that are to be skipped for backannotation, that is, none of the parasitic components of the nets are backannotated. Wildcards are supported. If you specify this option multiple times, all specified settings are considered.

Example

Spectre syntax

opt1 options spfskipnet=X1.nodeA

SPICE syntax

.options spfskipnet=X1.nodeA

tells the simulator to skip backannotation of net X1.nodeA.

spfskipnetfile

Syntax

Spectre format

name options spfskipnetfile=filename

SPICE format

options spfskipnetfile=filename

Description

Specifies a text file, which contains the list of nets to be skipped for backannotation. The format of the text file requires you to specify one net per line. Only one file name can be specified per option setting.

Example

Spectre format

opt1 options spfskipnetfile=nets.text

SPICE format

.options spfskipnetfile=nets.text

Considering nets.text file contains:

netA
netB
netC

tells the simulator to skip nets netA, netB and netC for backannotation.

Backannotation Message Control Options

spfmsglimit

Syntax

Spectre syntax

name options spfmsglimit='number STITCH-ID_1 STITCH-ID_2'

SPICE syntax

.options spfmsglimit='number STITCH-ID_1 STITCH-ID_2'

Description

Sets the maximum number of messages (message limit) for a specified message category identifier (STITCH-ID) to be printed in the .spfrpt file. When a STITCH-ID is not specified, the software assigns the maximum message number limit to all message categories. If you do not specify a number, the software assigns the maximum limit of 50 (default) messages for each message category.

Examples

Spectre format

opt1 options spfmsglimit="10 STITCH-0010"

SPICE syntax

.options spfmsglimit="10 STITCH-0010"

tells the simulator to print no more than 10 messages for the STITCH-0010 message category. For the other message categories, the default maximum limit of 50 messages will apply.

Spectre syntax

opt1 options  spfmsglimit="1000000"
opt2 options spfmsglimit="5 STITCH-0020"

SPICE syntax

.options  spfmsglimit="1000000"

.options spfmsglimit="5 STITCH-0020"

tells the simulator to print no more than 1000000 messages for all message categories except STITCH_0020 for which no more than 5 messages will be printed.

spfprintlargercnet

Syntax

Spectre format

name options spfprintlargercnet=value

SPICE format

.options spfprintlargercnet=value

Description

Sets the threshold for large RC nets by specifying the number of resistors and capacitors in one net. Spectre XPS writes the large RC net statistics information in the log file.

Examples

Spectre format

opt1 options spfprintlargercnet=100

SPICE format

.options spfprintlargercnet=100

Spectre XPS reports the large RC nets in the log file, as shown below.

Nets with number of RC > 100
================================================
123     out
261     x1.mid
132     in
3828   x1.vddp
……

In the report, the first column is the sum of the number of resistors and capacitors, and the second column is the name of RC net.

Frequently Asked Question

Why are the expanded ground capacitors more than the parsed ground capacitors?

During backannotation, certain cross-coupling capacitors are grounded and these capacitors are counted in the category of expanded ground capacitors. During backannotation, cross-coupling capacitors are grounded if:

Parasitic Backannotation Report

The Spectre log file contains a section PARASITIC BACK-ANNOTATION SUMMARY that displays the following information:

Description of the fields in the report is given below.

Field Description

Nets parsed 1089

Number of nets in the SPF file.

annotated RC 1081 (99.2%)

Number of nets that are annotated with R and C.

annotated C-only 0 (0.0%)

Number of nets that are annotated with C only.

annotated spfcnet 2 (0.2%)

Number of nets specified using the spfcnet option.

skipped spfskipnet 4 (0.4%)

Number of nets specified using the spfskipnet option.

CrossCaps parsed 0

Number of coupling caps in the SPF file.

annotated 0 (0.0%)

Number of coupling caps annotated successfully.

grounded 0 (0.0%)

Number of coupling caps that are grounded for some reason (for example, one terminal is floating).

Instances parsed 2761

Number of instances in the Instance section

annotated 1860 (67.4%)

Number of instances backannotated.

skipped 901 (32.6%)

Number of instances skipped.

Errors and warning messages can be located in the stitching report file .xps.spfrpt.

Some Common Error and Warning Messages Related to Parasitic Backannotation

ERROR (STITCH-0000)(:12): Node xio.xb1.n3 not found. Net is not expanded.

This error message is generated when the net name does not match the pre-layout name or the node does not exist.

To fix the net mismatch issue, use the spfxtorprefix option.

WARNING(STITCH-0039)(:49): Net x1.mid is skipped due to filtering

This message is generated when nets are skipped using the spfskipnet option.

For better performance, ensure that the total capacitance of the nets specified using the spfskipnet option is backannotated.

WARNING(STITCH-0011)(:32): Only total cap is attached to net net19.

This message is generated when C-only backannotation is enabled. For better performance, ensure that the total capacitance of the nets specified using the spfcnet option is backannotated.

WARNING(STITCH-0084)(:13): Cross-coupling capacitor "c12 (1.3e-17)" is lumped to ground (first node not found in the file scope).

This message is generated when one net of the coupling cap is not found in pre-layout.

WARNING(STITCH-0039)(:79): Net net46 is skipped because has zero C-only value

This message is generated when the NET section does not have parasitic capacitance defined.


Return to top
 ⠀
X