FPGA のドライブ強度 4mA/8mA/12mA は何を変えているのか

「ドライブ強度 8mA」は、8mA までしか電流を出せないという意味ではありません。VOL/VOH の規定点で保証する電流であって、実体は出力段の並列トランジスタの本数、つまり出力抵抗とスルーレートです。強くすればリンギングと GND バウンスが増え、弱くすれば配線容量の充電が遅れます。

最終更新: 2026-09-23 FPGALVCMOSドライブ強度SSNGNDバウンス

「8mA」は上限ではなく、規定点での保証電流

LVCMOS33 の出力に「ドライブ強度 8mA」を選ぶと、その出力は 8mA しか流せなくなる、と誤解されがちです。実際には逆で、VOL/VOH という電圧の規定点で、最低でもこれだけの電流を保証するという意味です。JEDEC の JESD8-B(LVCMOS の電気的特性)でも、VOL は「このスペックの IOL を流したときに VOL 以下になる電圧」として定義されていて、IOL は上限ではなく保証条件の一部です。

出力段の中身は、ゲート幅の違う(あるいは本数の違う)プッシュプルの MOSFET を並列に並べたもので、ドライブ強度の設定はそのうち何本を同時にオンにするかを切り替えているだけです。本数が増えれば並列合成の抵抗が下がり、同じ電流でも電圧降下が小さくなる。VOL/VOH の規定点を満たす電流(=カタログの「〇〇mA」)が大きいほど、本数が多く、出力抵抗が低いということです。

実際に流れる電流は、負荷が要求する分だけです。LED を 1 個光らせるだけなら、12mA 設定でも実際に流れるのは数 mA です。「強度」が変えているのは電流の上限ではなく、出力インピーダンスとスルーレートで、これが配線への影響を決めます。

強度ごとの出力抵抗の目安

出力抵抗は VOL(または VDD − VOH)を、その強度で保証する電流 IOL で割ったものとして概算できます。Rout ≒ VOL ÷ IOL です。LVCMOS33 で VOL の規定が 0.4V の場合の目安を計算します。

LVCMOS33、VOL = 0.4V を仮定したときの出力抵抗の目安(実機・ベンダーで変わるので「目安」)
ドライブ強度Rout ≒ VOL ÷ IOL50Ω 配線との関係
4mA約 100Ωかなり不整合。反射が大きい
8mA約 50Ωほぼ整合。ダンピング抵抗なしで済むことが多い
12mA約 33Ω低インピーダンス側。ダンピング抵抗を足して整合させるのが前提
16mA約 25Ωさらに低い。ダンピング抵抗がほぼ必須

これは VOL 規定点からの逆算であって、実際の小信号出力抵抗(IBIS モデルの V-I カーブの傾き)とは近いですが一致しません。配線設計で本当に必要な精度で出力抵抗を知りたいときは、ベンダーが配布する IBIS モデルの Pulldown/Pullup テーブルを直接読んでください。読み方は別記事「IBIS から出力抵抗を読む」にまとめてあります。

ドライブ強度と出力段出力段は並列トランジスタの集まりで、ドライブ強度の設定はオンにする本数を切り替えている。 4mA 設定並列 1 本 → 抵抗 高い 8mA 設定並列 2 本 → 抵抗 中 12mA 設定並列 3 本 → 抵抗 低い VDD GND PAD 1 2 3 R_out ≒ 100Ω R_out ≒ 50Ω R_out ≒ 33Ω
図1:出力段は並列トランジスタの集まりで、ドライブ強度の設定はオンにする本数を切り替えている。本数が増えるほど合成抵抗が下がる。

強くしすぎるとどうなるか:リンギングとオーバーシュート

出力抵抗が配線の特性インピーダンス Z0(基板の 50Ω 配線が一般的)より低いと、送端で反射係数が負になり、受端が開放(ハイインピーダンス入力)なら、そこでもう一度反射して波形が跳ね上がります。

送端の立ち上がり直後の電圧は Vlaunch = VDD × Z0 ÷ (Z0 + Rout)、受端の開放端での最初のピークはその 2 倍に近づきます。VDD = 3.3V、Z0 = 50Ω で計算すると、16mA(Rout ≒ 25Ω)でおよそ 4.4V、12mA(33Ω)で 3.98V に達します。8mA(50Ω、ほぼ整合)だとちょうど VDD の 3.3V で収まります。

