Skip to content

Verilog-A Noise Modeling

Introduction

Noise modeling plays a crucial role in the simulation and analysis of analog and mixed-signal circuits. As technology advances into deep-submicron regions and higher-frequency operation becomes mainstream, accurate prediction of noise becomes critical to ensure system performance and product reliability. Verilog-A provides powerful built-in constructs for representing noise in compact models, components, and behavioral circuit blocks.

Noise affects nearly all aspects of analog and RF design, including:

  • Signal-to-Noise Ratio (SNR)
  • Bit-Error Rate (BER)
  • Phase noise in oscillators and PLLs
  • Gain and linearity in RF amplifiers
  • Resolution of ADCs and DACs
  • Sensor sensitivity and stability

Accurate noise modeling allows early design optimization and prevents silicon failures that arise from noise-dominated circuits.

Fundamental Noise Types

Noise originates from physical processes within semiconductor devices. The most significant types include:

Noise Type Physical Source Frequency Response
Thermal Noise Random thermal agitation of carriers White (flat spectrum)
Shot Noise Quantized charge flow across junctions White
Flicker Noise (1/f) Carrier trapping & detrapping ↑ at lower frequencies
Burst / Popcorn Noise Random telegraph signals Discrete jumps
Avalanche Noise Impact ionization in diodes Depends on bias

Verilog-A supports behavioral modeling of all of these phenomena.

Noise Modeling in Verilog-A

Verilog-A enables noise contributions using built-in functions. These functions do not affect DC operating point but appear in:

  • Noise analysis
  • AC analysis
  • Transient noise simulations (if enabled)

Built-in Noise Generators

Function Description
white_noise(pwr, "label") Generates white noise with power spectral density
flicker_noise(pwr, exp, "label") Models frequency-dependent flicker noise
noise_table() Creates noise based on measured data

The "label" must be unique per noise source for correct attribution in analysis reports.

Adding Noise to Device Models

Noise must be associated with a physical current or voltage contribution.

Example — Diode Noise

I(d,a) <+ Is * (limexp(V(d,a)/Vt) - 1);
I(d,a) <+ white_noise(2*`P_Q*abs(I(d,a)), "shot_noise");

White noise here corresponds to shot noise in diodes and BJTs:

$$i_n^2 = 2qI$$

Example — Flicker Noise

I(d,a) <+ flicker_noise(Kf*abs(I(d,a))**Af, 1.0, "flicker");

Parameters:

  • Kf — flicker noise coefficient
  • Af — bias exponent

Compact MOSFET Noise Example

Advanced models (BSIM, PSP, HiSIM) combine multiple noise mechanisms:

I(d,s) <+ white_noise(gamma*4*`P_K*$temperature*gm, "channel_noise");
I(g,s) <+ white_noise(delta*4*`P_K*$temperature*gds, "gate_noise");
I(d,s) <+ flicker_noise(Kf*(gm**2), 1.0, "flicker_noise");

Captures:

  • Channel thermal noise
  • Gate-induced noise
  • 1/f behavior

Noise in Passive Components

Thermal noise in resistors is given by:

`include "constants.vams"
I(p, n) <+ white_noise(4*`P_K*$temperature/R, "R_thermal");

Which models Johnson-Nyquist noise:

$$\overline{i_n^2} = \frac{4kT}{R}$$

Transient Noise Simulation

Some simulators allow time-domain random noise enabling:

  • Eye-diagrams
  • BER prediction
  • Clock jitter
  • Oscillator phase noise approximation

Example noise injection:

V(out) <+ white_noise(N0, "transient_noise");

Transient noise simulations must be explicitly enabled in most tools.

Table-Driven Noise Modeling

When lab characterizations are available:

NoisePSD = noise_table(freq_vector, noise_vector);
I(out) <+ NoisePSD;

Useful in:

  • RF front-ends
  • MEMS microphones
  • CMOS sensors

Tips for Simulation Stability

Problem Cause Fix
Solver divergence Noise added to floating nodes Ensure proper DC paths
Excess compute time Too many noise sources Restrict to dominant mechanisms
Incorrect AC/noise results Noise labeled incorrectly Use unique labels
Abrupt nonlinearities Discontinuities in equations Use smooth approximations

Best practices:

  • Keep noise sources physically meaningful
  • Use limiting functions like limexp()
  • Validate across DC → AC → Noise → Transient
  • Ensure charge conservation

Complete Example: Noisy Resistor

`include "constants.vams"
`include "disciplines.vams"

module noisy_resistor(p, n);
    inout p, n;
    electrical p, n;
    parameter real R = 1k from (0:inf);

    analog begin
        V(p,n) <+ R * I(p,n);
        I(p,n) <+ white_noise(4*`P_K*$temperature/R, "thermal_noise");
    end
endmodule

This model fully supports:

  • DC
  • AC
  • Noise
  • Transient (if enabled)

Looking Ahead: Modern Noise Challenges

Technology Trend Noise Concern
FinFET, GAA FET Stronger flicker noise influence
Ultra-low power IoT Noise limits system sensitivity
RF/mmWave CMOS Gate-induced noise dominates
Quantum & cryogenic computing New low-T noise physics

Noise modeling is increasingly critical as circuits approach physical and thermal limits.