これは単純なメモだが、自作CPUの性能が落ちてしまっていて、どこがおかしいんだ?と思いながら見ていたが、どうやらもともと実装ミスがあるっぽい。
GShareの実装に論理的なミスがあったので修正する。
diff --git a/src/scariv_gshare.sv b/src/scariv_gshare.sv index e1e6581..bdfc9ec 100644 --- a/src/scariv_gshare.sv +++ b/src/scariv_gshare.sv @@ -33,8 +33,6 @@ gshare_bht_t w_bhr_next; // Branch History Register : 1=Taken / 0:NonTaken gshare_bht_t w_bhr_lane_next[scariv_lsu_pkg::ICACHE_DATA_B_W / 2]; logic [ 1: 0] w_update_counter; -logic [ 1: 0] w_s1_bim_counter; -logic [ 1: 0] r_s1_bim_counter_dram; logic s1_update_bhr; assign s1_update_bhr = r_s1_valid & |(search_btb_if.s1_hit & search_btb_if.s1_is_cond); @@ -55,6 +53,8 @@ always_ff @ (posedge i_clk, negedge i_reset_n) begin end generate for (genvar c_idx = 0; c_idx < scariv_lsu_pkg::ICACHE_DATA_B_W / 2; c_idx++) begin : bhr_loop +logic [ 1: 0] w_s1_bim_counter; +logic [ 1: 0] r_s1_bim_counter_dram; gshare_bht_t w_s0_xor_rd_index; gshare_bht_t r_s1_xor_rd_index; assign w_s0_xor_rd_index = r_bhr ^ gshare_search_if.s0_pc_vaddr[$clog2(scariv_lsu_pkg::ICACHE_DATA_B_W) +: GSHARE_BHT_W];
一応性能的には戻ったかな?ALUのスケジューラが今のところイマイチのままにしているので、もうちょっと修正しないといけない。
serialdevice: uart loaded 1000 : 771 : IPC(recent) = 0.77, IPC(total) = 0.77 2000 : 1569 : IPC(recent) = 0.80, IPC(total) = 0.78 3000 : 2115 : IPC(recent) = 0.54, IPC(total) = 0.70 4000 : 2900 : IPC(recent) = 0.79, IPC(total) = 0.72 5000 : 3915 : IPC(recent) = 1.01, IPC(total) = 0.78 6000 : 5613 : IPC(recent) = 1.70, IPC(total) = 0.94 7000 : 7386 : IPC(recent) = 1.77, IPC(total) = 1.06 8000 : 9272 : IPC(recent) = 1.89, IPC(total) = 1.16 9000 : 11181 : IPC(recent) = 1.90, IPC(total) = 1.24 10000 : 13107 : IPC(recent) = 1.92, IPC(total) = 1.31 11000 : 15003 : IPC(recent) = 1.90, IPC(total) = 1.36 12000 : 16758 : IPC(recent) = 1.75, IPC(total) = 1.40 13000 : 18647 : IPC(recent) = 1.89, IPC(total) = 1.43 14000 : 20567 : IPC(recent) = 1.92, IPC(total) = 1.47 15000 : 22494 : IPC(recent) = 1.93, IPC(total) = 1.50 16000 : 24326 : IPC(recent) = 1.83, IPC(total) = 1.52 17000 : 26216 : IPC(recent) = 1.89, IPC(total) = 1.54 18000 : 28137 : IPC(recent) = 1.92, IPC(total) = 1.56 19000 : 29912 : IPC(recent) = 1.77, IPC(total) = 1.57 20000 : 31857 : IPC(recent) = 1.94, IPC(total) = 1.59 21000 : 33729 : IPC(recent) = 1.87, IPC(total) = 1.61