FPGA開発日記

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

SonicBOOMのデザインを読み解く (フロントエンドからDispatcher)

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

CSR命令を大量に発行する。このときにどのようなデータパスで実行されるのだろうか。

まず、GigaBoomConfigの波形を解析すると、フロントエンドからバックエンドには5命令が同時に発行される。この時にすべてのCSR命令は同時に発行されており、ここではスケジューリングがなされていないことが見て取れる。しかし問題はこの後だ。おそらく先頭からIssueできる命令だけをIssueして、それ以外はReplayさせて再度命令を実行しているものと思われる。

f:id:msyksphinz:20210106012342p:plain

その証拠に、CSR命令発行用のIssueユニットは1命令ずつDispatchを受け入れておりずいぶんと長い時間をかけて実行していることが見て取れる。

f:id:msyksphinz:20210106012354p:plain

これ、Issueの条件はどのようになっているのだろうか。基本的にハザードが無ければすぐに発行しているようだ。これは完全にフロントエンド側がどれくらいパイプラインを停止するかに依存している気がする。フロントエンドのパイプライン停止条件についてもう少し細かく見ていく子はできないだろうか。

f:id:msyksphinz:20210106012404p:plain