これは単純なメモだが、自作CPUのLiteXでの動作周波数を上げるために、いろいろと修正する部分があり作業をしている。
次にクリティカルパスは、CSRレジスタからTLBアクセスへのパスだ。これはCSRのアップデートがそのままTLBのコンフィグレーションにつながっているからだと思われる。 これを改善するためには、TLBのコンフィグレーションアップデートのためのレジスタを持っておき、1サイクル遅らせる。
次に問題になるのは、コンフィグレーションが1サイクル遅れることによって、次のフェッチのためのフロントエンドのTLBでコンフィグレーション更新が1サイクル遅れる。 これにより、次のフェッチが誤った状態で始まることになる。
これを防ぐために、CSRのコンフィグレーションをアップデートしたときはTLBのReadyビットを下げて、その時はフェッチを発生させないようにする。
- After
Timing Report Slack (VIOLATED) : -4.302ns (required time - arrival time) Source: u_scariv_tile/alu_loop[0].u_scariv_alu/u_alu/u_scariv_muldiv_pipe/u_scariv_div_unit/u_MulDiv/state_reg[2]/C (rising edge-triggered cell FDRE clocked by i_clk {rise@0.000ns fall@5.000ns period=10.000ns}) Destination: u_scariv_tile/u_scariv_bru/u_bru_pipe/r_ex1_pipe_ctrl_reg[imm][0]/D (rising edge-triggered cell FDCE clocked by i_clk {rise@0.000ns fall@5.000ns period=10.000ns})