HOME > ソフテックだより > 第375号(2021年4月7日発行) 技術レポート「FPGAを利用した開発の流れ」

「ソフテックだより」では、ソフトウェア開発に関する情報や開発現場における社員の取り組みなどを定期的にお知らせしています。
さまざまなテーマを取り上げていますので、他のソフテックだよりも、ぜひご覧下さい。

ソフテックだより(発行日順)のページへ
ソフテックだより 技術レポート(技術分野別)のページへ
ソフテックだより 現場の声(シーン別)のページへ


ソフテックだより 第375号(2021年4月7日発行)
技術レポート

「FPGAを利用した開発の流れ」

1. はじめに

私は八戸事業所に勤務して、主に組み込み系のソフトウェアの開発を担当しています。
組込み系のソフトウェア開発を担当していると、FPGA(Field Programmable Gate Array)を利用したシステム開発に関わることがあります。
私の場合は、1990年代後半に大手半導体メーカー様向けのソフトウェア開発協力をした時に、初めてFPGAという言葉を聞きました。
その時は、メーカーの方がFPGA内部を担当し、私はFPGAを制御するソフトウェアを担当しましたが、FPGAのようなデバイスの存在を知り興味を持ちました。

その後、FPGAを利用した開発に携わることはありませんでしたが、青森県産業技術センター八戸工業研究所殿が主催した、FPGA開発の講習会へ参加して勉強した後に、実際の開発案件としてFPGAを利用した開発に携わることができました。
FPGA講習会の講師をして頂いた青森県産業技術センター八戸工業研究所の方には、今でも相談を含めサポートして頂いています。

私のFPGAに関する知識や経験は、まだまだ浅いところはありますが、初心者の方や、ソフト開発を本業としているソフテックの後輩に向けて、FPGAを利用した開発の流れを説明します。

2. FPGA(Field Programmable Gate Array)とは

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で以下のように記述します。

AND回路のHDL例
図1.  AND回路のHDL例

このHDLをツールでコンパイルすると以下のような回路に変換してくれます。

HDLをコンパイルした結果(論理記号)
図2.  HDLをコンパイルした結果(論理記号)

あとは、HDLのinputとoutputで指定した信号とFPGAの実際のピンを結び付ける設定をすれば、FPGAがANDを実現するデバイス(LSI)として動作します。
ICの選択や、FPGA内の配線は必要ありません。
また、HDLではif文やSwitch文も利用できるので、プログラム作成の経験者であれば、取り組むハードルは低いと思います。

代表的なHDLには、VerilogやVHDLがあります。
HDLの詳細説明についても、多くの書籍やインターネット上にサンプルプログラムがありますので、そちらに譲ります。

FPGAを利用するメリットとして以下があります。

A. 回路修正が可能
部品を実装した基板に不具合が見つかった場合は、部品を実装した基板の修正が必要になります。
一時的には、配線パターンの修正のために、ジャンパを飛ばして修正しますが、半田を利用するなど、多くのソフトエンジニアにとってハードルが高い作業となります。
このような工程だと、ソフトエンジニアが簡単に回路を作る練習は出来ません。
FPGAの場合は、市販されているFPGAの基板を購入し、自分で作成した回路をFPGAに書き込めば、何度も修正することが可能です。
何度も修正が出来る環境であれば、経験が浅くても回路を作成する練習が可能となります。

また、実際に製品に利用する場合でも、ジャンパを飛ばさずにFPGAの内部の書き換えだけで基板の変更を出来ることは大きなメリットとなります。

B. 小型化が可能
基板に多くの部品を実装すると、広い基板面積が必要となります。
この回路がFPGA内に入ってしまうとFPGAという1つのデバイスの面積に凝縮することが可能となり、基板を小型化出来ます。
ソフテックでは、産業用ソフト開発が多く、それらが動作する基板は、設置場所の制限もあるため、小型基板を利用した方が有利な場合があります。
また、FPGA内部の回路は基板から解析できないため、回路を隠蔽する効果もあります。
C. ソフト処理に比べて高速化が可能
FPGAの内部処理はHDLという言語で記述します。一方、ソフトウェアも処理内容をC言語などの言語で記述します。
しかし、動作する仕組みが全く違います。
ソフトウェアの場合は、基本的には1命令ずつ実行されます。
しかしFPGAの内部処理は命令実行の概念がありません。
先に例を記載したとおり、HDLは回路に変換され、FPGA内部ではデジタル回路として動作するため、複数の信号を平行して処理することが可能です。
個人的には、初めてFPGAを使った際に、この高速化が一番驚きました。
例えば、10系統の通信の受信処理をソフトウェアで実現する場合は、系統1の受信処理の次に、系統2の受信処理と順番に処理をします。
10系統もあると、受信割り込み処理が間に合わずオーバーランエラーが発生しないか?と負荷の検討が必要です。
しかし、HDLの場合は、10系統分の受信回路を平行して動作させることが出来ます。

3. 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のツール関連図

