「ソフテックだより」では、ソフトウェア開発に関する情報や開発現場における社員の取り組みなどを定期的にお知らせしています。
さまざまなテーマを取り上げていますので、他のソフテックだよりも、ぜひご覧下さい。
ソフテックだより(発行日順)のページへ
ソフテックだより 技術レポート(技術分野別)のページへ
ソフテックだより 現場の声(シーン別)のページへ
私は八戸事業所に勤務して、主に組み込み系のソフトウェアの開発を担当しています。
組込み系のソフトウェア開発を担当していると、FPGA(Field Programmable Gate Array)を利用したシステム開発に関わることがあります。
私の場合は、1990年代後半に大手半導体メーカー様向けのソフトウェア開発協力をした時に、初めてFPGAという言葉を聞きました。
その時は、メーカーの方がFPGA内部を担当し、私はFPGAを制御するソフトウェアを担当しましたが、FPGAのようなデバイスの存在を知り興味を持ちました。
その後、FPGAを利用した開発に携わることはありませんでしたが、青森県産業技術センター八戸工業研究所殿が主催した、FPGA開発の講習会へ参加して勉強した後に、実際の開発案件としてFPGAを利用した開発に携わることができました。
FPGA講習会の講師をして頂いた青森県産業技術センター八戸工業研究所の方には、今でも相談を含めサポートして頂いています。
私のFPGAに関する知識や経験は、まだまだ浅いところはありますが、初心者の方や、ソフト開発を本業としているソフテックの後輩に向けて、FPGAを利用した開発の流れを説明します。
FPGAの仕組みの説明は、書籍や他のホームページで多くの情報がありますので、そちらに譲り、ここではソフト担当者の視点で、FPGAを説明します。
FPGAは、自作のデジタル回路を書き込んで動かすことができるデバイス(LSI)です。
例えば、CPUとメモリを実装した基板を作る場合、CADで回路図を作成して、LSIを選定し、基板上の部品配置や配線パターン(アートワーク)を決めて、実際の基板を作成します。
FPGAの場合は、FPGAが実装された基板は必要になりますが、FPGAメーカーが提供しているCPUコアやメモリ回路をツール上で組み合わせて、コンパイルし書き込むと、FPGA内部にCPU+メモリの構成回路が作成されます。
回路図の作成やLSIの選定が必要ないため、組み込みソフトの経験者であればチャレンジしやすいと思います。
FPGA内部の回路は、基本的にハードウェア記述言語と呼ばれるHDL(Hardware Description Language)で記述します。
「回路」と呼ぶと、構えてしまうところがありますが、2つの信号を「AND」する回路を作成する場合は、“a = b & c”と記述して実現出来ます。
以下に例を示します。
HDLで以下のように記述します。
図1. AND回路のHDL例
このHDLをツールでコンパイルすると以下のような回路に変換してくれます。
図2. HDLをコンパイルした結果(論理記号)
あとは、HDLのinputとoutputで指定した信号とFPGAの実際のピンを結び付ける設定をすれば、FPGAがANDを実現するデバイス(LSI)として動作します。
ICの選択や、FPGA内の配線は必要ありません。
また、HDLではif文やSwitch文も利用できるので、プログラム作成の経験者であれば、取り組むハードルは低いと思います。
代表的なHDLには、VerilogやVHDLがあります。
HDLの詳細説明についても、多くの書籍やインターネット上にサンプルプログラムがありますので、そちらに譲ります。
FPGAを利用するメリットとして以下があります。
A. 回路修正が可能また、実際に製品に利用する場合でも、ジャンパを飛ばさずにFPGAの内部の書き換えだけで基板の変更を出来ることは大きなメリットとなります。
ここからは、インテル(intel)製FPGAのMAX10シリーズを利用する前提で説明します。
FPGAは、HDLで自作のオリジナル回路を作成して動かすことができますが、メーカーから有償または無償で提供される部品(回路)を利用することも出来ます。
この部品のことをIP(Intellectual Property)またはIPコアと呼びます。
インテルの場合はNIOS IIと呼ばれるCPUのIPを提供しており、FPGA内にNIOS IIを配置することによりソフトウェアを実行することが可能です。
また、NIOS IIのバス仕様が公開されているためオリジナル回路とNIOSをバスで接続してソフトウェアから制御することも可能です。
これらの基本開発は、Quartus Primeを利用します。
開発ツールの全体像は、Quartus Primeからツールを呼び出し、必要な設定ファイルを生成し、最後にまとめて、Quartus PrimeでコンパイルしてFPGAで動作する回路(コンフィグレーションデータ)を作成します。
以下に主要なツールの関連図を示します。
図3. FPGAのツール関連図
信号の設定を間違えると短絡する可能性もあるため、設定後の確認は慎重に実施する必要があります。
Quarus primeでコンパイルした後に、Pin Plannerを確認すると内部信号とPin番号、入出力設定を一覧で確認出来ますので、初めてコンパイルした後は必ず確認してください。
HDLで作成した回路を、Quartus Prime がFPGA内部に配置します。
この時、Quartus Primeは、信号の速度制約や関連性を記述した、タイミング制約ファイル(拡張子sdc)を利用して、信号遅延が発生しない最適な配置をしてくれます。
しかし、それでもタイミングエラーが発生することがあります。
その場合は、TimeQuestを利用して、タイミングエラーの原因を確認することができます。
FPGAを利用するうえで、タイミング制約ファイルの作成方法やタイミングエラーの対処方法は経験が必要な作業です。
Platform Designerで構築したNIOS情報を元にしてBSP(Board Support Package)を自動生成してくれます。
BSPには、NIOSの周辺ペリフェラルへアクセスするためのアドレス定義情報などが含まれているため、Platform DesignerでNIOS側を変更した時はBSPも更新する必要があります。
また、USB Blaster(JTAG)を接続して、ソフトウェアのデバックをすることも可能です。
今回は、ツールの紹介を通して、FPGAを利用した開発の流れを紹介しました。
説明したツールは、インテルのホームページから無償でダウンロードできるQuartus primeと一緒にインストールされます。
Quartus primeには、他にも多くのツールが含まれており、知見が広がりレベルアップすることで、ツールの利用の幅が広がると思います。
私の場合は、FPGA内部の信号をロジックアナライザのように確認できるSignal Tap Logic Analyzerを多用しています。
今回は、初心者の方向けに書いているので、私が初めてFPGAを利用した時に苦労したことを以下に記載します。
a.自分が作成したHDLが、どの程度の回路サイズになるのか分からない初めてFPGAを利用した時、とても苦労をしましたが、ソフトでは実現できない処理速度を実現出来た時の感動は大きいものでした。
今回の記事がFPGA開発に興味を持っている方の参考になれば幸いです。
(T.O.)
関連ページへのリンク
関連するソフテックだより