(1) ノイズ伝搬の基本モデル(寄生キャパシタ)
クロック線とアナログ信号線の間に寄生キャパシタ $C_C$ が存在する場合、クロック線の電位変動 $\Delta V_{dig}$ による信号線の電位変動 $\Delta V_{alg}$ は:
ΔValg = ( Cc / (Cc + Cs) ) * ΔVdig * exp[ -t / (Rout * (Cc + Cs)) ]
- $Cs$:信号線の対地容量
- $Rout$:信号線の出力インピーダンス
👉 $Rout$ が小さいほど、また $Cc$ が小さいほど、ノイズは小さくなる。
👉 シールド板を挿入すると $Cc$ を減らせるため、効果的。
(2) 基板の電気的モデル
シリコン基板は「抵抗」と「キャパシタ」が並列になったモデルで表される。
- 抵抗としての導電率:
R = ρ * l / S
- キャパシタとしての容量:
C = ε * S / l
したがって、周波数 $\omega$ での有効コンダクタンスは:
G(ω) = (1/ρ) * (S/l) + jωε (S/l)
👉 低周波では「抵抗」として振る舞い、高周波では「キャパシタ」として振る舞う。
👉 遮断周波数は:
f_c = 1 / (2π ρε)
例:ρ=10^2 Ω·cm の場合、fc ≈ 15 GHz → RF回路ではキャパシタ的に振る舞う。
(3) 寄生インダクタによるノイズ(電磁誘導)
隣接する配線にクロック電流が流れると、磁界を介して信号線に誘導電流が生じる。
相互インダクタンス M による電圧は:
Vind = M * (dIdig/dt)
- 配線対のループ面積が大きいほどノイズも大きい。
- 対向電流を流す差動配線 → 磁界をキャンセルでき、ノイズが減少する。
(4) 基板抵抗を介したノイズ
MOSFETのドレインやクロック線の電位が変動すると、pn接合容量に蓄積された電子が放出され、基板を経由して広がる。これにより基板電位が揺れ、アナログ回路にノイズが誘起される。
対策:
- ノイズ源の近傍に基板と同じ導電型の拡散層を配置 → 低インピーダンス接続で電子を吸収
- ノイズに敏感な回路を「ガードリング」で囲む → 電子を吸収して内部への影響を防ぐ
(5) 差動信号によるノイズ耐性
差動信号線 (+, –) を近接配置すると、寄生 C, L によるノイズは両線にほぼ同じ大きさで伝わる。
次段では差分を取るため、コモンモード成分(同相ノイズ)はキャンセルされる。
ただし注意点:
- レイアウトを完全対称にすること
- 配線抵抗・容量・トランジスタ特性を2本で完全に一致させること
まとめ
- 寄生キャパシタ:ΔValg ∝ Cc / (Cc+Cs) → シールドで抑制
- 寄生インダクタ:Vind = M dI/dt → 差動配線で磁界キャンセル
- 基板抵抗:電位変動が基板経由で伝搬 → ガードリングで吸収
- 差動信号処理:ノイズをコモンモードとして除去
!pip install numpy matplotlib
import numpy as np
import matplotlib.pyplot as plt
# ========================= PARAMETERS =========================
# 基本パラメータ / Basic parameters
Cc = 50e-15 # coupling capacitance [F]
Cs = 200e-15 # signal line capacitance [F]
Rout = 1e3 # output resistance [Ω]
Vdig = 1.0 # digital swing [V]
t = np.linspace(0, 5e-9, 500) # time axis [s]
rho = 1e2 # resistivity [Ω·cm]
eps = 1.04e-12 # permittivity [F/cm]
l = 1e-2 # length [cm]
S = 1e-4 # area [cm^2]
M = 1e-9 # mutual inductance [H]
freq = np.linspace(1e6, 1e10, 500) # frequency range [Hz]
# ========================= FUNCTIONS =========================
# (1) Parasitic capacitance coupling noise
def delta_valg(Cc, Cs, Rout, Vdig, t):
return (Cc/(Cc+Cs))*Vdig*np.exp(-t/(Rout*(Cc+Cs)))
# (2) Substrate conductance model
def G_complex(rho, eps, S, l, freq):
omega = 2*np.pi*freq
return (1/rho)*(S/l) + 1j*omega*eps*(S/l)
# (3) Inductive coupling noise
def V_ind(M, Iamp, freq):
omega = 2*np.pi*freq
dIdt = Iamp*omega # sinusoidal current derivative amplitude
return M*dIdt
# ========================= CALCULATIONS =========================
Valg = delta_valg(Cc, Cs, Rout, Vdig, t)
G = G_complex(rho, eps, S, l, freq)
Vind = V_ind(M, Iamp=1.0, freq=freq)
# ========================= PLOTS =========================
# (1) ΔValg vs time
plt.plot(t*1e9, Valg)
plt.title("Noise via Parasitic Capacitance")
plt.xlabel("Time [ns]")
plt.ylabel("ΔValg [V]")
plt.grid(True)
plt.show()
# (2) Substrate conductance magnitude vs frequency
plt.loglog(freq, np.abs(G))
plt.title("Substrate Conductance |G(ω)|")
plt.xlabel("Frequency [Hz]")
plt.ylabel("|G(ω)| [S]")
plt.grid(True, which="both")
plt.show()
# (3) Inductive coupling noise vs frequency
plt.loglog(freq, Vind)
plt.title("Inductive Coupling Noise")
plt.xlabel("Frequency [Hz]")
plt.ylabel("Vind [V]")
plt.grid(True, which="both")
plt.show()