FPGA動的再配置(FPGA版プラグイン機能)《検討・実装方法》

1/3《概要・開発概要》 2/3《検討・実装方法》 3/3《実装と動作確認・付録》

3. FPGA動的再配置の検討

3.1. FPGAの動的部分再構成の動向

 Xilinx社製のVirtex4以降の高機能高級FPGAにおいては、動的部分再構成に関して、デバイスと開発ソフトの両方で対応するようになり、最近になって正式に商用サポートされるようになった。現状、Spartan6などの廉価なFPGAでは、デバイスでは、サポートされているようだが、開発ソフト(最新のISE13.2)の方ではサポートされていない。
 しかし、Xilinx社のFPGAでは動的再構成に関して2001年ぐらいから対応しており、一部のユーザ向けの限定機能という位置づけで、開発ソフトや設計支援ツールなしに手動で、実装できるようになっていた。正式な商用サポートではなかったため、広く普及せず、一部の研究機関等で利用されてきただけであった。

3.2. 動的再配置の要点

 SVI-06に実装のSpartan6のような中小規模の限られたリソースで廉価なFPGAにこそ、目的に合わせて複数の機能を効率よく実装するために、FPGAの動的部分再構成が必要と考える。しかし、現状では開発ソフトが対応せず、商用サポートされず、手動による方法も難しいために工数がかかり、エラーがあるとFPGAを破壊してしまう恐れがある。

 そこで発想を転換し、Spartan6の動的再構成は、近い将来、正式に商用サポートされると考え、ユーザの要求があれば、基本機能+ユーザIPのFPGAデータをホストPCのアプリケーション・ソフトの支援によりダウンロードして、FPGA全体を入れ替えることを第一段階として進める。部分再構成と全体の再構成とで、再構成して機能が有効になるまでの時間の違いと、基本機能部分をいったん止める必要があるかどうかの違いがあるが、アプリケーション・ソフトを通してユーザからみた場合、SVI-06の使用用途としては問題ないレベルと考えられる。

 このように将来的な動的部分再構成を視野に入れて、ユーザの必要に応じてFPGA全体をボードの電源をON/OFFすることなしに入れ替えることで、ホストPCのアプリ・ソフトからあたかも関数を呼び出すようにFPGAに機能を追加したり、入れ替えたりすることをここではFPGAの動的再配置と呼ぶ。

 FPGAの動的再配置では、基本機能とユーザIPとの切り分けが重要となる。画像処理のデータ・フローなどを考慮して、ユーザIPのブロック分け、各ブロックが基本機能に対して配置される位置などをあらかじめ決めておく必要がある。ユーザが固有のロジックをIPとして、後から容易に設計できるようなインタフェース仕様が必要であり、基本機能ブロックにはユーザIPとのインタフェース機構または回路が必要になる。さらに、将来対応予定の動的部分再構成の観点からも、ユーザIPに対するブロック分けは重要なポイントとなる。


3.3. 動的再配置ブロック分けと割り当て位置

 SVI-06FPGAで、ユーザIPの動的再配置に関するブロック分けと割り当て位置について検討した概略図を、以下に示す。
 動的再配置ブロックは、前処理(Pre-process)ブロック、中間処理(Intermediate Process)ブロック、後処理(Post-process)ブロックの3つのブロックからなるように分ける。色分けされた動的再配置ブロック以外のFPGA内のブロックは、従来のSVI-03の画像転送処理ブロックと基本的な構成は変わらず、その部分をSVI-06FPGAの基本機能ブロックとする。
 3つの動的再配置するブロックの処理内容として考えられる、ユーザ固有のロジック、アプリを以下に挙げる。
●Pre-process(前処理) : カメラI/F変換、間引き、色変換、ホワイトバランスなどのカメラの付加機能など。
● Intermediate Process(中間処理):大量のメモリを必要とする処理、画像の解析、演算、フォーマット変換など。
●Post-process(後処理):色変換、フォーマット変換、UVC等ヘッダ付加、圧縮・符号化など。
動的再配置ブロック分けと割り当て位置
センサ・モジュールからの画像は、SVI-06の動作では以下のような順序で処理され、ホストPCに転送されるものとする。

