FPGA開発日記

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

Diplomacyを使ってOCPバスを作成する(15. Xbarの理解2)

TileLinkのXbarの仕組みを引き続き解析している。requestAIOの解析の続き。縦方向がマスター側、横方向がスレーブ側である。下記の図において、A(n, m)=1の場合はマスターnがマスターmにリクエスト要求を出していることを意味する。

f:id:msyksphinz:20200305233351p:plain
A(n,m) = 1 : マスターnがスレーブmにリクエスト要求を出している。

これに対してどのように処理を行うかというと、まずはアウトプット側に信号をコピーする。この時点でサポートしていないチャネルの信号線を除去する。例えばTL-ULはチャネルBやCをサポートしていないので、そのような信号はこの時点で除去している。

f:id:msyksphinz:20200305233439p:plain
validかつ当該slaveにリクエストを出している場合は1となる

フィルタをかけた信号に対してTransposeを行い、入力側の信号と出力側の信号のマトリックスの向きを逆にする。

各行に対してTLArbiterを適用することで、各出力ポートの信号をアービトレーションするというわけである。

val portsAOI = transpose((in  zip requestAIO) map { case (i, r) => TLXbar.fanout(i.a, r, edgesOut.map(_.params(ForceFanoutKey).a)) })
f:id:msyksphinz:20200305233507p:plain:w800