2021-05-01から1ヶ月間の記事一覧
msyksphinz.hatenablog.com 前回のコードは、ブートローダの動きを観察するにCRTに多少の改造を加えなければならないことが分かった。 crt.S # get core id csrr a0, mhartid # 最大4コアまでを仮定する li a1, 4 1:bgeu a0, a1, 1b main()関数の中の動きは…
2021/05/29(土)に実施されたVerilator勉強会の発表資料を公開しました。 msyksphinz.github.io 私はVerilatorで何かを作り上げたわけではないので、いろいろとソースコードを読んで試行錯誤した結果を資料としてまとめ上げたものだった。 急ピッチで作ったの…
DualCoreでL2キャッシュの同じラインを取り合うようなプログラムを作ってみることにする。 試してみるのはFalse Sharingのテストで、同じキャッシュラインで別の場所に別のコアが値を書き込み続け、そのキャッシュラインを複数のコアが取り合うようなコード…
SiFive Inclusive Cacheは複数コアからのリクエストを処理しコヒーレントを取ることのできるL2キャッシュであるが、その内部構成を見ていこうと思う。 GTKWaveで見たところ、ざっくりと以下のような階層構成になっていた。 InclusiveCacheのインタフェースと…
SonicBOOM(というかRocket-Chip全体)のTLBにおけるSFENCE.VMA命令の取り扱いについて調査した。SFENCE.VMA命令はTLBなどのアドレストランスレーションに対してフェンスを作るための命令で、命令仕様的に、SFENCE.VMA命令は指定されたレジスタオペランドに…
Chipyardにはマルチコア構成環境が搭載されており、Rocket-Chipではマルチコア構成環境が作られている。同様にBOOMでもマルチコア構成環境を試行してみる。 BOOMのコンフィグレーションは以下のファイルに定義されている。以下のようににしてDualMediumBoomC…
Chipyardにはマルチコア構成環境が搭載されており、Rocket-Chipではマルチコア構成環境が作られている。同様にBOOMでもマルチコア構成環境を試行してみる。 BOOMのコンフィグレーションは以下のファイルに定義されている。以下のようににしてDualMediumBoomC…
TileLinkプロトコルの続き。 まず、以下のような構成にてどのようにキャッシュブロックが移るのかを見ていく。キャッシュを含めてそれぞれのノードにはブロックのコピーが置かれるわけだが、それぞれについて許可できる操作が異なる。 None:コピーを持って…
TileLinkはAMBA、OCP(Open Core Protocol)のような共通バスプロトコルとしてSiFive社により定義されたプロトコルである。SiFive社が公開しているRocket-Chip、BOOM、ChipyardやDiplomacyを理解するときには必ず通らなければならない仕様だ。 このプロトコ…
RISC-VのアウトオブオーダコアであるBOOM (Berkely Out-of-Order Machine) について勉強を進めている。以下のドキュメントを日本語に訳しながら読んでいくことにした。 docs.boom-core.org GShare分岐予測器 GShare はシンプルですが非常に効果的な分岐予測…
BOOMのTLBの調査を引き続き行っている。TLBミスを起こしたリクエストはPTW(Page Table Walker)に渡されるのだが、Page Table Walkerのバッファにもヒットしなかった場合には外部にリクエストが渡される。外部リクエストがどこに行くのか観察していた。 最…
RISC-VのアウトオブオーダコアであるBOOM (Berkely Out-of-Order Machine) について勉強を進めている。以下のドキュメントを日本語に訳しながら読んでいくことにした。 docs.boom-core.org ロードストアユニット(LSU) Fig. 24 ロードストアユニット LSU(Loa…
Rocket-Chip / BOOMのTLBを調査している。Page Table Walkerの動作の詳細を見ていく。 Page Table Walkerのインタフェース Page Table Walkerのインタフェースは以下のようになっている。 リクエスト側 リクエスト側は複数のマスタが接続されており、これら…
RISC-VのアウトオブオーダコアであるBOOM (Berkely Out-of-Order Machine) について勉強を進めている。以下のドキュメントを日本語に訳しながら読んでいくことにした。 docs.boom-core.org 分岐ユニット & 分岐命令の投機実行 分岐ユニット は、すべての分岐…
RISC-VのアウトオブオーダコアであるBOOM (Berkely Out-of-Order Machine) について勉強を進めている。以下のドキュメントを日本語に訳しながら読んでいくことにした。 docs.boom-core.org 実行パイプライン Fig. 19: 2命令発行のBOOMのパイプライン例。最初…
RISC-VのアウトオブオーダコアであるBOOM (Berkely Out-of-Order Machine) について勉強を進めている。以下のドキュメントを日本語に訳しながら読んでいくことにした。 docs.boom-core.org レジスタファイルとバイパスネットワーク Fig. 18 複数命令発行パイ…
RISC-VのアウトオブオーダコアであるBOOM (Berkely Out-of-Order Machine) について勉強を進めている。以下のドキュメントを日本語に訳しながら読んでいくことにした。 docs.boom-core.org 命令発行ユニット 命令発行キュー は、まだ実行されていないディス…
RISC-VのアウトオブオーダコアであるBOOM (Berkely Out-of-Order Machine) について勉強を進めている。以下のドキュメントを日本語に訳しながら読んでいくことにした。 docs.boom-core.org リオーダバッファ(ROB)とディスパッチステージ リオーダバッファ は…
RISC-VのアウトオブオーダコアであるBOOM (Berkely Out-of-Order Machine) について勉強を進めている。以下のドキュメントを日本語に訳しながら読んでいくことにした。 docs.boom-core.org デコードステージ デコード ステージは、フェッチバッファから命令…
Rocket-Chip / BOOMで使用されているArbiterについて調査する。以下のソースコードを参照した。 @chiselName class Arbiter[T
RISC-VのアウトオブオーダコアであるBOOM (Berkely Out-of-Order Machine) について勉強を進めている。以下のドキュメントを日本語に訳しながら読んでいくことにした。 docs.boom-core.org グローバルヒストリレジスタ(GHR)の管理 Global History Register (…
RISC-VのアウトオブオーダコアであるBOOM (Berkely Out-of-Order Machine) について勉強を進めている。以下のドキュメントを日本語に訳しながら読んでいくことにした。 docs.boom-core.org The Backing Predictor (BPD) Next Line Predictor (NLP) がうまく…
riscv-torture(ランダムテストパタン)はしばらくメンテナンスされていなかったのだが、最近アップデートされて一応makeが通るようになった。 自作CPUのランダムテストパタンとして使用することにする。 github.com RISC-V TortureのConfiguration Tortureの…
RISC-VのアウトオブオーダコアであるBOOM (Berkely Out-of-Order Machine) について勉強を進めている。以下のドキュメントを日本語に訳しながら読んでいくことにした。 docs.boom-core.org 分岐予測 BOOM Front-end この章では、BOOMがどのように分岐を予測…
RISC-VのアウトオブオーダコアであるBOOM (Berkely Out-of-Order Machine) について勉強を進めている。以下のドキュメントを日本語に訳しながら読んでいくことにした。 docs.boom-core.org RISC-V命令セットアーキテクチャ RISC-V ISAは、広く採用されている…
Rocket-Chip / BOOMのTLBについてはある程度動作を理解できるようになってきたので、次はTLBがつながる先のPTW (Page Table Walker)について調査したい。Page Table Walkerは基本的にRocketTile / BoomTileに1つだけ搭載されているが、ポートはTLBの数だけ用…
RISC-VのアウトオブオーダコアであるBOOM (Berkely Out-of-Order Machine) について勉強を進めている。以下のドキュメントを日本語に訳しながら読んでいくことにした。 docs.boom-core.org The Berkeley Out-of-Order Machine (BOOM) Fig. 1 Detailed BOOM P…
TLBの挙動についてある程度分かるようになってきたので、実際の波形を見ながら解析してみたいと思う。ChipyardのBOOMコンフィグレーションで、RISC-Vテストパタンを走らせて波形を解析する。 ./simulator-chipyard-MediumBoomConfig-debug \ --vcd=rv64ui-v-…
TLBのインスタンスは以下で定義されている。 val tlb = Module(new TLB(true, log2Ceil(fetchBytes), TLBConfig(nTLBSets, nTLBWays))) このときの設定は、nTLBSets = 1, nTLBWays = 32, cfg.nSectors = 4となっているようだ。 val sectored_entries = Reg(V…
BOOMのTLBに関してその仕様と動作を調査する。SonicBOOMのTLBは以下の場所に定義されている。 chipyard/generators/boom/src/main/scala/lsu/tlb.scala github.com このNBDTLBがそれに相当する。NBDというのはNonBlockingの意味だと思う。 class NBDTLB(inst…