FPGA オリジナルボード設計~ FPGA の電源設計のコツ

Xilinx FPGA は様々な電圧の電源を必要とします。電源の安定性は基板の信頼性に直結します。

今回は Xilinx FPGA の中でも特に7シリーズ FPGA の電源について見ていきます。

電源ピンの種類

まずは、7シリーズ FPGA の電源ピンの種類と使用方法について見ていきましょう。

VCCINT

VCCINT は FPGA のコア電圧で通常は 1.0Vにします。「通常は」と書いたのは消費電力を抑えるために 0.9V や 0.95V にすることもできるからですが、普通はあまり行いません。

電圧を下げるには、-1LI や -2LE といった特別なグレードのデバイスが必要になります。

VCCBRAM

VCCBRAM は、FPGA 内部の BlockRAM に供給する電源電圧です。通常は VCCINT と同じく 1.0V を供給します。-1LI や -2LE といったグレードのデバイスでは低消費電力にするために 0.95V にすることもできるようですが、普通はしないでしょう。

普通の設計ならば、VCCINT と VCCBRAM は一緒に 1.0V に接続してください。

VCCO

VCCO は各 I/O バンクの電源です。例えば LVCMOS33 を使うバンクでは 3.3V に、SSTL_18 を使うバンクでは 1.8V にします。特に説明は不要だと思います。

VCCAUX

VCCAUX とは何かといわれると説明するのが大変難しいのですが、コンフィギュレーションデータの保持、eFUSE、JTAG 回路の電源、IO バッファのプレドライバ、DCM 遅延ライン、差動入力増幅器/コンパレータ、LVDS バイアス生成など、雑多なことに使われているようです。

7シリーズでの VCCAUX は 1.8V です。絶対最大定格電圧は 2.0V なので超えないようにしてください。

Spartan-6 では VCCAUX は 2.5V か 3.3V かを選択できましたが、7シリーズでは選択の余地はなく常に 1.8V です。

VCCAUX_IO

VCCAUX_IO は VCCAUX とは似て非なる電源です。これは HP バンクにだけ存在し、DDR3 メモリの転送レートを向上させたい場合に使います。HP バンクなので Kintex-7、Virtex-7 と XC7Z030 以上の ZYNQ にのみ存在します。

この電源ピンに関して図解している資料はないので、私の想像ですがイメージを描きます。

FPGA のコア (1.0V) から外部に出力しようとしている信号は、VCCO の電源が供給されるバッファを直接ドライブするのではなく、いったん VCCAUX (=1.8V) が供給されるバッファを動かしてから VCCO のバッファを駆動します (あくまでも想像です)。

I/O ピンをより高速に動かしたい場合、I/O プレバッファをより高速で動かさなければならず、そのためには中間にあるプレバッファをより高い電圧で駆動します。

電圧を上げるとトランジスタの動作が速くなるのか、より高い電圧までスイングするため結果的に速くなるのかはわかりませんが、IO プレバッファの電源電圧を分離できるようにするため VCCAUX_IO が存在するものと考えています。

Kintex-7 のデータシートから引用した表を以下に載せます。要約すると、DDR3 メモリを使用して 1600Mbps 以上のレートを出したいならば、VCCAUX_IO を 2.0V にするか、高価な-3デバイスを使う必要があるということです。

XILINXデータシートDS182から引用
XILINXデータシートDS182から引用

実際にスピードグレード2の XC7K160T-2FFG676 を使った基板で 1600Mbps でのアクセスを試してみたところ、VCCAUX_IO=1.8V では稀にエラーが出ることがありましたが、2.0V にしてからはエラーは出なくなりました。筆者の経験でも VCCAUX_IO の効果はありそうだと考えています。

なお、DDR2 メモリは 800Mbps までしかいかないので、DDR2 を使う限りは 2.0V に上げる必要性はありません。

ZYNQ 関連の電源ピン

VCCPINT、VCCPAUX

VCCPINT と VCCPAUX は ZYNQ に存在する PS 用の電源で、VCCINT (1.0V) と VCCAUX (1.8V) に接続して構いません。PS と PL で電源端子は分かれていますが、一緒につないでしまって問題ありません。

そもそも何で PS と PL で電源が分かれているのかという疑問はありますが、どうやら PS だけ起動して PL は電源 OFF にするということもできるようなのです。

VCCO_MIO0_500、VCCO_MIO0_501

