FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

AXIのアービタを設計するための考察

回路設計をするにあたり、バスの回りはAXIを利用している。CPUの回りにはいくつかのAXIのバスが出ているのだが、それらをうまくコントロールするためにはどのようにすれば良いのだろうか。

バスにおける基本は、以下の2つだと考えられる。

  • アービタ : 2つのバスを結合する
  • スプリッタ : 1つのバスを2つに分割する

f:id:msyksphinz:20160810020220p:plain

AXIは基本5つのチャネルに分類される:

  • リードアドレスチャネル(AR)
  • リードデータチャネル(R)
  • ライトアドレスチャネル(AW)
  • ライトデータチャネル(W)
  • ライトリプライチャネル(B)

アービタを実現するためには、リクエストチャネルについてはまず、FIFOで受け取ったものをマージすれば良い。これはラウンドロビンか、固定値優先で行っていく。

次にリードデータチャネルの反応だが、リクエスト側で自分のIDを保存しておき、当該IDのリプライがあればリクエスト元に返し、FIFOから除去する。

ライトデータチャネルは、同様にFIFOで受け取ったものをマージすれば良い。つまりMasterからSlaveにアクセスする方向は、リクエストをマージして、どちらのMasterから来たリクエストであるかIDを保存しておく。

一方でリードリプライはライトリプライチャネルは、IDを保存しておき、リプライがあった時点でIDを参照してどちらのMasterが受け取るかを決定する。

上記の構造でアービタはうまくいくはずだ。今後必要になると思うので、今ちゃんと設計しておこうと思う。

f:id:msyksphinz:20160810021256p:plain