FPGA開発日記

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

自作CPUの動作周波数向上対策 (1. 命令バッファにFF挿入)

これは単純なメモだが、自作CPUのLiteXでの動作周波数を上げるために、いろいろと修正する部分があり作業をしている。

まず、動作周波数を上げるために、必要な部分にレジスタを挿入している。今最も大きな遅延が発生しているのがフロントエンド周りなので、そこにレジスタを入れて改善している。

Slack (VIOLATED) :        -9.493ns  (required time - arrival time)
  Source:                 u_scariv_tile/u_frontend/u_scariv_inst_buffer/u_inst_queue/r_outptr_reg[0]_rep/C
                            (rising edge-triggered cell FDCE clocked by i_clk  {rise@0.000ns fall@5.000ns period=10.000ns})
  Destination:            u_scariv_tile/u_frontend/r_s1_tlb_except_cause_reg[0]/D
                            (rising edge-triggered cell FDRE clocked by i_clk  {rise@0.000ns fall@5.000ns period=10.000ns})

この部分にレジスタを挿入して、どうにかリグレッションを走らせた。結果、この部分はWNSから無くなり、別の部分が遅延として表れ始めた。

Slack (VIOLATED) :        -7.027ns  (required time - arrival time)
  Source:                 u_scariv_tile/u_scariv_csu/u_scariv_csr/r_mstatus_reg[3]/C
                            (rising edge-triggered cell FDCE 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})

こっちはシステムレジスタ周りなので、簡単に改善できる気がする。引き続き作業する。

LiteX側も改善できた。LiteX側は完全にすべてのパスをMetさせることができたようだ。

  • オリジナル
Max Delay Paths
--------------------------------------------------------------------------------------
Slack (VIOLATED) :        -1.527ns  (required time - arrival time)
  Source:                 scariv_subsystem_axi_wrapper/u_scariv_subsystem/u_tile/u_frontend/u_scariv_inst_buffer/u_inst_queue/r_outptr_reg[0]_rep/C
                            (rising edge-triggered cell FDCE clocked by sys_clk  {rise@0.000ns fall@4.000ns period=8.000ns})
  Destination:            scariv_subsystem_axi_wrapper/u_scariv_subsystem/u_tile/u_frontend/r_s1_tlb_except_cause_reg[0]/D
                            (rising edge-triggered cell FDRE clocked by sys_clk  {rise@0.000ns fall@4.000ns period=8.000ns})
  • 改善後
Slack (MET) :             0.080ns  (required time - arrival time)
  Source:                 scariv_subsystem_axi_wrapper/u_scariv_subsystem/u_tile/u_scariv_csu/u_scariv_csr/r_priv_reg[1]/C
                            (rising edge-triggered cell FDPE clocked by sys_clk  {rise@0.000ns fall@4.000ns period=8.000ns})
  Destination:            scariv_subsystem_axi_wrapper/u_scariv_subsystem/u_tile/u_frontend/r_s1_tlb_except_valid_reg/D
                            (rising edge-triggered cell FDCE clocked by sys_clk  {rise@0.000ns fall@4.000ns period=8.000ns})
  Path Group:             sys_clk