「ソフテックだより」では、ソフトウェア開発に関する情報や開発現場における社員の取り組みなどを定期的にお知らせしています。
さまざまなテーマを取り上げていますので、他のソフテックだよりも、ぜひご覧下さい。
ソフテックだより(発行日順)のページへ
ソフテックだより 技術レポート(技術分野別)のページへ
ソフテックだより 現場の声(シーン別)のページへ
私は、入社8年目で主に組み込みソフト開発に携わっております。
これまでは、マイコンを使った組み込みソフト開発を行ってきましたが、最近、FPGAとNIOSUを使った通信ソフト開発に携わる機会がありました。
FPGA(Field Programmable Gate Array)とは、回路の書き換えができるLSIのことです。
NIOSUは、FPGAメーカーのアルテラ社が提供しているCPUコアです。
マイコンを使った組み込みソフトでは、CPUごとにペリフェラル(UART、インターバルタイマ、PIOなど)が固定で変更ができません。
しかし、FPGAでは、ペリフェラルをシステムごとに決めることができ、途中で変更ができます。
現在は、テレビや携帯電話など身近なものに使用されています。
携わった開発では、FPGA+NIOSUという構成で、私はNIOSU側のプログラム担当でしたが、FPGAの機能を使いながら開発を進めましたので、そのときの内容を紹介します。
FPGAを利用したシステムの構成を以下に示します。
図1.FPGAを利用したシステム構成
本文では、用語を以下のように定義して説明します。
FPGAは、メーカーから提供される標準IPや自分で作成したオリジナルIP、周辺回路を自由に組み合わせることが出来ます。
私が携わった開発は通信をするシステムでしたので、NIOSUとUART(Universal Asynchronous Receiver Transmitter)を組み合わせて開発をしました。
以降でNIOSUとUARTを組み合わせたNIOSUシステムの構築を例にして説明します。
NIOSUとペリフェラル(今回はUART)を接続してNIOSUシステムを構築する場合にSOPC(System On a Programmable Chip)Builderを利用しました。
SOPC Builderでは、ペリフェラルの追加だけでなく、追加したペリフェラルの設定を行うことができます。
UARTを追加した場合では、ボーレートなどの通信設定、クロック設定、割り込みの登録ができます。
SOPC Builderを起動すると図2の画面が開きます。
左側のツリーからUARTを追加すると右側の表に追加されます。
右側の表では、NIOSUとペリフェラルの割り込み信号の接続や、供給するクロックの設定などを行います。
図2.SOPC Builder(SystemContentsタブ)
追加したペリフェラル(UART)を選択すると、図3のような設定画面が開きます。
ボーレートの設定は、1200,2400…57600,115200bpsから選択できます。
リストにあるボーレート以外の値にしたい場合は、NIOSUで動作するプログラムから設定することも可能です。
図3.UARTの設定画面
必要な設定が終わった後にSOPC BuilderでNIOSUシステムを生成すると、NIOSUシステムにUART用の信号線(図4)が追加されます。
この信号線とFPGAのピンを結び付けるピンアサイン設定をすることで、UARTと基板が接続出来ます。
ピンアサインには、手順や注意点がありますが、本メルマガでは、省略させて頂きます。
図4.UARTの回路例
ピンアサインをした後に、回路全体のコンパイルを行うとFPGA内で動作する回路が完成します。
次は、NIOSUでUARTの制御プログラムの組み込みです。
NIOSUシステムを構築すると、回路構成情報が含まれたsopcinfoファイルが生成されます。
NIOSUの開発ツールでは、sopcinfoファイルの情報を利用してBSP(ボードサポートパッケージ:ハードウェア構成に応じたライブラリ)を自動で作成する機能があり、その中にデバイスドライバが含まれています。
UARTの場合、送受信、割り込みの設定、エラーなどの状態の取得が自動作成されたデバイスドライバ経由で簡単に行えます。
開発対象のシステムではUARTが複数ポートありましたが、必要なポート数分のデバイスドライバを自動生成するため、デバイスドライバ作成をする手間が省けました。
UART用として、BSPで用意される以下の関数を使用しました。
関数名 | 概要 |
---|---|
IOWR_ALTERA_AVALON_UART_TXDATA | 送信データの書き込み |
IORD_ALTERA_AVALON_UART_RXDATA | 受信データの読み込み |
IORD_ALTERA_AVALON_UART_STATUS | Statuレジスタの読み込み パリティエラー、フレーミングエラー、ブレーク検出、受信オーバーランエラー、送信オーバーランエラー、送信エンプティ、送信レディ、受信キャラクタレディ、CTS(ClearToSend),EOPの検出の状態を読み込むことができます。 |
IOWR_ALTERA_AVALON_UART_CONTROL | Contrlレジスタの設定 エラー、送信レディ、読み出しレディなどの割り込みのイネーブルを設定できます。 |
IOWR_ALTERA_AVALON_UART_DIVISOR | ボーレートの設定 |
表1.UART関数一覧
UART以外にもインターバルタイマやPIOを使用しましたが、UARTと同様にデバイスドライバが用意されて、簡単にタイムアップ処理やI/Oポート処理を実装することができました。
私が携わった開発では、NIOSU+UART以外にも、FPGA内にオリジナルの回路を組み込んでいるため、NIOSUで動かすプログラムのデバッグとFPGA内のオリジナル回路のデバッグをする必要があります。
本来は、FPGAのデバッグが終わってからプログラムのデバッグを実施したかったのですが、プログラムのデバッグを始める段階ではFPGAの回路をデバッグしている最中で実機を使える状況ではありませんでした。
今回のシステムは、NIOSUと標準ペリフェラルがあればプログラムのデバッグができる内容だったため、市販されているFPGAボードにNIOSUシステムを構築してデバッグを行いました。
市販ボードのUART数が実際の環境と異なりましたが、開発ツールでハードの違いを吸収することができるので、基板の変化によるソフト変更は、大きな手間になりませんでした。
マイコンの場合は、CPUコアが同じでもペリフェラルが違う複数のシリーズに分かれており、市販されているボードも実際に利用するマイコンと同じシリーズとは限りません。
このため、マイコンのシリーズの違いを吸収するために、マイコンの初期化処理の修正やデバイスドライバの修正など経験的には、大きな手間がかかります。
開発対象の基板でなくても、簡単にNIOSUシステムを構築して、プログラム開発を進められるという点は、FPGAを使った開発の特徴の一つと言えます。
また、最近のLSIはピンのピッチが狭いために、測定器の接続が困難になることが増えています。
今回の開発では、デバック用の基板にだけ、テストピンを準備してロジックアナライザなどの測定器を簡単に接続できるように基板を作ってもらっていました。
このテストピンの出力をロジックアナライザで測定することにより、割り込み処理時間や関数呼び出しの確認に利用しプログラムの品質向上に役立てることができます。
さらに、プログラムのデバッグだけではなくFPGA内で利用している信号をテストピンに接続してFPGAの外へ引き出すことでハードとソフトの動作タイミングの確認にも利用することが出来ました。
テストピンの用途を切り替えるためにはFPGAの回路を書き換える必要がありますが、1つの端子の出力を自由に切り替えることができる点もFPGAを使った開発のメリットだと思いました。
図5.送信データをテストピンに分岐する回路
本技術レポートでは、FPGAとNIOSUを使ったシステムのソフト開発の手順を中心に紹介しました。
私が経験して感じたマイコンとFPGAの違いは以下のとおりです。
項目 | マイコンを使った開発の場合 | FPGAを使った開発の場合 |
---|---|---|
ペリフェラル | CPUごとに固定 | 変更が可能で、オリジナルで作成することも可能。 |
デバイスドライバ | システムに合わせて、作成する必要がある | システムに合わせたペリフェラルの設定をすることでツールがデバイスドライバを自動生成する |
信号測定 | テストピンを準備することは可能だが、事前に割り当てる信号を決める必要がある | テストピンへの出力内容をFPGAの設定で変えることができる |
表2.マイコンとFPGAの違い
ペリフェラル登録、回路作成、ピンアサインといったマイコンを使った組み込み開発には必要ない作業もあるため、最初は慣れないかもしれませんが、簡単な回路であれば、慣れない作業であったとしても組み込み開発よりも立ち上げが早くできます。
本メルマガでは、基本的な開発の流れしか紹介できませんでしたが、組み込み開発との違いが伝わればと思います。
(T.M.)
関連ページへのリンク
関連するソフテックだより