正しくIPを使いこなすには、“とにかく実績のあるIPを使用する!”。これに限ります。
FPGAメーカーなどから提供されているIPは、FPGAの中身を考慮したうえで作られていますので、性能的にはかなり保証されているといえるでしょう(そんなことはないという反論も聞こえてきそうですが……)。例えば、Xilinxから提供されているVertexの最新シリーズでは、積和演算が行えるハードウェアが搭載されています。メーカー側の発表によれば500MHz以上の高速スピードで動作するそうです。これほどの高速の回路をFPGA上で一から自力で設計するのは不可能に近いことです。そのため、FPGAメーカーから“IP”が提供されているのです。ユーザーは、IPベンダ(ここではFPGAメーカー)が提供するIPを利用する(正しく使いこなす)ことで、手軽に最大のパフォーマンスを得ることができるのです。
では、IPを使用する際に気を付けなければならないのは、どのようなケースでしょうか?
それは、“IPベンダ側の想定外のことをユーザー側で行ってしまう”ケースです。
例えば、nビット×nビット乗算器のIPがIPベンダから提供されているとします。ユーザーは、任意のビット幅を自由に設定できますが、このIPの仕様では異なるビット幅、つまり9ビット×12ビットなどのような乗算はできません。しかし、ユーザーがこのIPで異なるビット幅での乗算が可能であると勘違いして、そのまま設計を進めてしまったら……。きっと、取り返しのつかない問題になってしまうでしょう。
このようなことを起こさないためにも(IPベンダの想定外のことをせずに正しく使いこなすためにも)、まず基本的な実験をしておくことが大切です。FPGAを用いれば、FPGAメーカーから提供されているIPやソフトIP(HDLソース)をチップの中でハードウェア化し、汎用ボードなどで手軽に試すことができます。このように、仮想的な論理シミュレーションだけではなく、実機でIP単体のテストをしておくことがとても大切なのです。その際、IPのデータシートなどに書かれていることは一通り試しておくとよいでしょう。この基本的な実験で事前にIPを把握することで、後々のハードウェア設計に対するリスクを最小限に抑えることができます。
また、FPGAに限らずIPを使用するときの最大のポイントは、“同期化”です。
つまり、やりとりする相手側からの信号などは必ずシステムクロックやIPで使用するクロックなどでいったん受けてから使用するということ。非同期で使用すると、タイミングがクリティカルになり、IPそのものの性能を出せない可能性があります。IPを含めた全体的なつながりを設計するときに、この同期化を前提に設計を進めることが重要です。
次に、FPGAのIPを使用するときの注意点を説明します。
それは、“FPGAを設計全体の中でどのように使用するのかをきちっと把握しておくべきだ”ということです。
設計の中でFPGAの役割としては、以下の2つに分かれると思います。
最終製品としてFPGAを使用する場合には、とことんIPを使用して性能アップを図るべきでしょう。
一方、プロトタイプとしてFPGAを使用する場合には、やたらにIPを利用するのは得策ではありません。LSI化する前提で、まずはFPGAで試作品を作成するわけですから、FPGAで作成した回路情報(Verilog-HDLやVHDLなどのHDL)はそのままLSI化するときに流用したいはずです(そうでないとプロトタイプの意味がありません)。また、FPGA特有のIP、例えばクロックを生成させるIPなどを積極的に使用している場合、LSI化するときにはこの“IPの代わり”を考えておかなければなりません。しかも、FPGAのIPは上述したようにかなりFPGAの内部を考慮して徹底的に回路をチューニングしています。そのため、LSI化するときにIPの代わりをきちんと考えておかないと、この部分で問題が発生する可能性が高くなります。このようなこともあらかじめしっかり把握しておかないと、プロトタイプでは性能は出たものの、最終的なLSIでは性能がまったく出ないという事態も十分起こり得るのです。
また、“IP同士の相性”も考えておく必要があります。
例えば、通信関連で送信側と受信側でトランシーバのIPを利用して設計をしたとします。このときにそれぞれで異なる別のトランシーバのIPを利用した場合、うまくやりとりができない可能性があります。同じIPを送受信側で利用した場合にはうまくコミュニケーションできるが、異なるIPとの間ではお互いがそのコミュニケーションを保証できないということもあります。このあたりもあらかじめFPGAを使用して、そのIPの特質を確かめておくべきでしょう。
以下に、IPを使用する際に役立つサイトを紹介します。
これらのWebサイトや過去に利用経験がある設計者から情報を収集し、よく吟味(各IPのベンチマークとその結果の比較など)して、最終的にIPを選択する必要があると思います。
また、前述したとおり、提供する側(社内IPグループ、ベンダなど)からのサポートが得られるかどうかが最大のポイントだと思います。サポートがどこまで得られるのかをあらかじめ把握しておければそれに越したことはありません。また、その“手厚いサポート”を受けるためには、ユーザー側からの情報提供も必要不可欠となります。さらに、IPを使用するうえで費用が発生する場合には、その契約内容(金額やサポート範囲など)を把握しておくことが必要になります。
今後、短期間で大規模なハードウェア設計を要求される機会がますます増え、実績のあるIPが回路の大部分に使用されることになると思います(大規模なSoCなどはすでにそのようになっています)。こうなると、ほとんどブラックボックス同士(IPの中身は分からない)をつなぐ設計になるので、“IPの入出力のタイミングだけを把握して同期設計すること”が重要となるでしょう(筆者はこれまで、フルカスタムを設計することが多かったので、このようなIPをつなげるだけの設計というのはどうも寂しい気がしますが、開発期間の短縮などを考えるとやむを得ない道だということも十分認識しています)。
これまで解説したとおり、IPベンダが提供するIPの仕様で何らかの不具合があった場合、ユーザー自身がそれを修正することはできません。そのため問題が起きてしまうと、その対策だけで必要以上のコストが掛かります。また、開発スケジュールに大きな影響を与える可能性もあります。このようなことにならないためにも、ユーザーは自分の力が及ばない部分(IPベンダの領域)でつまずかないように普段からIPの調査や基礎的な実験などをしておくとよいでしょう。
Copyright © ITmedia, Inc. All Rights Reserved.