Zynq-7000のAXI3にAXI4を接続する

FPGA

Zynq-7000は3種類のAXI(AXI_GP,AXI_HP,AXI_ACP)をサポートしていますが、いずれもAXIのバージョンはAXI3です。AXI4とAXI3にはいくつかの違いがありますが、大きな違いの1つが最大バースト長です。AXI4の最大バースト長は256ですが、AXI3の最大バースト長は16です。このため、AXIに接続しようとしているユーザー回路がAXI4であり、16より長いバーストを必要とする場合にはZynq-7000のAXIにそのままでは接続できません。このような場合、VivadoのIPコアを使うと簡単にAXI4をAXI3に変換できます。

AXI4からAXI3の変換

AXI Protocol Converterのインスタンス化

AXI4からAXI3への変換は、IPコアカタログでAXI Protocol Converterを検索し、それをインスタンス化するだけです。

IPカタログからAXI Protocol Converterを使用

IPカタログからAXI Protocol Converterを使用

AXI Protocol Converterの接続

次の例では、AXI Protocol Converterをaxi_protocol_converter_0としてインスタンス化しています。また、ユーザー回路からのAXI4外部入力(S_AXI)を変換してZYNQ7のS_AXI_ACPに接続しています。このような場合、axi_protocol_converter_0のS_AXI側にユーザー回路からS_AXIを接続し、M_AXIにZYNQ7のS_AXI_ACPを接続します。

AXI3からAXI4への変換

AXI3からAXI4への変換

AXI Protocol Converterのパラメータ設定

AXI Protocol Converterのインスタンスをダブルクリックすると、パラメータを設定できます。AXI4をAXI3に変換する場合、SI PROTOCOLをAXI4、MI PROTOCOLをAXI3とします。

AXI Protocol Converterの設定

AXI Protocol Converterの設定

実際の波形

AXI Protocol Converterを挿入すると、ユーザー回路側のAXI応答がS_AXI_ACPと比べて少し変わります。次の波形は、ユーザー回路からS_AXI_ACP経由でメインメモリ(DDR3)にバースト16のライトを行ったものです。AXIの動作周波数は50MHz、DDR3の動作周波数は533MHz(データ転送速度:1066MHz)です。

ライトの入力と出力のタイミング

ライトの入力と出力のタイミング

ロジックアナライザの波形から、ユーザー回路側のAXI応答を抜粋したのが下図です。ZYNQ7のS_AXI_ACPは、基本的にAWREADYとWREADYはデフォルトでHレベルですが、AXI Protocol Converterを挿入すると、次のような応答になるようです。

  • AWREADYはデフォルトでHレベルだが、AWVALID受付後は1サイクルだけLレベルになる
  • WREADYはデフォルトでLレベルになる。AWVALID受付から3サイクル後に、バースト長分だけHレベルになる
AWVALIDとWREADYの関係

AWVALIDとWREADYの関係

「必ず最初にライトコマンドを受け、次に対応するライトデータを受け付ける」という処理が行われているようです。このようなAXI応答になっても、一般的な設計では特に困ることはないと思いますが、ライトデータを先に出力しなければならない設計の場合には注意が必要かもしれません。

タイトルとURLをコピーしました