3.3V 系 IC の絶対最大定格は 3.6V が多く、4.4V も 3.98V もこれを超えます。実機での症状は、オシロで見える波形のオーバーシュートだけでなく、受信側の保護ダイオードに繰り返し電流が流れることによる長期的な劣化、そして波形がスレッショルドを何度も横切ることによる二重クロック・誤カウントです。配線が「臨界長」を超えて伝送線路として振る舞う条件は、別記事「配線は何 mm から「伝送線路」になるか」で扱っています。

受端波形とドライブ強度ドライブ強度を上げると受端の波形は大きくオーバーシュートする。 電圧 時間 VDD 3.3V 絶対最大定格 3.6V 受端(開放) 8mA(R_out≒50Ω) ほぼ整合 12mA(R_out≒33Ω) 約3.98V 16mA(R_out≒25Ω) 約4.4V
図2:同じ配線・同じ受端でも、ドライブ強度を上げると受端の波形は大きくオーバーシュートする。8mA(≒50Ω)が最も素直で、16mA(≒25Ω)は 4V を超えて跳ねる。

強くしすぎるとどうなるか:同時スイッチングノイズ(SSN)

もう一つの効きどころは、複数の出力ピンが同時に切り替わるときです。GND ピンとダイの GND の間には、ボンディングワイヤやパッケージ内配線、BGA のビアによる寄生インダクタンス Lgnd が必ず存在します。N 本の出力が同時に切り替わると、そこに流れる電流変化 di/dt がすべて足し合わされ、V = Lgnd × (dItotal/dt) だけダイ側の GND 基準電位が跳ね上がります。これがグラウンドバウンス(Ground Bounce)で、SSN(Simultaneous Switching Noise)の主な原因です。

数字で確認します。10pF の負荷を 16 本、立ち上がり時間 1ns で同時にハイへ駆動するとします。1 本あたりの充電電流は I = C·V/t = 10pF × 3.3V ÷ 1ns ≒ 33mA、16 本合計で約 528mA。BGA パッケージの GND インダクタンスを 1nH とすると、バウンスは V = 1nH × 528mA ÷ 1ns ≒ 0.53V。QFP でボンディングワイヤ経由(Lgnd ≒ 4nH)だと、同じ条件で 約 2.1V にまで達します。

この電位は、ダイ内部で見ている「GND」そのものが持ち上がることを意味します。ロジック的にはまだ L のはずの他の入力ピンが、GND 側だけ浮くことで相対的に H 側へ振れて見え、同じバンクの静的な信号が誤って読み取られることがあります。DDR のような高速バスで「タイミングは合っているはずなのに特定パターンでだけ化ける」不具合の一因が、これです。

同時スイッチングによる GND バウンス16 本の出力が同時に切り替わると、GND インダクタンスに大きな di/dt がかかり、ダイ側の GND 基準電位が持ち上がる。 16 本 同時にH へ … ダイ内部の GND 静的 "L" の隣接ピン 相対的にHへ振れ、誤読の恐れ パッケージの GND インダクタンス 基板側 GND (0V基準) V = L・(ΔI_total/Δt) ΔI_total ≒ 528mA (16本×33mA) BGA:L≒1nH≒0.53V QFP(ボンディングワイヤ):L≒4nH≒2.1V
図3:16 本の出力が同時にハイへ切り替わると、パッケージの GND インダクタンスに大きな di/dt がかかり、ダイ側の GND 基準電位が瞬間的に持ち上がる。

強くしすぎるとどうなるか:EMI と消費電流

エッジが速いほど、その信号が持つ帯域は広がります。目安の式 BW ≒ 0.35 ÷ tr で見ると、tr = 1ns なら約 350MHz 相当、tr = 0.5ns なら約 700MHz 相当まで成分が伸びます。輻射 EMI の測定で問題になりやすいのは、まさにこの帯域です。ドライブ強度を上げる(=出力抵抗を下げてエッジを速くする)と、狙っていなくても放射のエネルギーが高い周波数側へ広がります。

消費電流の面では、容量負荷を充放電する電流のピーク値が大きくなります。動作周波数あたりの平均消費電力(P = C·V²·f)自体は強度に依存しませんが、ピーク電流は出力抵抗が下がるほど大きくなり、電源レイヤのデカップリングに要求される ESR・実装インダクタンスが厳しくなります。ビアのインダクタンスがデカップリングコンデンサの効き方をどう左右するかは、別記事「via-inductance-decoupling」も参考にしてください。