VCCO_MIO0_500 と VCCO_MIO0_501 は ZYNQ の MIO500 バンクと MIO501 バンクの電源です。MIO0 ~ MIO15 と、MIO16 ~ MIO53 の電源は分けることができるようになっています。これらの電源は 1.8V または 3.3V にしますが、1.8V で動くように周辺 IC を選んだほうがよいでしょう。

なぜならば、ギガビットトランシーバ用 PHY を動かすには 250MHz の速度の LVCMOS で駆動するのですが、LVCMOS33 で 250MHz というのはさすがに速すぎるでしょう。ギガビット PHY を動かすには LVCMOS18 のほうが良いので、それに合わせて他のペリフェラルも 1.8V にするのがよいでしょう。

MGT 関連の電源ピン

MGT (ギガビットトランシーバ) 関連の電源ピンには、MGTAVTT、MGTAVCC、MGTVCCAUX、MGTAVTTRCAL があります。

機能と使い方を簡単に説明すると

  • MGTAVTT はトランシーバおよびレシーバの終端回路の電源で 1.2V を供給
  • MGTAVCC は MGT のコア電源で 1.0V
  • MGTVCCAUX は、MGT 用の AUX 電源で 1.8V です。フィルタしてから入れる
  • MGTAVTTRCAL は抵抗キャリブレーション回路の電源で AVTT の 1.2V を供給

となります。

MGTRREF はキャリブレーション用の抵抗を接続するピンで MGTAVTTRCAL から 100Ω の抵抗でつなぎます。

どのような電源 IC (モジュール) を使えばよいのか?

以上で述べたように Xilinx FPGA にはたくさんの電源ピンがあります。1.0V、1.8V は必須で、さらにユーザ IO 用の電源ピンが必要になります。MGT を使う場合は 1.2V も使います。

これらの電源をどのような回路で供給すればよいかというと、決まった答えはありませんが、だいたいはスイッチングレギュレータで作るか、PoL (Point of Load) 電源モジュールを使うといった選択になります。

電源が遠いと電圧がゆさぶられる

FPGA の電力消費のイメージは下の図のように、クロックがトグルすると FPGA の中のたくさんの MOS FET が動いて瞬間的に大電流を消費すると考えてください。プリント基板のパターンは 1cm で 10nH の自己インダクタンスがあるので、もし 1ns の間に 10mA の電源電流の変動があると仮定すると、インダクタンスによって 100mV の逆起電力が生じてしまいます。電源回路が 1cm 先にあるならば、供給する電圧は 100mV も変動することになります。

もちろん、1ns で 10mA の電流変化というのは適当に決めた計算例なので、実際にはそれ以上かも以下かもしれません。程度の大小はありますが電源ラインのインダクタンスが電源電圧をゆさぶります。そのため、FPGA の電源端子からできるだけ近いところに電源回路を置く必要がでてくるわけです。

スイッチング電源回路

FPGA 用のスイッチング電源に求められる要件は、数 A の電流を取り出せることと、急峻な電源電流の変化に追従できることと、そしてノイズが FPGA の求める電源電圧の範囲に収まることです。

たとえば、Kintex-7 の VCCINT 1.0V の推奨動作条件は 0.97V から 1.03V までですから、リップルと、ラインレギュレーション、ロードレギュレーションを含めてもこの範囲に収まっている必要があります。許容される誤差は 3% ですから電源電圧を設定する抵抗は 1% を使わなければなりません。電源回路は抵抗2本で電圧を設定するので、最悪の場合で抵抗で 2% もずれることになります。ノイズ等は 10mV 以内に抑えなければならないのです。これは結構大変なことです。

また、FPGA の電源はたくさんの種類の電圧が必要になるので、1つの IC で多数の出力をサポートしているものを使用するのがお得です。

このような目的を満たす電源 IC は Digikey などの通販サイトで探せば出てくると思います。電源 IC のデータシートの1ページ目に FPGA 用とか PoL と書いてあればその目的は果たせます。

どんな IC を使えばよいかわからないという方は、例えば、Texas Instruments 社の Web サイトには Xilinx FPGA 用の電源 IC セレクタがあるので見てください。

開発中の組込みシステム向け電源 | TI.com
開発中の SoC、プロセッサ、マイコン、センサ、FPGA 向けにカスタマイズ済みの電源ソリューションをご確認ください

他にもルネサスも FPGA 用の電源 IC に力を入れています。

https://www.renesas.com/jp/ja/solutions/key-technology/fpga-power-solutions/fpga-power-xilinx.html

