FPGA開発日記

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

BOOMのTLBに関する調査 (3. TLBの挙動を波形解析する)

TLBの挙動についてある程度分かるようになってきたので、実際の波形を見ながら解析してみたいと思う。ChipyardのBOOMコンフィグレーションで、RISC-Vテストパタンを走らせて波形を解析する。

./simulator-chipyard-MediumBoomConfig-debug \
    --vcd=rv64ui-v-simple.medium.vcd \
    --verbose ~/riscv64/riscv64-unknown-elf/share/riscv-tests/isa/rv64ui-v-simple rv64ui-v-simple 2>&1 \
    | tee rv64ui-v-simple.log

波形を取得したのでGTKWaveで表示してみる。だいたいこんな感じだ。

               10265 1 0xffffffffffe02258 DASM(0x0000006f)
               10266 1 0xffffffffffe02258 DASM(0x0000006f)
               10267 1 0xffffffffffe02258 DASM(0x0000006f)
               10268 1 0xffffffffffe02258 DASM(0x0000006f)
               10269 1 0xffffffffffe02258 DASM(0x0000006f)
               10270 1 0xffffffffffe02258 DASM(0x0000006f)
               10271 1 0xffffffffffe02258 DASM(0x0000006f)
               10272 1 0xffffffffffe02258 DASM(0x0000006f)
*** PASSED *** Completed after 272759 cycles
[UART] UART0 is here (stdin/stdout).
f:id:msyksphinz:20210503152237p:plain
図. riscv-v-simple実行時のTLB周辺の波形

まず最初にTLBのエントリが有効化されるのは、最初にU-ModeでのTLBアクセスが行われたときだ。ユーザモードに切り替えられて最初のリクエストで、TLBのエントリのどれにもヒットしないのでPage Table Walkが発生する。

f:id:msyksphinz:20210503152303p:plain
図. 何もヒットしていないときのTLBの動作とPage Table Walk

Page Table Walkのレスポンスにより、sectoroed_entries[0]が有効化されて以降のアクセスからはヒットし始める。

f:id:msyksphinz:20210503152319p:plain
図. ヒットしたときのTLBの動作

もう一つのパタンは、Page Table Walkの最中にSuperPage (最後のLeaf Tableまで行かずにPTEに到達した場合)にヒットした場合は、setored_entriesに格納せずにsuperpage_entriesに配置される。こちらもヒットしたときの挙動はsectored_entriesと同一だ。

f:id:msyksphinz:20210503152453p:plain
図. SuperPage Entriesにヒットした場合の挙動