S_AXILITE 制御レジスタ マップ - 2023.2 日本語

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

Document ID
UG1399
Release Date
2023-12-18
Version
2023.2 日本語

Vitis Unified IDE および v++ コマンドでは、Vivado IP または Vitis カーネルを制御する制御レジスタ マップと、s_axilite インターフェイスにグループ化されたポートが自動的に生成されます。生成された RTL ファイルに追加されるこのレジスタ マップは、次の 2 つのセクションに分けることができます。

  1. ブロック レベル制御信号
  2. s_axilite インターフェイスにマップされる関数引数

Vitis カーネル フローでは、デフォルトのブロック プロトコルは ap_ctrl_chain で、s_axilite インターフェイスに割り当てられます。このデフォルト設定は変更しないでください。

ただし、Vivado IP フローでは、デフォルトのブロック制御プロトコルは ap_ctrl_hs で、Vivado IP フローのインターフェイス に示すように、それ独自のインターフェイスに割り当てられます。IP で s_axilite インターフェイスを使用している場合は、次の例のように INTERFACE プラグマを使用して、ブロック制御プロトコルをそのインターフェイスに割り当てることもできます。

#pragma HLS INTERFACE mode=s_axilite port=return

次のように INTERFACE プラグマまたは指示子を使用しても、ブロック制御プロトコルを変更できます。

#pragma HLS INTERFACE mode=ap_ctrl_chain port=return

s_axilite インターフェイスの制御レジスタ マップでは、Vitis HLS により、ブロック レベル プロトコル、割り込み、メールボックス、および割り込み制御用にアドレス 0x000x18 を予約されます。0x18 は、次のようにカウントされた自動再起動およびメールボックスがイネーブルになっている場合のみです。

表 1. 活用した
アドレス 説明
0x00 制御信号
0x04 グローバル割り込みイネーブル レジスタ
0x08 IP 割り込みイネーブル レジスタ (読み出し/書き込み)
0x0c IP 割り込みステータス レジスタ (読み出し/TOW)
0x10 自動再起動カウンター (書き込みで、カウントされた自動再開がある場合にのみ存在)
0x14 入力メールボックスの書き込み (読み出し/書き込みで、入力メールボックスがイネーブルの場合にのみ存在)
0x18 出力メールボックスの読み出し (読み出し/書き込みで、出力メールボックスがイネーブルの場合にのみ存在)

制御信号 (0x00) には、ap_startap_doneap_ready、および ap_idle が含まれ、ap_ctrl_chain ブロック プロトコルの場合は、ap_continue も含まれます。これらは、s_axilite アダプターを介してアクセスされるブロック レベル インターフェイスです。

ブロック演算を開始するには、制御レジスタの ap_start ビットを 1 に設定する必要があります。次に HLS エンジンがレジスタから AXI4-Lite スレーブ インターフェイスにまとめられた入力を読み出します。

ブロックの演算が終了すると、ハードウェアの出力ポートにより ap_doneap_idle、および ap_ready が設定され、s_axilite インターフェイスにまとめられた出力ポートの結果が適切なレジスタから読み出されます。

関数引数に対しては、s_axilite インターフェイスに割り当てられている各引数またはポートのアドレスが自動的に割り当てられます。各ポートには、0x10 から開始するオフセットが割り当てられます。これより下位のアドレスは、制御信号用に予約されています。ポートに割り当てられるサイズ (アドレス範囲) は、引数のデータ型および使用されるポート プロトコルにより決定されます。

AXI4-Lite インターフェイスにまとめられた変数は関数引数であり、C コードではデフォルト値がないので、s_axilite インターフェイスのどの引数レジスタにもデフォルト値を割り当てることはできません。レジスタは config_rtl コマンドを使用するとリセットを付けてインプリメントできますが、それ以外のデフォルト値を割り当てることはできません。

ap_ctrl_chain ブロック プロトコルに対して Vitis HLS で生成される制御レジスタ マップは、次のとおりです。

...
//------------------------Address Info-------------------
// 0x00 : Control signals
//        bit 0  - ap_start (Read/Write/COH)
//        bit 1  - ap_done (Read)
//        bit 2  - ap_idle (Read)
//        bit 3  - ap_ready (Read/COR)
//        bit 4  - ap_continue (Read/Write/SC)
//        bit 7  - auto_restart (Read/Write)
//        bit 9  - interrupt (Read)
//        others - reserved
// 0x04 : Global Interrupt Enable Register
//        bit 0  - Global Interrupt Enable (Read/Write)
//        others - reserved
// 0x08 : IP Interrupt Enable Register (Read/Write)
//        bit 0 - enable ap_done interrupt (Read/Write)
//        bit 1 - enable ap_ready interrupt (Read/Write)
//        others - reserved
// 0x0c : IP Interrupt Status Register (Read/TOW)
//        bit 0 - ap_done (Read/TOW)
//        bit 1 - ap_ready (Read/TOW)
//        others - reserved
// 0x10 : Data signal of a
//        bit 7~0 - a[7:0] (Read/Write)
//        others  - reserved
// 0x14 : reserved
// 0x18 : Data signal of b
//        bit 7~0 - b[7:0] (Read/Write)
//        others  - reserved
// 0x1c : reserved
// 0x20 : Data signal of c_i
//        bit 7~0 - c_i[7:0] (Read/Write)
//        others  - reserved
// 0x24 : reserved
// 0x28 : Data signal of c_o
//        bit 7~0 - c_o[7:0] (Read)
//        others  - reserved
// 0x2c : reserved
// (SC = Self Clear, COR = Clear on Read, TOW = Toggle on Write, COH = Clear on Handshake)
...