0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

CMOS2段アンプの設計

Posted at

image.png

────────────────────────────────
前提と記号
VDD=2.5 V, CL=10 pF, 目標GB=5 MHz, SR>10 V/µs, PM≈60°, KN′=120 µA/V^2, KP′=25 µA/V^2, |VTN|=|VTP|≈0.5 V, λN=0.06 V^-1, λP=0.08 V^-1, L=0.5 µm(最小長)
I5=差動尾電流, I6=2段目電流
Cc=補償容量, gmx=トランスコンダクタンス, rox=出力抵抗
W/Lは各MOSのアスペクト比

小信号の基本
GB = gm1 / (2π Cc)
SR = I5 / Cc (Miller補償で上昇縁は主に2段目電流で決まるが、設計テンプレートではCcに注入される尾電流で規定)
PM≈60°を満たす十分条件として右半平面零点 z≈gm6/Cc を高周波へ追いやる(gm6を大きく)。経験則 gm6 ≈ 8〜12·gm1 → ここでは gm6≈10·gm1

────────────────────────────────
Step 1:Ccの下限
理由
・Ccは負荷CLをMillerで分割し、主極を1段目出力ノードに押し下げることで一意の支配極を作る
・Ccが小さすぎると2段目の極とRHP零点がGB付近に来てPMが悪化
経験式
Cc ≥ 0.2·CL
この設計では CC_min = 0.2·10 pF = 2 pF → 余裕をみて Cc=3 pF

────────────────────────────────
Step 2:SRからI5を決定
原理
SR = Icharging / Cc
差動全電流がCcに流れる最悪ケースで Icharging≈I5

I5 = SR·Cc
数値
I5 = (10 V/µs)·(3 pF) = 30 µA
意味
・SR仕様を満たす最小尾電流。I5を増やせばSR↑だが消費電力↑

────────────────────────────────
Step 3:ミラーM3,M4の(W/L)
目的
・ICMR(max)でM3,M4が飽和し続けるようVov確保
・ダイオード接続側VGSをICMRで成立させる
式(長チャネル近似)
I5 = (1/2)·KP′·(W/L)3·(VDD − Vin(max) − |VTP| − |VTN|)^2
よって
(W/L)3 = (W/L)4 = I5 / [KP′·(Vマージン)^2]
数値
Vマージン = 2.5 − 2.0 − 0.65 + 0.35 ≈ 0.2 V
(W/L)3=(30e-6)/(25e-6·0.2^2)≈30
意味
・大きなW/Lで小Vov(=VDSsat)を得てICMR上端を拡大
・M3,M4はro↑でAv1↑にも効く

────────────────────────────────
Step 4:gm1とM1,M2の(W/L)
原理
GB = gm1/(2πCc) → gm1 = 2π·GB·Cc

(W/L)1=(W/L)2 = gm1^2 / (2·KN′·I1) かつ I1≈I5/2
数値
gm1 = 2π·5e6·3e-12 ≈ 94.25 µS
(W/L)1=(94.25e-6)^2 / (2·120e-6·15e-6) ≈ 3
意味
・gm1を直接GBで規定→帯域が仕様通りに決まる
・W/Lが大きすぎるとCin↑でノイズ↑、小さすぎるとVov↑でICMR下端が狭まる

────────────────────────────────
Step 5:M5のVDSsatと(W/L)
目的
・ICMR(min)で差動対を飽和させるVDS5(sat)確保

I5 = (1/2)·KN′·(W/L)5·(VDS5(sat))^2
→ (W/L)5 = 2·I5/(KN′·VDS5(sat)^2)
数値
VDS5(sat) ~ 0.31 V と置くと (W/L)5 ≈ 6
意味
・VDS5(sat)が小さいほどICMR下端が広がるがミスマッチ感度↑

────────────────────────────────
Step 6:M6の(W/L)(DCバランスと零点制御)
理由
・RHP零点 z≈gm6/Cc を高域へ(z ≥ 10·GBが経験則)
・PM≈60°の十分条件 gm6 ≈ 10·gm1

(W/L)6 = (gm6/gm4)·(W/L)4
数値
gm6=~10·gm1=~942.5 µS, gm4≈150 µS, (W/L)4=30 → (W/L)6≈190
意味
・gm6を大きくすると z↑、2段目極 p2≈gm6/(2π·Cnode2) も↑→安定化
・ただし大き過ぎると消費電流↑、位相余裕過大でGBW劣化

────────────────────────────────
Step 7:I6の決定(小信号式)

I6 = gm6^2 / (2·KP′·(W/L)6)
数値
I6 ≈ (942.5e-6)^2 / (2·25e-6·188.5) ≈ 95 µA
意味
・gm6と(W/L)6が決まればI6が一意→電力見積り可能

