As an analog/mixed-signal designer, verification engineer, or CAD expert, you use Spectre® APS for analyzing your designs. Years back, we introduced the Multi-Technology Simulation (MTS) solution that allows you to simulate multiple chips in a single Spectre run, with each chip using its own device models, temperature definitions, and technology scaling setups. In the MMSIM 15. 1 (October 2015) release, MTS was made default in Spectre. As a result, you do not require the +mts command-line option any more. Over the years, we've incrementally added related enhancements and introduced Spectre options that can be applied locally. In SPECTRE 18.1ISR10, we are cleaning up the spectre -h content to clearly indicate the Spectre options that can be applied locally. This blog describes the value and usage of a few important local Spectre options.
Setting Up Local Options
Today, Spectre supports selected options that can be used locally. These include temp, tnom, scale, scalem, reltol, vrefgnd, and skip.
As part of the MTS technology, Spectre supports three methods for setting local options.
- Specifying options inside a subckt definition. This method applies the option only to the nodes/elements inside the subcircuit.
subckt chip1 (in out …)
scopedOptions options tnom=27 scale=1
...
ends chip1
subckt chip2 (in out …)
scopedOptions options tnom=25 scale=0.9
...
ends chip2
- Applying the option to all instances of a subcircuit using the subckt scope. For defining multiple scopes, use [].
o1 options scale=1.2 subckt=chip1
o2 options scale=1.5 subckt=[chip2 chip3]
- Applying the option to a user-defined subcircuit instance using the inst scope. For defining multiple scopes use [].
o3 options scale=1.2 inst=pll
o4 options scale=1.5 inst=[receiver mem1]
If the locally-applied options conflict with each other, the lower-level option (for example, I1.I2) has higher priority than the higher-level option (for example, I1). For the same subcircuit, if the options set inside the subcircuit conflict with the the options set with subckt/inst scope, the options defined with subckt/inst scope have higher priority.
Starting with SPECTRE 18.1ISR10, local options are marked with a * in the spectre -hoptions output. For example:
reltol=0.001* Relative convergence criterion.
These options can be applied globally and locally. Options that are not marked with * can be applied only globally.
You can use the Spectre command-line option -mts to disable all local options. If -mts is specified, Spectre treats all local options as global options, and the last option specified in the netlist gets the highest priority.
The ADE MTS Options menu was also enhanced in IC618 ISR3 to support the most important local Spectre options.
Defining Local reltol Setting
In the blog, Optimizing Spectre APS Performance, we discussed that reltol can be set differently in different time windows of a simulation to optimize simulation performance. In addition, the reltol option can also be set differently for different blocks in a design. This approach can be used to speed up the Spectre simulation when different blocks in a design have significant different accuracy requirements. When reltol is set locally, the Newton and LTE checks use different tolerances for the individual blocks; however, the time step control is still applied globally to the entire design.
Let us consider a design that is analog in nature and requires moderate mode with default reltol value of 1e-3. However, a large digital block in the design is fine with a reltol value of 1e-2. For such application, we can use the default reltol=1e-3 for the entire design and use local reltol=1e-2 for the digital block with the instance name x2, as shown below.
o1 options reltol=1e-3
o2 options reltol=1e-2 inst=x2
When you specify the local options, they are reported in the following section of the Spectre logfile:
Scoped user options:
reltol = 0.01 inst=x2
Even with local reltol, the time step control in Spectre is still global for all nodes. Therefore, the performance gain of a relaxed local reltol is limited.
Defining Multiple Ground Nodes With Different Voltage Levels
In the SPECTRE 17.1 (October 2017) release, we introduced the highvoltage=yes option that optimizes Spectre APS for handling designs with multiple power supplies using largely different voltages, that is, 1V and 10V. One special scenario in high voltage designs is to have different ground nodes at different voltage levels. In SPECTRE 18.1, we introduced the vrefgnd option for handling such a scenario.
The above picture illustrates a typical scenario. One block (Sub2) is having a ground node at 0V and a power supply of 1V. The rail-to-rail voltage for all devices within this block will be 1V. The other block (Sub1) has a ground node at 100V, and the power supply node at 101V. This block has a 1V rail-to-rail voltage. However, if the default 0V ground reference is used for this block, the absolute voltage of 101V is used in newton and LTE tolerance checking. This may introduce simulation inaccuracy for this block, even if highvoltage=yes is used. This problem can be addressed by defining a local ground for the block with the high-voltage ground node.
o3 options vrefgnd=VSS1 subckt=Sub1
With the above setting, the tolerance criteria for the nodes in Sub1 and Sub2 is different:
For nodes inside Sub1: Total_tolerance = (reference_voltage-V(VSS1))*reltol+vabstol
For nodes outside Sub1: Total_tolerance = reference_voltage*reltol+vabstol
reference_voltage is decided by the relref parameter in transient analysis, and the maximum voltage binning used by the highvoltage option.
For setting vrefgnd in ADE, a new element called vrefgnd was introduced in the analogLib library in IC618. This element can be attached to the ground node of interest.
Skipping a Subcircuit Block in Spectre Simulation
You may have a netlist for a large design; however, you may be interested only in a portion of the design. One way of doing this is to re-create the netlist just for the blocks you are interested in. Another way is to use the +top Spectre command-line option to specify the subcircuit of interest while reading the entire netlist. Alternatively, you can use the entire netlist and use the Spectre skip option locally to disable the blocks you are not interested in, as shown in the following example.
o2 options skip=cut subckt=pll
The above option will remove all instances calling the pll subcircuit from the simulation, and report the following scoped user option in the Spectre logfile:
Scoped user options:
skip = cut subckt=pll
The skip option has the following limitations:
- If there is another block which is driven by output signals of the pll subcircuit, this block will not get the expected input signals.
- The capacitive loading effect of the pll subcircuit ports is not modeled. However, an option, skip=loadconsidering the capacitive loading effect may be added in the future.
Therefore, the skip option should only be applied to isolated blocks that have no impact on the blocks which are analyzed in the respective simulation.
Summary
Spectre supports selected options to be applied locally to individual subcircuits, and subcircuits instances, including temp, tnom, scale, scalem, reltol, vrefgnd, and skip. In this blog, we discussed the value and usage of the selected local options.
Related Sources
- Spectre Classic Simulator, Spectre Accelerated Parallel Simulator (APS), and Spectre Extensive Partitioning Simulator (XPS) User Guide
- Getting the most out of Spectre APS
You may also contact your Cadence support AE for guidance.
For more information on Cadence products and services, visit www.cadence.com.
About Spectre Tech Tips
Spectre Tech Tips is a blog series aimed at exploring the capabilities and potential of Spectre®. In addition to providing insight into the useful features and enhancements in Spectre, this series broadcasts the voice of different bloggers and experts, who share their knowledge and experience on all things related to Spectre. Enter your email address in the Subscriptions box and click SUBSCRIBE NOW to receive notifications about our latest Spectre Tech Tips posts.