弱くしすぎるとどうなるか:容量負荷の立ち上がり遅延とタイミング

出力抵抗が高いと、配線容量・入力容量(合わせて数 pF〜数十 pF)を充電する時定数 τ = Rout × C が伸びます。4mA(Rout ≒ 100Ω)で 20pF の負荷なら τ = 2ns、10〜90% の立ち上がり時間はその約 2.2 倍で 4.4ns 程度です。同じ負荷を 12mA(33Ω)で駆動すれば τ は約 0.66ns、立ち上がりは 1.5ns 弱まで縮みます。

この遅延は、クロックに対するセットアップ/ホールドのタイミング計算にそのまま乗ります。配線容量と駆動電流の関係、負荷容量ごとの立ち上がり時間の具体的な計算は、別記事「配線容量と、ドライバがそれを駆動できるか」で詳しく扱っています。バスの中で 1 ピンだけ強度が違う設定になっていると、そのピンだけタイミングマージンが削れる、という事故もよくあります。

ダンピング抵抗との組み合わせで過減衰になる罠

配線を整合させる定番は、送端に 22Ω や 33Ω の直列(ダンピング)抵抗を入れて、Rout + Rs ≒ Z0 にすることです。ここで見落とされがちなのが、Rout はドライブ強度で変わるという点です。

8mA(Rout ≒ 50Ω)は、50Ω 配線に対してすでにほぼ整合しています。ここに「いつもの」33Ω を足すと、合計は 83Ω。送端の立ち上がり電圧は VDD × 50 ÷ (50+83) ≒ 1.24V しか出ず、残りは反射がもう一往復してからやっと VDD 近くまで階段状に上がる、過減衰の波形になります。速くするつもりで強度を上げたのに、ダンピング抵抗を機械的に足すことで逆に遅くなる、というのがこの罠です。

一方、16mA(Rout ≒ 25Ω)に 33Ω を足すと合計 58Ω で、Z0 = 50Ω にかなり近く、ダンピング抵抗の本来の使い方(低い Rout を整合点まで持ち上げる)になっています。ダンピング抵抗の値は、ドライブ強度が決まったあとに Rout の目安を引いて選ぶもので、強度によらず 22Ω や 33Ω を固定で使うものではありません。

ダンピング抵抗との組み合わせドライブ強度で変わる R_out にダンピング抵抗を足すと、組み合わせによっては過減衰になる。 8mA + 33Ω50ΩR_out33ΩR_s(ダンピング)Z0 = 50Ω合計 83Ω送端立ち上がり電圧≒1.24V(38%)過減衰:階段状にゆっくり上昇 16mA + 33Ω25ΩR_out33ΩR_s(ダンピング)Z0 = 50Ω合計 58Ω送端立ち上がり電圧≒1.53V(46%)ほぼ整合:素直に立ち上がる
図4:8mA(R_out≒50Ω)はすでに50Ω配線とほぼ整合しており、そこへ33Ωのダンピング抵抗を足すと合計83Ωで過減衰になる。16mA(R_out≒25Ω)に33Ωを足すと合計58Ωで、整合点に近づく。

スルーレート設定(SLOW/FAST)との違い

FPGA の I/O 属性には、ドライブ強度とは別に SLOW/FAST のスルーレート設定があります。ドライブ強度が出力抵抗(=静的な電流駆動能力)を決めるのに対し、スルーレートは同じ出力抵抗のまま、立ち上がり時間 tr だけを変える設定です。出力段の駆動段を電流制限してゲート容量の充放電を遅らせる、といった内部回路で実現されています。

SSN への効き方は 2 乗で違います。dI/dt と、GND インダクタンスに乗る電圧の両方に tr が分母で入るため、バウンス電圧はおよそ 1/tr2 で増えます。先ほどの 16 本同時・10pF・Lgnd = 1nH の条件で、FAST(tr = 0.5ns)なら約 2.1V、SLOW(tr = 2ns)なら約 0.13V です。「そこまで強度を上げる必要はないが、少しでも速くしたい」というときは、強度を上げるよりスルーレートを SLOW から FAST に上げる方が、SSN への影響を抑えたまま速くできる場合があります(逆に、SSN が問題ならまず SLOW を疑う)。

同じ「強度 8mA」でも SLOW と FAST でリンギング量が変わる品種があります。Rout は同じでも tr が違えば、配線の臨界長に対する余裕も変わるためです。強度とスルーレートは別々に確認してください。

