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できるように拡張している。
で、最後の命令までDispatchできなかった場合は、どうも解析しているとなんとs0ステージからやり直しているように見える。これはバックエンドからのリダイレクトフラッシュ信号に基づいてPCの再生成を行っているようだ。
CSR命令の場合は、毎度毎度命令を実行するたびにパイプラインフラッシュを行っているようだ。