次のセクションでは、Vitis Model Composer HLS ライブラリ用のオプティカル フローのサンプル デザインを使用し、スループット制御機能を使用する利点について説明します。
このデザインでは、次のブロックが使用されています。
- Data Type Conversion、Subtract、Right Shift、Product
- Gain、Sum of Elements、および Data Type Conversion を使用した Window Processing ブロック。
-
calculating_roots
関数を使用した Import Function ブロック。
これらのブロックすべては、要素ごとのアプリケーション パターンに従って、前述の制限に従います。
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 インターフェイスを介してストリーミングされます。
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
xmc::MultiScalar<T,N>
は xmcMultiScalar.h で定義されたテンプレートの struct
です。これは T タイプの N 要素の配列を含む struct
です。次の表は、オプティカル フロー デザイン用の Vitis HLS のタイミングおよびリソース見積もりを示しています。
スループット係数 = 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 |
表の 2 行目は開始間隔 (II) を示しています。クロック周波数 300 MHz でスループット係数 4 および 8 の場合、デザインの開始感間隔は、スループット係数 1 の場合の開始間隔と比較すると、約 4 および約 8 の除数でそれぞれ削減されます。このため、スループット係数が増加すると、リソース使用量が増加します。
スループット係数が 1 の場合、II は 41,848 です。このデザインの入力は 200x200 ピクセル画像フレームで、II の値はフレーム全体を処理するクロック数を示します。このような場合、1 ピクセルを処理するのにかかるクロック サイクルは 1 を少し超えます。スループット係数を増加すると、1 フレームを処理する II が低下するので、アプリケーションがクロック サイクルごとに 1 ピクセル以上処理するようになります。