TileLinkのXbarの仕組みを引き続き解析している。requestAIO
の解析の続き。縦方向がマスター側、横方向がスレーブ側である。下記の図において、A(n, m)=1
の場合はマスターnがマスターmにリクエスト要求を出していることを意味する。
これに対してどのように処理を行うかというと、まずはアウトプット側に信号をコピーする。この時点でサポートしていないチャネルの信号線を除去する。例えばTL-ULはチャネルBやCをサポートしていないので、そのような信号はこの時点で除去している。
フィルタをかけた信号に対してTransposeを行い、入力側の信号と出力側の信号のマトリックスの向きを逆にする。
各行に対してTLArbiterを適用することで、各出力ポートの信号をアービトレーションするというわけである。
val portsAOI = transpose((in zip requestAIO) map { case (i, r) => TLXbar.fanout(i.a, r, edgesOut.map(_.params(ForceFanoutKey).a)) })