ソフトウェア エミュレーション - 2023.2 日本語

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

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

VSC では、単一のソース C++ モデルを使用するので、機能を迅速に検証できます。ソフトウェア エミュレーション ターゲット (-t sw_emu) は、v++ コンパイル ステップ中に指定する必要があります。このターゲットでは、VSC は C コンパイルを使用してアクセラレータおよびアプリケーション ソース ファイルをコンパイルし、ハードウェア コンパイルを実行しません。Vitis HLS ツールは RTL の作成には実行されず、オブジェクト ファイルは g++ を使用してリンクされます。

次に、2 つの PE (ldSt および fsk) を持つアクセラレータのコード例を示します。ldSt PE は AXI4-Stream Lsz ワードを書き込み、fsk PE は単にそれらのワードを S フィードバック ストリームにコピーします。fsk 関数本体は、L から 1 ワードを読み込み、S に 1 ワードを書き込みます。fsk PE はフリーランニングとマークされているため、sz には依存しません。

void compute(…) {
    hls::stream<T> L, S;
    ldSt(…, L, S); // S is feedback
    fsk(L, S);     // fsk is free-running
}
void ldSt(…, hls::stream<T>& L,
             hls::stream<T>& S) {
    for (int i=0; i<sz; i++) {
        L << input[i];
    }
    // Error-1: non-empty stream (i < sz-1)
    // Error-2: deadlock stream (i < sz+1)
    for (int i=0; (i < sz); i++) {
        S >> output[i];
    } 
}
void fsk(hls::stream<T>& L,
         hls::stream<T>& S) {
    T word;
    L >> word;
    S << word;
}

C++ ソースは完全に C コンパイルを使用して構築されるため、プロセスは非常に高速です。さらに、VSC は、VSC C++ モデルの特定のハードウェア ビヘイビアー セマンティクスに対してモデルをチェックします。

  • アプリケーション層で自動ランタイム アサーションを実行して、ホスト デバイス データを移動します。
    • 入力データ バッファーがデバイスに同期された後に書き込まれない可能性があります。
    • 結果がデバイスから同期される前に、出力データ バッファが読み出されない可能性があります。
  • CU と PE は並行して実行され、ハードウェア セマンティクスを記述します。したがって、次のようになります。
    • 手続き型ではない C++ コードであるフィードバック接続は、機能的に検証できます。
    • フリーランニング PE は、通常の PE と共に機能的に検証できます。
  • 特定のエラーのあるハードウェア ビヘイビアーが検出されることがあります。
  • Error-1: ldSt の 2 番目のループが「i < sz-1」を使用する場合、空ではない AXI4-Stream 'S' になり、これがアサートされます。
  • Error-2: ldSt の 2 番目のループで「i < sz +1」を使用する場合、ldStr はストリーム 'S' に書き込まれるワードよりも 1 つ多くのワードを想定しているため、デッドロックが発生します。このシナリオは、この C ベースの早期検証でハングとしてキャプチャされます。