Verilog-A Laplace Transform Analysis
Introduction¶
Verilog-A is widely used for analog and mixed-signal behavioral modeling, especially when simulating circuits that include dynamic elements such as filters, amplifiers, sensors, or control systems. Many of these blocks are most efficiently expressed as linear time-invariant (LTI) systems, which are typically modeled using Laplace transforms.
Verilog-A provides built-in Laplace transform functions that allow engineers to define complex transfer functions directly in the s-domain, avoiding the need for differential equation implementation. This enables accurate frequency-domain behavior and efficient transient simulation.
Why Use Laplace in Verilog-A¶
Instead of writing differential equations manually, Laplace operators give several key advantages:
- Direct implementation of transfer functions
- Cleaner and more intuitive behavior for LTI systems
- Suitable for AC, transient, and stability simulations
- Allows efficient modeling of higher-order dynamics
Common applications include:
- Filters (low-pass, high-pass, band-pass, band-reject, equalizers)
- Feedback control blocks (PID, compensators)
- Linear amplifiers and gain stages
- Phase and delay modeling
- RF and communication subsystems
Laplace Transform Functions in Verilog-A¶
Available Built-In Functions¶
| Function | Use Case |
|---|---|
laplace_nd(input, num, den) | Numerator/denominator polynomial form |
laplace_zp(input, zeros, poles, gain) | Zero/pole form |
zf(z-domain operators) | Digital / discrete filter modeling |
The most widely used is laplace_nd().
laplace_nd()¶
laplace_nd( input_signal , {numerator_coeffs} , {denominator_coeffs} )
Where:
input_signal: The signal passed through the LTI systemnumerator_coeffs: Polynomial in descending powers of sdenominator_coeffs: Polynomial in descending powers of s
Example polynomial format:
$$H(s) = \frac{b_0 s^n + b_1 s^{n-1} + … + b_n}{a_0 s^m + a_1 s^{m-1} + … + a_m}$$
First-Order Low-Pass Filter¶
Transfer function:
$$H(s) = \frac{1}{RCs + 1}$$
Verilog-A code:
parameter real R = 1k;
parameter real C = 1n;
V(out) <+ laplace_nd(V(in), {1}, {R*C, 1});
First-Order High-Pass Filter¶
$$H(s) = \frac{RCs}{RCs + 1}$$
V(out) <+ laplace_nd(V(in), {R*C, 0}, {R*C, 1});
Zeros can be represented using polynomial coefficients.
Second-Order Band-Pass Filter¶
$$H(s) = \frac{s}{s^2 + \frac{\omega_0}{Q}s + \omega_0^2}$$
parameter real w0 = 1e6; // center radian frequency
parameter real Q = 10;
V(out) <+ laplace_nd(V(in),
{0, 1},
{1, w0/Q, w0**2});
laplace_zp()¶
More intuitive for higher-order systems:
V(out) <+ laplace_zp(V(in),
{z1, z2}, // zeros
{p1, p2, p3}, // poles
gain);
This method is useful when designing filters from pole-zero locations.
Lead compensator¶
V(out) <+ laplace_zp(V(in),
{-1e3},
{-1e4},
10);
Predistortion and Stability Applications¶
Laplace blocks appear often in models for:
- PLL loop filters
- Compensation networks
- Control loops in power converters
- RF linearization structures
Example: Phase lead/lag shaping to ensure stability in feedback amplifiers.
Implementation in a Complete Model¶
`include "constants.vams"
`include "disciplines.vams"
module low_pass_filter(in, out);
input in;
output out;
electrical in, out;
parameter real R = 1k;
parameter real C = 1n;
analog begin
V(out) <+ laplace_nd(V(in), {1}, {R*C, 1});
end
endmodule
This model supports both AC sweep and transient signals seamlessly.
Simulation & Convergence Considerations¶
| Requirement | Explanation |
|---|---|
| Continuous systems only | Laplace cannot model switching/nonlinear behavior |
| DC operating point must exist | DC gain must be finite |
| No discontinuities allowed | Newton-based solvers require smoothness |
| Passive stability is important | Poor pole placement can cause oscillations |
Avoid Pure Integrators without DC path¶
// Bad: s-domain integrator without leakage leads to undefined DC
V(out) <+ laplace_nd(V(in), {1}, {0, 1});
- Add conductance to ground:
I(out) <+ 1e-12 * V(out);
This maintains a valid DC reference.
Best Practices Summary¶
| Best Practice | Reason |
|---|---|
Prefer laplace_nd() for compact models | Direct coefficient control |
Use laplace_zp() for intuitive filter design | Easier specification of poles/zeros |
| Keep high-frequency poles realistic | Avoid artificial gain boosting |
| Ensure valid DC gain conditions | Prevent DC convergence failure |
| Combine with physical modeling where needed | Hybrid accuracy + abstraction |
Laplace functions serve as a bridge between mathematical transfer functions and circuit simulations.