FPGA開発日記

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

自作CPUの動作周波数改善検討 (6. 命令の切り出し方法のクリティカルパスの確認)

前回の続きで,RVCを含んだ命令キャッシュブロックから命令を正しく切り出す方法について、まだちゃんとした実装や検証にはなっていないのだけれど,Vivadoで論理合成してクリティカルパスを確認していく.

命令の切り出しの部分だけを見ると,以下のような概略で,一応目標の周波数には収まるようなクリティカルパスになっているように思える.

Slack:                    inf
  Source:                 i_f2_inst[inst][93]
                            (input port)
  Destination:            o_f3_expand_inst[3][cat][1]
                            (output port)
  Path Group:             (none)
  Path Type:              Max at Slow Process Corner
  Data Path Delay:        7.927ns  (logic 3.655ns (46.106%)  route 4.272ns (53.894%))
  Logic Levels:           9  (IBUF=1 LUT5=3 LUT6=4 OBUF=1)

    Location             Delay type                Incr(ns)  Path(ns)    Netlist Resource(s)
  -------------------------------------------------------------------    -------------------
                                                      0.000     0.000 f  i_f2_inst[inst][93] (IN)
                         net (fo=0)                   0.000     0.000    i_f2_inst[inst][93]
                         IBUF (Prop_ibuf_I_O)         0.769     0.769 f  gen_is_RVC[5].u_rvc_expander_i_3/O
                         net (fo=87, unplaced)        0.571     1.341    gen_loop_RVI[4].u_inst_cat/u_inst/inst[29]
                         LUT6 (Prop_lut6_I0_O)        0.097     1.438 f  gen_loop_RVI[4].u_inst_cat/u_inst/inst_cat[2]_INST_0_i_40/O
                         net (fo=1, unplaced)         0.840     2.278    gen_loop_RVI[4].u_inst_cat/u_inst/inst_cat[2]_INST_0_i_40_n_1
                         LUT6 (Prop_lut6_I1_O)        0.097     2.375 r  gen_loop_RVI[4].u_inst_cat/u_inst/inst_cat[2]_INST_0_i_15/O
                         net (fo=1, unplaced)         0.511     2.886    gen_loop_RVI[4].u_inst_cat/u_inst/inst_cat[2]_INST_0_i_15_n_1
                         LUT6 (Prop_lut6_I3_O)        0.097     2.983 r  gen_loop_RVI[4].u_inst_cat/u_inst/inst_cat[2]_INST_0_i_2/O
                         net (fo=3, unplaced)         0.858     3.841    gen_loop_RVI[4].u_inst_cat/u_inst/inst_cat[2]_INST_0_i_2_n_1
                         LUT5 (Prop_lut5_I0_O)        0.097     3.938 r  gen_loop_RVI[4].u_inst_cat/u_inst/inst_cat[1]_INST_0/O
                         net (fo=1, unplaced)         0.301     4.239    w_f2_rvi_cat[4][1]
                         LUT5 (Prop_lut5_I0_O)        0.097     4.336 r  o_f3_expand_inst[2][cat][1]_INST_0_i_3/O
                         net (fo=3, unplaced)         0.319     4.655    o_f3_expand_inst[2][cat][1]_INST_0_i_3_n_1
                         LUT6 (Prop_lut6_I5_O)        0.097     4.752 r  o_f3_expand_inst[3][cat][1]_INST_0_i_3/O
                         net (fo=1, unplaced)         0.301     5.053    o_f3_expand_inst[3][cat][1]_INST_0_i_3_n_1
                         LUT5 (Prop_lut5_I2_O)        0.097     5.150 r  o_f3_expand_inst[3][cat][1]_INST_0_i_1/O
                         net (fo=1, unplaced)         0.571     5.721    o_f3_expand_inst[3][cat]_OBUF[1]
                         OBUF (Prop_obuf_I_O)         2.207     7.927 r  o_f3_expand_inst[3][cat][1]_INST_0/O
                         net (fo=0)                   0.000     7.927    o_f3_expand_inst[3][cat][1]
                                                                      r  o_f3_expand_inst[3][cat][1] (OUT)
  -------------------------------------------------------------------    -------------------

まあ,あとはちゃんとした実装と,検証で動くところまでもっていかなければ...