# Transient Analysis

### Overview

HSpice transient analysis computes the circuit solution as a function of
time over a time range specified in the *.TRAN* statement. Since
transient analysis is dependent on time, it uses different analysis
algorithms, control options with different convergence-related issues and
different initialization parameters than DC analysis. However, since
a transient analysis first performs a DC operating point analysis ( unless
the UIC option is initialization and convergence issues also apply to
transient analysis.

Some circuits, such as oscillators or circuits with feedback, do not have
stable operating point solutions. For these circuits, either the feedback
loop must be broken so that a DC operating point can be calculated so the
initial conditions must be provided in the simulation input. the DC
operating point analysis is bypassed if the UIC parameter is included in
the *.TRAN* statement. If UIC is included in the *.TRAN* statement,
a transient analysis is started using node voltages specified in a *.IC*
statement. If a node is set to 5V in a *.IC* statement, the value at
that node for the first time point (time 0) is 5V.

The *.OP* statement can be used to store an estimate of the DC operating
point during a transient analysis.

Example

*.TRAN 1ns 100ns UIC*

*.OP 20ns*

The *.TRAN* statement UIC parameter in the above example bypasses the
initial DC operating point analysis. The *.OP* statement calculateds
transient operating points at *time=0* and *time=20ns* during
the transient analysis.

Although a transient analysis might provide a convergence DC solution, the
transient analysis itself can still fail to converge. In a transient
analysis, the error message "*internal timestep too small*" indicates
that the circuit failed to converge. The convergence failure might be due
to stated initial conditions that are not close enough to the actual DC
operating point values.

### Syntax

General forms

Single-point analysis:

*.TRAN var1 START=start1 STOP=stop1 STEP=incr1*

or

*.TRAN var1 START=[param_expr1] STOP=[param_expr2] STEP=[param_expr3]*

Double-point analysis:

*.TRAN var1 START=start1 STOP=stop1 STEP=incr1 [SWEEP var2 type np start2
stop2]*

or

*.TRAN tinc1 tsop1 [tincr2 tstop2 ... tincrN tstopN] [START=val] [UIC]
[SWEEP var pstart pstop pincr]*

Examples:

The following example performs and prints the transient analysis every 1ns
to 100ns.

*.TRAN 1ns 100ns*

The following performs the calculation every 0.1ns for the first 25ns, and
then every 1ns until 40ns. Printing and plotting begin at 10ns.

*.TRAN .1ns 25ns 1ns 40ns START=10ns*

The following performs the calculation every 10ns for 1us. The initial DC
operating point calculation is bypassed, and the nodal voltages specified
in the *.IC* statement (or by IC parameters in element statement) are
used to calculate initial conditions.

*.TRAN 10ns 1us UIC*

The following example increases the temperature by 10 degrees Celcius
through the range -55 to 75 and performs transient analysis for each
temperature.

*.TRAN 10ns 1us UIC SWEEP TEMP -55 75 10*

The following performs an analysis for each load parameter value at 1pF, 5pF,
and 10pF.

*.TRAN 10ns 1us SWEEP load POI 3 1pf 5pf 10pf*

Specifications of the parameters:

*np* - number of points or number od points per decade or octave,
depending on the preceding keyword

*param_expr* - user-specified expressions, for example,
*param_expr1, ..., param_exprN*

*pincr* - voltage, current, element or model parameter, or temperature
increment
value

*pstart* - starting voltage, current, temperature, any element or model
parameter value

*pstop* - final voltage, current, temperature, any element or model
parameter value

*START* - time at which printing or plotting is to begin. The
*START* keyword is optional: the start time can be specified without
preceding it with "*START=*"

*SWEEP* - keyword to indicate a second sweep is specified on the
*.TRAN* statement

*tincr1* - printing or plotting increment for printer output, and the
suggested computing increment for the postprocessor

*tstop1* - time at which the transient analysis stops incrementing
by *tincr1*. If another *tincr-tstop* pair follows, the analysis
continues with the new statement.

*var* - name of an independent voltage or current source, any element
or model parameter, or the keyword *TEMP* (indicating a temperature
sweep). HSpice supports source value sweep, referring to the source name.

### Examples

This
example is a simple RC ladder.

*
******transient analysis example
.options post*

Vin 1 0 exp(0V 0.2V 2ms 20ms 40ms 20ms)

R1 1 2 3

R2 2 3 5

C1 2 4 7m

R3 4 0 8

C2 3 5 6m

R4 5 0 4

.tr 0.1ms 50ms

.alter

Vin 1 0 pulse(0V 5V 5ms 0.5ms 0.5ms 4.5ms 10ms)

.alter

Vin 1 0 sin(0 1V 1kHz 2ms 10 45)

.END

By exciting the source with different input waveforms, we have the
following results.

exponential input

pulse input

sinusoidal input

Here is another example, this circuit uses MOS transistors to build a
NAND2 circuit. For the figure shown below,

the netlist file is given by
netlist. The MOS models is given by
model. The HSpice simulation file is given by
nand2.sp. The simulation results are shown below.

From the simulation results, we have the correct functionality of the
NAND2 gate. Now, you should be able to do your transient analysis. You
might note that there are two *.meas* statements in the HSpice
file, these two are for measuring the 50%-50% rise delay and fall delay.
After running the simulation, you can look for these measurements in the
**.mt0* file. If you want to have a symmetrical NAND2 gate or
optimize the performance, you can use the *sweep* function provided
by HSpice. Since parameters are specified in the netlist file, you can
just add the following statements in your simulation code.
*.tr 0.1ns 25ns sweep wn start_value stop_value increment*

or

*.tr 0.1ns 25ns sweep beta start_value stop_value increment*

The first statement is for optimizing gate delays and the second one will
help you to build a symmetric gate. The simulation results can be found in
the **.mt0* file, you can choose the right parameter values base on
the measured rise delays and fall delays. The optimizations are left to
you
as exercise.

**Note:**

In some cases, you might want to specify some of the nodes in your
circuits to some predefined values, in this case you can use the
*.IC* command to do so. The general form for this command is given
by:

*.IC V(node1) val1 V(node2) val2 ... *