FPGA開発日記

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

自作CPUの動作周波数向上対策 (2. TLBのコンフィグレーション更新部分にFF挿入)

これは単純なメモだが、自作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})