From 2cc8642f42cb5253ba94fc41e374f6266021f2cc Mon Sep 17 00:00:00 2001 From: waleed-lm Date: Fri, 9 Oct 2020 10:49:03 +0500 Subject: [PATCH] BP updated --- el2_ifu_bp_ctl.anno.json | 20 ++++++++++++++++++ el2_ifu_bp_ctl.fir | 4 ++-- el2_ifu_bp_ctl.v | 4 ++-- src/main/scala/ifu/el2_ifu_bp_ctl.scala | 4 ++-- .../classes/ifu/el2_ifu_bp_ctl.class | Bin 180445 -> 180443 bytes 5 files changed, 26 insertions(+), 6 deletions(-) diff --git a/el2_ifu_bp_ctl.anno.json b/el2_ifu_bp_ctl.anno.json index e672bdc2..69285930 100644 --- a/el2_ifu_bp_ctl.anno.json +++ b/el2_ifu_bp_ctl.anno.json @@ -25,6 +25,13 @@ "~el2_ifu_bp_ctl|el2_ifu_bp_ctl>io_exu_i0_br_index_r" ] }, + { + "class":"firrtl.transforms.CombinationalPath", + "sink":"~el2_ifu_bp_ctl|el2_ifu_bp_ctl>io_ifu_bp_hist0_f", + "sources":[ + "~el2_ifu_bp_ctl|el2_ifu_bp_ctl>io_ifc_fetch_addr_f" + ] + }, { "class":"firrtl.transforms.CombinationalPath", "sink":"~el2_ifu_bp_ctl|el2_ifu_bp_ctl>io_ifu_bp_way_f", @@ -41,6 +48,19 @@ "~el2_ifu_bp_ctl|el2_ifu_bp_ctl>io_exu_i0_br_index_r" ] }, + { + "class":"firrtl.transforms.CombinationalPath", + "sink":"~el2_ifu_bp_ctl|el2_ifu_bp_ctl>io_ifu_bp_hist1_f", + "sources":[ + "~el2_ifu_bp_ctl|el2_ifu_bp_ctl>io_ifc_fetch_addr_f", + "~el2_ifu_bp_ctl|el2_ifu_bp_ctl>io_ifc_fetch_req_f", + "~el2_ifu_bp_ctl|el2_ifu_bp_ctl>io_dec_tlu_flush_leak_one_wb", + "~el2_ifu_bp_ctl|el2_ifu_bp_ctl>io_dec_tlu_flush_lower_wb", + "~el2_ifu_bp_ctl|el2_ifu_bp_ctl>io_dec_tlu_br0_r_pkt_br_start_error", + "~el2_ifu_bp_ctl|el2_ifu_bp_ctl>io_dec_tlu_br0_r_pkt_br_error", + "~el2_ifu_bp_ctl|el2_ifu_bp_ctl>io_exu_i0_br_index_r" + ] + }, { "class":"firrtl.transforms.CombinationalPath", "sink":"~el2_ifu_bp_ctl|el2_ifu_bp_ctl>io_ifu_bp_poffset_f", diff --git a/el2_ifu_bp_ctl.fir b/el2_ifu_bp_ctl.fir index 54e02db6..427cd223 100644 --- a/el2_ifu_bp_ctl.fir +++ b/el2_ifu_bp_ctl.fir @@ -484,8 +484,8 @@ circuit el2_ifu_bp_ctl : fghr <= _T_339 @[el2_ifu_bp_ctl.scala 282:8] io.ifu_bp_fghr_f <= fghr @[el2_ifu_bp_ctl.scala 284:20] io.ifu_bp_way_f <= way_raw @[el2_ifu_bp_ctl.scala 286:19] - io.ifu_bp_hist1_f <= UInt<1>("h01") @[el2_ifu_bp_ctl.scala 287:21] - io.ifu_bp_hist0_f <= UInt<2>("h02") @[el2_ifu_bp_ctl.scala 288:21] + io.ifu_bp_hist1_f <= hist1_raw @[el2_ifu_bp_ctl.scala 287:21] + io.ifu_bp_hist0_f <= hist0_raw @[el2_ifu_bp_ctl.scala 288:21] io.ifu_bp_pc4_f <= pc4_raw @[el2_ifu_bp_ctl.scala 289:19] node _T_340 = bits(io.dec_tlu_bpred_disable, 0, 0) @[Bitwise.scala 72:15] node _T_341 = mux(_T_340, UInt<2>("h03"), UInt<2>("h00")) @[Bitwise.scala 72:12] diff --git a/el2_ifu_bp_ctl.v b/el2_ifu_bp_ctl.v index 86d7f8b9..dddf0435 100644 --- a/el2_ifu_bp_ctl.v +++ b/el2_ifu_bp_ctl.v @@ -10644,8 +10644,8 @@ module el2_ifu_bp_ctl( assign io_ifu_bp_fghr_f = fghr; // @[el2_ifu_bp_ctl.scala 284:20] assign io_ifu_bp_way_f = tag_match_vway1_expanded_f | _T_212; // @[el2_ifu_bp_ctl.scala 286:19] assign io_ifu_bp_ret_f = {_T_293,_T_299}; // @[el2_ifu_bp_ctl.scala 292:19] - assign io_ifu_bp_hist1_f = 2'h1; // @[el2_ifu_bp_ctl.scala 287:21] - assign io_ifu_bp_hist0_f = 2'h2; // @[el2_ifu_bp_ctl.scala 288:21] + assign io_ifu_bp_hist1_f = bht_force_taken_f | _T_278; // @[el2_ifu_bp_ctl.scala 287:21] + assign io_ifu_bp_hist0_f = {bht_vbank1_rd_data_f[0],bht_vbank0_rd_data_f[0]}; // @[el2_ifu_bp_ctl.scala 288:21] assign io_ifu_bp_pc4_f = {_T_284,_T_287}; // @[el2_ifu_bp_ctl.scala 289:19] assign io_ifu_bp_valid_f = vwayhit_f & _T_342; // @[el2_ifu_bp_ctl.scala 291:21] assign io_ifu_bp_poffset_f = btb_sel_data_f[15:4]; // @[el2_ifu_bp_ctl.scala 304:23] diff --git a/src/main/scala/ifu/el2_ifu_bp_ctl.scala b/src/main/scala/ifu/el2_ifu_bp_ctl.scala index b0f93128..14ffe012 100644 --- a/src/main/scala/ifu/el2_ifu_bp_ctl.scala +++ b/src/main/scala/ifu/el2_ifu_bp_ctl.scala @@ -284,8 +284,8 @@ class el2_ifu_bp_ctl extends Module with el2_lib with RequireAsyncReset { io.ifu_bp_fghr_f := fghr io.ifu_bp_way_f := way_raw - io.ifu_bp_hist1_f := 1.U//hist1_raw - io.ifu_bp_hist0_f := 2.U//hist0_raw + io.ifu_bp_hist1_f := hist1_raw + io.ifu_bp_hist0_f := hist0_raw io.ifu_bp_pc4_f := pc4_raw io.ifu_bp_valid_f := vwayhit_f & ~Fill(2, io.dec_tlu_bpred_disable) diff --git a/target/scala-2.12/classes/ifu/el2_ifu_bp_ctl.class b/target/scala-2.12/classes/ifu/el2_ifu_bp_ctl.class index abe1d20d99b7a28ed6012d57eeffeda6973c4404..178c89115c9f91a623416cc5c53f49339d30893c 100644 GIT binary patch delta 38986 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