FPGAのピン配置を決める手順

FPGAのピン配置を決める手順

 FPGAはピン配置を自由にできる。というのが先行してしまい、ピン配置の制限について理解をしないまま設計に入ってしまうことが多いようです。

 もし、FPGAの設計を今から始める。という方は、「ピン配置を決めない」というのが最短・最良の方法だという事を覚えておいてください。ピン配置を決めずにFPGAを設計できるのであれば、プリント基板の設計をしなくてはならないギリギリのタイミングまでシミュレートでデバッグします。そして、ピン配置はコンパイラの自動配置配線機能に任せます。

 しかし、開発の納期に追われていると、FPGAのピン配置を適当に決めて、回路図を先に仕上げて、プリント基板を製作し、部品実装している間にVHDL/Verilogで内部の設計に入る。なんていう開発の順序が逆さになってしまう事が多くあります。このような手順を踏んだ時に、FPGAの内部構造を理解しないままピン配置を決めてしまうと、かなりの確率でコンパイラの配置配線段階で失敗します

 ここでは、配置配線を行うまでに理解しておかなくてはならないFPGAの仕様を解説いたします。

 FPGAは論理回路を自由に構築できますが、何らかの特徴を得る為に特定の機能をハードウェアで組み込んでいることが多くなっています。このような機能をハードIPと呼んだりしますが、以下に搭載されている機能の例を示します。

  • PLL
  • オシレータ
  • メモリ
  • DSP
  • CPU
  • SerDes
  • アナログ回路
  • 差動ドライバ/レシーバ

 このような機能がFPGAには搭載される事が多く、まったく搭載していない物は無いぐらいになりました。これらは、FPGAのロジック回路と一緒にデバイスに組み込まれているのですが、組み込まれる場所が特定されています。これはどういう事かといえば、たとえばPLLの機能はPLLの専用ハードウェアをFPGAに組み込んでいる。という事です。そして、その機能はFPGAのどこかに置かれているのです。

 また、グローバルピンといって、FPGAの高速内部バス専用ピンがあったり、バンクというIOピンの電圧設定等、様々な制限がFPGAのピンにはあります。

 ある程度FPGAの内部仕様を理解して、ピン制限と内部回路の配置を予想できる状態までFPGAのデータシート読み込みと開発する内容のすり合わせが必要なのです。

電源ピン

 真っ先に行うのがFPGAの電源設計です。コア電源やIO電源、さらにPLL用の電源やSerDesの電源等多くの電源を必要とします。そして、その電源投入順序も重要なので、データシートからそれらを読み取り、回路図に落とし込みます。

 特にIO電源はIO電圧の決定の他にIOの仕様にも関わるので注意してください。

コンフィグレーションピン

  コンフィグレーションが必要なFPGAの場合には、その回路設計を行います。コンフィグレーションには2通り考える必要があります。デバッグの時と製品の時です。デバッグの時、毎回コンフィグレーションメモリに転送するのは無駄なので、大抵はFPGAに直接接続したデバッガやライターでFPGAを初期化します。最近の開発環境では、そのデバッガやライターでFPGA内部のメモリを操作して動作波形をキャプチャする機能があります。これを使えるような回路構成を考えます。FPGAはこの機能を使って、搭載したコンフィグレーションROMにライトする機能もありますので、その機能も実装できるようにします。

 次に、製品になった時、電源がONして自動でコンフィグレーションできるような回路にします。この機能は先の電源と同じようにタイミングが問題となる場合がありますので、電源設計と並行して検討する必要があります。

クロックピン

 FPGAのクロック経路を理解するようにします。合わせてPLLについても調査しておきます。FPGAに入力するクロック周波数がPLLの入力範囲に合っている事が重要です。また、PLLの電源は別に供給するFPGAが多いので、その電源ピンを確認します。IOピンと同じ電圧だからと言って同じプリントパターンに接続しないようにします。おそらく、このピンを定めるのが一番難しい問題になると思います。

 Intel社のArriaVのGCLKネットワークを示します。GCLKはグローバルクロックの事で、この図のようにデバイスをの縦横に横断するようにグローバルクロックが配線されています。GCLK[0..3]のように番号が振ってありますので、この番号とピン割り当て表を参考にして、ピンから入力したクロックがどの経路を通るのかを予測します。実際には、コンパイルしてクロック経路を確認します。

 このようなクロックネットワークは同じデバイスでもパッケージが異なったり、ピン数が変わると違う事がありますので注意が必要です。

 PLLですが、上記のようにクロックネットワークとPLLの位置は密接に関わっており、PLLへ接続できるGCLKの制限やピンの制限およびPLL出力からGCLKへの接続やIOピンへの接続など多くの制限があります。

 私は全く初めて使用するFPGAの場合、グローバルクロックの信号線は後から修正ができるように、プリント基板に出しておきます。BGAなどのパッケージだと、後から修正するのは無理ですから、予めプリント基板にパターンを引いておいて、抵抗の実装等でピン配置を変更できるようにしておきます。

 デバッグ中にPLLの仕様変更が生じたり、PLLを増やしたりすることは多いので、クロック経路は柔軟に対応できるようにしておくのが良いと思います。

IOピン

 IOピンは外部接続のレベル(電圧)指定の他、差動信号やプルアップ/プルダウン、オープンドレイン(オープンコレクタ)の使用などでIO指定電圧が決まり、そのブロックの電源電圧を定めます。一般的には高速なピンから指定しておくのが良いと思います。

 稀にバスを外部に出す場合や、DDRなどのメモリを接続する場合があります。この時にはバスが同じ電源ブロックになるように指定しますが、コンパイルして自動配置配線をしたブロックにバスを指定することをお勧めします。

 バスを扱うと、何本も同じ速度で動作するロジックが生成されますが、FPGAのロジックというのは、LUTというルックアップテーブルをコアにしてある単位でモジュールが形成されています。それらが縦横に並んでロジックを形成するような仕組みになっています。バスの幅が広いと、なるべく近くに配置されたブロックが必要になります。これは遠いブロック同士を接続するような配線が増えると、無駄な配線が遅延を生み、動作速度を確保できなくなるからです。最悪な場合、ブロックを接続する配線が足りなくなって、バスを形成できなくなる場合もあります。

 したがって、幅の広い配線をFPGA外部と接続する場合には、自動配置機能を使って速度を満足できるような配置配線を計算してもらうのが簡単な方法になります。

 この場合、配置配線ツールには、配置制限オプションを使って指定した配線の動作速度などを指示しておくと、それを踏まえた自動配置配線を行ってくれます。この機能が使えるのはピン配置確定前なので、ピン配置を先にしてしまうと、配置配線ができなくなる可能性が生じる。というのは、このような事情によります。

 VHDLやVerilogで設計し、完璧にシミュレートされていれば、プリント基板に実装されたFPGAは動作しますが、そんなことは皆無といっていいでしょう。市場に投入するまでに必ず修正が入ります。修正できるのがFPGAのメリットなのですから、修正が必要ないFPGA設計を追い求めるよりもリカバリできるような設計を心掛ける方が得策です。そして、データシートを読み込むことで避けられる修正というのは意外に多く、ピン配置はその典型です。

 特に高機能・高価なFPGAほどピン配置は難しくなる傾向にありますので、上記の注意事項を参考にしてデータシートを読み込んでピン配置の制限を理解するようにしてください。