4.1.1. HLS AFUコンテナー
HLS AFUコンテナーは、HLSコンパイラーによって生成されたコンポーネントといくつかのサポートコンポーネントを含むPlatform Designerシステムです。
| コンポーネント | 変更内容 |
|---|---|
| mm_bridge_0 (Pipeline bridge) |
HLSコンポーネントのスレーブ・インターフェイスとAFU IDスレーブが同じスレーブ・インターフェイスを共有できるようにします。 |
| afu_id_avmm_slave_0 Avalon-MM Slave |
UUIDを含むAFUのDFHを格納します。 DFHをホストに公開します( アクセラレーター・ファンクショナル・ユニット(AFU)開発者ガイドを参照 ) |
| floatingPointVectorReduce_float | HLSコンポーネント。このコンポーネントは浮動小数点数のベクトルを消費し、すべての要素を一緒に追加することでそれを削減します。 |
| read_bridge (Pipeline bridge) |
HLSコンポーネントの読み出し専用Avalon-MMマスター・インターフェイスをパイプライン処理します。 |
| write_response_bridge_irq_0 (Write response bridge) |
HLS Avalon-MMマスター・インターフェイスは、ホストメモリーからの書き込み確認をサポートしていません。このカスタム・コンポーネントは、デザインがすべての未処理のホスト・メモリー・ライトを確認するまで、HLSコンポーネントの割り込み信号を防ぎます。このコンポーネントは、すべての結果をホストメモリーに書き込むまで、デザインがホストに割り込まないことを保証します。このコンポーネントを使用しない場合、デザインがホストメモリーへのすべてのライトをコミットする前に、HLS done割り込みがホスト・アプリケーションに到達する可能性があります。 |
図 14. HLS AFUコンテナーのブロック図
HLSコンポーネントは、単純なベクトル削減を実行します。また、入力ベクトルをホストメモリーにコピーし、各ベクトル値を1.0fずつ増やします。
図 15. 簡略化されたHLSコンポーネント このコードには、削減を実行する基本的なソースコードが含まれています。サイクルごとに単一の32ビット浮動小数点値を読み出し、合計を累積します。
1. component
2. float floatingPointVectorReduce_basic(float *masterRead,
3. float *masterWrite,
4. int size)
5. {
6. float sum = 0.0f;
7. for (int idx = 0; idx < size; idx++)
8. {
9. float readVal = masterRead[idx];
10. sum += readVal;
11.
12. masterWrite[idx] = readVal + 1.0f;
13. }
14.
15. return sum;
16. }
これは有効なHLSソースコードですが、AFUデザインには不十分です。インテルのアクセラレーション・スタックには、AFUがホストメモリーにアクセスする方法とホストシステムがホストメモリーを認識する方法を規定する特定の要件があります。幸いなことに、HLSは柔軟性が高いため、これらの制約を満たすようにコンポーネントを再構成できます。要件は次のとおりです。
- コントロールとパラメーターは、HLSがデフォルトで使用するコンジット・インターフェイスではなく、Avalon-MM I/Oスレーブ・インターフェイスを介して公開する必要があります。
- AFUには、システムメモリーにアクセスするための2つのAvalon-MMマスター・インターフェイスがあります。 1つのAvalon-MMマスターを読み出し専用として構成します。もう1つは書き込み専用です。
- 両方のAvalon-MMマスター・インターフェイスは512ビット幅でなければなりません。
- 両方のAvalon-MMマスター・インターフェイスは48ビットアドレスを使用する必要があります。