Vivado IP フローのポート レベルのプロトコル - 2023.2 日本語

Vitis 高位合成ユーザー ガイド (UG1399)

Document ID
UG1399
Release Date
2023-12-18
Version
2023.2 日本語
重要: ここで説明するポート レベルのプロトコルは、Vivado IP フローのインターフェイス で説明した Vivado IP フローで使用できます。これらのプロトコルは、Vitis カーネル フローではサポートされません。

デフォルトでは、入力ポインターおよび値渡し引数は、ハンドシェイク信号のない単純なワイヤ ポートとしてインプリメントされます。たとえば、Vivado IP フローのインターフェイス で説明した vadd 関数では、入力ポートは I/O プロトコルなしのデータ ポートとしてインプリメントされます。ポートに I/O プロトコルがない場合 (デフォルトまたはそのように設計されている場合)、入力データは読み出されるまで安定させる必要があります。

デフォルトでは、出力ポインターは関連する出力 Valid 信号を使用してインプリメントされ、出力データが有効になるタイミングを示します。vadd 関数の例では、出力ポートは、ポートのデータがいつ有効になって読み出し可能になったかを示す出力 Valid ポート (out_r_o_ap_vld) を関連付けてインプリメントされます。出力ポートに関連付けられた I/O ポートがない場合は、データを読み出すタイミングを判断するのは困難です。
ヒント: 出力には常に I/O プロトコルを使用するようにすることをお勧めします。

読み出しおよび書き込みの両方が実行される関数引数は、入力ポートと出力ポートに分割されます。vadd 関数の例では、out_r 引数は入力ポート out_r_i および出力ポート out_r_o の両方としてインプリメントされ、I/O プロトコル ポート out_r_o_ap_vld が関連付けられます。

関数に戻り値がある場合、その戻り値を示す出力ポート ap_return がインプリメントされます。RTL デザインが 1 つのトランザクション (C/C++ 関数の 1 回の実行) で終了する場合、ブロック レベルのプロトコルで ap_done 信号を使用して関数が終了したことが示されます。これは、ap_return ポートのデータが有効で読み出し可能になったことも示します。

注記: 最上位関数の戻り値をポインターにすることはできません。

たとえば、次のコード例はタイミング ビヘイビアーを示しています (そのターゲット テクノロジとクロック周波数でクロック サイクルごとに 1 つの加算が可能)。

図 1. デフォルト合成での RTL ポートのタイミング
  • デザインは ap_start が High にアサートされると開始します。
  • ap_idle 信号が Low にアサートされ、デザインが動作していることを示します。
  • 入力データは最初のサイクル後のクロックで読み出されます。読み出されるタイミングは Vitis HLS で自動的にスケジューリングされます。すべての入力が読み出されると、ap_ready 信号が High にアサートされます。
  • 出力 sum が計算されると、関連する出力ハンドシェイク (sum_o_ap_vld) でデータが有効なことが示されます。
  • 関数が終了すると、ap_done がアサートされます。これは、ap_return のデータが有効であることも示します。
  • ap_idle ポートが High にアサートされ、デザインが再開を待機していることを示します。