デバイスが動作するクロック周波数を増加せずにデザインのスループットを増加する必要がある場合 (デバイスで使 用可能な最大周波数よりも低いクロック周波数で動作する目的または消費電力を削減する目的で)、ザイリンクス 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
• Computer Vision ブロックには、[Throughput factor] の値を 8 までしかサポートしないものも多く、中には 1 を超 える値をサポートしないものもあります。詳細は、Computer Vision ブロックのスループット制御 を参照してくだ さい。
• 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 ブロック内で使用されていますが、最上位 サブシステムで直接使用することはできません。
第 4 章: 出力の生成
デフォルトのスループット係数 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-Streams を介して読み込みます。これらのストリームは、データ幅 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 ビットのデータ幅の AXI-4-Stream を介して同 時に受け取ります。IP 内でロジックが複製されるので、4 ピクセルが並列に処理されます。IP は一度にデータ幅 32 ビットの出力画像を AXI4-Stream インターフェイスを介して送信します。xmc::MultiScalar<T,N> は
xmcMultiScalar.hで定義されたstructテンプレートです。これは T タイプの N 要素の配列を含むstructで す。
次の表は、オプティカル フロー デザイン用の Vivado HLS のタイミングおよびリソース見積もりを示しています。
表 5: オプティカル フロー デザインのタイミング/リソース使用量の見積もり
Throughput factor = 1 Throughput factor = 4 Throughput factor = 8
Clock Freq 300 MHz 300 MHz 300 MHz
Latency/II 41848/41834 10483/10469 5358/5344
BRAM_18k(Utilization %) 5 2 4
DSP48E(Utilization %) 2 9 19
FF(Utilization %) 8 30 59
LUT(Utilization %) 14 36 88
第 4 章: 出力の生成
表の 2 行目は開始間隔 (II) を示しています。クロック周波数 300 MHz でスループット係数 4 および 8 の場合、デザ インの開始感間隔は、スループット係数 1 の場合の開始間隔と比較すると、約 4 および約 8 の除数でそれぞれ削減さ れます。このため、スループット係数が増加すると、リソース使用量が増加します。
スループット係数が 1 の場合、II は 41,848 です。このデザインの入力は 200x200 ピクセル画像フレームで、II の値 はフレーム全体を処理するクロック数を示します。このような場合、1 ピクセルを処理するのにかかるクロック サイ クルは 1 を少し超えます。スループット係数を増加すると、1 フレームを処理する II が低下するので、アプリケーシ ョンがクロックサイクルごとに 1 ピクセル以上処理するようになります。