前回の続きで,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) ------------------------------------------------------------------- -------------------
まあ,あとはちゃんとした実装と,検証で動くところまでもっていかなければ...