ハードウェア システムのアーキテクチャ - 2023.2 日本語

Vitis 統合ソフトウェア プラットフォームの資料: アプリケーション アクセラレーション開発 (UG1393)

Document ID
UG1393
Release Date
2023-12-13
Version
2023.2 日本語

システム アーキテクチャとアクセラレータ アーキテクチャは、VPP_ACC クラスから派生したアクセラレータ クラスを使用して完全に指定できます。このコード例では、たたみ込みフィルター システムのアーキテクチャ、計算の構成、CU 数、および計算の接続が conv_acc クラスにより完全に定義されています。次のシステム アーキテクチャが生成されます。

図 1. ハードウェア アーキテクチャ

conv_acc クラスは、compute() 関数内でラップすることで krnl_conv() 関数がアクセラレーションするように指定します。ビデオには、同じ機能を使用して個別に処理できる 3 つの異なるカラー チャネルがあるため、このアクセラレータ クラスで 3 つの CU を使用するようにも指定されます。これらの CU は、データ ACCESS_PATTERN マクロで指定されたデータ ムーバーを使用して複製され、メモリ システムにプラグされます。図のホスト側では、VSC から下位レベル ランタイム ドライバーを使用してハードウェアとやり取りする受信スレッド用と送信スレッド用の 2 つの個別スレッドを示しています。

CU 機能は、別の .cpp ファイルで compute() 関数を使用して定義する必要があります。この例では、プロセッシング エレメント (PE) が 1 つしかないため、compute() は単にそれをラップします。次のコード部分は、.cpp ファイルの一部とサブ関数の詳細 (ここでは省略) を示しています。詳細な例については、サポートされるプラットフォームとスタートアップの例 を参照してください。

// the compute() function wraps the processing function in this example
void conv_acc::compute(
        char                 *coeffs,
        float                factor,
        short                bias,
        unsigned short       width,
        unsigned short       height,
        unsigned char        *src,
        unsigned char        *dst)
{
    krnl_conv(coeffs,factor,bias,width,height,src,dst);
}
 
// ... the processing function implements the CU functionality
void conv_acc::krnl_conv(
        char                 *coeffs,
        float                factor,
        short                bias,
        unsigned short       width,
        unsigned short       height,
        unsigned char        *src,
        unsigned char        *dst) {           
    #pragma HLS DATAFLOW
 
    hls::stream<window,3>  window_stream; // Set a stream depth to 3
 
    // Read incoming pixels and form valid HxV windows
    Window2D(width, height, src, window_stream);
 
    // Process incoming stream of pixels, and stream pixels out
    Filter2D(width, height, factor, bias, coeffs, window_stream, dst);
}