FPGA開発日記

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

SonicBOOMのデザインを読み解く (DispatcherとFrontendのReplay動作)

SonicBOOMのデザインを読み解いている。引き続き以下のようなプログラムを動かして命令フェッチャーの動きを観察している。

000000008000322e <simple_add>:
    8000322e:   b0002573                csrr    a0,mcycle
    80003232:   301025f3                csrr    a1,misa
    80003236:   0205e593                ori     a1,a1,32
    8000323a:   30159073                csrw    misa,a1
    8000323e:   8082                    ret

前回解析したように、全部の命令をIssueできなかった場合、Dispatchできる部分までなるべくDispatchし、次にIssueできる場所からReplayを行う。この時のReplay動作について少し見てみる。

まず、Fetch BufferとしてF3・F4が存在しているが、F3は命令キャッシュから応答のあった命令を格納するためのレジスタであり、F3とF4の間に命令を分解して最大で8命令をDispatchできるように拡張している。

f:id:msyksphinz:20210107010808p:plain

で、最後の命令までDispatchできなかった場合は、どうも解析しているとなんとs0ステージからやり直しているように見える。これはバックエンドからのリダイレクトフラッシュ信号に基づいてPCの再生成を行っているようだ。

f:id:msyksphinz:20210107010815p:plain

CSR命令の場合は、毎度毎度命令を実行するたびにパイプラインフラッシュを行っているようだ。