このあたりを抑えておけばいいでしょう。

PoL モジュール

PoL (Point of Load) というのは FPGA のすぐ近くに置くことを意図した小型の電源モジュールです。多くはスイッチング電源 IC とコイルをセットにしたもので、抵抗とコンデンサを外付けして使います。サイズにもよりますがコンデンサまで内蔵したものもあります。

この分野で秀でているのは Enpilion (エンピリオン) というモジュールだったのですが、現在では Intel に買収されています。例えば、EP53F8QI というモジュールは 3mm×3mm サイズで 0.6V ~ 4.96V で 1.5A の電源を供給できます。

価格的にも自分でスイッチング電源を作るのとほとんど変わらないので、こういったモジュールを使ってみるのも良いかと思います。

バイパスコンデンサ

FPGA に限らず、ディジタル IC の電源にはバイパスコンデンサ (パスコン) が必須です。IC の端子1個のつき何 μF のパスコンを何個付ければよいかというのは永遠のテーマでした。

かつては端子1個につき 0.1μF と言われたり、0.1uF では 100MHz に対応できないから 0.01uF と 1000pF を並列で付けなさいといわれたり、いや貫通コンデンサを使いなさいとかコンデンサアレイを使いなさいとか・・多くの人がそれぞれ適当なことを言います。

Xilinx FPGA の場合は「PCB デザインガイド」という資料に必要なパスコンの量の目安が載っていますのでこれを参考にしてください。

ZYNQ の場合は UG933、それ以外の7シリーズの場合は UG483です。

Artix-7 の場合

例えば、Artix-7 の XC7A100T CSG324 の場合を見てみましょう。

VCCINT には 330uF のパスコンが1つと、4.7uF が6つ、0.47uF が8つ必要となっています。また、VCCBRAM は VCCINT と同じですが 100uF が1つ、0.47uF が2つとなっています。

また VCCO はバンクあたり 0.47uF が4個で 4.7uF が2個と、47μF が1個と書かれています。バンクあたり7個のコンデンサなので実質的には VCCIO 1本あたり1個のパスコンと大きなコンデンサが1個ということになります。

バンクが5つあれば30個の小さなコンデンサをうじゃうじゃと置かなければなりません。それに 1.0V のラインにも16個のコンデンサが必要になります。

大量のコンデンサを FPGA の電源端子の近くに置くのは容易ではありません。

ZYNQ の場合

小規模な ZYNQ の PL の中身は Artix なので、VCCO のパスコンは Artix と同じ数が必要となります。VCCINT と VCCAUX に必要な数がはなぜか減っています。

Z-7010 と Z-7020 でも VCCINT に必要なパスコンの数が変わってきて、0.47uF は 4個、4.7uF は2個が必要になります。

Kintex-7 の場合

Kintex-7 になると事情が大きく変わってきます。Kintex-7 以上では小さなパスコンは FPGA に内蔵され、なんと、0.47uF の小さなコンデンサがいらなくなるのです。

これゆえ各バンクには 47uF のパスコンを1個置くだけでよくなります。

このメリットは ZYNQ にも受け継がれ、XC7Z030 以上の ZYNQ では 0.47uF は不要になります。

実際の回路を調査してみよう

多くの人が使っているであろうメジャーなボードを見てみます。

ZYBO

みんな大好き ZYBO の回路図を見てみると、ADP5052ACPZ という電源 IC を使って 3.3V、1.35V、1.5V、1.0V とアナログ用の 1.8V を作っています。ADP5052ACPZ はスイッチング電源4つと LDO 1つをまとめた、まさに FPGA 用の電源 IC です。

XC7Z020 では VCCO のパスコンはバンク当たり 0.47uF が4個、4.7uF が2個ですが。ZYBO の回路図をみると要件を満たしているように見えます。


実際にこのパスコンを配置するのは大変なようで、上の写真を見るとわかるように FPGA の周囲はびっしりとパスコンで埋まっていることがわかります。パスコンが邪魔して部品面にもはんだ面にも配線を通しにくくなっています。

Arty 35T

電源 IC には ZYBO と同じく ADP5052ACPZ を使っています。驚くべきことに、Arty は低消費電流タイプの -1L を使っていて、VCCINT と VCCBRAM が 0.95V なのです。

本稿の最初で「普通は 0.95V なんかにしない」と書いたのを撤回します。こんな身近に低消費電力設計の FPGA がボードがあったとは驚きです。

