自作CPUの回路面積削減の続き。次はROBの面積削減を検討する。
ROBもCAMで構成する要素と、RAMで構成する要素がある。
これまですべてCAMで構成する要素を、RAMに変更して構成する。
// Instruction's static information from decoder typedef struct packed { vaddr_t pc_addr; reg_wr_disp_t wr_reg; logic [31: 0] inst; `ifdef SIMULATION logic rvc_inst_valid; logic [15: 0] rvc_inst; logic [63: 0] kanata_id; `endif // SIMULATION } rob_entry_payload_t; typedef struct packed { rob_entry_payload_t [DISP_SIZE-1: 0] disp; } rob_payload_t;
distributed_ram #(.WIDTH($bits(rob_payload_t)), .WORDS(CMT_ENTRY_SIZE) ) u_payload_ram ( .i_clk (i_clk ), .i_reset_n (i_reset_n), .i_wr (rn_front_if.valid & rn_front_if.ready), .i_wr_addr(w_in_cmt_entry_id), .i_wr_data(w_payload_in), .i_rd_addr(w_out_cmt_entry_id), .o_rd_data(w_out_payload) );
これで、ROBもある程度面積が削減できた。さらに面積削減を検討していこうと思う。