AXIバスの基本動作
前回はAXIバスの概要として、本当に概要、表面だけの上っ面のイメージだけを書きました。
これだけだと実際の動きが分からないので、一歩だけ踏み込んでみたいと思います。
AXIバスの基本はハンドシェイクです。マスター側がVALID信号を出して、スレーブ側がREADY信号で応答することでハンドシェイクが成立します。
分かりやすくするために、AXI4-Liteのバスイメージで波形を載せていきます。
マスター側はアドレスを決定しS_AXI_awaddr信号を出すと共に、アドレスが有効であることを示すS_AXI_awvalid信号を出力します。
これを受けて、スレーブ側はアドレス信号を取り込むと共に、取り込んだことを示すS_AXI_awready信号を出力します。
マスター側は、S_AXI_awreadyを確認し、アドレスフェーズは終了です。
次にデータフェーズですが、これも同様の動きになります。
マスター側は書き込むデータを決定し、S_AXI_wdataに出すと共に、データが有効であることを示すS_AXI_wvalid信号を出力します。
これを受けて、スレーブ側はデータ信号を取り込むと共に、取り込んだことを示すS_AXI_wready信号を出力します。
マスター側は、S_AXI_wreadyを確認し、データフェーズは終了です。ただし、これはAXI4-Liteの場合で、通常のAXI4の場合には複数データのバースト転送がありますので、データの最後を示すLAST信号が必要になります。
データフェーズの後には、応答フェーズというものがあり、書き込みの成功・失敗の応答を返すのですが割愛します。
よくあるイメージですと、アドレスフェーズが終わってから、データフェーズが開始するイメージになるかと思います。
その認識は間違ってはいませんし、AXI3の時はアドレスフェーズ、データフェーズの順で問題ありませんでした。ただ、AXI4になってから、アドレスフェーズとデータフェーズが同時という動作も許容されています。
一度に二つのフェーズが走った場合には下の波形のようになります。
短時間でアクセスしたいという要望に対応したのでしょう。アドレスフェーズとデータフェーズは別々のものだとばかり思いこんでいると、同時に2つのフェーズが動いた時に対応出来ませんのでご注意ください。
VivadoではAXI4のIPを作るメニューがあるのですが、それで作った場合には、同時に2つのフェースが動く場合のみの対応のようです。
作り方は簡単で、適当なプロジェクトを開いた状態でToolメニューの[Create and Package New IP]を実行するだけです。
途中の選択に[Create AXI4 Peropheral]という項目があります。これを選択して進めていけばIPが出来上がります。
出来上がったフォルダの中にソースコードも入っていますので、AXI4の動作を理解するための一助としてご利用下さい。
この記事が気に入ったらサポートをしてみませんか?