FPGA開発日記

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

自作CPUの動作周波数改善検討 (フロントエンドデコード処理対応検討)

フロントエンドの,デコーダの部分が非常に重たい.

Slack (VIOLATED) :        -17.096ns  (required time - arrival time)
  Source:                 u_scariv_tile/u_frontend/u_scariv_inst_buffer/u_inst_queue/r_outptr_reg[1]/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/u_scariv_inst_buffer/o_decode_flush_reg[valid]_bret/D
                            (rising edge-triggered cell FDCE clocked by i_clk  {rise@0.000ns fall@5.000ns period=10.000ns})

これはもう一度書き直したほうがいいかもしれないと思いだした. 問題はRVCの判定から命令の切り出しの処理まで全部を1サイクルでやろうとしていることと,どうも不正確なフィードバックループが入っているような気がして,短縮できるような気がする.

やはりRVCを切り出してから,キャッシュラインの中でディスパッチにもっていく最大命令を引き出すあたりが長いパスにつながっている. 次のデコードがキャッシュライン内のどこから始まるのかを選定する部分が大きいのか. これはどうやって解決するかな...

                         LUT5 (Prop_lut5_I0_O)        0.097    18.919 r  u_mycpu_tile/u_frontend/u_mycpu_inst_buffer/word_loop[3].u_decoder_inst_cat/u_inst/inst_cat[1]_INST_0/O
                         net (fo=10, unplaced)        0.554    19.473    u_mycpu_tile/u_frontend/u_mycpu_inst_buffer/w_inst_cat[3][1]
                         LUT6 (Prop_lut6_I3_O)        0.097    19.570 f  u_mycpu_tile/u_frontend/u_mycpu_inst_buffer/u_illegal_disp_pick_up_i_1/O
                         net (fo=1, unplaced)         0.301    19.871    u_mycpu_tile/u_frontend/u_mycpu_inst_buffer/u_illegal_disp_pick_up/in[3]
                         LUT4 (Prop_lut4_I3_O)        0.097    19.968 f  u_mycpu_tile/u_frontend/u_mycpu_inst_buffer/u_illegal_disp_pick_up/out[3]_INST_0/O
                         net (fo=2, unplaced)         0.312    20.280    u_mycpu_tile/u_frontend/u_mycpu_inst_buffer/w_inst_illegal_disp[3]
                         LUT6 (Prop_lut6_I5_O)        0.097    20.377 f  u_mycpu_tile/u_frontend/u_mycpu_inst_buffer/u_inst_msb_i_7/O
                         net (fo=1, unplaced)         0.301    20.678    u_mycpu_tile/u_frontend/u_mycpu_inst_buffer/u_inst_msb_i_7_n_0
                         LUT5 (Prop_lut5_I4_O)        0.097    20.775 r  u_mycpu_tile/u_frontend/u_mycpu_inst_buffer/u_inst_msb_i_1/O
                         net (fo=1, unplaced)         0.301    21.076    u_mycpu_tile/u_frontend/u_mycpu_inst_buffer/u_inst_msb/u_bit_tree/in[3]
                         LUT4 (Prop_lut4_I1_O)        0.097    21.173 r  u_mycpu_tile/u_frontend/u_mycpu_inst_buffer/u_inst_msb/u_bit_tree/out[3]_INST_0/O
                         net (fo=1, unplaced)         0.301    21.474    u_mycpu_tile/u_frontend/u_mycpu_inst_buffer/u_inst_msb/tree[3]
                         LUT2 (Prop_lut2_I1_O)        0.097    21.571 r  u_mycpu_tile/u_frontend/u_mycpu_inst_buffer/u_inst_msb/out[3]_INST_0/O
                         net (fo=1, unplaced)         0.301    21.872    u_mycpu_tile/u_frontend/u_mycpu_inst_buffer/w_inst_disp_mask_tmp[3]
                         LUT4 (Prop_lut4_I2_O)        0.097    21.969 r  u_mycpu_tile/u_frontend/u_mycpu_inst_buffer/u_special_valid_lsb_i_5/O
                         net (fo=3, unplaced)         0.319    22.288    u_mycpu_tile/u_frontend/u_mycpu_inst_buffer/u_special_valid_lsb_i_5_n_0
                         LUT3 (Prop_lut3_I0_O)        0.097    22.385 r  u_mycpu_tile/u_frontend/u_mycpu_inst_buffer/u_special_valid_lsb_i_1/O
                         net (fo=1, unplaced)         0.301    22.686    u_mycpu_tile/u_frontend/u_mycpu_inst_buffer/u_special_valid_lsb/u_bit_tree/in[3]
                         LUT4 (Prop_lut4_I1_O)        0.097    22.783 r  u_mycpu_tile/u_frontend/u_mycpu_inst_buffer/u_special_valid_lsb/u_bit_tree/out[3]_INST_0/O
                         net (fo=1, unplaced)         0.301    23.084    u_mycpu_tile/u_frontend/u_mycpu_inst_buffer/u_special_valid_lsb/tree[3]
                         LUT2 (Prop_lut2_I1_O)        0.097    23.181 r  u_mycpu_tile/u_frontend/u_mycpu_inst_buffer/u_special_valid_lsb/out[3]_INST_0/O
                         net (fo=2, unplaced)         0.312    23.493    u_mycpu_tile/u_frontend/u_mycpu_inst_buffer/w_disp_special_limit_valid_oh[3]
                         LUT6 (Prop_lut6_I5_O)        0.097    23.590 r  u_mycpu_tile/u_frontend/u_mycpu_inst_buffer/ibuf_front_if\\.payload[inst][3][valid]_i_7/O
                         net (fo=4, unplaced)         0.325    23.915    u_mycpu_tile/u_frontend/u_mycpu_inst_buffer/ibuf_front_if\\.payload[inst][3][valid]_i_7_n_0
                         LUT3 (Prop_lut3_I1_O)        0.097    24.012 r  u_mycpu_tile/u_frontend/u_mycpu_inst_buffer/u_start_pos_bit_i_13/O
                         net (fo=2, unplaced)         0.312    24.324    u_mycpu_tile/u_frontend/u_mycpu_inst_buffer/u_start_pos_bit_i_13_n_0
                         LUT6 (Prop_lut6_I5_O)        0.097    24.421 f  u_mycpu_tile/u_frontend/u_mycpu_inst_buffer/u_start_pos_bit_i_4/O
                         net (fo=146, unplaced)       0.620    25.041    u_mycpu_tile/u_frontend/u_mycpu_inst_buffer/u_start_pos_bit_i_4_n_0
                         LUT6 (Prop_lut6_I3_O)        0.097    25.138 r  u_mycpu_tile/u_frontend/u_mycpu_inst_buffer/o_decode_flush[valid]_bret__2_bret__0_i_1/O
                         net (fo=22, unplaced)        0.902    26.040    u_mycpu_tile/u_frontend/u_mycpu_inst_buffer/o_decode_flush[valid]_bret__2_bret__0_i_1_n_0
                         LUT5 (Prop_lut5_I0_O)        0.097    26.137 r  u_mycpu_tile/u_frontend/u_mycpu_inst_buffer/u_ras_i_2/O
                         net (fo=38, unplaced)        0.376    26.513    u_mycpu_tile/u_frontend/u_mycpu_inst_buffer/u_ras/i_f2_rd_valid
                         LUT6 (Prop_lut6_I0_O)        0.097    26.610 r  u_mycpu_tile/u_frontend/u_mycpu_inst_buffer/u_ras/o_f2_rd_pa[3]_INST_0/O
                         net (fo=9, unplaced)         0.552    27.162    u_mycpu_tile/u_frontend/u_mycpu_inst_buffer/w_iq_ras_ret_vaddr[3]
                         LUT6 (Prop_lut6_I1_O)        0.097    27.259 r  u_mycpu_tile/u_frontend/u_mycpu_inst_buffer/o_decode_flush[valid]_bret_i_35/O
                         net (fo=1, unplaced)         0.000    27.259    u_mycpu_tile/u_frontend/u_mycpu_inst_buffer/o_decode_flush[valid]_bret_i_35_n_0
                         CARRY4 (Prop_carry4_S[1]_CO[3])
                                                      0.412    27.671 r  u_mycpu_tile/u_frontend/u_mycpu_inst_buffer/o_decode_flush_reg[valid]_bret_i_28/CO[3]
                         net (fo=1, unplaced)         0.007    27.678    u_mycpu_tile/u_frontend/u_mycpu_inst_buffer/o_decode_flush_reg[valid]_bret_i_28_n_0
                         CARRY4 (Prop_carry4_CI_CO[3])
                                                      0.089    27.767 r  u_mycpu_tile/u_frontend/u_mycpu_inst_buffer/o_decode_flush_reg[valid]_bret_i_19/CO[3]
                         net (fo=1, unplaced)         0.000    27.767    u_mycpu_tile/u_frontend/u_mycpu_inst_buffer/o_decode_flush_reg[valid]_bret_i_19_n_0
                         CARRY4 (Prop_carry4_CI_CO[3])
                                                      0.089    27.856 r  u_mycpu_tile/u_frontend/u_mycpu_inst_buffer/o_decode_flush_reg[valid]_bret_i_12/CO[3]
                         net (fo=1, unplaced)         0.000    27.856    u_mycpu_tile/u_frontend/u_mycpu_inst_buffer/o_decode_flush_reg[valid]_bret_i_12_n_0
                         CARRY4 (Prop_carry4_CI_CO[0])
                                                      0.223    28.079 r  u_mycpu_tile/u_frontend/u_mycpu_inst_buffer/o_decode_flush_reg[valid]_bret_i_6/CO[0]
                         net (fo=1, unplaced)         0.208    28.287    u_mycpu_tile/u_frontend/u_mycpu_inst_buffer/o_decode_flush_reg[valid]_bret_i_6_n_3
                         LUT2 (Prop_lut2_I0_O)        0.262    28.549 f  u_mycpu_tile/u_frontend/u_mycpu_inst_buffer/o_decode_flush[valid]_bret_i_3/O
                         net (fo=1, unplaced)         0.301    28.850    u_mycpu_tile/u_frontend/u_mycpu_inst_buffer/o_decode_flush[valid]_bret_i_3_n_0
                         LUT6 (Prop_lut6_I3_O)        0.097    28.947 r  u_mycpu_tile/u_frontend/u_mycpu_inst_buffer/o_decode_flush[valid]_bret_i_1/O
                         net (fo=1, unplaced)         0.000    28.947    u_mycpu_tile/u_frontend/u_mycpu_inst_buffer/o_decode_flush[valid]_bret_i_1_n_0
                         FDCE                                         r  u_mycpu_tile/u_frontend/u_mycpu_inst_buffer/o_decode_flush_reg[valid]_bret/D