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