AXIバスの概要
今更な気もしますが、ちょっと思うところあってAXIバスの基本的なお話を投稿します。
使ったことがない、今日調べ始めたんだけどAXIバスってなんなのよ、というあたりの基本的はお話です。信号の遷移など具体的な内容はまたいずれ。
AXIバスの概要
AXIバスとは、ハンドシェイクを基本としたバスインターフェースです。
バスにはマスターとスレーブが接続されます。多くの場合、マスター側がVALID信号を出力、スレーブ側がREADY信号を出力し、両方が揃った時のデータを有効データと判断します。例外はデータリードの動作とデータライト後の応答で、この時はスレーブ側がVALID信号を、マスター側がREADY信号を出力しますが、ハンドシェイクという意味では同じです。
マスターとスレーブそれぞれが準備完了を示す信号を出力するため、リード、ライトの動作が1クロックに収まらない場合でも問題なく動作することが出来ます。そのため、バス自体は早いクロックで動作し、動作に時間がかかるデバイスだけは遅く、他のデバイスは素早く応答することが出来るために、システム全体の動作速度を早くすることが出来ます。
AXIバスの種類
AXIバスには従来のAXIバスの他に、Lite、Streamと言った亜種があります。
LiteはAXIバスからバースト転送を抜いた単アクセスのみをサポートした簡易型のインターフェースです。レジスタアクセスのような、連続していないアドレスにランダムにアクセスする場合には、この簡易型で十分です。
Streamはアドレスがなく、バースト転送のみを行います。Liteとは逆に大量のデータ転送に適しています。音声データや画像データといった大量のデータを続けて処理する場合や、通信データやセンサーからの取得データのように絶え間なくデータが流れてくる場合にはStreamを使います。
AXI、AXI-Lite、AXI-Streamの違いとは別にAXI3、AXI4、AXI5という違いもあります。
これはバージョンを示すもので、バス幅の範囲や、バースト転送の範囲が異なります。全てのデバイスが最新のAXI5を使っているわけではなく、古いデバイスにはAXI3のみの対応となっています。これらの古いデバイスもまだまだ現役で使われています。大きな違いではないので、後々確認する感じでも構いません。
AXIバスって何に使うの?
AXIバスは元々はARMの規格です。
ARMコアをFPGAに実装し始めてから、FPGAでの使用が急速に広がりました。XilinxでZynq内臓のFPGAを使う場合には避けて通れないインターフェースと言えます。
使われるようになってから既に何年も経っています。少なくない資料がネットにあり、AXIで検索を行うと出て来ますが、正確なところを確認するには、やはり規格書を見るのが一番です。
ARM社ホームぺージ
https://www.arm.com/
AMBA AXI and ACE Protocol Specification
https://developer.arm.com/docs/ihi0022/latest/amba-axi-and-ace-protocol-specification
規格書は英語です。日本語表記のものはありません。
Xilinxの資料を始め、ホームページで解説しているものであれば日本語も資料も豊富にありますので、「使い始めたいけど、いきなり英語はハードルが高い」という方はホームページ巡りをしましょう。
実際に組んで、シミュレーションして、実機で動かして、なぜか実機では動かない!となってくるとやっぱり規格書を見ることになります。英語だからと毛嫌いせずにダウンロードしておくと良いと思います。
もう少しだけ詳しい動作については次の記事で