ここから、FPGAのデザイン手順について説明します。
まずは設計環境です。一般的な設計環境は、各ベンダおよびサードパーティから提供されています。論理合成ツールとレイアウトツールが主なツールです。
これまでのところ、FPGAの論理設計はVHDL(VHSIC HDL)またはVerilog HDLなどのHDL(Hardware Description Language)で設計するケースが大半です。そのため現段階では、仕様の段階でハードウェアとソフトウェアの処理を手作業で分断して、「ハードはHDL」「ソフトは例えばC言語など」で分けて設計しています。
しかしプロセッサやDSPといったファンクションがFPGA内部で実現可能となった今日では、ソフトウェアとの兼ね合いを考慮したハード設計が必要になってくると予想されます。統一した言語(例えばC言語)などでハード/ソフトを含めた記述設計を行った後に最適なJobの振り分けを行うツール(Co Design)が重要になってきており、ハードウェア/ソフトウェアベンダが協調して、新しいシステムレベルでの設計環境ツールを提供し始めています。
図5は、FPGAのデザインフローです。最初にHDLなどの言語でデザインを入力し、論理合成ツールを使ってデザイン合成をします。このとき、論理シミュレーションを使用してデザイン検証を行います。
デザイン合成が終了したら、デザインインプリメンテーションを実施します。これは、具体的にFPGA上に論理回路を組み込むための作業です。各ファンクションをロジックセル上でどのように実現するのが最も効率的か(最適化)、それをFPGA内でどのように配置・配線するのか(配置配線)を行います。この時点でFPGA内での配置が具体的に決まります。
最近の高速動作する論理回路では、この時点でスタティックタイミング解析やタイミングシミュレーションを行い、期待するタイミングで動作するかどうかを検証します。特に動作周波数を限界近くで使用する場合などは、ロジックセル間をつなぐ配線の遅延などが要因でタイミング遅延が発生するので確認が必要です。事前にタイミングがクリティカルな個所が分かっている場合は、ツール上で制約を与えてインプリメンテーションすることが可能です。
ツール上でデザインが希望どおり動作することを確認したら、プログラムするのに必要なビットストリームファイルを作成し、FPGAにダウンロードします。つまり、JTAGなどを使い、ビットストリームファイルをシステム上の外部記憶デバイスに書き込みます。
最後に実機上でのテストです。実際のシステムはFPGA以外の回路やデバイスとやりとりしながら動作するので、実機での検証、インサーキット検証は欠かせません。
近年、FPGAは論理システムへの適用以外にも、その用途が拡大しています。従来はFPGAの周辺にあった素子たちが次々とFPGA内に取り込まれているからです。例えば、I/O回路やメモリインターフェイスです。システムの高速化・複雑化に対応して、さまざまな高速I/O(インターコネクト・メモリ)も標準でサポートされるようになりました。
この取り込みは、より高度なレベルにも及んでいます。例えば、組み込みプロセッサの実装です。現在、各FPGAベンダが提供するプロセッサや汎用プロセッサがFPGAに実装されており、その上でLinuxなどの汎用OSやITRONなどがサポートされています。FPGAに汎用プロセッサを搭載することにより、大きなシステム内での簡易なサブシステムやFPGAのみのシステム構築が可能になります。
信号処理速度が重要視される分野には、DSP機能を充実させたFPGAが存在します。そのため、設計ツール上でもSIMリンク機能の取り込みが行われています。一口にFPGAといっても、実際にはさまざまな用途に合わせた選択肢が継続して提供されているのです。
20年ほど前にFPGAが登場して以来、その「低コスト」「短TAT」「書き換え自由」といった特徴から、多くの分野・ユーザーに使用されてきました。それに伴う多くのフィードバックにより、高速I/O機能、プロセッサ機能、DSP機能など、新しい機能を取り込んできています。
まだFPGAを試したことがないのであれば、ぜひ試してみてください。なぜなら、FPGAは「チャレンジが許されるデバイス」だからです。ASICの場合、NREが1億円を超えてくる状況ですので、ぎりぎりのチャレンジでの失敗は許されません。妥協してでも確実に動く回路を作る必要があります。しかし、FPGAはNREゼロです。やり直しが利きます。エンジニアとしての成長を大きく助けてくれるデバイスです。
この記事を読まれたことを機会に、チャレンジしていただきたいと思います。
Copyright © ITmedia, Inc. All Rights Reserved.