FPGA開発日記

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

SonicBOOMのデザインを読み解く (全体バス構成とフロントエンド概要)

色々訳あってRISC-VのOoOデザインであるSonicBOOMの構成を読み解くことにした。SonicBOOMのデザインは、デザインそのものはriscv-boomリポジトリから入手できるが、合成及びRTLシミュレーションを行うためにはChipyardを使う必要がある(boom-templateというシミュレーション環境があった気がしたが、どうも調べてみたらdeprecatedになっていた。今はChipyardに統一されているようだ)。

github.com

github.com

一応展開してデザインを見ている。まずはSoCの状態。Tileを含むテストパタンの構成状況を確認してみる。

f:id:msyksphinz:20201220013442p:plain
図. BOOMにおけるSoCの構成状況

TileはCPUが定義されている部分。以下の4つのバスが定義されている。

  • PBus (Peripheral Bus)
  • CBus (Control Bus)
  • SBus (System Bus)
  • MBus (Memory Bus)

そしてL2のラッパーが含まれている。割り込みとしてはPLICから2本、CLINTからは1本、デバッガからは1本が挿入されている。

次にTileの内部を見てみる。Diplomacyで見るよりもモジュール構成を見た方が良い気がするのでブロック図を作って内部を確認する。

f:id:msyksphinz:20201220013508p:plain

まだ完全に読み解いているわけではないのだが、どうやらフロントエンドは主に2つのブロックに分けられていて、

  • s0(f0)ステージ:ICacheにPCを送ってリクエストを行う。Hit/Missの結果はs2(f2)ステージで判明する
  • s2ステージでICacheにヒットするとデータを取得できる。しかしそうでなければICacheのDiplomacyノードを通じて外部にリクエストが発行され、外部から直接レスポンスを取得する。
  • f3はQueueに命令を入力する。ここでf3とf4がキューで連続しているのだが、これを分けている理由はまだ良く分かっていない。
  • f4から出力されたQueueは、fb (Fetch Buffer) / ftq (FetchTargetQueue) に分配されCore部(CPUのバックエンド)に渡される。
    • どうもコミットステージまではfb も ftqも命令をずっと保持しているようだ。この辺りの詳細な動きはまだわかっていない。今後追いかけていくことにする。