FPGA開発を進める中で、M_AXI(Master AXI)やS_AXI(Slave AXI)といった用語が頻出します。これらはFPGA内でデータをやり取りする際の重要なプロトコルですが、初心者にとって混乱を招きやすい概念です。この入門記事では、AXIの基本的な仕組みと役割について、具体例を交えて解説します。
目次
1. AXIとは?
AXI(Advanced eXtensible Interface)は、ARM社が策定した通信プロトコルです。FPGA開発では、データを送受信するための標準的な手段として広く利用されています。AXIには以下のような特徴があります:
- 高効率なデータ転送: 高速データ転送と低レイテンシを両立。
- マルチチャネル: 読み出し(Read)と書き込み(Write)が独立して動作可能。
- 階層構造: マスタ(Master)とスレーブ(Slave)の役割分担。
AXIはFPGAのProcessing System(PS)とProgrammable Logic(PL)の間でデータをやり取りする際にも利用されます。
2. M_AXIとS_AXIの違い
AXIは、接続するデバイスの役割によって以下の2つに分かれます:
2.1 M_AXI(Master AXI)
- 役割: リクエスト(要求)を発行します。
- 読み出しや書き込みの指示を出す役割。
- 主体: 通常、PS側がM_AXIとして動作します。
- 例: PSが「データを読み出したい」「データを書き込みたい」という指示をPLに送る。
2.2 S_AXI(Slave AXI)
- 役割: リクエストを受け付け、実際にデータを送受信します。
- データの応答を返す役割。
- 主体: 通常、PL側がS_AXIとして動作します。
- 例: PLが「データを送る」「データを受け取る」という動作を実行。
まとめ表
| インターフェース | 主な役割 | 主体 |
|---|---|---|
| M_AXI | リクエストの発行 | PS(マスタ) |
| S_AXI | リクエストの受け付け | PL(スレーブ) |
3. データフローの例
3.1 PSがPLからデータを読み出す場合
- PS(M_AXI): データを読み出すリクエストを発行します。
- PL(S_AXI): リクエストを受け取り、該当するデータをPSに返します。
- 実際のデータフローは、以下のようになります:
PS(M_AXI) -> PL(S_AXI): リクエスト送信
PL(S_AXI) -> PS(M_AXI): データ応答
3.2 PSがPLにデータを書き込む場合
- PS(M_AXI): 書き込みリクエストを発行し、データを送信します。
- PL(S_AXI): リクエストを受け取り、データを内部に格納します。
- データフローは次のようになります:
PS(M_AXI) -> PL(S_AXI): 書き込みリクエストとデータ送信
4. AXIの種類
Xilinx FPGAでは、以下のような異なる種類のAXIが提供されています:
4.1 General Purpose(GP)インターフェース
- 用途: 汎用通信。
- 特徴: 比較的低速な通信に適しており、主に制御や設定に使用されます。
- 例: M_AXI_GP0(PS -> PLの汎用通信)。
4.2 High Performance(HP)インターフェース
- 用途: 高速通信。
- 特徴: 高スループットが求められる大量データの転送に使用されます。
- 例: S_AXI_HP0(PL -> PSの高速データ転送)。
| インターフェース | 主な用途 | 帯域幅 |
|---|---|---|
| M_AXI_GP0 | 汎用制御、設定 | 32ビット/64ビット |
| S_AXI_HP0 | 高速データ転送 | 64ビット/128ビット |
5. よくある勘違い
勘違い1: M_AXIとS_AXIは物理的に異なるリソースを使う
- 正解: M_AXIとS_AXIはプロトコル上の役割を表しており、必ずしも異なる物理リソースを使うわけではありません。
勘違い2: PSは常にマスタ、PLは常にスレーブ
- 正解: PSもPLも、状況によってマスタにもスレーブにもなり得ます。
- 例: PLがM_AXIを使ってPSのDDRメモリに直接データを書き込むことも可能です。
6. AXIの設計におけるポイント
- リクエストと応答の役割を理解する:
- 誰がリクエストを発行し、誰が応答を返すかを明確にする。
- データ量とスループットを考慮する:
- 小規模データはGPインターフェース、大規模データはHPインターフェースを使う。
- 適切なタイミング制御を行う:
- AXI通信は非同期処理が基本のため、タイミングの調整が重要。
7. まとめ
- M_AXIとS_AXIは通信の役割を表すインターフェースです。
- M_AXI: リクエストを発行するマスタ側。
- S_AXI: リクエストを受け付けるスレーブ側。
- PSとPLは状況に応じてマスタ・スレーブを切り替えることが可能です。
- 用途に応じてGPインターフェースとHPインターフェースを使い分けることで、効率的なシステム設計が可能です。
FPGA開発におけるAXIの基本を理解すれば、PSとPLの連携をスムーズに進めることができるでしょう!