────────────────────────────────
Step 8:M7の(W/L)
目的
・2段目の定電流負荷が飽和し出力スイングを制約しないよう設計
近似スケーリング
(W/L)7 ≈ (I6/I5)·(W/L)5
数値
(W/L)7 ≈ (95/30)·6 ≈ 20
チェック
Vout(min) ≈ VDS7(sat) = sqrt(2·I6/(KP′·(W/L)7)) ≈ 0.28 V

────────────────────────────────
Step 9:利得と電力の検証・反復
総利得近似(長チャネル, λ支配)
Av ≈ Av1·Av2
Av1 ≈ gm1·(ro1 || ro3)
Av2 ≈ gm6·(ro6 || ro7)
ro ≈ 1/(λ·ID)
より簡約形
Av ≈ (gm1/λN·I1) · (gm6/ (λP·I6 + λN·I6)) ≈ O(3000 V/V) 以上
電力
Pdiss = VDD·(I5 + I6) ≈ 2.5·(30µA+95µA) ≈ 0.3125 mW
PM確認
・z_RHP = gm6/Cc ≈ 942.5e-6 / 3e-12 ≈ 3.14e8 rad/s ≈ 50 MHz
・10·GB(rad/s) ≈ 2π·50e6 ≈ 3.14e8 rad/s → z ≥ 10·GB を満足
・p2 ≈ gm6 / (2π·Cnode2). Cnode2 はCgd6, Cdb6, Cc反映。zとp2が十分高域→PM≈60°

────────────────────────────────
ICMRと出力スイングの整合
ICMR(min) ≈ VGS1(min)+VDS5(sat)
ICMR(max) ≈ VDD − |VTP| − VDS3(sat)
数値例でおおむね 1.25〜2.0 V を満たす
出力スイング
Vout(min) ≈ VDS7(sat) ≈ 0.28 V
Vout(max) ≈ VDD − VDS6(sat) ≈ 2.5 − 0.2〜0.3 ≈ 2.2 V

────────────────────────────────
安定性の物理直観
・Ccが作る主極 p1 ≈ 1/(R1·Cc) がGBより十分低い位置に来るようR1=gain node抵抗を大きく
・gm6↑でRHP零点 z=gm6/Cc↑、2段目極 p2≈gm6/(2πCnode2)↑
・条件 z ≥ 10·GB, p2 ≥ 2.2·GB → PM≈60°

────────────────────────────────
ノイズ・CMFB・実務上の注意
熱雑音
en,1^2 ≈ 4kTγ/gm1, 出力雑音はAv2で増幅。gm1↑で入力換算雑音↓
CMFB
差動版では出力共通モード固定用にCMFB必須。単出力版はバイアスで共通モード設定
ミスマッチ
入力対のσ(Vos) ∝ 1/√(WL)。W/L1を極端に小さくしない
レイアウト
差動対共心, ミラー対称, クリティカル配線のマッチング長合わせ
RHP零点の打消し
Rz直列(ESR)で左半平面零点生成も可。ただし本設計はgm6で高域に逃がす方針

────────────────────────────────
最終チェック一覧
Cc=3 pF
I5=30 µA, (W/L)3=(W/L)4≈30
gm1≈94 µS, (W/L)1=(W/L)2≈3
(W/L)5≈6
gm6≈943 µS, (W/L)6≈190, I6≈95 µA
(W/L)7≈20
GB=5 MHz, PM≈60°, SR≈10 V/µs, Pdiss≈0.31 mW
Vout範囲≈0.28〜2.2 V, ICMR≈仕様内
Av>3000 V/V



import math

# ==============================
# パラメータ設定 / Parameter setup
# ==============================
VDD = 2.5          # [V] Supply voltage
CL = 10e-12        # [F] Load capacitance
GB = 5e6           # [Hz] Target gain-bandwidth
SR = 10e6          # [V/s] Slew rate
PM = 60            # [deg] Phase margin target (approx.)
KNp = 120e-6       # [A/V^2] nMOS process transconductance parameter
KPp = 25e-6        # [A/V^2] pMOS process transconductance parameter
VT = 0.5           # [V] Threshold voltage (magnitude)
lamN = 0.06        # [1/V] nMOS channel-length modulation
lamP = 0.08        # [1/V] pMOS channel-length modulation
L = 0.5e-6         # [m] Minimum channel length

# ==============================
# Step 1: 補償容量Cc / Compensation capacitance
# ==============================
Cc_min = 0.2 * CL
Cc = 3e-12  # chosen with margin
print(f"Cc = {Cc*1e12:.2f} pF")

# ==============================
# Step 2: SRから尾電流I5算出 / Tail current from SR
# ==============================
I5 = SR * Cc
print(f"I5 = {I5*1e6:.2f} µA")