規定量のパスコンのほかに 47nF まで追加されています。

回路図的には理想的なパスコンを体現したボードと言えます。

しかし、実際の基板をみてみると、FPGA の真裏に配置されたパスコンはわずかで、ほとんどのパスコンは FPGA の外側に八卦のような形で並んでいます。VCCO のピン1つ1つにパスコンを入れるのが本来の姿なので、こんな遠いところに並列に置いたパスコンがコンデンサとして機能しているかどうかは議論の余地があるでしょう。

PYNQ

PYNQ は TPS65400RGZ という電源 IC を使って1.0V、3.3V、1.8V、1.5V を作り出しています。XADC の 1.8V はディジタルの 1.8V から EMI フィルタを介して作っています。

ZYBO と比べるとパスコンが少なく頼りないように思えます。

裏面を見ても中央には6個の大きなコンデンサがあるものの、たくさんのパスコンはありません。

回路図を見てみると、VCCO はバンク当たり 0.47uF が4個、4.7uF が2個入っていて、VCCINT や VCCAUX も規定の数のパスコンが入っています。

このボードはパスコンの数をちょうど満たしています。ZYBO や Arty が過剰だったのです。適正数のパスコンを FPGA の真裏に実装すようになったというのが大きな進歩です。

Ultra96

Ultra96 は UltraScale なので電源ピンはさらに増えて IRPS5401MTRPBF という電源 IC を2個使っています。1個目の IRPS5401MTRPBF で 1.8V (VCCAUX)、1.2V (VCCO)、1.1V (PSDDR)、0.85V (VCCINT)、3.3V (DisplayPort) を作っています。

2個目の IRPS5401MTRPBF で 1.8V (VCCPSAUX)、0.85V (VCCPSINTLP)、3.3V (VCCO)、0.85V (PSINTFP)、1.2V (PSPLL)を作っています。PSMGT 用にはさらに別の LDO を2個使っています。

ZYBO、PYNQ、Ultra96 に共通していることは多出力の電源 IC を使って、スイッチング電源を1か所に集中させていることです。

Zynqberry (ジンクベリー)

ここまでは最大手デザインハウスである Digilent や AVNET が関与していた標準的な評価ボードでした。標準的な評価ボードは模範的な回路の作り方を示すために基板の面積を犠牲にしてでも守らなければいけない規範があるのでしょう。

実際の製品に組み込むボードとなると、実装面積が重要になってくるので基板を悠々と使うわけにはいきません。

ドイツに TrenzElectronic 社という小型で高密度な工業用 FPGA モジュールを作っている会社があります。その TrenzElectronic 社から、Zynqberry (ジンクベリー) という RasPi 形状の ZYNQ モジュールが出ています。

Zynqberry は Enpilion (エンピリオン) のモジュールをふんだんにつかっていて、1.35V、1.8V、3.3V、1.0V 用に EN5311QI というモジュールを4つも使っています。(4つ目のモジュールは裏面にある)

4つの電源モジュールがばらけて置かれているのがわかります。

PYNQ などで使われている4出力のスイッチングレギュレータは4つの電源が同じ場所から出てきますが、実際には1.5V (または 1.35V) の DDR3 用電源は、VCCINT や VCCAUX とは別の方向から出てきたほうがプリント基板の配線を引きやすかったりもします。

回路図を見ると 1.0V のラインにはパスコンとして 0.47uF が3個、4.7uF が2個入っています。

XC7Z010 CLG225 の 1.0V ラインは、VCCINT に 0.47uF が2個 + VCCPINT には 0.47uF が3個必要なので、パスコンが足りないことになりますが、特に不具合が生じることもなく問題なく動きます。

GigaZee (ギガジー)

同じく TrenzElectronic 社の GigaZee というボードを見てみます。Gigazee は XC7Z020 CLG484 を搭載しているのですが、下の写真をみるとわかるようにさらに高密度になっていて、もはやパスコンが入るような余裕はないように思えてきます。

電源モジュールはもちろん Enpirion です。

実際の回路図を見てみると、1.0V のラインには 0.47uF が8個入っていて必要数を満たしています。

極小サイズのパスコンを使う、シルクを描かない、超多層基板で配線を内層に閉じ込めるなどの工夫をすることで達成できます。

実際のボードの調査結果

