Vitis HLS から ap_ctrl_chain
プロトコルをインプリメントする一部のユーザー管理のカーネルでは、カーネルが自動的に再起動するように s_axilite
制御レジスタの auto_restart
ビットを設定できます。auto_restart
ビットを使用するユーザー管理のカーネルは、ユーザー管理の終わらないカーネルでのデータのストリーミング で説明されるように、終了しないカーネルです。
終了しないカーネルをプログラミングするには、ホスト アプリケーションが s_axilite
制御レジスタの auto_restart
信号をアドレス 0x00
に設定する必要があります。設定しない場合、カーネルは単にシングル実行モードで実行され、ホスト アプリケーションが再起動するのを待ちます。カーネルの制御レジスタ プログラムするには、次の手順を使用します。
- 前述のように、
xrt::ip
クラスの IP オブジェクトとしてユーザー管理のカーネルにアクセスするよう、ホスト アプリケーションを設定します。 - 値 129 (バイナリ
10000001
) を制御レジスタに書き込み、ap_start
ビットとauto_restart
ビットの両方を設定して、カーネルを終了しないモードで実行できるようにします。s_axilite
制御レジスタの位置は、ほかのap_ctrl_chain
カーネルと同様、0x00
です。重要: 非確定的な動作を引き起こす可能性のある制御レジスタ空間には、ほかに何も書き込まないでください。
次のコード例では、IP オブジェクトを設定し、前述のように記述して制御レジスタを設定します。
ap_start
は終らないカーネルの実行の開始を、auto_restart
はそれが終了しないように設定しています。auto ip = xrt::ip(device_2, xclbinId, "krnl_stream_vdatamover");
auto ip = xrt::ip(device, uuid, "krnl_stream_vdatamover");
int startNow =129;
size_t control_offset = 0;
ip.write_register(control_offset,startNow);