デバイスが動作するクロック周波数を増加せずにデザインのスループットを増加する必要がある場合 (デバイスで使 用可能な最大周波数よりも低いクロック周波数で動作する目的または消費電力を削減する目的で)、ザイリンクス FPGA のプログラマブル ロジックの利点を生かして、毎クロックでより多くのサンプルが処理される並列手法が使用 されます。Model Composer でスループット制御をすると、Simulink でデザインに構造的な変更を加えなくても、ユ ーザーがそれを実行できます。
スループット制御を使用する際の制限
[Throughput factor] の値を設定したら、ハブの [Generate] ボタンをクリックし、サブシステムのコンパイルを開始し ます。[Throughput factor] に 1 より大きな値を設定した場合は、次の制限に従っている場合にのみ達成できます。
• [Throughput factor] は 1 ~ 16 にします。
• サブシステムの入力ポートの少なくとも 1 つは、スカラーではないものにします。
• サブシステムのスカラーではないポートのすべてが AXI4 ストリーミングまたは FIFO インターフェイスのいずれ かを使用します。
• サブシステム内 (Window Processing ブロック カーネル内以外) のベクター信号の長さは、[Throughput factor] の 倍数にします。
• サブシステム内 (Window Processing ブロック カーネル内以外) の行列信号の列数は、[Throughput factor] の倍数 にします。
• Window Processing ブロック カーネル内のブロックを除き、サブシステムに次のブロックは含めることができま せん。
○ Look Up
○ Matrix Multiply、QR Inverse
○ Transpose、Hermitian
○ Sum of Elements および Product of Elements (浮動小数点入力)
○ Cumulative Sum、Reducing Min、Reducing Max
○ If Action サブシステム
○ FFT、IFFT、FIR
• コンピュータービジョンブロックには、[Throughput factor] の値を 8 までしかサポートしないものも多く、中に は 1 を超える値をサポートしないものもあります。詳細は、コンピューター ビジョン ブロックのスループット制 御 を参照してください。
• xmcImportFunctionを使用して作成したブロックの詳細は、XMC THROUGHPUT_FACTOR を参照してくださ い。
[Throughput factor] に 1 より大きな値を指定していても、上記のすべての制限に従っていれば、サンプルを並列で処 理するモデルを生成できます。デザインがこれらの制限を満たさないと、出力モデルは生成されません。
例を使用したスループット制御の理解
次のセクションでは、ザイリンクス Model Composer 用のオプティカル フローのサンプル デザインを使用し、スル ープット制御機能を使用する利点について説明します。
第 4 章: 出力の生成
図 24: オプティカル フローの例
このデザインでは、次のブロックが使用されています。
• Data Type Conversion、Subtract、Right Shift、Product
• Gain、Sum of Elements、および Data Type Conversion を使用した Window Processing ブロック。
• calculating_roots 関数を使用した Import Function ブロック。
図 25: Window Processing カーネル
これらのブロックすべては、要素ごとのアプリケーション パターンに従って、前述の制限に従います。
重要: スループット制御を使用してサブシステム内で Sum of Elements ブロックを直接使用できるのは限られ た場合のみです。この例では、Sum of Elements ブロックが Window Processing ブロック内で使用されていま すが、最上位サブシステムで直接使用することはできません。
デフォルトのスループット係数 1 を使用すると、次に示すコードが生成されます。
void Lucas_Kanade(hls::stream< uint8_t >& ImageIn, hls::stream< uint8_t >&
ImageInDelayed, hls::stream< float >& Vx, hls::stream< float >& Vy) { #pragma HLS INTERFACE axis port=ImageIn
#pragma HLS INTERFACE axis port=ImageInDelayed #pragma HLS INTERFACE axis port=Vx
#pragma HLS INTERFACE axis port=Vy
#pragma HLS INTERFACE s_axilite port=return #pragma HLS dataflow
この IP は入力、画像および遅延画像を AXI4-Stream を介して読み込みます。これらのストリームは、データ幅 8 ビ ット (1 ピクセル) を使用するようになります。同様に、出力画像のピクセルはデータ幅 8 ビットの AXI4-Stream イン ターフェイスを介してストリーミングされます。
スループット係数を 4 に設定すると、コードは次のようになります。
void Lucas_Kanade(hls::stream< xmc::MultiScalar< uint8_t, 4 > >& ImageIn, hls::stream< xmc::MultiScalar< uint8_t, 4 > >& ImageInDelayed, hls::stream< xmc::MultiScalar< float, 4 > >& Vx,
hls::stream< xmc::MultiScalar< float, 4 > >& Vy) { #pragma HLS INTERFACE axis port=ImageIn
#pragma HLS data_pack variable=ImageIn
#pragma HLS INTERFACE axis port=ImageInDelayed #pragma HLS data_pack variable=ImageInDelayed #pragma HLS INTERFACE axis port=Vx
#pragma HLS data_pack variable=Vx #pragma HLS INTERFACE axis port=Vy #pragma HLS data_pack variable=Vy
#pragma HLS INTERFACE s_axilite port=return #pragma HLS dataflow
この IP は、入力画像の 4 ピクセルと遅延入力画像の 4 ピクセルを、データ幅 32 ビットの AXI4-Stream を介して同時 に受信します。IP 内でロジックが複製されるので、4 ピクセルが並列に処理されます。IP は、出力画像の 4 ピクセル をデータ幅 32 ビットの AXI4-Stream インターフェイスを介して送信します。xmc::MultiScalar<T,N> は xmcMultiScalar.hで定義されたstructテンプレートです。これは T タイプの N 要素の配列を含むstructで す。
次の表は、オプティカル フロー デザイン用の Vivado HLS のタイミングおよびリソース見積もりを示しています。
表 5: オプティカル フロー デザインのタイミング/リソース使用量の見積もり
スループット係数 = 1 スループット係数 = 4 スループット係数 = 8
クロック周波数 300 MHz 300 MHz 300 MHz
レイテンシ/II 41848/41834 10483/10469 5358/5344
BRAM_18k (使用率 %) 5 2 4
DSP48E (使用率 %) 2 9 19
FF (使用率 %) 8 30 59
LUT (使用率 %) 14 36 88
第 4 章: 出力の生成
表の 2 行目は開始間隔 (II) を示しています。クロック周波数 300 MHz でスループット係数 4 および 8 の場合、デザ インの開始感間隔は、スループット係数 1 の場合の開始間隔と比較すると、約 4 および約 8 の除数でそれぞれ削減さ れます。このため、スループット係数が増加すると、リソース使用量が増加します。
スループット係数が 1 の場合、II は 41,848 です。このデザインの入力は 200x200 ピクセル画像フレームで、II の値 はフレーム全体を処理するクロック数を示します。このような場合、1 ピクセルを処理するのにかかるクロック サイ クルは 1 を少し超えます。スループット係数を増加すると、1 フレームを処理する II が低下するので、アプリケーシ ョンがクロックサイクルごとに 1 ピクセル以上処理するようになります。
コンピューター ビジョン ブロックのスループット制御
Model Composer では、ほとんどのコンピュータービジョンブロックでスループット係数 (Throughput factor) を 8 ま での値に設定できますが、インプリメンテーションの理由から、1 を超える 8 未満の値を使用すると、毎クロック 8 ピクセルが処理されるようになります。これで必要なスループットは達成できるようになりますが、必要以上にハー ドウェア リソースが使用されてしまいます。
コンピューター ビジョン ブロックのスループット係数に 1 より大きい値を指定すると、さらに制限が多くなります。
まず、使用するコンピューター ビジョン ブロックでスループット係数がサポートされていることが必要です。次に、
画像の列数は、使用されるコンピューター ビジョン ブロックでサポートされる最大のスループット係数 (通常は 8) の 倍数である必要があります。
次の表に、スループット係数がサポートされないか、サポートに制限のある Model Composer ブロックをリストしま す。特定のブロックの詳細は、付録 B: Model Composer ブロックライブラリを参照してください。
表 6: スループット制御に制限のあるコンピューター ビジョン ブロック
ブロック名 スループット制御の制限
2-D Convolution スループット係数 1、2、4、8 を使用できます。
Bilateral Filter サポートされません。
Dense Non-Pyramidal LK Optical Flow スループット係数 1、2 を使用できます。
Dilation スループット係数 1、2、4、8 を使用できます。
FAST Corner Detection スループット係数 1、2、4、8 を使用できます。
Gaussian Blur スループット係数 1、2、4、8 を使用できます。
Gradient Magnitude スループット係数 1、2、4、8 を使用できます。
Gradient Phase スループット係数 1、2、4、8 を使用できます。
HOG Descriptor サポートされません。
Histogram スループット係数 1、2、4、8 を使用できます。
Histogram Equalization スループット係数 1、2、4、8 を使用できます。
Integral Image サポートされません。
Mean & Std Deviation スループット係数 1、2、4、8 を使用できます。
Median Blur Filter スループット係数 1、2、4、8 を使用できます。
MinMax Location スループット係数 1、2、4、8 を使用できます。
Otsu Thresholding スループット係数 1、2、4、8 を使用できます。
Pyramid Down サポートされません。
Pyramid Up サポートされません。
表 6: スループット制御に制限のあるコンピューター ビジョン ブロック (続き)
ブロック名 スループット制御の制限
Sobel Filter フィルター サイズが 3x3 および 5x5 の場合、スループット係数
に 1、2、4、8 を使用できます。フィルター サイズが 7x7 の場 合、スループット係数はサポートされません。
Stereo Block Matching サポートされません。
Warp Transform サポートされません。
インターフェイス仕様の定義
Simulink®環境内では、デザインの入力と出力は Inport ブロックおよび Outport ブロックを使用して定義されます。
ただし、ソフトウェア アルゴリズムからハードウェアの RTL インプリメンテーションに移動する際に、特定の入力/
出力 (I/O) プロトコルを使用して、これらの入力および出力ポートをデザインインターフェイスのポートにマップす
る必要があり、実際には通常遅延が発生します。デザインの開発の一部として、デザインがその他のデザインやシス テム内の IP とどのように通信するかを指定します。これには、デザインのインターフェイスを指定し、数個の標準 I/O プロトコルから選択します。
Model Composer では、インターフェイス仕様 (Interface Spec) ブロックを使用して、この I/O プロトコルを定義する 必要があります。
インターフェイス合成は、デザイン内の最上位サブシステム モジュールでのみサポートされ、Model Composer で C ++ コードが生成されます。次の図では、Edge Detection モジュールが最上位サブシステム モジュールで、Interface Spec ブロックをこのモジュール内にインスタンシエートする必要があります。
ヒント: その他のサブシステム モジュールや入れ子のサブシステム モジュールにインスタンシエートされた Interface Spec ブロックは無視されます。
第 4 章: 出力の生成