実際に製品として出回っているボードを見ると、頑張れば要求されるパスコンの数は満たすことは可能であることがわかります。1個くらい減っても実際の動作に支障はないと思われますが、できるだけ必要数は満たすようにしましょう。

高密度のボードを作って狭い面積に押し込めたい場合は、PoL を使うか、2出力くらいのスイッチング電源 IC を2個配置したほうが結果的に良くなるかもしれません。

雑多なこと

電源の投入順序は守る必要があるのか?

守った方がよいのですが、守らなかったからといって致命的な問題は起きません。せいぜい起動時の消費電流がちょっと増える程度です。

FPGA の中で電源ピンは全部つながっているのか?

FPGA の中の VCCINT や GND はそれぞれ全部つながっているとは言われていますが、必ず基板上でつなぐようにしてください。

各電源に必要な電流

VCCINT や VCCAUX にどの程度の電流が流れるかというのは、Vivado の解析結果を見るのが一番です。

例えば、Kintex-7 の XC7K160T で作った PCI Express ボードの消費電力を見てみます。下の解析レポートは、DDR3 SDRAM に PCI Express から DMA 転送ができるというものです。

各電源の消費電流のリストを出すこともできます。

VCCINT と VCCAUX、MGTAVCCとMGTAVTT の消費電流が 1A に迫る大きさで、IO の電流は DDR メモリを使うバンクだけ大きいことがわかります。

一方、LVCMOS33 や LVCMOS18 の電源も使ってはいますが、ほとんど消費していません。VCCADC も 100mA 以下です。

他に Artix-7 や ZYNQ のデザインも調べてみましたが、結論をいうと、

  • VCCINT は約 1A の電流を消費する
  • VCCAUX は約 0.6A の電流を消費する
  • DDR3 メモリの VCCO は 0.5A もの電流を消費する
  • MGT の電源も 0.3~0.6A 程度を消費する
  • ZYNQ の PS の VCCINT は 0.8A 近くの電流を消費する

となります。VCCAUX、VCCINT、MGTAVCC、MGTAVTT、VCCO (DDR3) には安全を見て 2A クラスの電源を用意しましょう。

パスコンはなぜ 0.47uF なのか?

LC 回路の共振周波数は 1/2π√LC ですが、パスコンでは共振周波数より高い周波数ではコンデンサとしては働かないので、クロック周波数が高くスイッチング速度が速くなるにつれて、パスコンの C を減らすか L を減らすことが求められてきました。

20年、いや30年前からパスコンの容量は 0.1uF でした。当時は 0.1uF のパスコンと 0.01uF や 1000pF を並列にして、それでも 100MHz くらいまでのデカップリングしかできないと言われていました。1608 サイズの 0.1uF と 0.01uF を並べて 100MHz の回路を作るというのがおおよその目標でした。

パスコンが対応できる周波数を高くするには、コンデンサの容量を小さくするべきなのですが、7シリーズが推奨する容量は 0.47uF と逆に大きくなってしまっています。これだと 30MHz くらいまでしか対応できないことになっていまいます。

データシートには書かれていませんが、もしかすると7シリーズの FPGA の中には小さなパスコンが入っていて、高い周波数成分のデカップリングは FPGA 単体でできるようになっているのかもしれません。もしくはプリント基板が多層基板になったことによって VCC プレート GND プレーンが作り出すコンデンサに期待しているのかもしれません。

いろいろ考えて達した予想としては、0.47uF や 4.7uF のパスコンが求められているのは、高い周波数のデカップリングではなく、1~30MHz 程度の比較的低い周波数の変動を抑えるためにあるのかもしれません。最近の FPGA には 100MHz 以上でも耐えられるデカップリングコンデンサかそれに相当する機能が初めから備わっているのかもしれません。だから Arty のように FPGA から遠いところにコンデンサを置いても許されるのかもしれません。あくまでも想像ですが。

まとめ

FPGA の電源についてみてきました。結論をまとめます。

  • 7シリーズでは VCCINT と VCCBRAM は 1.0V。VCCAUX は 1.8V です。
  • 電源供給には FPGA 用のスイッチング電源 IC か、PoL 電源モジュールを使いましょう。2A 以上出せるようにしましょう。
  • Kintex-7 以上ではパスコンが内蔵されるので小さな 0.47uF をたくさん置く必要はありません。
  • Artix-7 や Spartan-7 では VCCIO ごとに小さなコンデンサを置く必要があります。
  • 必要なパスコンの数は UG483 を見てください。
タイトルとURLをコピーしました