Skip to content

Verilog-A Nonlinear and Dynamic systems

Introduction

Verilog-A is a high-level analog hardware description language that enables designers to model and simulate complex electronic systems. Engineering systems such as amplifiers, oscillators, power converters, sensors, and communication blocks are governed by nonlinear and time-varying behavior, often requiring a modeling language with strong support for differential equations, nonlinear responses, and dynamic conditions. Verilog-A excels in these areas by providing dedicated analog operators, numerical constructs, and solver-friendly modeling styles.

Nonlinear Functions in Verilog-A

Most analog and mixed-signal devices inherently exhibit nonlinear behavior. For example:

To model these phenomena, Verilog-A supports a wide set of nonlinear built-in functions including:

Mathematical Type Functions
Exponential/log exp(), ln()
Trigonometric sin(),cos(),tan()
Hyperbolic tanh(), sinh(), cosh()
Nonlinear shaping pow(), limexp()
Condition-controlled smooting transition(), smoothstep()

Diode nonlinearity

Id = Is * (exp(V(d,a)/Vt) - 1);
I(d, a) <+ Id;

However, pure exponential functions may cause numerical convergence issues. Therefore, solvers recommend bounded functions like limexp() instead:

Id = Is * (limexp(V(d,a)/Vt) - 1);

Soft limiting to avoid solver failure

Hard clipping (e.g., using if conditions) introduces discontinuities.

if (Vin <= Vscale/2)
    Vo = 0;
else
    Vo = Vsat;

Instead, smooth nonlinear boundaries are better:

Vo = Vsat * tanh(Vin/Vscale);

Time-Dependent Functions

Dynamic systems evolve with time — requiring memory and derivative behavior. Verilog-A includes direct support for differential equations, delays, and frequency-dependent functions.

Key-Dynamic operators

Operator Purpose
ddt(x) Time derivative, used for capacitors/inductors
idt(x) Integration, energy accumulation
delay(x,time) Transport delay modeling
laplace_nd() Laplace transfer function
ztransform() Discrete-time behaviors
timer(), abstime Time tracking and triggering

Capacitor model

I(p, n) <+ C * ddt(V(p, n));

This directly reflects :

$$I=C\cfrac{dV}{dt}$$

Inductor model

V(p, n) <+ L * ddt(I(p, n));

Frequency-dependent behavior

Laplace operator representation of first-order RC filter:

V(out) <+ laplace_nd(V(in), {1}, {R*C,1});

State-dependent Nonlinear Dynamics

Dynamic nonlinearities involve both voltage dependence and derivatives:

I(p, n) <+ C(V(p,n)) * ddt(V(p,n));

Nonlinear capacitor modeling:

I(p, n) <+ C(V(p,n)) * ddt(V(p,n))*(1+vc2*V(p,n)+vc2*V(p,n)**2);

Time-dependent functions enable modeling of:

  • Filters and Compensators
  • VCOs and PLLs
  • Switching converters
  • RF front-ends
  • Neural networks and nonlinear control systems

Handling Initial Conditions

Initial conditions heavily influence dynamic simulations such as transient startup. Verilog-A provides tools to manage these states explicitly.

Methods for initial conditions

Method Purpose
initial_step event Code executed only at transient start
Internal state variables Initialize storage components
ic statements Set node voltage defaults
idt() with initial value Explicit integral state initialization

Initialization Block

analog begin
    @(initial_step) begin
        state = Vinit;
    end
end

Integrator with initial voltage

V(out) <+ idt(input_signal, Vinitial);

This solves the common startup convergence failure seen in standalone integrators.

Conditions Where Initialization is Crucial

  • Oscillator waveform startup
  • Power-on reset modeling
  • Charge-based transistor models
  • Sequential analog systems
  • Initial capacitor/inductor energy

Handling initial conditions properly ensures:

  • Faster convergence
  • Realistic transient response
  • Accurate switching behavior

Preventing floating states

Floating nodes can produce numerical instability. Methods to avoid this include :

  • Adding small parasitic R or C
  • Providing DC paths in dynamic models
  • Ensuring charge conservation using ddt()

Best practices summary

Category Recommended Practice
Nonlinear functions Use smooth functions, avoid hard discontinuities
Time dependencies Prefer charge-based dynamic modeling
Initial conditions Set physical startup states using events or integrals
Simulation stability Maintain continuous derivatives and DC reference paths
Verification Validate behavior across DC, transient, AC, and noise analyses