# ==============================
# Step 3: M3,M4 (ミラーデバイス)のW/L
# ==============================
V_margin = 0.2  # [V]
WL_3 = I5 / (KPp * V_margin**2)
print(f"(W/L)3,4 = {WL_3:.2f}")

# ==============================
# Step 4: gm1, M1,M2 (差動対)
# ==============================
gm1 = 2 * math.pi * GB * Cc
I1 = I5 / 2
WL_1 = gm1**2 / (2 * KNp * I1)
print(f"gm1 = {gm1*1e6:.2f} µS, (W/L)1,2 = {WL_1:.2f}")

# ==============================
# Step 5: M5 (尾トランジスタ)
# ==============================
VDS5_sat = 0.31  # [V]
WL_5 = 2 * I5 / (KNp * VDS5_sat**2)
print(f"(W/L)5 = {WL_5:.2f}")

# ==============================
# Step 6: M6 (2段目トランジスタ)
# ==============================
gm6 = 10 * gm1
gm4 = math.sqrt(2 * KPp * WL_3 * I5)
WL_6 = (gm6 / gm4) * WL_3
print(f"gm6 = {gm6*1e6:.2f} µS, (W/L)6 = {WL_6:.2f}")

# ==============================
# Step 7: M6電流I6算出 / Second stage current
# ==============================
I6 = gm6**2 / (2 * KPp * WL_6)
print(f"I6 = {I6*1e6:.2f} µA")

# ==============================
# Step 8: M7 (定電流負荷)
# ==============================
WL_7 = (I6 / I5) * WL_5
VDS7_sat = math.sqrt(2 * I6 / (KPp * WL_7))
print(f"(W/L)7 = {WL_7:.2f}, VDS7(sat) = {VDS7_sat:.2f} V")

# ==============================
# Step 9: 総合利得と消費電力 / Gain and Power
# ==============================
ro1 = 1 / (lamN * I1)
ro3 = 1 / (lamP * I5)
ro6 = 1 / (lamP * I6)
ro7 = 1 / (lamN * I6)

Av1 = gm1 * (ro1 * ro3 / (ro1 + ro3))
Av2 = gm6 * (ro6 * ro7 / (ro6 + ro7))
Av_total = Av1 * Av2
Pdiss = VDD * (I5 + I6)

print(f"Av ≈ {Av_total:.1f} V/V")
print(f"Power Dissipation = {Pdiss*1e3:.3f} mW")

# ==============================
# 安定性チェック / Stability check
# ==============================
z_RHP = gm6 / Cc
GB_rad = 2 * math.pi * GB
print(f"RHP zero = {z_RHP/(2*math.pi):.2f} Hz")
print(f"z/GB ratio = {z_RHP/GB_rad:.1f} (should ≥ 10)")

image.png

───────────────────────────────

二段オペアンプ(ミラー補償+ヌル抵抗)設計まとめ

【目的】

ミラー補償容量 Cc により発生する右半平面ゼロ(RHP zero)が位相余裕を悪化させる。
→ 補償容量直列にヌル抵抗 Rz を挿入し、ゼロを左半平面(LHP)に移動。
→ 安定化と位相マージン ≈ 60° の確保。

───────────────────────────────

【基本式】

極・零点:

p₁ = -gm₁ / (A_v * Cc)
p₂ = -gm₆ / CL
z₁ = -1 / (Rz * Cc - Cc / gm₆)

補償条件(z₁ ≈ p₂):

Rz = (1/gm₆) * (CL + Cc) / Cc

───────────────────────────────

【M8 による Rz 実現】

アクティブ抵抗としての動作式:

Rz = 1 / [K′_P8 * (VSG8 - |VTP|)]

M8, M9, M10, M11 のサイズ比関係:

VSG11 = VSG6
(W/L)₁₁ = (I₁₀ / I₆) * (W₆ / L₆)

導出式:

(W/L)₈ = (Cc / (CL + Cc)) * √[(S₁₀ S₆ I₆) / I₁₀]

───────────────────────────────

【設計例】

条件:

Cc = 3 pF
CL = 10 pF
I₆ = 95 µA
S₆ = 190
I₁₀ = I₉ = I₁₁ = 15 µA

計算:

S₁₁ = (I₁₁ / I₆) * S₆ = 30
(W/L)₉ = (I₁₀ / I₅) * (W/L)₅ = 3
(W/L)₈ = 0.23 * √(1 * 190 * 95 / 15) ≈ 8

───────────────────────────────

【Rz とゼロ位置】

VSG10 = √(2I₁₀ / (K′_P S₁₀)) + |VTP| = 1.595 V
Rz = 1 / [25×8×(1.595 - 0.7)] = 4.56 kΩ

零点位置:

z₁ = -1 / (Rz * Cc) = -94.9×10⁶ rad/s
p₂ = -gm₆ / CL = -95×10⁶ rad/s
→ z₁ ≈ p₂(LHPで打消し)

