From 6cc820187215a5ca2313b8731a97bc7a93bc48e3 Mon Sep 17 00:00:00 2001 From: waleed-lm Date: Mon, 28 Sep 2020 17:52:50 +0500 Subject: [PATCH] IFC --- el2_ifu_ifc_ctrl.fir | 318 +++++++++--------- el2_ifu_ifc_ctrl.v | 160 +++++---- src/main/scala/ifu/el2_ifu_ifc_ctrl.scala | 4 +- .../classes/ifu/el2_ifu_ifc_ctrl.class | Bin 111812 -> 110417 bytes 4 files changed, 238 insertions(+), 244 deletions(-) diff --git a/el2_ifu_ifc_ctrl.fir b/el2_ifu_ifc_ctrl.fir index a478018e..77e0d691 100644 --- a/el2_ifu_ifc_ctrl.fir +++ b/el2_ifu_ifc_ctrl.fir @@ -86,170 +86,166 @@ circuit el2_ifu_ifc_ctrl : _T_27 <= _T_26 @[Mux.scala 27:72] io.ifc_fetch_addr_bf <= _T_27 @[el2_ifu_ifc_ctrl.scala 81:24] line_wrap <= UInt<1>("h00") @[el2_ifu_ifc_ctrl.scala 88:13] - node _T_28 = bits(io.ifc_fetch_addr_f, 30, 1) @[el2_ifu_ifc_ctrl.scala 90:46] - node _T_29 = add(_T_28, UInt<1>("h01")) @[el2_ifu_ifc_ctrl.scala 90:52] - node _T_30 = tail(_T_29, 1) @[el2_ifu_ifc_ctrl.scala 90:52] - node _T_31 = bits(line_wrap, 0, 0) @[el2_ifu_ifc_ctrl.scala 91:25] - node _T_32 = bits(io.ifc_fetch_addr_f, 0, 0) @[el2_ifu_ifc_ctrl.scala 91:53] - node _T_33 = mux(_T_31, UInt<1>("h00"), _T_32) @[el2_ifu_ifc_ctrl.scala 91:8] - node _T_34 = or(_T_30, _T_33) @[el2_ifu_ifc_ctrl.scala 90:58] - fetch_addr_next <= _T_34 @[el2_ifu_ifc_ctrl.scala 90:19] - node _T_35 = not(idle) @[el2_ifu_ifc_ctrl.scala 93:30] - io.ifc_fetch_req_bf_raw <= _T_35 @[el2_ifu_ifc_ctrl.scala 93:27] - node _T_36 = or(io.ifu_fb_consume2, io.ifu_fb_consume1) @[el2_ifu_ifc_ctrl.scala 95:91] - node _T_37 = not(_T_36) @[el2_ifu_ifc_ctrl.scala 95:70] - node _T_38 = and(fb_full_f_ns, _T_37) @[el2_ifu_ifc_ctrl.scala 95:68] - node _T_39 = not(_T_38) @[el2_ifu_ifc_ctrl.scala 95:53] - node _T_40 = and(io.ifc_fetch_req_bf_raw, _T_39) @[el2_ifu_ifc_ctrl.scala 95:51] - node _T_41 = not(dma_stall) @[el2_ifu_ifc_ctrl.scala 96:5] - node _T_42 = and(_T_40, _T_41) @[el2_ifu_ifc_ctrl.scala 95:114] - node _T_43 = not(io.ic_write_stall) @[el2_ifu_ifc_ctrl.scala 96:18] - node _T_44 = and(_T_42, _T_43) @[el2_ifu_ifc_ctrl.scala 96:16] - node _T_45 = not(io.dec_tlu_flush_noredir_wb) @[el2_ifu_ifc_ctrl.scala 96:39] - node _T_46 = and(_T_44, _T_45) @[el2_ifu_ifc_ctrl.scala 96:37] - io.ifc_fetch_req_bf <= _T_46 @[el2_ifu_ifc_ctrl.scala 95:23] - node _T_47 = or(io.exu_flush_final, io.ifc_fetch_req_f) @[el2_ifu_ifc_ctrl.scala 98:37] - fetch_bf_en <= _T_47 @[el2_ifu_ifc_ctrl.scala 98:15] - node _T_48 = not(io.ic_hit_f) @[el2_ifu_ifc_ctrl.scala 100:34] - node _T_49 = and(io.ifc_fetch_req_f, _T_48) @[el2_ifu_ifc_ctrl.scala 100:32] - node _T_50 = not(io.exu_flush_final) @[el2_ifu_ifc_ctrl.scala 100:49] - node _T_51 = and(_T_49, _T_50) @[el2_ifu_ifc_ctrl.scala 100:47] - miss_f <= _T_51 @[el2_ifu_ifc_ctrl.scala 100:10] - node _T_52 = or(io.ifu_ic_mb_empty, io.exu_flush_final) @[el2_ifu_ifc_ctrl.scala 102:39] - node _T_53 = not(dma_stall) @[el2_ifu_ifc_ctrl.scala 102:63] - node _T_54 = and(_T_52, _T_53) @[el2_ifu_ifc_ctrl.scala 102:61] - node _T_55 = not(miss_f) @[el2_ifu_ifc_ctrl.scala 102:76] - node _T_56 = and(_T_54, _T_55) @[el2_ifu_ifc_ctrl.scala 102:74] - node _T_57 = not(miss_a) @[el2_ifu_ifc_ctrl.scala 102:86] - node _T_58 = and(_T_56, _T_57) @[el2_ifu_ifc_ctrl.scala 102:84] - mb_empty_mod <= _T_58 @[el2_ifu_ifc_ctrl.scala 102:16] - node _T_59 = and(io.exu_flush_final, io.dec_tlu_flush_noredir_wb) @[el2_ifu_ifc_ctrl.scala 104:35] - goto_idle <= _T_59 @[el2_ifu_ifc_ctrl.scala 104:13] - node _T_60 = not(io.dec_tlu_flush_noredir_wb) @[el2_ifu_ifc_ctrl.scala 106:38] - node _T_61 = and(io.exu_flush_final, _T_60) @[el2_ifu_ifc_ctrl.scala 106:36] - node _T_62 = and(_T_61, idle) @[el2_ifu_ifc_ctrl.scala 106:67] - leave_idle <= _T_62 @[el2_ifu_ifc_ctrl.scala 106:14] - node _T_63 = bits(state, 1, 1) @[el2_ifu_ifc_ctrl.scala 108:29] - node _T_64 = not(_T_63) @[el2_ifu_ifc_ctrl.scala 108:23] - node _T_65 = bits(state, 0, 0) @[el2_ifu_ifc_ctrl.scala 108:40] - node _T_66 = and(_T_64, _T_65) @[el2_ifu_ifc_ctrl.scala 108:33] - node _T_67 = and(_T_66, miss_f) @[el2_ifu_ifc_ctrl.scala 108:44] - node _T_68 = not(goto_idle) @[el2_ifu_ifc_ctrl.scala 108:55] - node _T_69 = and(_T_67, _T_68) @[el2_ifu_ifc_ctrl.scala 108:53] - node _T_70 = bits(state, 1, 1) @[el2_ifu_ifc_ctrl.scala 109:11] - node _T_71 = not(mb_empty_mod) @[el2_ifu_ifc_ctrl.scala 109:17] - node _T_72 = and(_T_70, _T_71) @[el2_ifu_ifc_ctrl.scala 109:15] - node _T_73 = not(goto_idle) @[el2_ifu_ifc_ctrl.scala 109:33] - node _T_74 = and(_T_72, _T_73) @[el2_ifu_ifc_ctrl.scala 109:31] - node next_state_1 = or(_T_69, _T_74) @[el2_ifu_ifc_ctrl.scala 108:67] - node _T_75 = not(goto_idle) @[el2_ifu_ifc_ctrl.scala 111:23] - node _T_76 = and(_T_75, leave_idle) @[el2_ifu_ifc_ctrl.scala 111:34] - node _T_77 = bits(state, 0, 0) @[el2_ifu_ifc_ctrl.scala 111:56] - node _T_78 = not(goto_idle) @[el2_ifu_ifc_ctrl.scala 111:62] - node _T_79 = and(_T_77, _T_78) @[el2_ifu_ifc_ctrl.scala 111:60] - node next_state_0 = or(_T_76, _T_79) @[el2_ifu_ifc_ctrl.scala 111:48] - node _T_80 = cat(next_state_0, next_state_0) @[Cat.scala 29:58] - reg _T_81 : UInt, clock with : (reset => (reset, UInt<1>("h00"))) @[el2_ifu_ifc_ctrl.scala 113:19] - _T_81 <= _T_80 @[el2_ifu_ifc_ctrl.scala 113:19] - state <= _T_81 @[el2_ifu_ifc_ctrl.scala 113:9] + node _T_28 = bits(io.ifc_fetch_addr_f, 30, 1) @[el2_ifu_ifc_ctrl.scala 90:42] + node _T_29 = add(_T_28, UInt<1>("h01")) @[el2_ifu_ifc_ctrl.scala 90:48] + node _T_30 = tail(_T_29, 1) @[el2_ifu_ifc_ctrl.scala 90:48] + fetch_addr_next <= _T_30 @[el2_ifu_ifc_ctrl.scala 90:19] + node _T_31 = not(idle) @[el2_ifu_ifc_ctrl.scala 93:30] + io.ifc_fetch_req_bf_raw <= _T_31 @[el2_ifu_ifc_ctrl.scala 93:27] + node _T_32 = or(io.ifu_fb_consume2, io.ifu_fb_consume1) @[el2_ifu_ifc_ctrl.scala 95:91] + node _T_33 = not(_T_32) @[el2_ifu_ifc_ctrl.scala 95:70] + node _T_34 = and(fb_full_f_ns, _T_33) @[el2_ifu_ifc_ctrl.scala 95:68] + node _T_35 = not(_T_34) @[el2_ifu_ifc_ctrl.scala 95:53] + node _T_36 = and(io.ifc_fetch_req_bf_raw, _T_35) @[el2_ifu_ifc_ctrl.scala 95:51] + node _T_37 = not(dma_stall) @[el2_ifu_ifc_ctrl.scala 96:5] + node _T_38 = and(_T_36, _T_37) @[el2_ifu_ifc_ctrl.scala 95:114] + node _T_39 = not(io.ic_write_stall) @[el2_ifu_ifc_ctrl.scala 96:18] + node _T_40 = and(_T_38, _T_39) @[el2_ifu_ifc_ctrl.scala 96:16] + node _T_41 = not(io.dec_tlu_flush_noredir_wb) @[el2_ifu_ifc_ctrl.scala 96:39] + node _T_42 = and(_T_40, _T_41) @[el2_ifu_ifc_ctrl.scala 96:37] + io.ifc_fetch_req_bf <= _T_42 @[el2_ifu_ifc_ctrl.scala 95:23] + node _T_43 = or(io.exu_flush_final, io.ifc_fetch_req_f) @[el2_ifu_ifc_ctrl.scala 98:37] + fetch_bf_en <= _T_43 @[el2_ifu_ifc_ctrl.scala 98:15] + node _T_44 = not(io.ic_hit_f) @[el2_ifu_ifc_ctrl.scala 100:34] + node _T_45 = and(io.ifc_fetch_req_f, _T_44) @[el2_ifu_ifc_ctrl.scala 100:32] + node _T_46 = not(io.exu_flush_final) @[el2_ifu_ifc_ctrl.scala 100:49] + node _T_47 = and(_T_45, _T_46) @[el2_ifu_ifc_ctrl.scala 100:47] + miss_f <= _T_47 @[el2_ifu_ifc_ctrl.scala 100:10] + node _T_48 = or(io.ifu_ic_mb_empty, io.exu_flush_final) @[el2_ifu_ifc_ctrl.scala 102:39] + node _T_49 = not(dma_stall) @[el2_ifu_ifc_ctrl.scala 102:63] + node _T_50 = and(_T_48, _T_49) @[el2_ifu_ifc_ctrl.scala 102:61] + node _T_51 = not(miss_f) @[el2_ifu_ifc_ctrl.scala 102:76] + node _T_52 = and(_T_50, _T_51) @[el2_ifu_ifc_ctrl.scala 102:74] + node _T_53 = not(miss_a) @[el2_ifu_ifc_ctrl.scala 102:86] + node _T_54 = and(_T_52, _T_53) @[el2_ifu_ifc_ctrl.scala 102:84] + mb_empty_mod <= _T_54 @[el2_ifu_ifc_ctrl.scala 102:16] + node _T_55 = and(io.exu_flush_final, io.dec_tlu_flush_noredir_wb) @[el2_ifu_ifc_ctrl.scala 104:35] + goto_idle <= _T_55 @[el2_ifu_ifc_ctrl.scala 104:13] + node _T_56 = not(io.dec_tlu_flush_noredir_wb) @[el2_ifu_ifc_ctrl.scala 106:38] + node _T_57 = and(io.exu_flush_final, _T_56) @[el2_ifu_ifc_ctrl.scala 106:36] + node _T_58 = and(_T_57, idle) @[el2_ifu_ifc_ctrl.scala 106:67] + leave_idle <= _T_58 @[el2_ifu_ifc_ctrl.scala 106:14] + node _T_59 = bits(state, 1, 1) @[el2_ifu_ifc_ctrl.scala 108:29] + node _T_60 = not(_T_59) @[el2_ifu_ifc_ctrl.scala 108:23] + node _T_61 = bits(state, 0, 0) @[el2_ifu_ifc_ctrl.scala 108:40] + node _T_62 = and(_T_60, _T_61) @[el2_ifu_ifc_ctrl.scala 108:33] + node _T_63 = and(_T_62, miss_f) @[el2_ifu_ifc_ctrl.scala 108:44] + node _T_64 = not(goto_idle) @[el2_ifu_ifc_ctrl.scala 108:55] + node _T_65 = and(_T_63, _T_64) @[el2_ifu_ifc_ctrl.scala 108:53] + node _T_66 = bits(state, 1, 1) @[el2_ifu_ifc_ctrl.scala 109:11] + node _T_67 = not(mb_empty_mod) @[el2_ifu_ifc_ctrl.scala 109:17] + node _T_68 = and(_T_66, _T_67) @[el2_ifu_ifc_ctrl.scala 109:15] + node _T_69 = not(goto_idle) @[el2_ifu_ifc_ctrl.scala 109:33] + node _T_70 = and(_T_68, _T_69) @[el2_ifu_ifc_ctrl.scala 109:31] + node next_state_1 = or(_T_65, _T_70) @[el2_ifu_ifc_ctrl.scala 108:67] + node _T_71 = not(goto_idle) @[el2_ifu_ifc_ctrl.scala 111:23] + node _T_72 = and(_T_71, leave_idle) @[el2_ifu_ifc_ctrl.scala 111:34] + node _T_73 = bits(state, 0, 0) @[el2_ifu_ifc_ctrl.scala 111:56] + node _T_74 = not(goto_idle) @[el2_ifu_ifc_ctrl.scala 111:62] + node _T_75 = and(_T_73, _T_74) @[el2_ifu_ifc_ctrl.scala 111:60] + node next_state_0 = or(_T_72, _T_75) @[el2_ifu_ifc_ctrl.scala 111:48] + node _T_76 = cat(next_state_0, next_state_0) @[Cat.scala 29:58] + reg _T_77 : UInt, clock with : (reset => (reset, UInt<1>("h00"))) @[el2_ifu_ifc_ctrl.scala 113:19] + _T_77 <= _T_76 @[el2_ifu_ifc_ctrl.scala 113:19] + state <= _T_77 @[el2_ifu_ifc_ctrl.scala 113:9] flush_fb <= io.exu_flush_final @[el2_ifu_ifc_ctrl.scala 118:12] - node _T_82 = not(io.ifu_fb_consume2) @[el2_ifu_ifc_ctrl.scala 120:38] - node _T_83 = and(io.ifu_fb_consume1, _T_82) @[el2_ifu_ifc_ctrl.scala 120:36] - node _T_84 = not(io.ifc_fetch_req_f) @[el2_ifu_ifc_ctrl.scala 120:61] - node _T_85 = or(_T_84, miss_f) @[el2_ifu_ifc_ctrl.scala 120:81] - node _T_86 = and(_T_83, _T_85) @[el2_ifu_ifc_ctrl.scala 120:58] - node _T_87 = and(io.ifu_fb_consume2, io.ifc_fetch_req_f) @[el2_ifu_ifc_ctrl.scala 121:25] - node _T_88 = or(_T_86, _T_87) @[el2_ifu_ifc_ctrl.scala 120:92] - fb_right <= _T_88 @[el2_ifu_ifc_ctrl.scala 120:12] - node _T_89 = not(io.ifc_fetch_req_f) @[el2_ifu_ifc_ctrl.scala 123:39] - node _T_90 = or(_T_89, miss_f) @[el2_ifu_ifc_ctrl.scala 123:59] - node _T_91 = and(io.ifu_fb_consume2, _T_90) @[el2_ifu_ifc_ctrl.scala 123:36] - fb_right2 <= _T_91 @[el2_ifu_ifc_ctrl.scala 123:13] - node _T_92 = or(io.ifu_fb_consume1, io.ifu_fb_consume2) @[el2_ifu_ifc_ctrl.scala 124:56] - node _T_93 = not(_T_92) @[el2_ifu_ifc_ctrl.scala 124:35] - node _T_94 = and(io.ifc_fetch_req_f, _T_93) @[el2_ifu_ifc_ctrl.scala 124:33] - node _T_95 = not(miss_f) @[el2_ifu_ifc_ctrl.scala 124:80] - node _T_96 = and(_T_94, _T_95) @[el2_ifu_ifc_ctrl.scala 124:78] - fb_left <= _T_96 @[el2_ifu_ifc_ctrl.scala 124:11] - node _T_97 = bits(flush_fb, 0, 0) @[el2_ifu_ifc_ctrl.scala 126:37] - node _T_98 = not(flush_fb) @[el2_ifu_ifc_ctrl.scala 127:6] - node _T_99 = and(_T_98, fb_right) @[el2_ifu_ifc_ctrl.scala 127:16] - node _T_100 = bits(_T_99, 0, 0) @[el2_ifu_ifc_ctrl.scala 127:28] - node _T_101 = bits(fb_write_f, 3, 1) @[el2_ifu_ifc_ctrl.scala 127:62] - node _T_102 = cat(UInt<1>("h00"), _T_101) @[Cat.scala 29:58] - node _T_103 = not(flush_fb) @[el2_ifu_ifc_ctrl.scala 128:6] - node _T_104 = and(_T_103, fb_right2) @[el2_ifu_ifc_ctrl.scala 128:16] - node _T_105 = bits(_T_104, 0, 0) @[el2_ifu_ifc_ctrl.scala 128:29] - node _T_106 = bits(fb_write_f, 3, 2) @[el2_ifu_ifc_ctrl.scala 128:63] - node _T_107 = cat(UInt<2>("h00"), _T_106) @[Cat.scala 29:58] - node _T_108 = not(flush_fb) @[el2_ifu_ifc_ctrl.scala 129:6] - node _T_109 = and(_T_108, fb_left) @[el2_ifu_ifc_ctrl.scala 129:16] - node _T_110 = bits(_T_109, 0, 0) @[el2_ifu_ifc_ctrl.scala 129:27] - node _T_111 = bits(fb_write_f, 2, 0) @[el2_ifu_ifc_ctrl.scala 129:51] - node _T_112 = cat(_T_111, UInt<1>("h00")) @[Cat.scala 29:58] - node _T_113 = not(flush_fb) @[el2_ifu_ifc_ctrl.scala 130:6] - node _T_114 = not(fb_right) @[el2_ifu_ifc_ctrl.scala 130:18] - node _T_115 = and(_T_113, _T_114) @[el2_ifu_ifc_ctrl.scala 130:16] - node _T_116 = not(fb_right2) @[el2_ifu_ifc_ctrl.scala 130:30] - node _T_117 = and(_T_115, _T_116) @[el2_ifu_ifc_ctrl.scala 130:28] - node _T_118 = not(fb_left) @[el2_ifu_ifc_ctrl.scala 130:43] - node _T_119 = and(_T_117, _T_118) @[el2_ifu_ifc_ctrl.scala 130:41] - node _T_120 = bits(_T_119, 0, 0) @[el2_ifu_ifc_ctrl.scala 130:53] - node _T_121 = bits(fb_write_f, 3, 0) @[el2_ifu_ifc_ctrl.scala 130:73] - node _T_122 = mux(_T_97, UInt<4>("h01"), UInt<1>("h00")) @[Mux.scala 27:72] - node _T_123 = mux(_T_100, _T_102, UInt<1>("h00")) @[Mux.scala 27:72] - node _T_124 = mux(_T_105, _T_107, UInt<1>("h00")) @[Mux.scala 27:72] - node _T_125 = mux(_T_110, _T_112, UInt<1>("h00")) @[Mux.scala 27:72] - node _T_126 = mux(_T_120, _T_121, UInt<1>("h00")) @[Mux.scala 27:72] - node _T_127 = or(_T_122, _T_123) @[Mux.scala 27:72] - node _T_128 = or(_T_127, _T_124) @[Mux.scala 27:72] - node _T_129 = or(_T_128, _T_125) @[Mux.scala 27:72] - node _T_130 = or(_T_129, _T_126) @[Mux.scala 27:72] - wire _T_131 : UInt<4> @[Mux.scala 27:72] - _T_131 <= _T_130 @[Mux.scala 27:72] - fb_write_ns <= _T_131 @[el2_ifu_ifc_ctrl.scala 126:15] - node _T_132 = bits(fb_write_ns, 3, 3) @[el2_ifu_ifc_ctrl.scala 133:38] - reg _T_133 : UInt<1>, clock with : (reset => (reset, UInt<1>("h00"))) @[el2_ifu_ifc_ctrl.scala 133:26] - _T_133 <= _T_132 @[el2_ifu_ifc_ctrl.scala 133:26] - fb_full_f_ns <= _T_133 @[el2_ifu_ifc_ctrl.scala 133:16] - node _T_134 = eq(state, UInt<2>("h00")) @[el2_ifu_ifc_ctrl.scala 135:17] - idle <= _T_134 @[el2_ifu_ifc_ctrl.scala 135:8] - node _T_135 = eq(state, UInt<2>("h03")) @[el2_ifu_ifc_ctrl.scala 136:16] - wfm <= _T_135 @[el2_ifu_ifc_ctrl.scala 136:7] - node _T_136 = bits(fb_write_ns, 3, 3) @[el2_ifu_ifc_ctrl.scala 138:30] - fb_full_f_ns <= _T_136 @[el2_ifu_ifc_ctrl.scala 138:16] + node _T_78 = not(io.ifu_fb_consume2) @[el2_ifu_ifc_ctrl.scala 120:38] + node _T_79 = and(io.ifu_fb_consume1, _T_78) @[el2_ifu_ifc_ctrl.scala 120:36] + node _T_80 = not(io.ifc_fetch_req_f) @[el2_ifu_ifc_ctrl.scala 120:61] + node _T_81 = or(_T_80, miss_f) @[el2_ifu_ifc_ctrl.scala 120:81] + node _T_82 = and(_T_79, _T_81) @[el2_ifu_ifc_ctrl.scala 120:58] + node _T_83 = and(io.ifu_fb_consume2, io.ifc_fetch_req_f) @[el2_ifu_ifc_ctrl.scala 121:25] + node _T_84 = or(_T_82, _T_83) @[el2_ifu_ifc_ctrl.scala 120:92] + fb_right <= _T_84 @[el2_ifu_ifc_ctrl.scala 120:12] + node _T_85 = not(io.ifc_fetch_req_f) @[el2_ifu_ifc_ctrl.scala 123:39] + node _T_86 = or(_T_85, miss_f) @[el2_ifu_ifc_ctrl.scala 123:59] + node _T_87 = and(io.ifu_fb_consume2, _T_86) @[el2_ifu_ifc_ctrl.scala 123:36] + fb_right2 <= _T_87 @[el2_ifu_ifc_ctrl.scala 123:13] + node _T_88 = or(io.ifu_fb_consume1, io.ifu_fb_consume2) @[el2_ifu_ifc_ctrl.scala 124:56] + node _T_89 = not(_T_88) @[el2_ifu_ifc_ctrl.scala 124:35] + node _T_90 = and(io.ifc_fetch_req_f, _T_89) @[el2_ifu_ifc_ctrl.scala 124:33] + node _T_91 = not(miss_f) @[el2_ifu_ifc_ctrl.scala 124:80] + node _T_92 = and(_T_90, _T_91) @[el2_ifu_ifc_ctrl.scala 124:78] + fb_left <= _T_92 @[el2_ifu_ifc_ctrl.scala 124:11] + node _T_93 = bits(flush_fb, 0, 0) @[el2_ifu_ifc_ctrl.scala 126:37] + node _T_94 = not(flush_fb) @[el2_ifu_ifc_ctrl.scala 127:6] + node _T_95 = and(_T_94, fb_right) @[el2_ifu_ifc_ctrl.scala 127:16] + node _T_96 = bits(_T_95, 0, 0) @[el2_ifu_ifc_ctrl.scala 127:28] + node _T_97 = bits(fb_write_f, 3, 1) @[el2_ifu_ifc_ctrl.scala 127:62] + node _T_98 = cat(UInt<1>("h00"), _T_97) @[Cat.scala 29:58] + node _T_99 = not(flush_fb) @[el2_ifu_ifc_ctrl.scala 128:6] + node _T_100 = and(_T_99, fb_right2) @[el2_ifu_ifc_ctrl.scala 128:16] + node _T_101 = bits(_T_100, 0, 0) @[el2_ifu_ifc_ctrl.scala 128:29] + node _T_102 = bits(fb_write_f, 3, 2) @[el2_ifu_ifc_ctrl.scala 128:63] + node _T_103 = cat(UInt<2>("h00"), _T_102) @[Cat.scala 29:58] + node _T_104 = not(flush_fb) @[el2_ifu_ifc_ctrl.scala 129:6] + node _T_105 = and(_T_104, fb_left) @[el2_ifu_ifc_ctrl.scala 129:16] + node _T_106 = bits(_T_105, 0, 0) @[el2_ifu_ifc_ctrl.scala 129:27] + node _T_107 = bits(fb_write_f, 2, 0) @[el2_ifu_ifc_ctrl.scala 129:51] + node _T_108 = cat(_T_107, UInt<1>("h00")) @[Cat.scala 29:58] + node _T_109 = not(flush_fb) @[el2_ifu_ifc_ctrl.scala 130:6] + node _T_110 = not(fb_right) @[el2_ifu_ifc_ctrl.scala 130:18] + node _T_111 = and(_T_109, _T_110) @[el2_ifu_ifc_ctrl.scala 130:16] + node _T_112 = not(fb_right2) @[el2_ifu_ifc_ctrl.scala 130:30] + node _T_113 = and(_T_111, _T_112) @[el2_ifu_ifc_ctrl.scala 130:28] + node _T_114 = not(fb_left) @[el2_ifu_ifc_ctrl.scala 130:43] + node _T_115 = and(_T_113, _T_114) @[el2_ifu_ifc_ctrl.scala 130:41] + node _T_116 = bits(_T_115, 0, 0) @[el2_ifu_ifc_ctrl.scala 130:53] + node _T_117 = bits(fb_write_f, 3, 0) @[el2_ifu_ifc_ctrl.scala 130:73] + node _T_118 = mux(_T_93, UInt<4>("h01"), UInt<1>("h00")) @[Mux.scala 27:72] + node _T_119 = mux(_T_96, _T_98, UInt<1>("h00")) @[Mux.scala 27:72] + node _T_120 = mux(_T_101, _T_103, UInt<1>("h00")) @[Mux.scala 27:72] + node _T_121 = mux(_T_106, _T_108, UInt<1>("h00")) @[Mux.scala 27:72] + node _T_122 = mux(_T_116, _T_117, UInt<1>("h00")) @[Mux.scala 27:72] + node _T_123 = or(_T_118, _T_119) @[Mux.scala 27:72] + node _T_124 = or(_T_123, _T_120) @[Mux.scala 27:72] + node _T_125 = or(_T_124, _T_121) @[Mux.scala 27:72] + node _T_126 = or(_T_125, _T_122) @[Mux.scala 27:72] + wire _T_127 : UInt<4> @[Mux.scala 27:72] + _T_127 <= _T_126 @[Mux.scala 27:72] + fb_write_ns <= _T_127 @[el2_ifu_ifc_ctrl.scala 126:15] + node _T_128 = bits(fb_write_ns, 3, 3) @[el2_ifu_ifc_ctrl.scala 133:38] + reg _T_129 : UInt<1>, clock with : (reset => (reset, UInt<1>("h00"))) @[el2_ifu_ifc_ctrl.scala 133:26] + _T_129 <= _T_128 @[el2_ifu_ifc_ctrl.scala 133:26] + fb_full_f_ns <= _T_129 @[el2_ifu_ifc_ctrl.scala 133:16] + node _T_130 = eq(state, UInt<2>("h00")) @[el2_ifu_ifc_ctrl.scala 135:17] + idle <= _T_130 @[el2_ifu_ifc_ctrl.scala 135:8] + node _T_131 = eq(state, UInt<2>("h03")) @[el2_ifu_ifc_ctrl.scala 136:16] + wfm <= _T_131 @[el2_ifu_ifc_ctrl.scala 136:7] + node _T_132 = bits(fb_write_ns, 3, 3) @[el2_ifu_ifc_ctrl.scala 138:30] + fb_full_f_ns <= _T_132 @[el2_ifu_ifc_ctrl.scala 138:16] reg fb_full_f : UInt<1>, clock with : (reset => (reset, UInt<1>("h00"))) @[el2_ifu_ifc_ctrl.scala 139:26] fb_full_f <= fb_full_f_ns @[el2_ifu_ifc_ctrl.scala 139:26] - reg _T_137 : UInt, clock with : (reset => (reset, UInt<1>("h00"))) @[el2_ifu_ifc_ctrl.scala 140:24] - _T_137 <= fb_write_ns @[el2_ifu_ifc_ctrl.scala 140:24] - fb_write_f <= _T_137 @[el2_ifu_ifc_ctrl.scala 140:14] - node _T_138 = or(io.ifu_fb_consume2, io.ifu_fb_consume1) @[el2_ifu_ifc_ctrl.scala 143:26] - node _T_139 = or(_T_138, io.exu_flush_final) @[el2_ifu_ifc_ctrl.scala 143:47] - node _T_140 = not(_T_139) @[el2_ifu_ifc_ctrl.scala 143:5] - node _T_141 = and(fb_full_f, _T_140) @[el2_ifu_ifc_ctrl.scala 142:75] - node _T_142 = or(_T_141, dma_stall) @[el2_ifu_ifc_ctrl.scala 143:70] - node _T_143 = and(io.ifc_fetch_req_bf_raw, _T_142) @[el2_ifu_ifc_ctrl.scala 142:60] - node _T_144 = or(wfm, _T_143) @[el2_ifu_ifc_ctrl.scala 142:33] - io.ifu_pmu_fetch_stall <= _T_144 @[el2_ifu_ifc_ctrl.scala 142:26] - node _T_145 = cat(io.ifc_fetch_addr_bf, UInt<1>("h00")) @[Cat.scala 29:58] - node _T_146 = bits(_T_145, 31, 28) @[el2_lib.scala 214:25] - node iccm_acc_in_region_bf = eq(_T_146, UInt<4>("h0e")) @[el2_lib.scala 214:47] - node _T_147 = bits(_T_145, 31, 16) @[el2_lib.scala 217:14] - node iccm_acc_in_range_bf = eq(_T_147, UInt<16>("h0ee00")) @[el2_lib.scala 217:29] + reg _T_133 : UInt, clock with : (reset => (reset, UInt<1>("h00"))) @[el2_ifu_ifc_ctrl.scala 140:24] + _T_133 <= fb_write_ns @[el2_ifu_ifc_ctrl.scala 140:24] + fb_write_f <= _T_133 @[el2_ifu_ifc_ctrl.scala 140:14] + node _T_134 = or(io.ifu_fb_consume2, io.ifu_fb_consume1) @[el2_ifu_ifc_ctrl.scala 143:26] + node _T_135 = or(_T_134, io.exu_flush_final) @[el2_ifu_ifc_ctrl.scala 143:47] + node _T_136 = not(_T_135) @[el2_ifu_ifc_ctrl.scala 143:5] + node _T_137 = and(fb_full_f, _T_136) @[el2_ifu_ifc_ctrl.scala 142:75] + node _T_138 = or(_T_137, dma_stall) @[el2_ifu_ifc_ctrl.scala 143:70] + node _T_139 = and(io.ifc_fetch_req_bf_raw, _T_138) @[el2_ifu_ifc_ctrl.scala 142:60] + node _T_140 = or(wfm, _T_139) @[el2_ifu_ifc_ctrl.scala 142:33] + io.ifu_pmu_fetch_stall <= _T_140 @[el2_ifu_ifc_ctrl.scala 142:26] + node _T_141 = cat(io.ifc_fetch_addr_bf, UInt<1>("h00")) @[Cat.scala 29:58] + node _T_142 = bits(_T_141, 31, 28) @[el2_lib.scala 214:25] + node iccm_acc_in_region_bf = eq(_T_142, UInt<4>("h0e")) @[el2_lib.scala 214:47] + node _T_143 = bits(_T_141, 31, 16) @[el2_lib.scala 217:14] + node iccm_acc_in_range_bf = eq(_T_143, UInt<16>("h0ee00")) @[el2_lib.scala 217:29] io.ifc_iccm_access_bf <= iccm_acc_in_range_bf @[el2_ifu_ifc_ctrl.scala 149:25] - node _T_148 = bits(io.ifc_fetch_addr_bf, 30, 27) @[el2_ifu_ifc_ctrl.scala 150:78] - node _T_149 = cat(_T_148, UInt<1>("h00")) @[Cat.scala 29:58] - node _T_150 = dshr(io.dec_tlu_mrac_ff, _T_149) @[el2_ifu_ifc_ctrl.scala 150:53] - node _T_151 = bits(_T_150, 0, 0) @[el2_ifu_ifc_ctrl.scala 150:53] - node _T_152 = not(_T_151) @[el2_ifu_ifc_ctrl.scala 150:34] - io.ifc_fetch_uncacheable_bf <= _T_152 @[el2_ifu_ifc_ctrl.scala 150:31] - reg _T_153 : UInt<1>, clock with : (reset => (reset, UInt<1>("h00"))) @[el2_ifu_ifc_ctrl.scala 154:32] - _T_153 <= io.ifc_fetch_req_bf @[el2_ifu_ifc_ctrl.scala 154:32] - io.ifc_fetch_req_f <= _T_153 @[el2_ifu_ifc_ctrl.scala 154:22] - node _T_154 = or(io.exu_flush_final, io.ifc_fetch_req_f) @[el2_ifu_ifc_ctrl.scala 157:88] - reg _T_155 : UInt, clock with : (reset => (reset, UInt<1>("h00"))) @[Reg.scala 27:20] - when _T_154 : @[Reg.scala 28:19] - _T_155 <= io.ifc_fetch_addr_bf @[Reg.scala 28:23] + node _T_144 = bits(io.ifc_fetch_addr_bf, 30, 27) @[el2_ifu_ifc_ctrl.scala 150:78] + node _T_145 = cat(_T_144, UInt<1>("h00")) @[Cat.scala 29:58] + node _T_146 = dshr(io.dec_tlu_mrac_ff, _T_145) @[el2_ifu_ifc_ctrl.scala 150:53] + node _T_147 = bits(_T_146, 0, 0) @[el2_ifu_ifc_ctrl.scala 150:53] + node _T_148 = not(_T_147) @[el2_ifu_ifc_ctrl.scala 150:34] + io.ifc_fetch_uncacheable_bf <= _T_148 @[el2_ifu_ifc_ctrl.scala 150:31] + reg _T_149 : UInt<1>, clock with : (reset => (reset, UInt<1>("h00"))) @[el2_ifu_ifc_ctrl.scala 154:32] + _T_149 <= io.ifc_fetch_req_bf @[el2_ifu_ifc_ctrl.scala 154:32] + io.ifc_fetch_req_f <= _T_149 @[el2_ifu_ifc_ctrl.scala 154:22] + node _T_150 = or(io.exu_flush_final, io.ifc_fetch_req_f) @[el2_ifu_ifc_ctrl.scala 157:88] + reg _T_151 : UInt, clock with : (reset => (reset, UInt<1>("h00"))) @[Reg.scala 27:20] + when _T_150 : @[Reg.scala 28:19] + _T_151 <= io.ifc_fetch_addr_bf @[Reg.scala 28:23] skip @[Reg.scala 28:19] - io.ifc_fetch_addr_f <= _T_155 @[el2_ifu_ifc_ctrl.scala 157:23] + io.ifc_fetch_addr_f <= _T_151 @[el2_ifu_ifc_ctrl.scala 157:23] diff --git a/el2_ifu_ifc_ctrl.v b/el2_ifu_ifc_ctrl.v index 223202da..7611b90c 100644 --- a/el2_ifu_ifc_ctrl.v +++ b/el2_ifu_ifc_ctrl.v @@ -53,93 +53,91 @@ module el2_ifu_ifc_ctrl( wire [30:0] _T_20 = io_exu_flush_final ? io_exu_flush_path_final : 31'h0; // @[Mux.scala 27:72] wire [30:0] _T_21 = io_sel_last_addr_bf ? io_ifc_fetch_addr_f : 31'h0; // @[Mux.scala 27:72] wire [30:0] _T_22 = io_sel_btb_addr_bf ? io_ifu_bp_btb_target_f : 31'h0; // @[Mux.scala 27:72] - wire [29:0] _T_30 = io_ifc_fetch_addr_f[30:1] + 30'h1; // @[el2_ifu_ifc_ctrl.scala 90:52] - wire [29:0] _GEN_1 = {{29'd0}, io_ifc_fetch_addr_f[0]}; // @[el2_ifu_ifc_ctrl.scala 90:58] - wire [29:0] _T_34 = _T_30 | _GEN_1; // @[el2_ifu_ifc_ctrl.scala 90:58] - wire [31:0] fetch_addr_next = {{2'd0}, _T_34}; // @[el2_ifu_ifc_ctrl.scala 90:19] + wire [29:0] _T_30 = io_ifc_fetch_addr_f[30:1] + 30'h1; // @[el2_ifu_ifc_ctrl.scala 90:48] + wire [31:0] fetch_addr_next = {{2'd0}, _T_30}; // @[el2_ifu_ifc_ctrl.scala 90:19] wire [31:0] _T_23 = io_sel_next_addr_bf ? fetch_addr_next : 32'h0; // @[Mux.scala 27:72] wire [30:0] _T_24 = _T_20 | _T_21; // @[Mux.scala 27:72] wire [30:0] _T_25 = _T_24 | _T_22; // @[Mux.scala 27:72] - wire [31:0] _GEN_2 = {{1'd0}, _T_25}; // @[Mux.scala 27:72] - wire [31:0] _T_26 = _GEN_2 | _T_23; // @[Mux.scala 27:72] + wire [31:0] _GEN_1 = {{1'd0}, _T_25}; // @[Mux.scala 27:72] + wire [31:0] _T_26 = _GEN_1 | _T_23; // @[Mux.scala 27:72] reg [1:0] state; // @[el2_ifu_ifc_ctrl.scala 113:19] wire idle = state == 2'h0; // @[el2_ifu_ifc_ctrl.scala 135:17] - wire _T_36 = io_ifu_fb_consume2 | io_ifu_fb_consume1; // @[el2_ifu_ifc_ctrl.scala 95:91] - wire _T_37 = ~_T_36; // @[el2_ifu_ifc_ctrl.scala 95:70] - wire [3:0] _T_122 = io_exu_flush_final ? 4'h1 : 4'h0; // @[Mux.scala 27:72] - wire _T_82 = ~io_ifu_fb_consume2; // @[el2_ifu_ifc_ctrl.scala 120:38] - wire _T_83 = io_ifu_fb_consume1 & _T_82; // @[el2_ifu_ifc_ctrl.scala 120:36] - wire _T_49 = io_ifc_fetch_req_f & _T_4; // @[el2_ifu_ifc_ctrl.scala 100:32] - wire miss_f = _T_49 & _T_2; // @[el2_ifu_ifc_ctrl.scala 100:47] - wire _T_85 = _T_3 | miss_f; // @[el2_ifu_ifc_ctrl.scala 120:81] - wire _T_86 = _T_83 & _T_85; // @[el2_ifu_ifc_ctrl.scala 120:58] - wire _T_87 = io_ifu_fb_consume2 & io_ifc_fetch_req_f; // @[el2_ifu_ifc_ctrl.scala 121:25] - wire fb_right = _T_86 | _T_87; // @[el2_ifu_ifc_ctrl.scala 120:92] - wire _T_99 = _T_2 & fb_right; // @[el2_ifu_ifc_ctrl.scala 127:16] + wire _T_32 = io_ifu_fb_consume2 | io_ifu_fb_consume1; // @[el2_ifu_ifc_ctrl.scala 95:91] + wire _T_33 = ~_T_32; // @[el2_ifu_ifc_ctrl.scala 95:70] + wire [3:0] _T_118 = io_exu_flush_final ? 4'h1 : 4'h0; // @[Mux.scala 27:72] + wire _T_78 = ~io_ifu_fb_consume2; // @[el2_ifu_ifc_ctrl.scala 120:38] + wire _T_79 = io_ifu_fb_consume1 & _T_78; // @[el2_ifu_ifc_ctrl.scala 120:36] + wire _T_45 = io_ifc_fetch_req_f & _T_4; // @[el2_ifu_ifc_ctrl.scala 100:32] + wire miss_f = _T_45 & _T_2; // @[el2_ifu_ifc_ctrl.scala 100:47] + wire _T_81 = _T_3 | miss_f; // @[el2_ifu_ifc_ctrl.scala 120:81] + wire _T_82 = _T_79 & _T_81; // @[el2_ifu_ifc_ctrl.scala 120:58] + wire _T_83 = io_ifu_fb_consume2 & io_ifc_fetch_req_f; // @[el2_ifu_ifc_ctrl.scala 121:25] + wire fb_right = _T_82 | _T_83; // @[el2_ifu_ifc_ctrl.scala 120:92] + wire _T_95 = _T_2 & fb_right; // @[el2_ifu_ifc_ctrl.scala 127:16] reg [3:0] fb_write_f; // @[el2_ifu_ifc_ctrl.scala 140:24] - wire [3:0] _T_102 = {1'h0,fb_write_f[3:1]}; // @[Cat.scala 29:58] - wire [3:0] _T_123 = _T_99 ? _T_102 : 4'h0; // @[Mux.scala 27:72] - wire [3:0] _T_127 = _T_122 | _T_123; // @[Mux.scala 27:72] - wire fb_right2 = io_ifu_fb_consume2 & _T_85; // @[el2_ifu_ifc_ctrl.scala 123:36] - wire _T_104 = _T_2 & fb_right2; // @[el2_ifu_ifc_ctrl.scala 128:16] - wire [3:0] _T_107 = {2'h0,fb_write_f[3:2]}; // @[Cat.scala 29:58] - wire [3:0] _T_124 = _T_104 ? _T_107 : 4'h0; // @[Mux.scala 27:72] - wire [3:0] _T_128 = _T_127 | _T_124; // @[Mux.scala 27:72] - wire _T_92 = io_ifu_fb_consume1 | io_ifu_fb_consume2; // @[el2_ifu_ifc_ctrl.scala 124:56] - wire _T_93 = ~_T_92; // @[el2_ifu_ifc_ctrl.scala 124:35] - wire _T_94 = io_ifc_fetch_req_f & _T_93; // @[el2_ifu_ifc_ctrl.scala 124:33] - wire _T_95 = ~miss_f; // @[el2_ifu_ifc_ctrl.scala 124:80] - wire fb_left = _T_94 & _T_95; // @[el2_ifu_ifc_ctrl.scala 124:78] - wire _T_109 = _T_2 & fb_left; // @[el2_ifu_ifc_ctrl.scala 129:16] - wire [3:0] _T_112 = {fb_write_f[2:0],1'h0}; // @[Cat.scala 29:58] - wire [3:0] _T_125 = _T_109 ? _T_112 : 4'h0; // @[Mux.scala 27:72] - wire [3:0] _T_129 = _T_128 | _T_125; // @[Mux.scala 27:72] - wire _T_114 = ~fb_right; // @[el2_ifu_ifc_ctrl.scala 130:18] - wire _T_115 = _T_2 & _T_114; // @[el2_ifu_ifc_ctrl.scala 130:16] - wire _T_116 = ~fb_right2; // @[el2_ifu_ifc_ctrl.scala 130:30] - wire _T_117 = _T_115 & _T_116; // @[el2_ifu_ifc_ctrl.scala 130:28] - wire _T_118 = ~fb_left; // @[el2_ifu_ifc_ctrl.scala 130:43] - wire _T_119 = _T_117 & _T_118; // @[el2_ifu_ifc_ctrl.scala 130:41] - wire [3:0] _T_126 = _T_119 ? fb_write_f : 4'h0; // @[Mux.scala 27:72] - wire [3:0] fb_write_ns = _T_129 | _T_126; // @[Mux.scala 27:72] + wire [3:0] _T_98 = {1'h0,fb_write_f[3:1]}; // @[Cat.scala 29:58] + wire [3:0] _T_119 = _T_95 ? _T_98 : 4'h0; // @[Mux.scala 27:72] + wire [3:0] _T_123 = _T_118 | _T_119; // @[Mux.scala 27:72] + wire fb_right2 = io_ifu_fb_consume2 & _T_81; // @[el2_ifu_ifc_ctrl.scala 123:36] + wire _T_100 = _T_2 & fb_right2; // @[el2_ifu_ifc_ctrl.scala 128:16] + wire [3:0] _T_103 = {2'h0,fb_write_f[3:2]}; // @[Cat.scala 29:58] + wire [3:0] _T_120 = _T_100 ? _T_103 : 4'h0; // @[Mux.scala 27:72] + wire [3:0] _T_124 = _T_123 | _T_120; // @[Mux.scala 27:72] + wire _T_88 = io_ifu_fb_consume1 | io_ifu_fb_consume2; // @[el2_ifu_ifc_ctrl.scala 124:56] + wire _T_89 = ~_T_88; // @[el2_ifu_ifc_ctrl.scala 124:35] + wire _T_90 = io_ifc_fetch_req_f & _T_89; // @[el2_ifu_ifc_ctrl.scala 124:33] + wire _T_91 = ~miss_f; // @[el2_ifu_ifc_ctrl.scala 124:80] + wire fb_left = _T_90 & _T_91; // @[el2_ifu_ifc_ctrl.scala 124:78] + wire _T_105 = _T_2 & fb_left; // @[el2_ifu_ifc_ctrl.scala 129:16] + wire [3:0] _T_108 = {fb_write_f[2:0],1'h0}; // @[Cat.scala 29:58] + wire [3:0] _T_121 = _T_105 ? _T_108 : 4'h0; // @[Mux.scala 27:72] + wire [3:0] _T_125 = _T_124 | _T_121; // @[Mux.scala 27:72] + wire _T_110 = ~fb_right; // @[el2_ifu_ifc_ctrl.scala 130:18] + wire _T_111 = _T_2 & _T_110; // @[el2_ifu_ifc_ctrl.scala 130:16] + wire _T_112 = ~fb_right2; // @[el2_ifu_ifc_ctrl.scala 130:30] + wire _T_113 = _T_111 & _T_112; // @[el2_ifu_ifc_ctrl.scala 130:28] + wire _T_114 = ~fb_left; // @[el2_ifu_ifc_ctrl.scala 130:43] + wire _T_115 = _T_113 & _T_114; // @[el2_ifu_ifc_ctrl.scala 130:41] + wire [3:0] _T_122 = _T_115 ? fb_write_f : 4'h0; // @[Mux.scala 27:72] + wire [3:0] fb_write_ns = _T_125 | _T_122; // @[Mux.scala 27:72] wire fb_full_f_ns = fb_write_ns[3]; // @[el2_ifu_ifc_ctrl.scala 138:30] - wire _T_38 = fb_full_f_ns & _T_37; // @[el2_ifu_ifc_ctrl.scala 95:68] - wire _T_39 = ~_T_38; // @[el2_ifu_ifc_ctrl.scala 95:53] - wire _T_40 = io_ifc_fetch_req_bf_raw & _T_39; // @[el2_ifu_ifc_ctrl.scala 95:51] - wire _T_41 = ~dma_stall; // @[el2_ifu_ifc_ctrl.scala 96:5] - wire _T_42 = _T_40 & _T_41; // @[el2_ifu_ifc_ctrl.scala 95:114] - wire _T_43 = ~io_ic_write_stall; // @[el2_ifu_ifc_ctrl.scala 96:18] - wire _T_44 = _T_42 & _T_43; // @[el2_ifu_ifc_ctrl.scala 96:16] - wire _T_45 = ~io_dec_tlu_flush_noredir_wb; // @[el2_ifu_ifc_ctrl.scala 96:39] + wire _T_34 = fb_full_f_ns & _T_33; // @[el2_ifu_ifc_ctrl.scala 95:68] + wire _T_35 = ~_T_34; // @[el2_ifu_ifc_ctrl.scala 95:53] + wire _T_36 = io_ifc_fetch_req_bf_raw & _T_35; // @[el2_ifu_ifc_ctrl.scala 95:51] + wire _T_37 = ~dma_stall; // @[el2_ifu_ifc_ctrl.scala 96:5] + wire _T_38 = _T_36 & _T_37; // @[el2_ifu_ifc_ctrl.scala 95:114] + wire _T_39 = ~io_ic_write_stall; // @[el2_ifu_ifc_ctrl.scala 96:18] + wire _T_40 = _T_38 & _T_39; // @[el2_ifu_ifc_ctrl.scala 96:16] + wire _T_41 = ~io_dec_tlu_flush_noredir_wb; // @[el2_ifu_ifc_ctrl.scala 96:39] wire fetch_bf_en = io_exu_flush_final | io_ifc_fetch_req_f; // @[el2_ifu_ifc_ctrl.scala 98:37] wire goto_idle = io_exu_flush_final & io_dec_tlu_flush_noredir_wb; // @[el2_ifu_ifc_ctrl.scala 104:35] - wire _T_61 = io_exu_flush_final & _T_45; // @[el2_ifu_ifc_ctrl.scala 106:36] - wire leave_idle = _T_61 & idle; // @[el2_ifu_ifc_ctrl.scala 106:67] - wire _T_68 = ~goto_idle; // @[el2_ifu_ifc_ctrl.scala 108:55] - wire _T_76 = _T_68 & leave_idle; // @[el2_ifu_ifc_ctrl.scala 111:34] - wire _T_79 = state[0] & _T_68; // @[el2_ifu_ifc_ctrl.scala 111:60] - wire next_state_0 = _T_76 | _T_79; // @[el2_ifu_ifc_ctrl.scala 111:48] - wire [1:0] _T_80 = {next_state_0,next_state_0}; // @[Cat.scala 29:58] + wire _T_57 = io_exu_flush_final & _T_41; // @[el2_ifu_ifc_ctrl.scala 106:36] + wire leave_idle = _T_57 & idle; // @[el2_ifu_ifc_ctrl.scala 106:67] + wire _T_64 = ~goto_idle; // @[el2_ifu_ifc_ctrl.scala 108:55] + wire _T_72 = _T_64 & leave_idle; // @[el2_ifu_ifc_ctrl.scala 111:34] + wire _T_75 = state[0] & _T_64; // @[el2_ifu_ifc_ctrl.scala 111:60] + wire next_state_0 = _T_72 | _T_75; // @[el2_ifu_ifc_ctrl.scala 111:48] + wire [1:0] _T_76 = {next_state_0,next_state_0}; // @[Cat.scala 29:58] wire wfm = state == 2'h3; // @[el2_ifu_ifc_ctrl.scala 136:16] reg fb_full_f; // @[el2_ifu_ifc_ctrl.scala 139:26] - wire _T_139 = _T_36 | io_exu_flush_final; // @[el2_ifu_ifc_ctrl.scala 143:47] - wire _T_140 = ~_T_139; // @[el2_ifu_ifc_ctrl.scala 143:5] - wire _T_141 = fb_full_f & _T_140; // @[el2_ifu_ifc_ctrl.scala 142:75] - wire _T_142 = _T_141 | dma_stall; // @[el2_ifu_ifc_ctrl.scala 143:70] - wire _T_143 = io_ifc_fetch_req_bf_raw & _T_142; // @[el2_ifu_ifc_ctrl.scala 142:60] - wire [31:0] _T_145 = {io_ifc_fetch_addr_bf,1'h0}; // @[Cat.scala 29:58] - wire [4:0] _T_149 = {io_ifc_fetch_addr_bf[30:27],1'h0}; // @[Cat.scala 29:58] - wire [31:0] _T_150 = io_dec_tlu_mrac_ff >> _T_149; // @[el2_ifu_ifc_ctrl.scala 150:53] - reg _T_153; // @[el2_ifu_ifc_ctrl.scala 154:32] - reg [30:0] _T_155; // @[Reg.scala 27:20] - assign io_ifc_fetch_addr_f = _T_155; // @[el2_ifu_ifc_ctrl.scala 157:23] + wire _T_135 = _T_32 | io_exu_flush_final; // @[el2_ifu_ifc_ctrl.scala 143:47] + wire _T_136 = ~_T_135; // @[el2_ifu_ifc_ctrl.scala 143:5] + wire _T_137 = fb_full_f & _T_136; // @[el2_ifu_ifc_ctrl.scala 142:75] + wire _T_138 = _T_137 | dma_stall; // @[el2_ifu_ifc_ctrl.scala 143:70] + wire _T_139 = io_ifc_fetch_req_bf_raw & _T_138; // @[el2_ifu_ifc_ctrl.scala 142:60] + wire [31:0] _T_141 = {io_ifc_fetch_addr_bf,1'h0}; // @[Cat.scala 29:58] + wire [4:0] _T_145 = {io_ifc_fetch_addr_bf[30:27],1'h0}; // @[Cat.scala 29:58] + wire [31:0] _T_146 = io_dec_tlu_mrac_ff >> _T_145; // @[el2_ifu_ifc_ctrl.scala 150:53] + reg _T_149; // @[el2_ifu_ifc_ctrl.scala 154:32] + reg [30:0] _T_151; // @[Reg.scala 27:20] + assign io_ifc_fetch_addr_f = _T_151; // @[el2_ifu_ifc_ctrl.scala 157:23] assign io_ifc_fetch_addr_bf = _T_26[30:0]; // @[el2_ifu_ifc_ctrl.scala 81:24] - assign io_ifc_fetch_req_f = _T_153; // @[el2_ifu_ifc_ctrl.scala 154:22] - assign io_ifu_pmu_fetch_stall = wfm | _T_143; // @[el2_ifu_ifc_ctrl.scala 142:26] - assign io_ifc_fetch_uncacheable_bf = ~_T_150[0]; // @[el2_ifu_ifc_ctrl.scala 150:31] - assign io_ifc_fetch_req_bf = _T_44 & _T_45; // @[el2_ifu_ifc_ctrl.scala 95:23] + assign io_ifc_fetch_req_f = _T_149; // @[el2_ifu_ifc_ctrl.scala 154:22] + assign io_ifu_pmu_fetch_stall = wfm | _T_139; // @[el2_ifu_ifc_ctrl.scala 142:26] + assign io_ifc_fetch_uncacheable_bf = ~_T_146[0]; // @[el2_ifu_ifc_ctrl.scala 150:31] + assign io_ifc_fetch_req_bf = _T_40 & _T_41; // @[el2_ifu_ifc_ctrl.scala 95:23] assign io_ifc_fetch_req_bf_raw = ~idle; // @[el2_ifu_ifc_ctrl.scala 93:27] - assign io_ifc_iccm_access_bf = _T_145[31:16] == 16'hee00; // @[el2_ifu_ifc_ctrl.scala 149:25] + assign io_ifc_iccm_access_bf = _T_141[31:16] == 16'hee00; // @[el2_ifu_ifc_ctrl.scala 149:25] assign io_ifc_region_acc_fault_bf = 1'h0; // @[el2_ifu_ifc_ctrl.scala 42:30] assign io_ifc_dma_access_ok = 1'h0; // @[el2_ifu_ifc_ctrl.scala 43:24] assign io_sel_last_addr_bf = _T_2 & _T_5; // @[el2_ifu_ifc_ctrl.scala 76:23] @@ -189,9 +187,9 @@ initial begin _RAND_3 = {1{`RANDOM}}; fb_full_f = _RAND_3[0:0]; _RAND_4 = {1{`RANDOM}}; - _T_153 = _RAND_4[0:0]; + _T_149 = _RAND_4[0:0]; _RAND_5 = {1{`RANDOM}}; - _T_155 = _RAND_5[30:0]; + _T_151 = _RAND_5[30:0]; `endif // RANDOMIZE_REG_INIT `endif // RANDOMIZE end // initial @@ -208,7 +206,7 @@ end // initial if (reset) begin state <= 2'h0; end else begin - state <= _T_80; + state <= _T_76; end if (reset) begin fb_write_f <= 4'h0; @@ -221,14 +219,14 @@ end // initial fb_full_f <= fb_full_f_ns; end if (reset) begin - _T_153 <= 1'h0; + _T_149 <= 1'h0; end else begin - _T_153 <= io_ifc_fetch_req_bf; + _T_149 <= io_ifc_fetch_req_bf; end if (reset) begin - _T_155 <= 31'h0; + _T_151 <= 31'h0; end else if (fetch_bf_en) begin - _T_155 <= io_ifc_fetch_addr_bf; + _T_151 <= io_ifc_fetch_addr_bf; end end endmodule diff --git a/src/main/scala/ifu/el2_ifu_ifc_ctrl.scala b/src/main/scala/ifu/el2_ifu_ifc_ctrl.scala index 12483384..7adeb91f 100644 --- a/src/main/scala/ifu/el2_ifu_ifc_ctrl.scala +++ b/src/main/scala/ifu/el2_ifu_ifc_ctrl.scala @@ -87,8 +87,8 @@ val io = IO(new Bundle{ line_wrap := 0.U//fetch_addr_next(ICACHE_TAG_INDEX_LO) ^ io.ifc_fetch_addr_f(ICACHE_TAG_INDEX_LO) - fetch_addr_next := Cat((io.ifc_fetch_addr_f(30,1)+1.U) | - Mux(line_wrap.asBool(), 0.U, io.ifc_fetch_addr_f(0))) + fetch_addr_next := io.ifc_fetch_addr_f(30,1)+1.U //| + //Mux(line_wrap.asBool(), 0.U, io.ifc_fetch_addr_f(0))) io.ifc_fetch_req_bf_raw := ~idle diff --git a/target/scala-2.12/classes/ifu/el2_ifu_ifc_ctrl.class b/target/scala-2.12/classes/ifu/el2_ifu_ifc_ctrl.class index 4c011ce0289e24ac4f8bdc07a5ca4835793dbddb..ef7b06d2e034c7d415dd7a102360c04080fc0e02 100644 GIT binary patch literal 110417 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 literal 111812 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