最適な AXI4 インターフェイスとは、バスへのアクセス待機中にデザインが停止せず、バス アクセスが承認された後の読み出し/書き込み待機中にバスが停止しないようなインターフェイスです。最適な AXI4 インターフェイスを作成するには、INTERFACE プラグマまたは指示子に次のオプションを使用してバースト アクセスの動作を指定し、AXI4 インターフェイスの効率を最適化します。バースト転送の詳細は、AXI バースト転送 を参照してください。
自動バースト アクセスが失敗した場合、効率的な解決策は、コードを書き直すか、手動バーストの使用で説明されるように、手動バーストを使用することです。それでもうまくいかない場合は、CACHE プラグマまたは指示子を使用して、AXI4 インターフェイスでキャッシュ メモリを使用するという回避策もあります。
volatile
修飾子を付けると、バースト アクセスによる読み出しや書き込みができなくなります。これらのオプションの中には、内部ストレージを使用してデータをバッファリングするため、エリアおよびリソースへの影響があるものもあります。
-
latency
: AXI4 インターフェイスのレイテンシを指定し、読み出しまたは書き込みの指定サイクル (レイテンシ) 前にバス要求を開始できるようにします。この値が小さすぎると、デザインが準備完了になるのが早すぎ、バスを待つために停止する可能性があります。この値が大きすぎると、バス アクセスが承認されても、デザインがアクセスを開始するのを待つためにバスが停止する可能性があります。 -
max_read_burst_length
: バースト転送中に読み出されるデータ値の最大数を指定します。 -
num_read_outstanding
: デザインが停止する前に、AXI4 バスに対して応答なしで送信できる読み出し要求の数を指定します。これにより、デザインの内部ストレージである FIFO のサイズ (num_read_outstanding
*max_read_burst_length
*word_size
) が決まります。 -
max_write_burst_length
: バースト転送中に書き込まれるデータ値の最大数を指定します。 -
num_write_outstanding
: デザインが停止する前に、応答なしで AXI4 バスに何回書き込み要求を送信できるかを指定します。これにより、デザインの内部ストレージである FIFO のサイズ (num_write_outstanding
*max_write_burst_length
*word_size
) が決まります。
次に、これらのオプションを使用した例を示します。
#pragma HLS interface mode=m_axi port=input offset=slave bundle=gmem0
depth=1024*1024*16/(512/8)
latency=100
num_read_outstanding=32
num_write_outstanding=32
max_read_burst_length=16
max_write_burst_length=16
インターフェイスは、レイテンシ 100 になるように指定されています。Vitis HLS では、デザインが AXI4 バスにアクセスできるようになる 100 クロック サイクル前に、バースト アクセス要求をスケジューリングしようとします。バスの効率をさらに向上するには、num_write_outstanding
および num_read_outstanding
オプションを使用して、デザインに最大 32 個の読み出しおよび書き込みバーストを格納できるバッファー容量が含まれるようにします。これで、バス要求が送信されるまでデザインの処理を続行できるようになります。最後に、max_read_burst_length
および max_write_burst_length
オプションを使用することで、最大バースト サイズが 16 になり、AXI4 インターフェイスがそれを超える時間バスを保持しないようにします。
これらのオプションを使用すると、AXI4 インターフェイスの動作をシステム用に最適化できます。動作の効率は、これらの値が正しく設定されているかどうかによって異なります。