───────────────────────────────

【デバイス寸法まとめ】

素子 (W/L) 電流 [µA] 役割
M₈ 8 0 Nulling resistor
M₉ 3 15 Bias mirror
M₁₀ 1 15 Bias reference
M₁₁ 30 15 Mirror bias driver

W₈=4µm, W₉=1.5µm, W₁₀=0.5µm, W₁₁=15µm(L=0.5µm)

───────────────────────────────

【開ループ利得計算】

パラメータ:

gm₁ = 94 µS
gm₆ = 950 µS
λN = 0.06 V⁻¹
λP = 0.08 V⁻¹
I₁ = 15 µA
I₆ = 95 µA

出力抵抗:

ro₁ = 1 / (λN·I₁) = 1.11 MΩ
ro₃ = 1 / (λP·I₁) = 0.833 MΩ
ro₆ = 1 / (λP·I₆) = 0.132 MΩ
ro₇ = 1 / (λN·I₆) = 0.175 MΩ
ro13 = ro₁ // ro₃ = 0.476 MΩ
ro67 = ro₆ // ro₇ = 0.0752 MΩ

各段の利得:

Av₁ = gm₁·ro13 = 44.9
Av₂ = gm₆·ro67 = 71.4
Av_total = Av₁·Av₂ = 3.2×10³ ≈ 70 dB

───────────────────────────────

【最終結果】

項目
GBW 5 MHz
PM 約60°
SR 10 V/µs
Av 約3.2×10³ (70 dB)
Rz 4.56 kΩ
z₁ ≈ p₂ = 95×10⁶ rad/s
消費電力 ≈ 0.31 mW (VDD=2.5 V時)

───────────────────────────────

【まとめ】

  1. ヌル抵抗によりRHPゼロをLHPへ移動 → 位相余裕改善。
  2. M8をアクティブ抵抗としてRz ≈ 4.56 kΩを生成。
  3. 零点 z₁ と第2極 p₂ が一致し、安定化を実現。
  4. 開ループ利得 ≈ 70 dB、GBW = 5 MHz、低電力動作。

import math

# ==========================
# 定数設定 / Parameter setup
# ==========================
Cc = 3e-12       # [F] Miller compensation capacitor
CL = 10e-12      # [F] Load capacitance
gm1 = 94e-6      # [S]
gm6 = 950e-6     # [S]
I1 = 15e-6       # [A]
I6 = 95e-6       # [A]
VTP = 0.7        # [V]
Kp = 25e-6       # [A/V^2]
WL8 = 8          # (W/L) ratio of M8
lamN = 0.06      # [1/V]
lamP = 0.08      # [1/V]

# ==========================
# 1. ヌル抵抗 Rz の計算 / Nulling resistor calculation
# ==========================
VSG10 = math.sqrt(2 * 15e-6 / (Kp * 1)) + VTP  # assuming S10=1
Rz = 1 / (Kp * WL8 * (VSG10 - VTP))
print(f"VSG10 = {VSG10:.3f} V")
print(f"Rz = {Rz/1e3:.2f}")

# ==========================
# 2. 零点と第2極 / Zero and pole positions
# ==========================
z1 = -1 / (Rz * Cc)
p2 = -gm6 / CL
print(f"z1 = {z1/1e6:.1f}×10⁶ rad/s")
print(f"p2 = {p2/1e6:.1f}×10⁶ rad/s")
print(f"→ z1 ≈ p2 (LHP cancellation achieved)")

# ==========================
# 3. 出力抵抗と利得 / Output resistances and gain
# ==========================
ro1 = 1 / (lamN * I1)
ro3 = 1 / (lamP * I1)
ro6 = 1 / (lamP * I6)
ro7 = 1 / (lamN * I6)

# 並列合成 / Parallel combination
ro13 = (ro1 * ro3) / (ro1 + ro3)
ro67 = (ro6 * ro7) / (ro6 + ro7)

Av1 = gm1 * ro13
Av2 = gm6 * ro67
Av_total = Av1 * Av2

print(f"ro13 = {ro13/1e6:.3f} MΩ, ro67 = {ro67/1e6:.3f}")
print(f"Av1 = {Av1:.1f}, Av2 = {Av2:.1f}")
print(f"Av_total = {Av_total:.1f}{20*math.log10(Av_total):.1f} dB")

# ==========================
# 4. 電力と帯域の確認 / Power and bandwidth summary
# ==========================
VDD = 2.5
Pdiss = VDD * (I1 + I6)
GBW = 5e6
SR = 10e6

print(f"Power Dissipation = {Pdiss*1e3:.3f} mW")
print(f"GBW = {GBW/1e6:.1f} MHz, SR = {SR/1e6:.1f} V/µs")
print("Phase Margin ≈ 60°, stable operation achieved.")
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?