【1】基本構造と動作原理
Pipelined-SAR ADC は、SAR ADCの逐次比較アルゴリズムと
Pipeline ADCの段階変換構造を組み合わせたアーキテクチャである。
動作は次のように段階的に進行する。
- 第1段SARで上位ビットを決定
- DACで対応電圧を生成
- 残差信号(誤差分)を増幅して次段へ伝達
- 第2段SARで残差を変換し、下位ビットを得る
- 最後にデジタル合成(Recombination)を行い最終出力を得る
ブロック構造:
Vin → [Stage1 SAR ADC] → [Residue Amplifier] → [Stage2 SAR ADC] → [Digital Recombiner] → Dout
【2】数式モデルの説明
(1) 第1段変換(Stage 1)
最初に入力電圧をサンプリングする:
Vin1 = Vin
SAR回路が上位ビットを決定し、DAC出力を生成する:
V_DAC1 = Σ ( b_k * Vref / 2^k ) , k = 1 ~ n1
第1段での残差は次式で与えられる:
V_res1 = G1 * ( Vin - V_DAC1 )
ここで G1 は残差アンプの利得である。
これにより、次段へ伝達する信号が生成される。
(2) 第2段変換(Stage 2)
次段SAR ADCは、この残差を新たな入力として扱う:
Vin2 = V_res1
同様に、下位ビットに対応するDAC出力を生成:
V_DAC2 = Σ ( b'_k * Vref / 2^k ) , k = 1 ~ n2
残差信号は:
V_res2 = G2 * ( V_res1 - V_DAC2 )
(3) 出力再構成(Digital Recombination)
各段の結果をビット加算により統合する:
Dout = D1 * 2^(n2) + D2
複数段がある場合は一般化して:
Dout = D1 * 2^(n2 + n3 + ... + nN)
+ D2 * 2^(n3 + ... + nN)
+ ...
+ DN
これにより、逐次変換の並列化と高スループット化が可能となる。
【3】残差増幅の設計理論
(1) Switched-Cap型(理想モデル)
キャパシタ比で残差を生成する:
V_res = ( Cs / Cf ) * ( Vin - V_DAC )
ただし、オペアンプを要するため低VDDでは非効率。
(2) Inverter-Based Amplifier(FinFET向け)
オペアンプの代わりにインバータを用いて利得を得る。
小信号利得:
Av = gm * ro
スルーレート特性:
dVout/dt = gm * ( Vin - V_DAC ) / CL
この構成は 0.6–0.8 V 程度でも十分に動作し、
FinFETの高gm特性を生かせる。
(3) Ring-Amp構成(GAA/CFET向け)
複数インバータ段と帰還制御によりOpAmp動作を模倣。
伝達関数:
H(s) = A0 / ( 1 + s/p1 )
出力電圧:
Vout = A_ring * ( Vin - V_DAC )
OpAmpを用いずに高速・高線形性を確保することができ、
GAA世代の低電圧環境でも有効。
【4】誤差・ノイズ解析
ADC性能を支配する要素は以下の通り。
量子化誤差:
Vq = V_FS / 2^N
アンプ誤差の段階伝搬:
E_total = Σ ( E_amp_i / Π G_i )
熱雑音(kT/Cノイズ):
Vn^2 = kT / Cs
比較器ジッタ(遅延ばらつき):
σ_t ≈ Vn / ( slew_rate )
→ FinFET/GAAではslew rate低下によりジッタ抑制が設計課題。
【5】性能評価式
実効分解能(ENOB):
ENOB = ( SNDR - 1.76 ) / 6.02
Walden FoM(電力効率):
FoM_W = P / ( 2^ENOB * fs )
Schreier FoM(性能効率):
FoM_S = SNDR + 10 * log10( fs / P )
【6】最終統合モデル
段階的な残差生成とビット結合を統一的に表す:
V_res_i = G_i * ( Vin_i - V_DAC_i )
Dout = Σ ( D_i * 2^(N_i) )
# --- Library installation ---
# !pip install numpy matplotlib
# --- Import libraries ---
import numpy as np
import matplotlib.pyplot as plt
# --- Parameters (all centralized) ---
Vref = 1.0 # Reference voltage [V]
n1 = 3 # Stage1 bits
n2 = 5 # Stage2 bits
G1 = 2.0 # Residue amplifier gain
fs = 100 # Sampling points
# --- Input signal (ramp) ---
Vin = np.linspace(0, Vref, fs)
# --- Stage1 Quantization ---
LSB1 = Vref / (2**n1)
D1 = np.floor(Vin / LSB1)
V_DAC1 = D1 * LSB1
V_res1 = G1 * (Vin - V_DAC1)
# --- Stage2 Quantization ---
LSB2 = Vref / (2**n2)
V_res1_clip = np.clip(V_res1, 0, Vref) # limit range
D2 = np.floor(V_res1_clip / LSB2)
V_DAC2 = D2 * LSB2
# --- Final digital recombination ---
Dout = D1 * (2**n2) + D2
Vout = Dout * (Vref / (2**(n1 + n2)))
# --- Plot results ---
plt.figure(figsize=(10,6))
plt.plot(Vin, Vin, 'k--', label='Ideal transfer (Vin=Vout)')
plt.plot(Vin, Vout, 'b', label='Pipelined-SAR Output')
plt.plot(Vin, V_DAC1, 'r--', alpha=0.6, label='Stage1 DAC Output')
plt.plot(Vin, V_res1, 'g:', alpha=0.7, label='Residue Voltage')
plt.title('Pipelined-SAR ADC Behavior (2-stage)')
plt.xlabel('Input Voltage Vin [V]')
plt.ylabel('Output / Residue Voltage [V]')
plt.legend()
plt.grid(True)
plt.show()
日本語+英語コメント概要
-
Stage 1 (上位ビット変換):
V_DAC1 = D1 * LSB1
→ SARが上位ビットを決定。 -
Residue Amplifier (残差生成):
V_res1 = G1 * (Vin - V_DAC1)
→ 残差を増幅して第2段に渡す。 -
Stage 2 (下位ビット変換):
D2 = floor(V_res1 / LSB2) -
Digital Recombination (出力合成):
Vout = Dout * (Vref / 2^(n1 + n2))
可視化結果
- 青線:最終出力の量子化特性
- 緑点線:残差電圧(次段SAR入力)
- 赤点線:第1段DAC出力
- 黒点線:理想的なVin=Vout線
このプロットにより、逐次比較+段階残差増幅の流れを直感的に確認できる。