決め方の手順

  1. 配線の特性インピーダンス Z0(基板スタックアップから、マイクロストリップなら 45〜55Ω が一般的)を確認する。
  2. そのバスの負荷容量(配線容量+受信 IC の入力容量)と、必要な立ち上がり時間の上限(タイミング制約から逆算)を確認する。
  3. 弱い強度から、その立ち上がり時間を満たす最小の強度を選ぶ(不要に強くしない)。
  4. IBIS モデルまたは VOL/VOH の目安から Rout を求め、ダンピング抵抗を足すかどうか、足すならいくつにするかを Rout + Rs ≒ Z0 で決める。
  5. 同一バンク・同一タイミングで同時に切り替わるピン数を数える。バス幅が広いほど、また同時にトグルしやすいデータパターンほど SSN が厳しくなる。
  6. SSN が厳しい場合は、強度を下げる、SLOW に落とす、GND ピンを増やす(VRM/GND の割り当てを見直す)、スイッチングをずらす(OSERDES など出力段でわずかに位相をずらす機能がある品種もある)のいずれかで対策する。
  7. 実機でオシロを当て、受端の波形(オーバーシュート)と、隣接ピンの誤トグル(SSN)の両方を確認してから確定する。

よくある質問

ドライブ強度を上げると本当に消費電力が増えますか。
動作周波数あたりの平均消費電力は、基本的には P = C·V²·f で決まり、ドライブ強度そのものには依存しません。強度で増えるのは充放電のピーク電流です。ただし、必要以上に強くしてエッジを速くすると、それに伴う輻射や SSN 対策のために追加の部品(フェライトビーズ、デカップリング強化)が必要になり、システム全体としてはコストや実装面積の形で効いてきます。
全ピンを弱い設定にしておけば安全ですか。
SSN やリンギングの観点では安全側ですが、立ち上がりが遅くなってタイミングマージンを削る副作用があります。クロックや高速な同期バスでは、弱すぎる設定が原因でセットアップ時間を満たせなくなることがあります。低速な GPIO やリセット信号のような、タイミングにシビアでない信号から弱くするのが安全です。
IBIS モデルがないベンダーの石ではどう見積もればよいですか。
データシートの VOL/VOH と、それを保証する IOL/IOH から Rout ≒ VOL/IOL で概算するのが現実的な目安です。ただしこれは 1 点の直流条件からの外挿で、実際の小信号インピーダンスとは数割ずれることがあります。整合を厳密に取りたい設計では、実機の波形を見てダンピング抵抗を微調整してください。
ダンピング抵抗を入れたのに、まだリンギングが残ります。なぜですか。
よくある原因は、ドライブ強度を後から変更してRout が変わったのにダンピング抵抗の値を見直していない場合と、受端に並列終端やクランプダイオードなど別の負荷インピーダンスがぶら下がっている場合です。分岐配線(1 本のネットに複数の受信端がある)でも、途中の受信端で波形が乱れます。オシロで送端・受端の両方を見て、どちらの整合が崩れているかを切り分けてください。
同時スイッチングを減らすなら、GND ピンを増やす以外に何ができますか。
出力の切り替えタイミングを数 100ps〜数 ns ずらす(バスの下位ビットと上位ビットで駆動段の遅延をわずかに変える、または品種によってはスキュー制御機能を使う)と、di/dt のピークが時間方向に分散して GND バウンスのピーク値が下がります。また、同時に切り替わる本数が多いバスほど、強度は必要最小限にとどめるのが効果的です。

参考にした規格・資料

  • JEDEC JESD8-B, "Interface Standard for Nominal 3V/3.3V Supply Digital Integrated Circuits" — LVCMOS の VOL/VOH/IOL/IOH の定義
  • 各 FPGA ベンダーの I/O 規格資料(LVCMOS の DRIVE / SLEW 属性の説明) — ドライブ強度・スルーレート設定の選択肢と、IOSTANDARD ごとの組み合わせ
  • 各 FPGA ベンダーが配布する IBIS モデル(.ibs ファイル) — Pulldown/Pullup の V-I テーブルから実際の出力抵抗を読む一次情報
  • IBIS Open Forum, "I/O Buffer Information Specification (IBIS)" — IBIS モデルのフォーマットと V-I/V-T テーブルの定義

← コラム一覧へ