見出し画像

AXIバスの基本動作

 前回はAXIバスの概要として、本当に概要、表面だけの上っ面のイメージだけを書きました。

 これだけだと実際の動きが分からないので、一歩だけ踏み込んでみたいと思います。


 AXIバスの基本はハンドシェイクです。マスター側がVALID信号を出して、スレーブ側がREADY信号で応答することでハンドシェイクが成立します。

 分かりやすくするために、AXI4-Liteのバスイメージで波形を載せていきます。

画像1

 マスター側はアドレスを決定しS_AXI_awaddr信号を出すと共に、アドレスが有効であることを示すS_AXI_awvalid信号を出力します。

 これを受けて、スレーブ側はアドレス信号を取り込むと共に、取り込んだことを示すS_AXI_awready信号を出力します。

 マスター側は、S_AXI_awreadyを確認し、アドレスフェーズは終了です。
 
 次にデータフェーズですが、これも同様の動きになります。

画像2

 マスター側は書き込むデータを決定し、S_AXI_wdataに出すと共に、データが有効であることを示すS_AXI_wvalid信号を出力します。

 これを受けて、スレーブ側はデータ信号を取り込むと共に、取り込んだことを示すS_AXI_wready信号を出力します。

 マスター側は、S_AXI_wreadyを確認し、データフェーズは終了です。ただし、これはAXI4-Liteの場合で、通常のAXI4の場合には複数データのバースト転送がありますので、データの最後を示すLAST信号が必要になります。
 
 データフェーズの後には、応答フェーズというものがあり、書き込みの成功・失敗の応答を返すのですが割愛します。
 
 よくあるイメージですと、アドレスフェーズが終わってから、データフェーズが開始するイメージになるかと思います。
 その認識は間違ってはいませんし、AXI3の時はアドレスフェーズ、データフェーズの順で問題ありませんでした。ただ、AXI4になってから、アドレスフェーズとデータフェーズが同時という動作も許容されています。
 
 一度に二つのフェーズが走った場合には下の波形のようになります。

画像3

 短時間でアクセスしたいという要望に対応したのでしょう。アドレスフェーズとデータフェーズは別々のものだとばかり思いこんでいると、同時に2つのフェーズが動いた時に対応出来ませんのでご注意ください。
 
 VivadoではAXI4のIPを作るメニューがあるのですが、それで作った場合には、同時に2つのフェースが動く場合のみの対応のようです。

画像4

 作り方は簡単で、適当なプロジェクトを開いた状態でToolメニューの[Create and Package New IP]を実行するだけです。
 途中の選択に[Create AXI4 Peropheral]という項目があります。これを選択して進めていけばIPが出来上がります。

画像5

 出来上がったフォルダの中にソースコードも入っていますので、AXI4の動作を理解するための一助としてご利用下さい。

この記事が気に入ったらサポートをしてみませんか?