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?

アナログ回路のノイズ

Posted at

(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接合容量に蓄積された電子が放出され、基板を経由して広がる。これにより基板電位が揺れ、アナログ回路にノイズが誘起される。

対策:

  1. ノイズ源の近傍に基板と同じ導電型の拡散層を配置 → 低インピーダンス接続で電子を吸収
  2. ノイズに敏感な回路を「ガードリング」で囲む → 電子を吸収して内部への影響を防ぐ

(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()
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?