3-1 Quartus Prime
Quartus Primeは、HDLで記述された回路図やピン設定、タイミング制約などの情報を元にFPGAに書き込むコンフィグレーションデータを作成します。
3-2 Platform Designer
NIOS IIを構築するためのツールです。
NIOS IIは、プログラムを実行するCPU部分と、周辺ペリフェラルで構成します。
周辺ペリフェラルは、メーカーから提供されるIP以外に、自作の回路も登録して利用が可能です。
自分が必要な機能だけを組み込んだオリジナルマイコン作るイメージです。 NIOS IIの構築が完成したあとは、Platform Designerが、その内容をHDLに変換してくれます。
3-3 Pin Planner
FPGA内部の信号を、FPGAの実際のピンに割り当てるツールです。
また、ここで各ピンの電圧仕様を選択して決めることも出来ます。
設定した内容はピンアサインファイル(拡張子qsf)に格納されます。
ピンアサインファイルは、テキスト形式のファイルのため、内容の確認や修正をすることが可能です。
なお、FPGAのピンの入力および出力設定は、ピンに関連付けした内部信号に依存します。
例えば、関連付けした内部信号をHDLで定義する際に「input」で定義すると入力端子となり、「output」と定義すると出力端子となります。

信号の設定を間違えると短絡する可能性もあるため、設定後の確認は慎重に実施する必要があります。
Quarus primeでコンパイルした後に、Pin Plannerを確認すると内部信号とPin番号、入出力設定を一覧で確認出来ますので、初めてコンパイルした後は必ず確認してください。

3-4 TimeQuest
FPGA内部信号のタイミングを検証するツールです。

HDLで作成した回路を、Quartus Prime がFPGA内部に配置します。
この時、Quartus Primeは、信号の速度制約や関連性を記述した、タイミング制約ファイル(拡張子sdc)を利用して、信号遅延が発生しない最適な配置をしてくれます。
しかし、それでもタイミングエラーが発生することがあります。
その場合は、TimeQuestを利用して、タイミングエラーの原因を確認することができます。
FPGAを利用するうえで、タイミング制約ファイルの作成方法やタイミングエラーの対処方法は経験が必要な作業です。

3-5 Nios II Software Build Tools for Eclipse
NIOS用のソフトウェア開発ツールです。
ソフトエンジニアであれば聞いたことがあるEclipseです。

Platform Designerで構築したNIOS情報を元にしてBSP(Board Support Package)を自動生成してくれます。
BSPには、NIOSの周辺ペリフェラルへアクセスするためのアドレス定義情報などが含まれているため、Platform DesignerでNIOS側を変更した時はBSPも更新する必要があります。
また、USB Blaster(JTAG)を接続して、ソフトウェアのデバックをすることも可能です。

3-6 FPGA書き込みツール
FPGAのコンフィグレーションデータや実行ソフトをFPGA内部のフラッシュROMへ書き込めるように変換し、書き込みを行います。
以下の流れの作業となります。
a.” Convert Programming Files”を起動してROM化データを作成します。
b.” Programmer”を起動し、ROM化したデータをFPGA内部のフラッシュROMへ書き込みます。

4. おわりに

今回は、ツールの紹介を通して、FPGAを利用した開発の流れを紹介しました。
説明したツールは、インテルのホームページから無償でダウンロードできるQuartus primeと一緒にインストールされます。

Quartus primeには、他にも多くのツールが含まれており、知見が広がりレベルアップすることで、ツールの利用の幅が広がると思います。
私の場合は、FPGA内部の信号をロジックアナライザのように確認できるSignal Tap Logic Analyzerを多用しています。

今回は、初心者の方向けに書いているので、私が初めてFPGAを利用した時に苦労したことを以下に記載します。

a.自分が作成したHDLが、どの程度の回路サイズになるのか分からない
初めてHDLを作成した時は、ソフトのコーディング時に比べると、小さなコードを書いたつもりでしたが、回路のサイズが大きくなり驚きました。
経験が浅いため、同じ機能を実現する場合でも、HDLの書き方が悪く、回路サイズも大きくなったのだと思います。
インターネットや書籍を見て、他の人のコーディング方法を参考にして、何度もコードを書き直した経験があります。
b.タイミングエラーが出た時に、何を改善すればよいのか分からない
タイミングエラーの発生は、何度も経験しました。
例えば、クロックの位相をズラして対処する場合や、複雑な回路を簡素化して対処する場合、PLLでクロック周波数を落として対応することもありました。
ソフトエンジニアにとって、電気信号が遅れる要因として思いつくレパートリーが少ないため、情報を集めて試行錯誤しながら対策しています。
c.インターネットの情報は英語が多い
代理店のHPでも日本語で詳細な情報を公開してくれており、とても参考になります。
しかし、イリーガルな問題の対処方法が分からない時にインターネットで情報を集めると、英語の情報も確認する必要があります。
例えば、インテルのQ&Aを見ても英語の情報です。
翻訳ツールの精度も上がっていますが、理解するまで時間がかかります。

初めてFPGAを利用した時、とても苦労をしましたが、ソフトでは実現できない処理速度を実現出来た時の感動は大きいものでした。

今回の記事がFPGA開発に興味を持っている方の参考になれば幸いです。

(T.O.)

[参考文献]
・FPGAボードで学ぶ組み込みシステム開発入門[Intel FPGA編](小林 優 著)

関連ページへのリンク

関連するソフテックだより

ページTOPへ