1.  動的再配置される前処理ブロックに、センサ・モジュール固有のインタフェースのまま、画像信号が入力される。前処理ブロックは、内部の基本機能ブロックに対して、標準的な画像信号インタフェース(データ/水平・垂直同期/ソース・クロック)で、画像信号を出力する。センサからの画像信号を直接受けて、画像データを参照・加工したいユーザが、この位置に前処理IPとして配置する。デフォルトの状態またはユーザによるカスタム機能が不要の場合は、前処理ブロックは従来のSVI-03と同様に動作するよう、入力から出力までスルーするブロックを配置しておく。

2.  前処理ブロックから出力された画像データは、基本機能ブロックであるVideo-Capture-Blockによって、フレーム単位に処理され、Frame Memory I/Fを通して、フレーム・メモリとして使用される DDR2SDRAMに格納される。

3.  動的再配置される中間処理ブロックでは、フレーム・メモリに格納された画像をフレーム単位で読みだして、変換処理をした後、処理後のデータをフレーム・メモリに格納する。フレーム単位で画像データを参照・加工したいユーザが、この位置に中間処理IPとして配置する。デフォルトの状態またはユーザによるカスタム機能が不要の場合は、中間処理ブロックは何も動作をしない空のブロックを配置しておく。

4.  動的再配置される後処理ブロックは、基本機能であるUSB3.0FX3-I/FブロックとFrame Memory I/Fの間の画像データをホストPCに転送する際の経路で、ストリーム的 に画像データを参照・加工したいユーザが配置する。デフォルトの状態またはユーザによるカスタム機能が不要の場合は、後処理ブロックは従来のSVI-03と同様に動作するよう、入力から出力までスルーするブロックを配置しておく。

動的再配置ブロックのコントロール、ステータスおよび制御パラメータの受け渡しは、図に示した ようにSH2CPUを介して行う。
 3つの動的再配置ブロックの対応は、入出力I/Fの難易度、必要となる周辺回路の複雑さ、検討、実装にかかる工数を考慮して、図示したように以下のステップで進める。
1st.ステップ: 前処理ブロック → 2nd.ステップ: 後処理ブロック → 3rd.ステップ: 中間処理ブロック  本レポートでの実装、動作確認については、1st.ステップである前処理ブロックのみに限定する。

4. 実装方法

4.1. 設計フロー

動的再配置するユーザIPに関する設計フローを以下に示す。

1. 追加機能、入れ替え機能に関する要求の検討。
2. 再配置ブロックとしての割り当て、位置決め検討。前処理、中間処理、後処理のどの位置が適切か、または複数の位置にブロックを分散して配置する必要があるかなど。
3. 公開する基本機能ブロックと動的再配置ブロック間のI/F仕様を確認、検討。
4. ユーザIPの設計、HDLソースを記述。
5. ユーザIPソースを論理合成して、ネットリストを生成。
6. 基本機能とユーザIPのネットリストを合わせて、FPGA全体のダウンロード・データ(ビットストリーム)を合成。
7. ユーザ固有のホストPCアプリ、GUIが必要な場合は、SVI-SDKAPIを呼び出してSVIsamに実装するか、SVImonのプラグインを設計、製作。

 上記フローの4,5,6で、HDLによる回路記述ソースから回路を合成し、FPGA全体のビットストリームが生成されるまでの様子を以下に図示する。
FPGA全体のビットストリームが生成されるまで

4.2. 動作フロー

 動的再配置するユーザIPを実行するまでの動作フローについて、以下に示す。

1. 合成済みの動的再配置するユーザIPを含んだFPGA全体のビットストリームをホストPCの任意の場所に格納しておく。
2. SVIsam等のアプリで、SVI-06が動作中の場合は、それらのアプリをいったん終了する。
3. SVIUpdateアプリを用いて、動的再配置モードで1.のビットストリームをSVI-06FPGAにダウンロードする。
4. SVIUpdateアプリを終了し、再びSVIsamアプリを起動する。
5. 必要であればSVIsamアプリで前処理ブロックに対するコントロール・レジスタを設定する。
6. SVIsamアプリ従来と同様に画像取り込み動作を開始する。
7. 前処理ブロックが正しく動作しているか確認するか、または画像取り込み動作を見ながら、コントロール・レジスタでパラメータの調整等を行う。

 以下に、SVIUpdateアプリで動的再配置モードを選択する際の実行画面を示す。
