FPGA開発日記

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

自作CPUの動作周波数改善検討 (7. 命令バッファ周辺のクリティカルパスの確認)

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

命令の切り出しの部分と,最終的な命令をリネームステージに渡す論理を組み合わせた結果のクリティカルパスは以下のようになった:

命令バッファへの到達自体は非常に余裕をもってタイミングMetしたが,肝心の命令バッファへから命令を取り出してリネームステージへ渡す論理が不完全で,まだ完全なタイミング検証になっているとは言い難いので,このあたりを修正していこうと思う.

Slack (MET) :             7.437ns  (required time - arrival time)
  Source:                 u_inst_queue/r_inptr_reg[0]/C
                            (rising edge-triggered cell FDCE clocked by i_clk  {rise@0.000ns fall@5.000ns period=10.000ns})
  Destination:            u_inst_queue/r_inptr_reg[0]/CE
                            (rising edge-triggered cell FDCE clocked by i_clk  {rise@0.000ns fall@5.000ns period=10.000ns})
  Path Group:             i_clk
  Path Type:              Setup (Max at Slow Process Corner)
  Requirement:            10.000ns  (i_clk rise@10.000ns - i_clk rise@0.000ns)
  Data Path Delay:        2.236ns  (logic 0.742ns (33.184%)  route 1.494ns (66.816%))
  Logic Levels:           3  (LUT2=1 LUT3=1 LUT5=1)
  Clock Path Skew:        -0.145ns (DCD - SCD + CPR)
    Destination Clock Delay (DCD):    1.693ns = ( 11.693 - 10.000 ) 
    Source Clock Delay      (SCD):    2.001ns
    Clock Pessimism Removal (CPR):    0.163ns
  Clock Uncertainty:      0.035ns  ((TSJ^2 + TIJ^2)^1/2 + DJ) / 2 + PE
    Total System Jitter     (TSJ):    0.071ns
    Total Input Jitter      (TIJ):    0.000ns
    Discrete Jitter          (DJ):    0.000ns
    Phase Error              (PE):    0.000ns

    Location             Delay type                Incr(ns)  Path(ns)    Netlist Resource(s)
  -------------------------------------------------------------------    -------------------
                         (clock i_clk rise edge)      0.000     0.000 r  
                                                      0.000     0.000 r  i_clk (IN)
                         net (fo=0)                   0.000     0.000    i_clk
                         IBUF (Prop_ibuf_I_O)         0.769     0.769 r  i_clk_IBUF_inst/O
                         net (fo=1, unplaced)         0.571     1.341    i_clk_IBUF
                         BUFG (Prop_bufg_I_O)         0.076     1.417 r  i_clk_IBUF_BUFG_inst/O
                         net (fo=3, unplaced)         0.584     2.001    u_inst_queue/i_clk
                         FDCE                                         r  u_inst_queue/r_inptr_reg[0]/C
  -------------------------------------------------------------------    -------------------
                         FDCE (Prop_fdce_C_Q)         0.341     2.342 f  u_inst_queue/r_inptr_reg[0]/Q
                         net (fo=5, unplaced)         0.547     2.889    u_inst_queue/r_inptr[0]
                         LUT3 (Prop_lut3_I0_O)        0.199     3.088 f  u_inst_queue/o_full_INST_0/O
                         net (fo=2, unplaced)         0.312     3.400    w_inst_buf_full
                         LUT2 (Prop_lut2_I1_O)        0.105     3.505 r  u_inst_queue_i_2/O
                         net (fo=1, unplaced)         0.301     3.806    u_inst_queue/i_push
                         LUT5 (Prop_lut5_I4_O)        0.097     3.903 r  u_inst_queue/r_inptr[2]_i_1/O
                         net (fo=3, unplaced)         0.334     4.237    u_inst_queue/r_inptr[2]_i_1_n_0
                         FDCE                                         r  u_inst_queue/r_inptr_reg[0]/CE
  -------------------------------------------------------------------    -------------------