Poles, zeros and the Miller effect
Read a pole off a Bode plot and off a schematic, watch a 20 fF capacitor across a gain act like 172 fF, and use the dominant pole to predict where the gain reaches 1.
- Lesson
- E6.1
- Time
- 30 min
- Runs on
- ngspice
- Check
- 6 questions
A common-source stage with a gain of 7.3 drives 50 fF, and its output node (22.9 kΩ into 50 fF) promises 139 MHz. In the chip a 100 kΩ source drove it, and a 20 fF wire capacitance ran from its gate to its drain. Its bandwidth was 8.5 MHz.
- no C_F
- 20 fF gate to ground
- 20 fF gate to drain
- Frequency 1 MHzno C_F = 17.28 dB · 20 fF gate to ground = 17.28 dB · 20 fF gate to drain = 17.23 dB
At 1 MHz all three give 17.3 dB, a gain of 7.32.
- Frequency 8.505 MHzno C_F = 17.25 dB · 20 fF gate to ground = 17.17 dB · 20 fF gate to drain = 14.27 dB
From gate to drain, 20 fF puts the −3 dB point at 8.51 MHz.
- Frequency 51.19 MHzno C_F = 16.26 dB · 20 fF gate to ground = 14.27 dB · 20 fF gate to drain = 1.568 dB
From gate to ground, the same 20 fF gives 51.2 MHz.
- Frequency 98.86 MHzno C_F = 14.27 dB · 20 fF gate to ground = 9.901 dB · 20 fF gate to drain = -4.082 dB
Without it: 98.9 MHz. The transistor's own capacitances take it below 139 MHz.
Read the plot as a table
| Frequency | no C_F | 20 fF gate to ground | 20 fF gate to drain |
|---|---|---|---|
| 10 kHz | 17.28 dB | 17.28 dB | 17.28 dB |
| 100 kHz | 17.28 dB | 17.28 dB | 17.28 dB |
| 1 MHz | 17.28 dB | 17.28 dB | 17.23 dB |
| 8.505 MHz | 17.25 dB | 17.17 dB | 14.27 dB |
| 10 MHz | 17.24 dB | 17.13 dB | 13.51 dB |
| 51.19 MHz | 16.26 dB | 14.27 dB | 1.568 dB |
| 98.86 MHz | 14.27 dB | 9.901 dB | -4.082 dB |
| 100 MHz | 14.22 dB | 9.802 dB | -4.181 dB |
| 1 GHz | -6.207 dB | -23.12 dB | -25.98 dB |
| 10 GHz | -43.45 dB | -62.85 dB | -50.62 dB |
Measured on ngspice 42, 50 points per decade. Each mark is the −3 dB frequency of one curve.
Across the gain, 20 fF cut the bandwidth by a factor of 11.6, because the gain multiplies it.
Reading a pole on the Bode plot
Every node has some resistance and some capacitance to ground. As the frequency rises, the capacitor's impedance 1/(2πfC) falls, and at fp = 1/(2πRC) it equals the resistance. Above that point the capacitor shunts the signal away.
That frequency is a pole. Above it the gain falls by 20 dB per decade, and the phase lags by up to 90°. An isolated pole, far from any other, shows itself in two readings at once: the gain is 3 dB down, and the phase has moved by 45°.
Step through the Bode plot of the lab stage, which has the 20 fF from gate to drain.
- |v(out)|
- |v(g)|
- phase of v(out)
- Frequency 100 kHz|v(out)| = 17.28 dB · |v(g)| = -0.0005959 dB · phase of v(out) = 179.3°
Flat at 17.3 dB (7.32), phase 180°: the stage inverts. The gate follows the source at 0 dB.
- Frequency 8.505 MHz|v(out)| = 14.27 dB · |v(g)| = -2.979 dB · phase of v(out) = 134.4°
8.51 MHz: the output is 3 dB down and the phase is 134.4°, 45.6° below its start. The gate is 3 dB down at 8.57 MHz, so this pole belongs to the gate node.
- Frequency 61.59 MHz|v(out)| = -0.004474 dB · |v(g)| = -15.84 dB · phase of v(out) = 93.26°
Gain 1 at 61.6 MHz, phase 93.3°. The first pole accounts for 82.1° of the 86.7° lag.
Read the plot as a table
| Frequency | |v(out)| | |v(g)| | phase of v(out) |
|---|---|---|---|
| 10 kHz | 17.28 dB | -0.000005958 dB | 179.9° |
| 100 kHz | 17.28 dB | -0.0005959 dB | 179.3° |
| 1 MHz | 17.23 dB | -0.05919 dB | 173.2° |
| 8.505 MHz | 14.27 dB | -2.979 dB | 134.4° |
| 10 MHz | 13.51 dB | -3.726 dB | 129.6° |
| 61.59 MHz | -0.004474 dB | -15.84 dB | 93.26° |
| 100 MHz | -4.181 dB | -18.37 dB | 87.4° |
| 1 GHz | -25.98 dB | -23.72 dB | 26.31° |
| 10 GHz | -50.62 dB | -40.28 dB | -69.94° |
Measured on ngspice 42: the AC run of the lab netlist, 50 points per decade.
You can also find poles by inspection. Each high-resistance node gives one, at 1/(2πRnodeCnode), with Rnode the resistance seen from the node. Here the gate sees 100 kΩ and the output RD ‖ ro = 22.9 kΩ.
A zero is the mirror image: above it the gain slope rises by 20 dB per decade. In the usual case, a left-half-plane zero, the phase also leads by up to 90°. A right-half-plane zero raises the gain the same way but makes the phase lag like a pole, the worst of both; the two-stage op-amp has one (E6.4).
Why a capacitor across a gain looks larger
- The input side
A signal vg at the gate comes through Rsig = 100 kΩ. Whatever current the gate node draws must flow through that resistor.
iin
- The drain swings the other way
M1 turns vg into a drain current, and RD turns it into vout = −7.32·vg. When the gate rises by 1 mV, the drain falls by 7.32 mV.
- C_F sees both
One plate of CF moves +1 mV, the other −7.32 mV, so 8.32 mV appears across it. It draws 8.32 times the current that the same capacitor to ground would. From the gate it looks like CF·(1 + A) = 166 fF to ground.
(1 + A)·i
Read the circuit as text
- VIN voltage source (0.7815 V + ac): + →
n1, − →0 - R_sig resistor (100 kΩ): pin 1 →
n1, pin 2 →g - C_F capacitor (20 fF): pin 1 →
out, pin 2 →g - R_D resistor (36 kΩ): pin 1 →
VDD, pin 2 →out - M1 NMOS transistor (W/L = 2/0.15): gate →
g, drain →out, source →0 - C_L capacitor (50 fF): pin 1 →
out, pin 2 →0 - out port: terminal →
out
g= 0.7815 Vout= 0.900 V
Body tied to the source at ground. The node voltages are the operating point of the lab run.
Name it now. A capacitor CF across an inverting gain −A carries the voltage (1 + A)·vg. Seen from the input it is a capacitor CF(1 + A) to ground: the Miller capacitance, and the Miller effect is this multiplication. On the output side it looks like about CF, since the output barely notices its own small fraction.
Test it on six copies of the lab stage, each with a resistor RL from the output to a 0.9 V source. The output sits at 0.9 V, so RL carries no bias current; it only lowers the AC gain.
- A = 0.59
- A = 1.31
- A = 4.14
- A = 7.32
- Frequency 8.57 MHzA = 0.59 = -0.1524 dB · A = 1.31 = -0.3171 dB · A = 4.14 = -1.404 dB · A = 7.32 = -3.012 dB
Gain 7.32: the gate pole is at 8.57 MHz.
- Frequency 13.91 MHzA = 0.59 = -0.3901 dB · A = 1.31 = -0.7891 dB · A = 4.14 = -3.011 dB · A = 7.32 = -5.565 dB
Gain 4.14: the pole moves up to 13.9 MHz.
- Frequency 31.2 MHzA = 0.59 = -1.682 dB · A = 1.31 = -3.012 dB · A = 4.14 = -7.716 dB · A = 7.32 = -11.18 dB
Gain 1.31: the pole is at 31.2 MHz.
- Frequency 45.4 MHzA = 0.59 = -3.011 dB · A = 1.31 = -4.929 dB · A = 4.14 = -10.43 dB · A = 7.32 = -13.86 dB
Gain 0.59: 45.4 MHz. Rsig and CF never changed; only the gain did.
Read the plot as a table
| Frequency | A = 0.59 | A = 1.31 | A = 4.14 | A = 7.32 |
|---|---|---|---|---|
| 10 kHz | -0.000000214 dB | -0.000000445 dB | -0.000002256 dB | -0.000005958 dB |
| 100 kHz | -0.0000211 dB | -0.00004476 dB | -0.0002261 dB | -0.0005959 dB |
| 1 MHz | -0.00211 dB | -0.004474 dB | -0.02255 dB | -0.05919 dB |
| 8.57 MHz | -0.1524 dB | -0.3171 dB | -1.404 dB | -3.012 dB |
| 10 MHz | -0.206 dB | -0.4259 dB | -1.815 dB | -3.726 dB |
| 13.91 MHz | -0.3901 dB | -0.7891 dB | -3.011 dB | -5.565 dB |
| 31.2 MHz | -1.682 dB | -3.012 dB | -7.716 dB | -11.18 dB |
| 45.4 MHz | -3.011 dB | -4.929 dB | -10.43 dB | -13.86 dB |
| 100 MHz | -7.659 dB | -10.42 dB | -16.05 dB | -18.37 dB |
| 1 GHz | -25.24 dB | -25.05 dB | -24.05 dB | -23.72 dB |
| 10 GHz | -40.45 dB | -40.34 dB | -40.29 dB | -40.28 dB |
Measured on ngspice 42, 50 points per decade; the table below is the same run.
| RL | Gain A | 1 + A | Cin measured at 100 kHz | CF(1 + A) | Gate pole measured | 1/(2πRsigCin) |
|---|---|---|---|---|---|---|
| 2 kΩ | 0.586 | 1.586 | 34.40 fF | 31.72 fF | 45.40 MHz | 46.26 MHz |
| 5 kΩ | 1.307 | 2.307 | 49.19 fF | 46.15 fF | 31.20 MHz | 32.35 MHz |
| 12 kΩ | 2.510 | 3.510 | 73.83 fF | 70.19 fF | 20.44 MHz | 21.56 MHz |
| 30 kΩ | 4.143 | 5.143 | 107.3 fF | 102.9 fF | 13.91 MHz | 14.83 MHz |
| 100 kΩ | 5.949 | 6.949 | 144.3 fF | 139.0 fF | 10.27 MHz | 11.03 MHz |
| none | 7.315 | 8.315 | 172.3 fF | 166.3 fF | 8.570 MHz | 9.237 MHz |
Cin is the gate current through Rsig divided by 2πf·vg, at 100 kHz. Gate pole: where |v(g)| is 3 dB down.
Cin rises in a straight line with 1 + A. Its slope is 20.49 fF, which is CF plus M1's own gate-drain capacitance Cgd of 0.49 fF, multiplied the same way. Extend the line to 1 + A = 0 and it meets 1.91 fF: M1's gate-source capacitance Cgs. Both match what E3.1 measured. So Cin = Cgs + (CF + Cgd)(1 + A).
The measured pole sits 2-7 % below 1/(2πRsigCin), because the output's own time constant adds to the gate's. At full gain: 100 kΩ × 172.3 fF = 17.2 ns at the gate, 22.9 kΩ × (20 + 50 fF) = 1.6 ns at the output. Their sum, 18.8 ns, gives 8.45 MHz against 8.51 MHz measured.
The dominant pole sets the unity-gain frequency
In the lab stage the gate pole, 8.51 MHz, sits far below every other pole. It is the dominant pole. Above it the gain falls as 1/f, so gain times frequency stays the same until the next pole arrives. The gain falls to 1 at the unity-gain frequency fu ≈ A0·fp1, where A0 is the gain at low frequency.
On the run, 7.315 × 8.505 MHz = 62.2 MHz against fu = 61.6 MHz measured. That product is the gain-bandwidth product, and it holds while the second pole stays well above fu. Each further pole adds phase lag at fu, which a feedback loop cannot afford. The usual rule keeps the second pole above 2-3 fu; E6.3 shows why.
CF also makes a zero. At high frequency it carries the gate signal straight to the drain, opposite in sign to M1's own current gmvg. The two cancel at f = gm/(2πCF) = 322.8 µS/(2π × 20 fF) = 2.57 GHz. Because the signs oppose it is a right-half-plane zero, but here it sits 40 times above fu and does no harm.
20 fF from gate to ground
RSC in gc 100k
RDC vdd oc 36k
XMC oc gc 0 0 sky130_fd_pr__nfet_01v8 W=2 L=0.15
CFC gc 0 20f
CLC oc 0 50f
f3_ground = 5.119281e+07: the gate sees 20 fF, about half the bandwidth is lost.
20 fF from gate to drain
RSB in gb 100k
RDB vdd ob 36k
XMB ob gb 0 0 sky130_fd_pr__nfet_01v8 W=2 L=0.15
CFB gb ob 20f
CLB ob 0 50f
f3_miller = 8.505044e+06: the gate sees 166 fF of Miller capacitance.
Both copies of the hook netlist, biased at v(out) = 0.9 V. Measured on ngspice 42.
So the node with the largest R·C, after Miller multiplication, gives the dominant pole. A capacitor across a gain stage is the first place to look.
Asked in interviews
What is the Miller effect?
A capacitor C across an inverting gain −A carries (1 + A) times the input voltage, so the input sees C(1 + A) to ground. Here 20 fF across a gain of 7.3 acted like 166 fF.
How do you find poles by inspection?
One per high-resistance node, at 1/(2πRC), with C Miller-multiplied where it bridges a gain. The sum of all the R·C products estimates the dominant pole.
What is a dominant pole, and what does a right-half-plane zero do?
A pole far below the others, so A0·fp1 ≈ fu. A right-half-plane zero lifts the gain slope like a zero but lags the phase like a pole.
Try it
Run the netlist and read the meas lines, then open Plots for the same Bode plot as the figure. f3 and fin are almost equal: the output's pole is the gate's pole, seen through the stage.
Now change CF g out 20f to 40f and predict f3 before you run. Cin grows by about 20 fF × 8.3, so expect about 4.5 MHz. Then set CF to 0 and compare with the hook's 98.9 MHz. Last, keep 20 fF and change RD to 20k: the dc sweep re-biases the stage, the gain falls, and the pole moves up.
Run the netlist to draw its plots here.
vb = 7.815163e-01 gm_b = 3.228319e-04 ro_b = 6.264115e+04 a0 = 7.315339e+00 f3 = 8.505054e+06 ph_f3 = 1.343690e+02 fin = 8.569800e+06 fu = 6.158520e+07 ph_fu = 9.326434e+01Check yourself
Remember
- A pole is where a node's R and C meet, fp = 1/(2πRC); an isolated one shows as −3 dB and 45° of phase lag.
- A capacitor across an inverting gain −A acts at the input like C(1 + A): here Cin = Cgs + (CF + Cgd)(1 + A), and 20 fF cut the bandwidth from 98.9 to 8.5 MHz.
- Adding the R·C of every node estimates the dominant pole: 18.8 ns gave 8.45 MHz against 8.51 MHz measured.
- With one dominant pole, A0·fp1 ≈ fu: 7.315 × 8.505 MHz = 62.2 MHz against 61.6 MHz measured.
- A right-half-plane zero raises the gain slope but lags the phase; a capacitor feeding forward to an inverting output makes one at gm/(2πC).