SVIUpdateアプリ

4.3. 前処理ブロックの公開インタフェース仕様

 ユーザIPの設計する際に必要なインタフェースについて説明するために、ポート構成を表した前処理ブロックを以下に図示する。
ポート構成を表した前処理ブロック
 左側が外部接続されるカメラ・センサに対するポートで、右側がFPGA内部側の基本機能ブロックに接続されるポートとなる。
左側のポートは、従来のSVI-03の場合の外部カメラ・センサ接続ポートと全く同様となるので、詳細な説明は省略する。
右側のFPGA内部に対しても、外部接続されるセンサ・カメラと同じポート構成を持っているので、基本機能ブロックから見れば前処理ブロックは外部接続のカメラ・センサのようにふるまう。
加えて右側には、前処理ブロックを動作させるために必要なクロックとリセット、制御に必要なコントロール/ステータスそれぞれ32bitのポートからなるBlock-System-Portsがある。
以下に、各ポートの概要を説明する表を示す。

外部接続信号

内部接続信号

ビット幅

方向

概要

iCamDtX

oCamDtI

16

IN-OUT

外部接続されるカメラ・センサからのデータ信号の入力

iCamVsX

oCamVsI

1

IN-OUT

外部接続されるカメラ・センサからの垂直同期信号の入力

iCamHsX

oCamHsI

1

IN-OUT

外部接続されるカメラ・センサからの水平同期信号の入力

iCamClkX

oCamClkI

1

IN-OUT

外部接続されるカメラ・センサからのデータ・クロック信号の入力

iCamSclX

oCamSclI

1

IN-OUT

外部接続されるカメラ・センサからのI2C-SCL信号の入力

oCamSclX

iCamSclI

1

OUT-IN

外部接続されるカメラ・センサに対するI2C-SCL信号の出力

iCamSdaX

oCamSdaI

1

IN-OUT

外部接続されるカメラ・センサからのI2C-SDA信号の入力

oCamSdaX

iCamSdaI

1

OUT-IN

外部接続されるカメラ・センサに対するI2C-SDA信号の出力

oCamXrstX

iCamXrstI

1

OUT-IN

外部接続されるカメラ・センサに対するリセット信号の出力

oClkOutX

iClkOutI

1

OUT-IN

外部接続されるカメラ・センサに対して供給するクロック信号の出力

oGpOutX

iGpOutI

8

OUT-IN

外部への汎用出力ポート

iGpInX

oGpInI

8

IN-OUT

外部への汎用入力ポート

 

iBCTRL

32

IN

前処理ブロックを制御するためのコントロールとパラメータの入力

 

oBSTTS

32

OUT

前処理ブロックの状態を把握するためのステータスの出力

 

iBRST

1

IN

前処理ブロック全体を初期化するための同期リセット信号入力

 

iBCLK

1

IN

前処理ブロック全体での動作に必要なシステム・クロック(100MHz)


 外部接続信号と内部接続信号の名前が併記されている場合は、信号の意味、使用用途が外部と内部で同じく対応することを示す。ユーザIPを実装しないデフォルトの前処理ブロックでは、外部と内部で対応する信号が直接接続されているのと同様になる。 ユーザIPを設計する際に使用しない信号は、外部と内部で対応する信号の場合は直結しておくことで問題なく動作する。Block-System-Portsに関しては、入力は必要に応じて接続し、出力は’0’(GND)固定でよい。
 iBCTRL/oBSTTSは、SH2CPUから読み書きされるコントロール・レジスタにマップされるので、前処理ブロックに対してホストPCから容易にコントロールとパラメータの送信およびステータスの受信をすることができる。

注意事項:記載された商品名、社名は各社の商標です。本資料は仕様変更の為予告なく変更する場合があります
戻る ページの上へ