AR# 45181

13.3 AXI BFM - チャネル レベル API を使用すると「Reached the maximum outstanding transactions limit」というエラー メッセージが表示される

説明


AXI4 マスター BFM を使用し、ファンクション レベル API コマンド READ_BURST を、SEND_READ_ADDRESS およびRECEIVE_READ_DATA コマンドというチャネル レベル コマンドのシーケンスに置き換えました。

2 つ目のシーケンスは BFM 内部トランザクション カウンターをディクリメントしていないようです。このため、最大トランザクション制限に達してしまいます。

シミュレーションでは次のエラー メッセージが表示されました。

MASTER_0 : *INFO : Reached the maximum outstanding transactions limit (2). Blocking all future transactions until at least 1 of the outstanding transactions has completed.

同時にトランザクションを行っているのはなく、シーケンシャル トランザクションを順次に行っています。BFM 内にカウンターがあるようです。チャネル レベル API を使用すると、カウンターがディクリメントせず、制限数に達してしまいます。これはバグですか。

ソリューション


これはバグではなく、制限事項です。

察しのとおり、BFM 内のカウンターは、チャネル レベル API コマンド RECEIVE_READ_DATApending_transactions_counter をディクリメントしないので、カウントダウンしません。使用すべきチャネル レベル API コマンドは RECEIVE_READ_BURST で、これを使用すると pending_transactions_counter がディクリメントされます。または、完了トランザクションに関連したすべてのデータ伝送が完了した後、remove_pending_transaction コマンドを手動で呼び出すこともできます。

RECEIVE_READ_DATA コマンド内のカウンターをディクリメントするにあたって問題なのは、前に停止されていた同時トランザクションがカウンターがディアサートされたクロックで伝送を開始しまうことです。しかし、標準トランザクションのデータ バーストはその時点で実際は完了していません。

データ伝送はトランザクションの一部であり、すべてのデータ伝送の和 (つまりバースト) は実際はトランザクション完了です。つまり、このケースの問題を修正したとしても、パラレル トランザクションが求められる場合はほかの機能が破損する可能性があります。

チャネル レベル API を使用すると、チャネル依存レベルで AXI プロトコルに違反する可能性が高くなることに注意してください。したがって、これは推奨されません。ファンクション レベル API は Cadence AXI VIP に対して検証されています。
AR# 45181
日付 12/15/2012
ステータス アクティブ
種類 一般
IP