Aligner Updated

This commit is contained in:
waleed-lm 2020-10-12 19:03:29 +05:00
parent c407c91aa9
commit c6807cc80b
9 changed files with 1616 additions and 1427 deletions

File diff suppressed because it is too large Load Diff

View File

@ -529,7 +529,7 @@ module el2_ifu_aln_ctl(
input io_dec_i0_decode_d,
input [31:0] io_ifu_fetch_data_f,
input [1:0] io_ifu_fetch_val,
input [31:0] io_ifu_fetch_pc,
input [30:0] io_ifu_fetch_pc,
output io_ifu_i0_valid,
output io_ifu_i0_icaf,
output [1:0] io_ifu_i0_icaf_type,
@ -565,189 +565,287 @@ module el2_ifu_aln_ctl(
reg [31:0] _RAND_6;
reg [31:0] _RAND_7;
reg [31:0] _RAND_8;
reg [63:0] _RAND_9;
reg [63:0] _RAND_10;
reg [63:0] _RAND_11;
reg [31:0] _RAND_9;
reg [31:0] _RAND_10;
reg [31:0] _RAND_11;
reg [31:0] _RAND_12;
reg [31:0] _RAND_13;
reg [31:0] _RAND_14;
reg [31:0] _RAND_15;
reg [31:0] _RAND_16;
reg [31:0] _RAND_17;
reg [63:0] _RAND_18;
reg [63:0] _RAND_19;
reg [63:0] _RAND_20;
`endif // RANDOMIZE_REG_INIT
wire [15:0] decompressed_io_din; // @[el2_ifu_aln_ctl.scala 99:28]
wire [31:0] decompressed_io_dout; // @[el2_ifu_aln_ctl.scala 99:28]
reg error_stall; // @[el2_ifu_aln_ctl.scala 89:54]
reg [1:0] f0val; // @[el2_ifu_aln_ctl.scala 90:48]
wire _T = error_stall | io_ifu_async_error_start; // @[el2_ifu_aln_ctl.scala 91:34]
wire _T_1 = ~io_exu_flush_final; // @[el2_ifu_aln_ctl.scala 91:64]
wire error_stall_in = _T & _T_1; // @[el2_ifu_aln_ctl.scala 91:62]
wire _T_3 = ~error_stall; // @[el2_ifu_aln_ctl.scala 93:39]
wire i0_shift = io_dec_i0_decode_d & _T_3; // @[el2_ifu_aln_ctl.scala 93:37]
wire _T_7 = ~f0val[1]; // @[el2_ifu_aln_ctl.scala 97:58]
wire _T_9 = _T_7 & f0val[0]; // @[el2_ifu_aln_ctl.scala 97:68]
reg [1:0] rdptr; // @[el2_ifu_aln_ctl.scala 124:48]
wire _T_252 = rdptr == 2'h0; // @[el2_ifu_aln_ctl.scala 178:32]
reg q1off; // @[el2_ifu_aln_ctl.scala 131:48]
wire _T_255 = _T_252 & q1off; // @[Mux.scala 27:72]
wire _T_253 = rdptr == 2'h1; // @[el2_ifu_aln_ctl.scala 178:57]
reg q2off; // @[el2_ifu_aln_ctl.scala 130:48]
wire _T_256 = _T_253 & q2off; // @[Mux.scala 27:72]
wire _T_258 = _T_255 | _T_256; // @[Mux.scala 27:72]
wire _T_254 = rdptr == 2'h2; // @[el2_ifu_aln_ctl.scala 178:83]
reg q0off; // @[el2_ifu_aln_ctl.scala 132:48]
wire _T_257 = _T_254 & q0off; // @[Mux.scala 27:72]
wire q1ptr = _T_258 | _T_257; // @[Mux.scala 27:72]
wire _T_261 = ~q1ptr; // @[el2_ifu_aln_ctl.scala 182:26]
wire [1:0] q1sel = {q1ptr,_T_261}; // @[Cat.scala 29:58]
wire [2:0] qren = {_T_254,_T_253,_T_252}; // @[Cat.scala 29:58]
wire [15:0] decompressed_io_din; // @[el2_ifu_aln_ctl.scala 350:28]
wire [31:0] decompressed_io_dout; // @[el2_ifu_aln_ctl.scala 350:28]
reg error_stall; // @[el2_ifu_aln_ctl.scala 112:51]
wire _T = error_stall | io_ifu_async_error_start; // @[el2_ifu_aln_ctl.scala 110:34]
wire _T_1 = ~io_exu_flush_final; // @[el2_ifu_aln_ctl.scala 110:64]
wire error_stall_in = _T & _T_1; // @[el2_ifu_aln_ctl.scala 110:62]
reg [1:0] wrptr; // @[el2_ifu_aln_ctl.scala 113:48]
reg [1:0] rdptr; // @[el2_ifu_aln_ctl.scala 114:48]
reg [1:0] f2val; // @[el2_ifu_aln_ctl.scala 116:48]
reg [1:0] f1val; // @[el2_ifu_aln_ctl.scala 117:48]
reg [1:0] f0val; // @[el2_ifu_aln_ctl.scala 118:48]
reg q2off; // @[el2_ifu_aln_ctl.scala 120:48]
reg q1off; // @[el2_ifu_aln_ctl.scala 121:48]
reg q0off; // @[el2_ifu_aln_ctl.scala 122:48]
wire _T_784 = ~error_stall; // @[el2_ifu_aln_ctl.scala 392:39]
wire i0_shift = io_dec_i0_decode_d & _T_784; // @[el2_ifu_aln_ctl.scala 392:37]
wire _T_186 = rdptr == 2'h0; // @[el2_ifu_aln_ctl.scala 172:31]
wire _T_189 = _T_186 & q0off; // @[Mux.scala 27:72]
wire _T_187 = rdptr == 2'h1; // @[el2_ifu_aln_ctl.scala 173:11]
wire _T_190 = _T_187 & q1off; // @[Mux.scala 27:72]
wire _T_192 = _T_189 | _T_190; // @[Mux.scala 27:72]
wire _T_188 = rdptr == 2'h2; // @[el2_ifu_aln_ctl.scala 174:11]
wire _T_191 = _T_188 & q2off; // @[Mux.scala 27:72]
wire q0ptr = _T_192 | _T_191; // @[Mux.scala 27:72]
wire _T_202 = ~q0ptr; // @[el2_ifu_aln_ctl.scala 178:26]
wire [1:0] q0sel = {q0ptr,_T_202}; // @[Cat.scala 29:58]
wire [2:0] qren = {_T_188,_T_187,_T_186}; // @[Cat.scala 29:58]
reg [31:0] q1; // @[Reg.scala 27:20]
reg [31:0] q0; // @[Reg.scala 27:20]
wire [63:0] _T_321 = {q1,q0}; // @[Cat.scala 29:58]
wire [63:0] _T_328 = qren[0] ? _T_321 : 64'h0; // @[Mux.scala 27:72]
wire [63:0] _T_480 = {q1,q0}; // @[Cat.scala 29:58]
wire [63:0] _T_487 = qren[0] ? _T_480 : 64'h0; // @[Mux.scala 27:72]
reg [31:0] q2; // @[Reg.scala 27:20]
wire [63:0] _T_324 = {q2,q1}; // @[Cat.scala 29:58]
wire [63:0] _T_329 = qren[1] ? _T_324 : 64'h0; // @[Mux.scala 27:72]
wire [63:0] _T_331 = _T_328 | _T_329; // @[Mux.scala 27:72]
wire [63:0] _T_327 = {q0,q2}; // @[Cat.scala 29:58]
wire [63:0] _T_330 = qren[2] ? _T_327 : 64'h0; // @[Mux.scala 27:72]
wire [63:0] qeff = _T_331 | _T_330; // @[Mux.scala 27:72]
wire [31:0] q1eff = qeff[63:32]; // @[el2_ifu_aln_ctl.scala 225:29]
wire [15:0] _T_527 = q1sel[0] ? q1eff[15:0] : 16'h0; // @[Mux.scala 27:72]
wire [15:0] _T_528 = q1sel[1] ? q1eff[31:16] : 16'h0; // @[Mux.scala 27:72]
wire [15:0] q1final = _T_527 | _T_528; // @[Mux.scala 27:72]
wire _T_247 = _T_252 & q0off; // @[Mux.scala 27:72]
wire _T_248 = _T_253 & q1off; // @[Mux.scala 27:72]
wire _T_250 = _T_247 | _T_248; // @[Mux.scala 27:72]
wire _T_249 = _T_254 & q2off; // @[Mux.scala 27:72]
wire q0ptr = _T_250 | _T_249; // @[Mux.scala 27:72]
wire _T_260 = ~q0ptr; // @[el2_ifu_aln_ctl.scala 180:26]
wire [1:0] q0sel = {q0ptr,_T_260}; // @[Cat.scala 29:58]
wire [31:0] q0eff = qeff[31:0]; // @[el2_ifu_aln_ctl.scala 225:42]
wire [31:0] _T_517 = q0sel[0] ? q0eff : 32'h0; // @[Mux.scala 27:72]
wire [15:0] _T_518 = q0sel[1] ? q0eff[31:16] : 16'h0; // @[Mux.scala 27:72]
wire [31:0] _GEN_12 = {{16'd0}, _T_518}; // @[Mux.scala 27:72]
wire [31:0] _T_519 = _T_517 | _GEN_12; // @[Mux.scala 27:72]
wire [15:0] q0final = _T_519[15:0]; // @[el2_ifu_aln_ctl.scala 294:11]
wire [31:0] _T_11 = {q1final,q0final}; // @[Cat.scala 29:58]
wire [15:0] _T_12 = f0val[0] ? q0final : 16'h0; // @[Mux.scala 27:72]
wire [31:0] _T_13 = _T_9 ? _T_11 : 32'h0; // @[Mux.scala 27:72]
wire [31:0] _GEN_13 = {{16'd0}, _T_12}; // @[Mux.scala 27:72]
wire [31:0] aligndata = _GEN_13 | _T_13; // @[Mux.scala 27:72]
reg [54:0] _T_768; // @[Reg.scala 27:20]
wire [53:0] misc1 = _T_768[53:0]; // @[el2_ifu_aln_ctl.scala 372:9]
reg [54:0] _T_770; // @[Reg.scala 27:20]
wire [53:0] misc0 = _T_770[53:0]; // @[el2_ifu_aln_ctl.scala 373:9]
wire [107:0] _T_269 = {misc1,misc0}; // @[Cat.scala 29:58]
wire [107:0] _T_276 = qren[0] ? _T_269 : 108'h0; // @[Mux.scala 27:72]
reg [54:0] _T_766; // @[Reg.scala 27:20]
wire [53:0] misc2 = _T_766[53:0]; // @[el2_ifu_aln_ctl.scala 371:9]
wire [107:0] _T_272 = {misc2,misc1}; // @[Cat.scala 29:58]
wire [107:0] _T_277 = qren[1] ? _T_272 : 108'h0; // @[Mux.scala 27:72]
wire [107:0] _T_279 = _T_276 | _T_277; // @[Mux.scala 27:72]
wire [107:0] _T_275 = {misc0,misc2}; // @[Cat.scala 29:58]
wire [107:0] _T_278 = qren[2] ? _T_275 : 108'h0; // @[Mux.scala 27:72]
wire [107:0] misceff = _T_279 | _T_278; // @[Mux.scala 27:72]
wire [52:0] misc1eff = misceff[107:55]; // @[el2_ifu_aln_ctl.scala 191:25]
wire f1icaf = misc1eff[51]; // @[el2_ifu_aln_ctl.scala 195:21]
wire [54:0] misc0eff = misceff[54:0]; // @[el2_ifu_aln_ctl.scala 192:25]
wire f0icaf = misc0eff[53]; // @[el2_ifu_aln_ctl.scala 202:21]
wire [1:0] _T_23 = {f1icaf,f0icaf}; // @[Cat.scala 29:58]
wire _T_24 = f0val[1] & f0icaf; // @[Mux.scala 27:72]
wire [1:0] _T_25 = _T_9 ? _T_23 : 2'h0; // @[Mux.scala 27:72]
wire [1:0] _GEN_14 = {{1'd0}, _T_24}; // @[Mux.scala 27:72]
wire [1:0] alignicaf = _GEN_14 | _T_25; // @[Mux.scala 27:72]
wire [1:0] _T_539 = f0val[1] ? 2'h3 : 2'h0; // @[Mux.scala 27:72]
reg [1:0] f1val; // @[el2_ifu_aln_ctl.scala 127:48]
wire [1:0] _T_538 = {f1val[0],1'h1}; // @[Cat.scala 29:58]
wire [1:0] _T_540 = _T_9 ? _T_538 : 2'h0; // @[Mux.scala 27:72]
wire [1:0] alignval = _T_539 | _T_540; // @[Mux.scala 27:72]
wire f0_shift_2B = i0_shift & f0val[0]; // @[Mux.scala 27:72]
reg [1:0] wrptr; // @[el2_ifu_aln_ctl.scala 123:48]
reg [1:0] f2val; // @[el2_ifu_aln_ctl.scala 126:48]
wire _T_58 = ~f1val[0]; // @[el2_ifu_aln_ctl.scala 134:42]
wire f2_valid = f2val[0]; // @[el2_ifu_aln_ctl.scala 246:20]
wire _T_60 = ~f2_valid; // @[el2_ifu_aln_ctl.scala 134:55]
wire ifvalid = io_ifu_fetch_val[0]; // @[el2_ifu_aln_ctl.scala 256:30]
wire _T_65 = _T_58 & f2_valid; // @[el2_ifu_aln_ctl.scala 135:53]
wire _T_66 = _T_65 & ifvalid; // @[el2_ifu_aln_ctl.scala 135:65]
wire _T_70 = f1val[0] & _T_60; // @[el2_ifu_aln_ctl.scala 136:53]
wire _T_71 = _T_70 & ifvalid; // @[el2_ifu_aln_ctl.scala 136:65]
wire fetch_to_f1 = _T_66 | _T_71; // @[el2_ifu_aln_ctl.scala 135:77]
wire _T_80 = f1val[0] & f2_valid; // @[el2_ifu_aln_ctl.scala 139:53]
wire f2_wr_en = _T_80 & ifvalid; // @[el2_ifu_aln_ctl.scala 139:65]
wire _T_94 = wrptr == 2'h2; // @[el2_ifu_aln_ctl.scala 147:24]
wire _T_95 = _T_94 & ifvalid; // @[el2_ifu_aln_ctl.scala 147:32]
wire _T_96 = wrptr == 2'h1; // @[el2_ifu_aln_ctl.scala 147:49]
wire _T_97 = _T_96 & ifvalid; // @[el2_ifu_aln_ctl.scala 147:57]
wire _T_98 = wrptr == 2'h0; // @[el2_ifu_aln_ctl.scala 147:74]
wire _T_99 = _T_98 & ifvalid; // @[el2_ifu_aln_ctl.scala 147:82]
wire [2:0] qwen = {_T_95,_T_97,_T_99}; // @[Cat.scala 29:58]
wire _T_153 = qwen[0] & _T_1; // @[el2_ifu_aln_ctl.scala 157:34]
wire _T_157 = qwen[1] & _T_1; // @[el2_ifu_aln_ctl.scala 158:34]
wire _T_163 = ~ifvalid; // @[el2_ifu_aln_ctl.scala 160:26]
wire _T_165 = _T_163 & _T_1; // @[el2_ifu_aln_ctl.scala 160:35]
wire [1:0] _T_168 = _T_157 ? 2'h2 : 2'h0; // @[Mux.scala 27:72]
wire [1:0] _T_170 = _T_165 ? wrptr : 2'h0; // @[Mux.scala 27:72]
wire [1:0] _GEN_17 = {{1'd0}, _T_153}; // @[Mux.scala 27:72]
wire [1:0] _T_171 = _GEN_17 | _T_168; // @[Mux.scala 27:72]
wire [1:0] wrptr_in = _T_171 | _T_170; // @[Mux.scala 27:72]
wire _T_176 = ~qwen[2]; // @[el2_ifu_aln_ctl.scala 162:26]
wire _T_178 = _T_176 & _T_254; // @[el2_ifu_aln_ctl.scala 162:35]
wire _T_180 = q2off | f0_shift_2B; // @[el2_ifu_aln_ctl.scala 162:74]
wire _T_184 = _T_176 & _T_253; // @[el2_ifu_aln_ctl.scala 163:35]
wire _T_190 = _T_176 & _T_252; // @[el2_ifu_aln_ctl.scala 164:35]
wire _T_192 = _T_178 & _T_180; // @[Mux.scala 27:72]
wire _T_193 = _T_184 & q2off; // @[Mux.scala 27:72]
wire _T_194 = _T_190 & q2off; // @[Mux.scala 27:72]
wire _T_195 = _T_192 | _T_193; // @[Mux.scala 27:72]
wire q2off_in = _T_195 | _T_194; // @[Mux.scala 27:72]
wire _T_199 = ~qwen[1]; // @[el2_ifu_aln_ctl.scala 166:26]
wire _T_201 = _T_199 & _T_253; // @[el2_ifu_aln_ctl.scala 166:35]
wire _T_203 = q1off | f0_shift_2B; // @[el2_ifu_aln_ctl.scala 166:74]
wire _T_207 = _T_199 & _T_252; // @[el2_ifu_aln_ctl.scala 167:35]
wire _T_213 = _T_199 & _T_254; // @[el2_ifu_aln_ctl.scala 168:35]
wire _T_215 = _T_201 & _T_203; // @[Mux.scala 27:72]
wire _T_216 = _T_207 & q1off; // @[Mux.scala 27:72]
wire _T_217 = _T_213 & q1off; // @[Mux.scala 27:72]
wire _T_218 = _T_215 | _T_216; // @[Mux.scala 27:72]
wire q1off_in = _T_218 | _T_217; // @[Mux.scala 27:72]
wire _T_222 = ~qwen[0]; // @[el2_ifu_aln_ctl.scala 170:26]
wire _T_224 = _T_222 & _T_252; // @[el2_ifu_aln_ctl.scala 170:35]
wire _T_226 = q0off | f0_shift_2B; // @[el2_ifu_aln_ctl.scala 170:76]
wire _T_230 = _T_222 & _T_254; // @[el2_ifu_aln_ctl.scala 171:35]
wire _T_236 = _T_222 & _T_253; // @[el2_ifu_aln_ctl.scala 172:35]
wire _T_238 = _T_224 & _T_226; // @[Mux.scala 27:72]
wire _T_239 = _T_230 & q0off; // @[Mux.scala 27:72]
wire _T_240 = _T_236 & q0off; // @[Mux.scala 27:72]
wire _T_241 = _T_238 | _T_239; // @[Mux.scala 27:72]
wire q0off_in = _T_241 | _T_240; // @[Mux.scala 27:72]
wire [54:0] misc_data_in = {io_iccm_rd_ecc_double_err,io_ic_access_fault_f,io_ic_access_fault_type_f,io_ifu_bp_btb_target_f[31:1],io_ifu_bp_poffset_f,io_ifu_bp_fghr_f}; // @[Cat.scala 29:58]
wire f1dbecc = misc1eff[52]; // @[el2_ifu_aln_ctl.scala 194:25]
wire f0dbecc = misc0eff[54]; // @[el2_ifu_aln_ctl.scala 201:25]
wire [5:0] _T_299 = {io_ifu_bp_hist1_f[0],io_ifu_bp_hist0_f[0],io_ifu_bp_pc4_f[0],io_ifu_bp_way_f[0],io_ifu_bp_valid_f[0],io_ifu_bp_ret_f[0]}; // @[Cat.scala 29:58]
wire [11:0] brdata_in = {io_ifu_bp_hist1_f[1],io_ifu_bp_hist0_f[1],io_ifu_bp_pc4_f[1],io_ifu_bp_way_f[1],io_ifu_bp_valid_f[1],io_ifu_bp_ret_f[1],_T_299}; // @[Cat.scala 29:58]
wire [63:0] _T_483 = {q2,q1}; // @[Cat.scala 29:58]
wire [63:0] _T_488 = qren[1] ? _T_483 : 64'h0; // @[Mux.scala 27:72]
wire [63:0] _T_490 = _T_487 | _T_488; // @[Mux.scala 27:72]
wire [63:0] _T_486 = {q0,q2}; // @[Cat.scala 29:58]
wire [63:0] _T_489 = qren[2] ? _T_486 : 64'h0; // @[Mux.scala 27:72]
wire [63:0] qeff = _T_490 | _T_489; // @[Mux.scala 27:72]
wire [31:0] q0eff = qeff[31:0]; // @[el2_ifu_aln_ctl.scala 294:42]
wire [31:0] _T_497 = q0sel[0] ? q0eff : 32'h0; // @[Mux.scala 27:72]
wire [15:0] _T_498 = q0sel[1] ? q0eff[31:16] : 16'h0; // @[Mux.scala 27:72]
wire [31:0] _GEN_12 = {{16'd0}, _T_498}; // @[Mux.scala 27:72]
wire [31:0] _T_499 = _T_497 | _GEN_12; // @[Mux.scala 27:72]
wire [15:0] q0final = _T_499[15:0]; // @[el2_ifu_aln_ctl.scala 296:11]
wire [15:0] _T_519 = f0val[0] ? q0final : 16'h0; // @[Mux.scala 27:72]
wire _T_514 = ~f0val[1]; // @[el2_ifu_aln_ctl.scala 300:58]
wire _T_516 = _T_514 & f0val[0]; // @[el2_ifu_aln_ctl.scala 300:68]
wire _T_197 = _T_186 & q1off; // @[Mux.scala 27:72]
wire _T_198 = _T_187 & q2off; // @[Mux.scala 27:72]
wire _T_200 = _T_197 | _T_198; // @[Mux.scala 27:72]
wire _T_199 = _T_188 & q0off; // @[Mux.scala 27:72]
wire q1ptr = _T_200 | _T_199; // @[Mux.scala 27:72]
wire _T_203 = ~q1ptr; // @[el2_ifu_aln_ctl.scala 180:26]
wire [1:0] q1sel = {q1ptr,_T_203}; // @[Cat.scala 29:58]
wire [31:0] q1eff = qeff[63:32]; // @[el2_ifu_aln_ctl.scala 294:29]
wire [15:0] _T_507 = q1sel[0] ? q1eff[15:0] : 16'h0; // @[Mux.scala 27:72]
wire [15:0] _T_508 = q1sel[1] ? q1eff[31:16] : 16'h0; // @[Mux.scala 27:72]
wire [15:0] q1final = _T_507 | _T_508; // @[Mux.scala 27:72]
wire [31:0] _T_518 = {q1final,q0final}; // @[Cat.scala 29:58]
wire [31:0] _T_520 = _T_516 ? _T_518 : 32'h0; // @[Mux.scala 27:72]
wire [31:0] _GEN_13 = {{16'd0}, _T_519}; // @[Mux.scala 27:72]
wire [31:0] aligndata = _GEN_13 | _T_520; // @[Mux.scala 27:72]
wire first4B = aligndata[1:0] == 2'h3; // @[el2_ifu_aln_ctl.scala 332:29]
wire first2B = ~first4B; // @[el2_ifu_aln_ctl.scala 334:17]
wire shift_2B = i0_shift & first2B; // @[el2_ifu_aln_ctl.scala 396:24]
wire [1:0] _T_444 = {1'h0,f0val[1]}; // @[Cat.scala 29:58]
wire [1:0] _T_449 = shift_2B ? _T_444 : 2'h0; // @[Mux.scala 27:72]
wire _T_445 = ~shift_2B; // @[el2_ifu_aln_ctl.scala 284:6]
wire shift_4B = i0_shift & first4B; // @[el2_ifu_aln_ctl.scala 397:24]
wire _T_446 = ~shift_4B; // @[el2_ifu_aln_ctl.scala 284:18]
wire _T_447 = _T_445 & _T_446; // @[el2_ifu_aln_ctl.scala 284:16]
wire [1:0] _T_450 = _T_447 ? f1val : 2'h0; // @[Mux.scala 27:72]
wire [1:0] sf0val = _T_449 | _T_450; // @[Mux.scala 27:72]
wire sf0_valid = sf0val[0]; // @[el2_ifu_aln_ctl.scala 237:22]
wire _T_352 = ~sf0_valid; // @[el2_ifu_aln_ctl.scala 256:26]
wire _T_801 = f0val[0] & _T_514; // @[el2_ifu_aln_ctl.scala 400:28]
wire f1_shift_2B = _T_801 & shift_4B; // @[el2_ifu_aln_ctl.scala 400:40]
wire _T_418 = f1_shift_2B & f1val[1]; // @[Mux.scala 27:72]
wire _T_417 = ~f1_shift_2B; // @[el2_ifu_aln_ctl.scala 277:53]
wire [1:0] _T_419 = _T_417 ? f1val : 2'h0; // @[Mux.scala 27:72]
wire [1:0] _GEN_14 = {{1'd0}, _T_418}; // @[Mux.scala 27:72]
wire [1:0] sf1val = _GEN_14 | _T_419; // @[Mux.scala 27:72]
wire sf1_valid = sf1val[0]; // @[el2_ifu_aln_ctl.scala 236:22]
wire _T_353 = _T_352 & sf1_valid; // @[el2_ifu_aln_ctl.scala 256:37]
wire f2_valid = f2val[0]; // @[el2_ifu_aln_ctl.scala 235:20]
wire _T_354 = _T_353 & f2_valid; // @[el2_ifu_aln_ctl.scala 256:50]
wire ifvalid = io_ifu_fetch_val[0]; // @[el2_ifu_aln_ctl.scala 245:30]
wire _T_355 = _T_354 & ifvalid; // @[el2_ifu_aln_ctl.scala 256:62]
wire _T_356 = sf0_valid & sf1_valid; // @[el2_ifu_aln_ctl.scala 257:17]
wire _T_357 = ~f2_valid; // @[el2_ifu_aln_ctl.scala 257:32]
wire _T_358 = _T_356 & _T_357; // @[el2_ifu_aln_ctl.scala 257:30]
wire _T_359 = _T_358 & ifvalid; // @[el2_ifu_aln_ctl.scala 257:42]
wire fetch_to_f2 = _T_355 | _T_359; // @[el2_ifu_aln_ctl.scala 256:74]
reg [30:0] f2pc; // @[Reg.scala 27:20]
wire _T_336 = ~sf1_valid; // @[el2_ifu_aln_ctl.scala 252:39]
wire _T_337 = _T_352 & _T_336; // @[el2_ifu_aln_ctl.scala 252:37]
wire _T_338 = _T_337 & f2_valid; // @[el2_ifu_aln_ctl.scala 252:50]
wire _T_339 = _T_338 & ifvalid; // @[el2_ifu_aln_ctl.scala 252:62]
wire _T_343 = _T_353 & _T_357; // @[el2_ifu_aln_ctl.scala 253:30]
wire _T_344 = _T_343 & ifvalid; // @[el2_ifu_aln_ctl.scala 253:42]
wire _T_345 = _T_339 | _T_344; // @[el2_ifu_aln_ctl.scala 252:74]
wire _T_347 = sf0_valid & _T_336; // @[el2_ifu_aln_ctl.scala 254:17]
wire _T_349 = _T_347 & _T_357; // @[el2_ifu_aln_ctl.scala 254:30]
wire _T_350 = _T_349 & ifvalid; // @[el2_ifu_aln_ctl.scala 254:42]
wire fetch_to_f1 = _T_345 | _T_350; // @[el2_ifu_aln_ctl.scala 253:54]
wire _T_25 = fetch_to_f1 | _T_354; // @[el2_ifu_aln_ctl.scala 141:33]
wire f1_shift_wr_en = _T_25 | f1_shift_2B; // @[el2_ifu_aln_ctl.scala 141:47]
reg [30:0] f1pc; // @[Reg.scala 27:20]
wire [30:0] _T_376 = fetch_to_f1 ? io_ifu_fetch_pc : 31'h0; // @[Mux.scala 27:72]
wire [30:0] _T_377 = _T_354 ? f2pc : 31'h0; // @[Mux.scala 27:72]
wire [30:0] _T_379 = _T_376 | _T_377; // @[Mux.scala 27:72]
wire _T_372 = ~fetch_to_f1; // @[el2_ifu_aln_ctl.scala 267:6]
wire _T_373 = ~_T_354; // @[el2_ifu_aln_ctl.scala 267:21]
wire _T_374 = _T_372 & _T_373; // @[el2_ifu_aln_ctl.scala 267:19]
wire [30:0] _T_364 = f1_shift_2B ? 31'h7fffffff : 31'h0; // @[Bitwise.scala 72:12]
reg [30:0] f0pc; // @[Reg.scala 27:20]
wire [30:0] f0pc_plus1 = f0pc + 31'h1; // @[el2_ifu_aln_ctl.scala 259:25]
wire [30:0] _T_365 = _T_364 & f0pc_plus1; // @[el2_ifu_aln_ctl.scala 263:38]
wire [30:0] _T_368 = _T_417 ? 31'h7fffffff : 31'h0; // @[Bitwise.scala 72:12]
wire [30:0] _T_369 = _T_368 & f0pc; // @[el2_ifu_aln_ctl.scala 263:78]
wire [30:0] sf1pc = _T_365 | _T_369; // @[el2_ifu_aln_ctl.scala 263:52]
wire [30:0] _T_378 = _T_374 ? sf1pc : 31'h0; // @[Mux.scala 27:72]
wire [30:0] f1pc_in = _T_379 | _T_378; // @[Mux.scala 27:72]
wire _T_333 = _T_337 & _T_357; // @[el2_ifu_aln_ctl.scala 251:50]
wire fetch_to_f0 = _T_333 & ifvalid; // @[el2_ifu_aln_ctl.scala 251:62]
wire _T_27 = fetch_to_f0 | _T_338; // @[el2_ifu_aln_ctl.scala 142:33]
wire _T_28 = _T_27 | _T_353; // @[el2_ifu_aln_ctl.scala 142:47]
wire _T_29 = _T_28 | shift_2B; // @[el2_ifu_aln_ctl.scala 142:61]
wire f0_shift_wr_en = _T_29 | shift_4B; // @[el2_ifu_aln_ctl.scala 142:72]
wire [30:0] _T_391 = fetch_to_f0 ? io_ifu_fetch_pc : 31'h0; // @[Mux.scala 27:72]
wire [30:0] _T_392 = _T_338 ? f2pc : 31'h0; // @[Mux.scala 27:72]
wire [30:0] _T_395 = _T_391 | _T_392; // @[Mux.scala 27:72]
wire [30:0] _T_393 = _T_353 ? sf1pc : 31'h0; // @[Mux.scala 27:72]
wire [30:0] _T_396 = _T_395 | _T_393; // @[Mux.scala 27:72]
wire _T_385 = ~fetch_to_f0; // @[el2_ifu_aln_ctl.scala 272:24]
wire _T_386 = ~_T_338; // @[el2_ifu_aln_ctl.scala 272:39]
wire _T_387 = _T_385 & _T_386; // @[el2_ifu_aln_ctl.scala 272:37]
wire _T_388 = ~_T_353; // @[el2_ifu_aln_ctl.scala 272:54]
wire _T_389 = _T_387 & _T_388; // @[el2_ifu_aln_ctl.scala 272:52]
wire [30:0] _T_394 = _T_389 ? f0pc_plus1 : 31'h0; // @[Mux.scala 27:72]
wire [30:0] f0pc_in = _T_396 | _T_394; // @[Mux.scala 27:72]
wire _T_35 = wrptr == 2'h2; // @[el2_ifu_aln_ctl.scala 145:21]
wire _T_36 = _T_35 & ifvalid; // @[el2_ifu_aln_ctl.scala 145:29]
wire _T_37 = wrptr == 2'h1; // @[el2_ifu_aln_ctl.scala 145:46]
wire _T_38 = _T_37 & ifvalid; // @[el2_ifu_aln_ctl.scala 145:54]
wire _T_39 = wrptr == 2'h0; // @[el2_ifu_aln_ctl.scala 145:71]
wire _T_40 = _T_39 & ifvalid; // @[el2_ifu_aln_ctl.scala 145:79]
wire [2:0] qwen = {_T_36,_T_38,_T_40}; // @[Cat.scala 29:58]
reg [11:0] brdata2; // @[Reg.scala 27:20]
wire [5:0] _T_242 = {io_ifu_bp_hist1_f[0],io_ifu_bp_hist0_f[0],io_ifu_bp_pc4_f[0],io_ifu_bp_way_f[0],io_ifu_bp_valid_f[0],io_ifu_bp_ret_f[0]}; // @[Cat.scala 29:58]
wire [11:0] brdata_in = {io_ifu_bp_hist1_f[1],io_ifu_bp_hist0_f[1],io_ifu_bp_pc4_f[1],io_ifu_bp_way_f[1],io_ifu_bp_valid_f[1],io_ifu_bp_ret_f[1],_T_242}; // @[Cat.scala 29:58]
reg [11:0] brdata1; // @[Reg.scala 27:20]
reg [11:0] brdata0; // @[Reg.scala 27:20]
wire [23:0] _T_307 = {brdata1,brdata0}; // @[Cat.scala 29:58]
reg [11:0] brdata2; // @[Reg.scala 27:20]
wire [23:0] _T_310 = {brdata2,brdata1}; // @[Cat.scala 29:58]
wire [23:0] _T_313 = {brdata0,brdata2}; // @[Cat.scala 29:58]
wire [23:0] _T_314 = qren[0] ? _T_307 : 24'h0; // @[Mux.scala 27:72]
wire [23:0] _T_315 = qren[1] ? _T_310 : 24'h0; // @[Mux.scala 27:72]
wire [23:0] _T_316 = qren[2] ? _T_313 : 24'h0; // @[Mux.scala 27:72]
wire [23:0] _T_317 = _T_314 | _T_315; // @[Mux.scala 27:72]
wire [23:0] brdataeff = _T_317 | _T_316; // @[Mux.scala 27:72]
wire [11:0] brdata0eff = brdataeff[11:0]; // @[el2_ifu_aln_ctl.scala 216:43]
wire [11:0] brdata1eff = brdataeff[23:12]; // @[el2_ifu_aln_ctl.scala 216:61]
wire [11:0] _T_338 = q0sel[0] ? brdata0eff : 12'h0; // @[Mux.scala 27:72]
wire [5:0] _T_339 = q0sel[1] ? brdata0eff[11:6] : 6'h0; // @[Mux.scala 27:72]
wire [11:0] _GEN_18 = {{6'd0}, _T_339}; // @[Mux.scala 27:72]
wire [11:0] brdata0final = _T_338 | _GEN_18; // @[Mux.scala 27:72]
wire [11:0] _T_346 = q1sel[0] ? brdata1eff : 12'h0; // @[Mux.scala 27:72]
wire [5:0] _T_347 = q1sel[1] ? brdata1eff[11:6] : 6'h0; // @[Mux.scala 27:72]
wire [11:0] _GEN_19 = {{6'd0}, _T_347}; // @[Mux.scala 27:72]
wire [11:0] brdata1final = _T_346 | _GEN_19; // @[Mux.scala 27:72]
reg [54:0] _T_14; // @[Reg.scala 27:20]
wire [54:0] misc_data_in = {io_iccm_rd_ecc_double_err,io_ic_access_fault_f,io_ic_access_fault_type_f,io_ifu_bp_btb_target_f[31:1],io_ifu_bp_poffset_f,io_ifu_bp_fghr_f}; // @[Cat.scala 29:58]
reg [54:0] _T_16; // @[Reg.scala 27:20]
reg [54:0] _T_18; // @[Reg.scala 27:20]
wire _T_44 = qren[0] & io_ifu_fb_consume1; // @[el2_ifu_aln_ctl.scala 147:34]
wire _T_46 = _T_44 & _T_1; // @[el2_ifu_aln_ctl.scala 147:55]
wire _T_49 = qren[1] & io_ifu_fb_consume1; // @[el2_ifu_aln_ctl.scala 148:14]
wire _T_51 = _T_49 & _T_1; // @[el2_ifu_aln_ctl.scala 148:35]
wire _T_59 = qren[0] & io_ifu_fb_consume2; // @[el2_ifu_aln_ctl.scala 150:14]
wire _T_61 = _T_59 & _T_1; // @[el2_ifu_aln_ctl.scala 150:35]
wire _T_69 = qren[2] & io_ifu_fb_consume2; // @[el2_ifu_aln_ctl.scala 152:14]
wire _T_71 = _T_69 & _T_1; // @[el2_ifu_aln_ctl.scala 152:35]
wire _T_73 = ~io_ifu_fb_consume1; // @[el2_ifu_aln_ctl.scala 153:6]
wire _T_74 = ~io_ifu_fb_consume2; // @[el2_ifu_aln_ctl.scala 153:28]
wire _T_75 = _T_73 & _T_74; // @[el2_ifu_aln_ctl.scala 153:26]
wire _T_77 = _T_75 & _T_1; // @[el2_ifu_aln_ctl.scala 153:48]
wire [1:0] _T_80 = _T_51 ? 2'h2 : 2'h0; // @[Mux.scala 27:72]
wire [1:0] _T_82 = _T_61 ? 2'h2 : 2'h0; // @[Mux.scala 27:72]
wire [1:0] _T_85 = _T_77 ? rdptr : 2'h0; // @[Mux.scala 27:72]
wire [1:0] _GEN_15 = {{1'd0}, _T_46}; // @[Mux.scala 27:72]
wire [1:0] _T_86 = _GEN_15 | _T_80; // @[Mux.scala 27:72]
wire [1:0] _T_88 = _T_86 | _T_82; // @[Mux.scala 27:72]
wire [1:0] _GEN_16 = {{1'd0}, _T_71}; // @[Mux.scala 27:72]
wire [1:0] _T_90 = _T_88 | _GEN_16; // @[Mux.scala 27:72]
wire [1:0] rdptr_in = _T_90 | _T_85; // @[Mux.scala 27:72]
wire _T_95 = qwen[0] & _T_1; // @[el2_ifu_aln_ctl.scala 155:34]
wire _T_99 = qwen[1] & _T_1; // @[el2_ifu_aln_ctl.scala 156:14]
wire _T_105 = ~ifvalid; // @[el2_ifu_aln_ctl.scala 158:6]
wire _T_107 = _T_105 & _T_1; // @[el2_ifu_aln_ctl.scala 158:15]
wire [1:0] _T_110 = _T_99 ? 2'h2 : 2'h0; // @[Mux.scala 27:72]
wire [1:0] _T_112 = _T_107 ? wrptr : 2'h0; // @[Mux.scala 27:72]
wire [1:0] _GEN_17 = {{1'd0}, _T_95}; // @[Mux.scala 27:72]
wire [1:0] _T_113 = _GEN_17 | _T_110; // @[Mux.scala 27:72]
wire [1:0] wrptr_in = _T_113 | _T_112; // @[Mux.scala 27:72]
wire _T_118 = ~qwen[2]; // @[el2_ifu_aln_ctl.scala 160:26]
wire _T_120 = _T_118 & _T_188; // @[el2_ifu_aln_ctl.scala 160:35]
wire _T_794 = shift_2B & f0val[0]; // @[Mux.scala 27:72]
wire _T_791 = ~f0val[0]; // @[el2_ifu_aln_ctl.scala 399:77]
wire _T_793 = _T_791 & f0val[0]; // @[el2_ifu_aln_ctl.scala 399:87]
wire _T_795 = shift_4B & _T_793; // @[Mux.scala 27:72]
wire f0_shift_2B = _T_794 | _T_795; // @[Mux.scala 27:72]
wire _T_122 = q2off | f0_shift_2B; // @[el2_ifu_aln_ctl.scala 160:74]
wire _T_126 = _T_118 & _T_187; // @[el2_ifu_aln_ctl.scala 161:15]
wire _T_128 = q2off | f1_shift_2B; // @[el2_ifu_aln_ctl.scala 161:54]
wire _T_132 = _T_118 & _T_186; // @[el2_ifu_aln_ctl.scala 162:15]
wire _T_134 = _T_120 & _T_122; // @[Mux.scala 27:72]
wire _T_135 = _T_126 & _T_128; // @[Mux.scala 27:72]
wire _T_136 = _T_132 & q2off; // @[Mux.scala 27:72]
wire _T_137 = _T_134 | _T_135; // @[Mux.scala 27:72]
wire q2off_in = _T_137 | _T_136; // @[Mux.scala 27:72]
wire _T_141 = ~qwen[1]; // @[el2_ifu_aln_ctl.scala 164:26]
wire _T_143 = _T_141 & _T_187; // @[el2_ifu_aln_ctl.scala 164:35]
wire _T_145 = q1off | f0_shift_2B; // @[el2_ifu_aln_ctl.scala 164:74]
wire _T_149 = _T_141 & _T_186; // @[el2_ifu_aln_ctl.scala 165:15]
wire _T_151 = q1off | f1_shift_2B; // @[el2_ifu_aln_ctl.scala 165:54]
wire _T_155 = _T_141 & _T_188; // @[el2_ifu_aln_ctl.scala 166:15]
wire _T_157 = _T_143 & _T_145; // @[Mux.scala 27:72]
wire _T_158 = _T_149 & _T_151; // @[Mux.scala 27:72]
wire _T_159 = _T_155 & q1off; // @[Mux.scala 27:72]
wire _T_160 = _T_157 | _T_158; // @[Mux.scala 27:72]
wire q1off_in = _T_160 | _T_159; // @[Mux.scala 27:72]
wire _T_164 = ~qwen[0]; // @[el2_ifu_aln_ctl.scala 168:26]
wire _T_166 = _T_164 & _T_186; // @[el2_ifu_aln_ctl.scala 168:35]
wire _T_168 = q0off | f0_shift_2B; // @[el2_ifu_aln_ctl.scala 168:76]
wire _T_172 = _T_164 & _T_188; // @[el2_ifu_aln_ctl.scala 169:15]
wire _T_174 = q0off | f1_shift_2B; // @[el2_ifu_aln_ctl.scala 169:56]
wire _T_178 = _T_164 & _T_187; // @[el2_ifu_aln_ctl.scala 170:15]
wire _T_180 = _T_166 & _T_168; // @[Mux.scala 27:72]
wire _T_181 = _T_172 & _T_174; // @[Mux.scala 27:72]
wire _T_182 = _T_178 & q0off; // @[Mux.scala 27:72]
wire _T_183 = _T_180 | _T_181; // @[Mux.scala 27:72]
wire q0off_in = _T_183 | _T_182; // @[Mux.scala 27:72]
wire [53:0] misc1 = _T_16[53:0]; // @[el2_ifu_aln_ctl.scala 133:9]
wire [53:0] misc0 = _T_18[53:0]; // @[el2_ifu_aln_ctl.scala 134:9]
wire [107:0] _T_212 = {misc1,misc0}; // @[Cat.scala 29:58]
wire [53:0] misc2 = _T_14[53:0]; // @[el2_ifu_aln_ctl.scala 132:9]
wire [107:0] _T_215 = {misc2,misc1}; // @[Cat.scala 29:58]
wire [107:0] _T_218 = {misc0,misc2}; // @[Cat.scala 29:58]
wire [107:0] _T_219 = qren[0] ? _T_212 : 108'h0; // @[Mux.scala 27:72]
wire [107:0] _T_220 = qren[1] ? _T_215 : 108'h0; // @[Mux.scala 27:72]
wire [107:0] _T_221 = qren[2] ? _T_218 : 108'h0; // @[Mux.scala 27:72]
wire [107:0] _T_222 = _T_219 | _T_220; // @[Mux.scala 27:72]
wire [107:0] misceff = _T_222 | _T_221; // @[Mux.scala 27:72]
wire [52:0] misc1eff = misceff[107:55]; // @[el2_ifu_aln_ctl.scala 189:25]
wire [54:0] misc0eff = misceff[54:0]; // @[el2_ifu_aln_ctl.scala 190:25]
wire f1dbecc = misc1eff[52]; // @[el2_ifu_aln_ctl.scala 193:25]
wire f1icaf = misc1eff[51]; // @[el2_ifu_aln_ctl.scala 194:21]
wire [1:0] f1ictype = misc1eff[50:49]; // @[el2_ifu_aln_ctl.scala 195:26]
wire [30:0] f1prett = misc1eff[48:18]; // @[el2_ifu_aln_ctl.scala 196:25]
wire [11:0] f1poffset = misc1eff[19:8]; // @[el2_ifu_aln_ctl.scala 197:27]
wire [7:0] f1fghr = misc1eff[7:0]; // @[el2_ifu_aln_ctl.scala 198:24]
wire f0dbecc = misc0eff[54]; // @[el2_ifu_aln_ctl.scala 200:25]
wire f0icaf = misc0eff[53]; // @[el2_ifu_aln_ctl.scala 201:21]
wire [1:0] f0ictype = misc0eff[52:51]; // @[el2_ifu_aln_ctl.scala 202:26]
wire [30:0] f0prett = misc0eff[50:20]; // @[el2_ifu_aln_ctl.scala 203:25]
wire [11:0] f0poffset = misc0eff[19:8]; // @[el2_ifu_aln_ctl.scala 204:27]
wire [7:0] f0fghr = misc0eff[7:0]; // @[el2_ifu_aln_ctl.scala 205:24]
wire [23:0] _T_251 = {brdata1,brdata0}; // @[Cat.scala 29:58]
wire [23:0] _T_254 = {brdata2,brdata1}; // @[Cat.scala 29:58]
wire [23:0] _T_257 = {brdata0,brdata2}; // @[Cat.scala 29:58]
wire [23:0] _T_258 = qren[0] ? _T_251 : 24'h0; // @[Mux.scala 27:72]
wire [23:0] _T_259 = qren[1] ? _T_254 : 24'h0; // @[Mux.scala 27:72]
wire [23:0] _T_260 = qren[2] ? _T_257 : 24'h0; // @[Mux.scala 27:72]
wire [23:0] _T_261 = _T_258 | _T_259; // @[Mux.scala 27:72]
wire [23:0] brdataeff = _T_261 | _T_260; // @[Mux.scala 27:72]
wire [11:0] brdata0eff = brdataeff[11:0]; // @[el2_ifu_aln_ctl.scala 215:43]
wire [11:0] brdata1eff = brdataeff[23:12]; // @[el2_ifu_aln_ctl.scala 215:61]
wire [11:0] _T_268 = q0sel[0] ? brdata0eff : 12'h0; // @[Mux.scala 27:72]
wire [5:0] _T_269 = q0sel[1] ? brdata0eff[11:6] : 6'h0; // @[Mux.scala 27:72]
wire [11:0] _GEN_18 = {{6'd0}, _T_269}; // @[Mux.scala 27:72]
wire [11:0] brdata0final = _T_268 | _GEN_18; // @[Mux.scala 27:72]
wire [11:0] _T_276 = q1sel[0] ? brdata1eff : 12'h0; // @[Mux.scala 27:72]
wire [5:0] _T_277 = q1sel[1] ? brdata1eff[11:6] : 6'h0; // @[Mux.scala 27:72]
wire [11:0] _GEN_19 = {{6'd0}, _T_277}; // @[Mux.scala 27:72]
wire [11:0] brdata1final = _T_276 | _GEN_19; // @[Mux.scala 27:72]
wire [1:0] f0ret = {brdata0final[6],brdata0final[0]}; // @[Cat.scala 29:58]
wire [1:0] f0brend = {brdata0final[7],brdata0final[1]}; // @[Cat.scala 29:58]
wire [1:0] f0way = {brdata0final[8],brdata0final[2]}; // @[Cat.scala 29:58]
@ -760,95 +858,158 @@ module el2_ifu_aln_ctl(
wire [1:0] f1pc4 = {brdata1final[9],brdata1final[3]}; // @[Cat.scala 29:58]
wire [1:0] f1hist0 = {brdata1final[10],brdata1final[4]}; // @[Cat.scala 29:58]
wire [1:0] f1hist1 = {brdata1final[11],brdata1final[5]}; // @[Cat.scala 29:58]
wire consume_fb1 = _T_58 & f1val[0]; // @[el2_ifu_aln_ctl.scala 251:32]
wire _T_382 = ~consume_fb1; // @[el2_ifu_aln_ctl.scala 253:39]
wire _T_383 = f0val[0] & _T_382; // @[el2_ifu_aln_ctl.scala 253:37]
wire _T_386 = f0val[0] & consume_fb1; // @[el2_ifu_aln_ctl.scala 254:37]
wire _T_409 = ~fetch_to_f1; // @[el2_ifu_aln_ctl.scala 271:28]
wire _T_410 = ~_T_80; // @[el2_ifu_aln_ctl.scala 271:43]
wire _T_411 = _T_409 & _T_410; // @[el2_ifu_aln_ctl.scala 271:41]
wire _T_422 = ~_T_65; // @[el2_ifu_aln_ctl.scala 276:43]
wire _T_435 = f2_wr_en & _T_1; // @[el2_ifu_aln_ctl.scala 278:38]
wire _T_437 = ~f2_wr_en; // @[el2_ifu_aln_ctl.scala 279:6]
wire _T_439 = _T_437 & _T_410; // @[el2_ifu_aln_ctl.scala 279:19]
wire _T_441 = _T_439 & _T_422; // @[el2_ifu_aln_ctl.scala 279:34]
wire _T_443 = _T_441 & _T_1; // @[el2_ifu_aln_ctl.scala 279:49]
wire [1:0] _T_445 = _T_435 ? io_ifu_fetch_val : 2'h0; // @[Mux.scala 27:72]
wire [1:0] _T_446 = _T_443 ? f2val : 2'h0; // @[Mux.scala 27:72]
wire [1:0] f2val_in = _T_445 | _T_446; // @[Mux.scala 27:72]
wire _T_458 = fetch_to_f1 & _T_1; // @[el2_ifu_aln_ctl.scala 283:38]
wire _T_461 = _T_80 & _T_1; // @[el2_ifu_aln_ctl.scala 284:38]
wire _T_467 = _T_411 & _T_58; // @[el2_ifu_aln_ctl.scala 285:54]
wire _T_469 = _T_467 & _T_1; // @[el2_ifu_aln_ctl.scala 285:69]
wire [1:0] _T_471 = _T_458 ? io_ifu_fetch_val : 2'h0; // @[Mux.scala 27:72]
wire [1:0] _T_472 = _T_461 ? f2val : 2'h0; // @[Mux.scala 27:72]
wire [1:0] _T_473 = _T_469 ? f1val : 2'h0; // @[Mux.scala 27:72]
wire [1:0] _T_474 = _T_471 | _T_472; // @[Mux.scala 27:72]
wire [1:0] f1val_in = _T_474 | _T_473; // @[Mux.scala 27:72]
wire _T_479 = ~i0_shift; // @[el2_ifu_aln_ctl.scala 287:52]
wire _T_483 = i0_shift & f0val[1]; // @[Mux.scala 27:72]
wire [1:0] _T_484 = _T_479 ? f0val : 2'h0; // @[Mux.scala 27:72]
wire [1:0] _GEN_23 = {{1'd0}, _T_483}; // @[Mux.scala 27:72]
wire [1:0] _T_485 = _GEN_23 | _T_484; // @[Mux.scala 27:72]
wire [1:0] _T_546 = f0dbecc ? 2'h3 : 2'h0; // @[Bitwise.scala 72:12]
wire [1:0] _T_552 = {f1dbecc,f0dbecc}; // @[Cat.scala 29:58]
wire [1:0] _T_553 = f0val[1] ? _T_546 : 2'h0; // @[Mux.scala 27:72]
wire [1:0] _T_554 = _T_9 ? _T_552 : 2'h0; // @[Mux.scala 27:72]
wire [1:0] aligndbecc = _T_553 | _T_554; // @[Mux.scala 27:72]
wire [1:0] _T_565 = {f1brend[0],f0brend[0]}; // @[Cat.scala 29:58]
wire [1:0] _T_566 = f0val[1] ? f0brend : 2'h0; // @[Mux.scala 27:72]
wire [1:0] _T_567 = _T_9 ? _T_565 : 2'h0; // @[Mux.scala 27:72]
wire [1:0] alignbrend = _T_566 | _T_567; // @[Mux.scala 27:72]
wire [1:0] _T_578 = {f1pc4[0],f0pc4[0]}; // @[Cat.scala 29:58]
wire [1:0] _T_579 = f0val[1] ? f0pc4 : 2'h0; // @[Mux.scala 27:72]
wire [1:0] _T_580 = _T_9 ? _T_578 : 2'h0; // @[Mux.scala 27:72]
wire [1:0] alignpc4 = _T_579 | _T_580; // @[Mux.scala 27:72]
wire [1:0] _T_591 = {f1ret[0],f0ret[0]}; // @[Cat.scala 29:58]
wire [1:0] _T_592 = f0val[1] ? f0ret : 2'h0; // @[Mux.scala 27:72]
wire [1:0] _T_593 = _T_9 ? _T_591 : 2'h0; // @[Mux.scala 27:72]
wire [1:0] alignret = _T_592 | _T_593; // @[Mux.scala 27:72]
wire [1:0] _T_604 = {f1way[0],f0way[0]}; // @[Cat.scala 29:58]
wire [1:0] _T_605 = f0val[1] ? f0way : 2'h0; // @[Mux.scala 27:72]
wire [1:0] _T_606 = _T_9 ? _T_604 : 2'h0; // @[Mux.scala 27:72]
wire [1:0] alignway = _T_605 | _T_606; // @[Mux.scala 27:72]
wire [1:0] _T_617 = {f1hist1[0],f0hist1[0]}; // @[Cat.scala 29:58]
wire [1:0] _T_618 = f0val[1] ? f0hist1 : 2'h0; // @[Mux.scala 27:72]
wire [1:0] _T_619 = _T_9 ? _T_617 : 2'h0; // @[Mux.scala 27:72]
wire [1:0] alignhist1 = _T_618 | _T_619; // @[Mux.scala 27:72]
wire [1:0] _T_630 = {f1hist0[0],f0hist0[0]}; // @[Cat.scala 29:58]
wire [1:0] _T_631 = f0val[1] ? f0hist0 : 2'h0; // @[Mux.scala 27:72]
wire [1:0] _T_632 = _T_9 ? _T_630 : 2'h0; // @[Mux.scala 27:72]
wire [1:0] alignhist0 = _T_631 | _T_632; // @[Mux.scala 27:72]
wire i0_brp_pc4 = alignpc4[0]; // @[el2_ifu_aln_ctl.scala 356:39]
el2_ifu_compress_ctl decompressed ( // @[el2_ifu_aln_ctl.scala 99:28]
wire consume_fb0 = _T_352 & f0val[0]; // @[el2_ifu_aln_ctl.scala 239:32]
wire consume_fb1 = _T_336 & f1val[0]; // @[el2_ifu_aln_ctl.scala 240:32]
wire _T_312 = ~consume_fb1; // @[el2_ifu_aln_ctl.scala 242:39]
wire _T_313 = consume_fb0 & _T_312; // @[el2_ifu_aln_ctl.scala 242:37]
wire _T_316 = consume_fb0 & consume_fb1; // @[el2_ifu_aln_ctl.scala 243:37]
wire _T_400 = fetch_to_f2 & _T_1; // @[el2_ifu_aln_ctl.scala 274:38]
wire _T_402 = ~fetch_to_f2; // @[el2_ifu_aln_ctl.scala 275:6]
wire _T_404 = _T_402 & _T_373; // @[el2_ifu_aln_ctl.scala 275:19]
wire _T_406 = _T_404 & _T_386; // @[el2_ifu_aln_ctl.scala 275:34]
wire _T_408 = _T_406 & _T_1; // @[el2_ifu_aln_ctl.scala 275:49]
wire [1:0] _T_410 = _T_400 ? io_ifu_fetch_val : 2'h0; // @[Mux.scala 27:72]
wire [1:0] _T_411 = _T_408 ? f2val : 2'h0; // @[Mux.scala 27:72]
wire [1:0] f2val_in = _T_410 | _T_411; // @[Mux.scala 27:72]
wire _T_423 = fetch_to_f1 & _T_1; // @[el2_ifu_aln_ctl.scala 279:38]
wire _T_426 = _T_354 & _T_1; // @[el2_ifu_aln_ctl.scala 280:18]
wire _T_432 = _T_374 & _T_388; // @[el2_ifu_aln_ctl.scala 281:34]
wire _T_434 = _T_432 & _T_1; // @[el2_ifu_aln_ctl.scala 281:49]
wire [1:0] _T_436 = _T_423 ? io_ifu_fetch_val : 2'h0; // @[Mux.scala 27:72]
wire [1:0] _T_437 = _T_426 ? f2val : 2'h0; // @[Mux.scala 27:72]
wire [1:0] _T_438 = _T_434 ? sf1val : 2'h0; // @[Mux.scala 27:72]
wire [1:0] _T_439 = _T_436 | _T_437; // @[Mux.scala 27:72]
wire [1:0] f1val_in = _T_439 | _T_438; // @[Mux.scala 27:72]
wire _T_454 = fetch_to_f0 & _T_1; // @[el2_ifu_aln_ctl.scala 286:38]
wire _T_457 = _T_338 & _T_1; // @[el2_ifu_aln_ctl.scala 287:18]
wire _T_460 = _T_353 & _T_1; // @[el2_ifu_aln_ctl.scala 288:18]
wire _T_468 = _T_389 & _T_1; // @[el2_ifu_aln_ctl.scala 289:49]
wire [1:0] _T_470 = _T_454 ? io_ifu_fetch_val : 2'h0; // @[Mux.scala 27:72]
wire [1:0] _T_471 = _T_457 ? f2val : 2'h0; // @[Mux.scala 27:72]
wire [1:0] _T_472 = _T_460 ? sf1val : 2'h0; // @[Mux.scala 27:72]
wire [1:0] _T_473 = _T_468 ? sf0val : 2'h0; // @[Mux.scala 27:72]
wire [1:0] _T_474 = _T_470 | _T_471; // @[Mux.scala 27:72]
wire [1:0] _T_475 = _T_474 | _T_472; // @[Mux.scala 27:72]
wire [1:0] f0val_in = _T_475 | _T_473; // @[Mux.scala 27:72]
wire [1:0] _T_529 = {f1val[0],1'h1}; // @[Cat.scala 29:58]
wire [1:0] _T_530 = f0val[1] ? 2'h3 : 2'h0; // @[Mux.scala 27:72]
wire [1:0] _T_531 = _T_516 ? _T_529 : 2'h0; // @[Mux.scala 27:72]
wire [1:0] alignval = _T_530 | _T_531; // @[Mux.scala 27:72]
wire [1:0] _T_541 = {f1icaf,f0icaf}; // @[Cat.scala 29:58]
wire _T_542 = f0val[1] & f0icaf; // @[Mux.scala 27:72]
wire [1:0] _T_543 = _T_516 ? _T_541 : 2'h0; // @[Mux.scala 27:72]
wire [1:0] _GEN_20 = {{1'd0}, _T_542}; // @[Mux.scala 27:72]
wire [1:0] alignicaf = _GEN_20 | _T_543; // @[Mux.scala 27:72]
wire [1:0] _T_548 = f0dbecc ? 2'h3 : 2'h0; // @[Bitwise.scala 72:12]
wire [1:0] _T_554 = {f1dbecc,f0dbecc}; // @[Cat.scala 29:58]
wire [1:0] _T_555 = f0val[1] ? _T_548 : 2'h0; // @[Mux.scala 27:72]
wire [1:0] _T_556 = _T_516 ? _T_554 : 2'h0; // @[Mux.scala 27:72]
wire [1:0] aligndbecc = _T_555 | _T_556; // @[Mux.scala 27:72]
wire [1:0] _T_567 = {f1brend[0],f0brend[0]}; // @[Cat.scala 29:58]
wire [1:0] _T_568 = f0val[1] ? f0brend : 2'h0; // @[Mux.scala 27:72]
wire [1:0] _T_569 = _T_516 ? _T_567 : 2'h0; // @[Mux.scala 27:72]
wire [1:0] alignbrend = _T_568 | _T_569; // @[Mux.scala 27:72]
wire [1:0] _T_580 = {f1pc4[0],f0pc4[0]}; // @[Cat.scala 29:58]
wire [1:0] _T_581 = f0val[1] ? f0pc4 : 2'h0; // @[Mux.scala 27:72]
wire [1:0] _T_582 = _T_516 ? _T_580 : 2'h0; // @[Mux.scala 27:72]
wire [1:0] alignpc4 = _T_581 | _T_582; // @[Mux.scala 27:72]
wire [1:0] _T_593 = {f1ret[0],f0ret[0]}; // @[Cat.scala 29:58]
wire [1:0] _T_594 = f0val[1] ? f0ret : 2'h0; // @[Mux.scala 27:72]
wire [1:0] _T_595 = _T_516 ? _T_593 : 2'h0; // @[Mux.scala 27:72]
wire [1:0] alignret = _T_594 | _T_595; // @[Mux.scala 27:72]
wire [1:0] _T_606 = {f1way[0],f0way[0]}; // @[Cat.scala 29:58]
wire [1:0] _T_607 = f0val[1] ? f0way : 2'h0; // @[Mux.scala 27:72]
wire [1:0] _T_608 = _T_516 ? _T_606 : 2'h0; // @[Mux.scala 27:72]
wire [1:0] alignway = _T_607 | _T_608; // @[Mux.scala 27:72]
wire [1:0] _T_619 = {f1hist1[0],f0hist1[0]}; // @[Cat.scala 29:58]
wire [1:0] _T_620 = f0val[1] ? f0hist1 : 2'h0; // @[Mux.scala 27:72]
wire [1:0] _T_621 = _T_516 ? _T_619 : 2'h0; // @[Mux.scala 27:72]
wire [1:0] alignhist1 = _T_620 | _T_621; // @[Mux.scala 27:72]
wire [1:0] _T_632 = {f1hist0[0],f0hist0[0]}; // @[Cat.scala 29:58]
wire [1:0] _T_633 = f0val[1] ? f0hist0 : 2'h0; // @[Mux.scala 27:72]
wire [1:0] _T_634 = _T_516 ? _T_632 : 2'h0; // @[Mux.scala 27:72]
wire [1:0] alignhist0 = _T_633 | _T_634; // @[Mux.scala 27:72]
wire [30:0] _T_646 = f0val[1] ? f0pc_plus1 : 31'h0; // @[Mux.scala 27:72]
wire [30:0] _T_647 = _T_516 ? f1pc : 31'h0; // @[Mux.scala 27:72]
wire [30:0] secondpc = _T_646 | _T_647; // @[Mux.scala 27:72]
wire _T_656 = first4B & alignval[1]; // @[Mux.scala 27:72]
wire _T_657 = first2B & alignval[0]; // @[Mux.scala 27:72]
wire _T_661 = |alignicaf; // @[el2_ifu_aln_ctl.scala 338:59]
wire _T_664 = first4B & _T_661; // @[Mux.scala 27:72]
wire _T_665 = first2B & alignicaf[0]; // @[Mux.scala 27:72]
wire _T_670 = first4B & _T_514; // @[el2_ifu_aln_ctl.scala 340:39]
wire _T_672 = _T_670 & f0val[0]; // @[el2_ifu_aln_ctl.scala 340:51]
wire _T_674 = ~alignicaf[0]; // @[el2_ifu_aln_ctl.scala 340:64]
wire _T_675 = _T_672 & _T_674; // @[el2_ifu_aln_ctl.scala 340:62]
wire _T_677 = ~aligndbecc[0]; // @[el2_ifu_aln_ctl.scala 340:80]
wire _T_678 = _T_675 & _T_677; // @[el2_ifu_aln_ctl.scala 340:78]
wire icaf_eff = alignicaf[1] | aligndbecc[1]; // @[el2_ifu_aln_ctl.scala 342:31]
wire _T_683 = first4B & icaf_eff; // @[el2_ifu_aln_ctl.scala 344:32]
wire _T_686 = |aligndbecc; // @[el2_ifu_aln_ctl.scala 346:59]
wire _T_689 = first4B & _T_686; // @[Mux.scala 27:72]
wire _T_690 = first2B & aligndbecc[0]; // @[Mux.scala 27:72]
wire [31:0] _T_695 = first4B ? aligndata : 32'h0; // @[Mux.scala 27:72]
wire [31:0] _T_696 = first2B ? decompressed_io_dout : 32'h0; // @[Mux.scala 27:72]
wire [7:0] _T_701 = f0pc[8:1] ^ f0pc[16:9]; // @[el2_lib.scala 191:46]
wire [7:0] firstpc_hash = _T_701 ^ f0pc[24:17]; // @[el2_lib.scala 191:84]
wire [7:0] _T_705 = secondpc[8:1] ^ secondpc[16:9]; // @[el2_lib.scala 191:46]
wire [7:0] secondpc_hash = _T_705 ^ secondpc[24:17]; // @[el2_lib.scala 191:84]
wire [4:0] _T_711 = f0pc[13:9] ^ f0pc[18:14]; // @[el2_lib.scala 182:111]
wire [4:0] firstbrtag_hash = _T_711 ^ f0pc[23:19]; // @[el2_lib.scala 182:111]
wire [4:0] _T_716 = secondpc[13:9] ^ secondpc[18:14]; // @[el2_lib.scala 182:111]
wire [4:0] secondbrtag_hash = _T_716 ^ secondpc[23:19]; // @[el2_lib.scala 182:111]
wire _T_718 = first2B & alignbrend[0]; // @[el2_ifu_aln_ctl.scala 362:30]
wire _T_720 = first4B & alignbrend[1]; // @[el2_ifu_aln_ctl.scala 362:58]
wire _T_721 = _T_718 | _T_720; // @[el2_ifu_aln_ctl.scala 362:47]
wire _T_725 = _T_656 & alignbrend[0]; // @[el2_ifu_aln_ctl.scala 362:100]
wire _T_728 = first2B & alignret[0]; // @[el2_ifu_aln_ctl.scala 364:29]
wire _T_730 = first4B & alignret[1]; // @[el2_ifu_aln_ctl.scala 364:55]
wire _T_733 = first2B & alignpc4[0]; // @[el2_ifu_aln_ctl.scala 366:29]
wire _T_735 = first4B & alignpc4[1]; // @[el2_ifu_aln_ctl.scala 366:55]
wire i0_brp_pc4 = _T_733 | _T_735; // @[el2_ifu_aln_ctl.scala 366:44]
wire _T_737 = first2B | alignbrend[0]; // @[el2_ifu_aln_ctl.scala 368:33]
wire _T_743 = first2B & alignhist1[0]; // @[el2_ifu_aln_ctl.scala 370:34]
wire _T_745 = first4B & alignhist1[1]; // @[el2_ifu_aln_ctl.scala 370:62]
wire _T_746 = _T_743 | _T_745; // @[el2_ifu_aln_ctl.scala 370:51]
wire _T_748 = first2B & alignhist0[0]; // @[el2_ifu_aln_ctl.scala 371:14]
wire _T_750 = first4B & alignhist0[1]; // @[el2_ifu_aln_ctl.scala 371:42]
wire _T_751 = _T_748 | _T_750; // @[el2_ifu_aln_ctl.scala 371:31]
wire i0_ends_f1 = first4B & _T_516; // @[el2_ifu_aln_ctl.scala 373:28]
wire _T_767 = io_i0_brp_valid & i0_brp_pc4; // @[el2_ifu_aln_ctl.scala 382:42]
wire _T_768 = _T_767 & first2B; // @[el2_ifu_aln_ctl.scala 382:56]
wire _T_769 = ~i0_brp_pc4; // @[el2_ifu_aln_ctl.scala 382:89]
wire _T_770 = io_i0_brp_valid & _T_769; // @[el2_ifu_aln_ctl.scala 382:87]
wire _T_771 = _T_770 & first4B; // @[el2_ifu_aln_ctl.scala 382:101]
wire [7:0] _T_776 = _T_737 ? firstpc_hash : secondpc_hash; // @[el2_ifu_aln_ctl.scala 384:28]
el2_ifu_compress_ctl decompressed ( // @[el2_ifu_aln_ctl.scala 350:28]
.io_din(decompressed_io_din),
.io_dout(decompressed_io_dout)
);
assign io_ifu_i0_valid = alignval[0]; // @[el2_ifu_aln_ctl.scala 115:19]
assign io_ifu_i0_icaf = alignicaf[0]; // @[el2_ifu_aln_ctl.scala 114:18]
assign io_ifu_i0_icaf_type = misc0eff[52:51]; // @[el2_ifu_aln_ctl.scala 324:23]
assign io_ifu_i0_icaf_f1 = 1'h0; // @[el2_ifu_aln_ctl.scala 328:21]
assign io_ifu_i0_dbecc = aligndbecc[0]; // @[el2_ifu_aln_ctl.scala 330:19]
assign io_ifu_i0_instr = decompressed_io_dout; // @[el2_ifu_aln_ctl.scala 103:20]
assign io_ifu_i0_pc = 32'h0; // @[el2_ifu_aln_ctl.scala 320:16]
assign io_ifu_i0_pc4 = 1'h0; // @[el2_ifu_aln_ctl.scala 116:17]
assign io_ifu_fb_consume1 = _T_383 & _T_1; // @[el2_ifu_aln_ctl.scala 253:22]
assign io_ifu_fb_consume2 = _T_386 & _T_1; // @[el2_ifu_aln_ctl.scala 254:22]
assign io_ifu_i0_bp_index = 7'h0; // @[el2_ifu_aln_ctl.scala 361:22]
assign io_ifu_i0_bp_fghr = misc0eff[7:0]; // @[el2_ifu_aln_ctl.scala 363:21]
assign io_ifu_i0_bp_btag = 5'h0; // @[el2_ifu_aln_ctl.scala 365:21]
assign io_ifu_pmu_instr_aligned = io_dec_i0_decode_d & _T_3; // @[el2_ifu_aln_ctl.scala 95:28]
assign io_ifu_i0_cinst = aligndata[15:0]; // @[el2_ifu_aln_ctl.scala 106:19]
assign io_i0_brp_valid = alignbrend[0]; // @[el2_ifu_aln_ctl.scala 340:19]
assign io_i0_brp_toffset = misc0eff[19:8]; // @[el2_ifu_aln_ctl.scala 348:21]
assign io_i0_brp_hist = {alignhist1[0],alignhist0[0]}; // @[el2_ifu_aln_ctl.scala 345:18]
assign io_i0_brp_br_error = io_i0_brp_valid & i0_brp_pc4; // @[el2_ifu_aln_ctl.scala 358:22]
assign io_i0_brp_br_start_error = 1'h0; // @[el2_ifu_aln_ctl.scala 352:29]
assign io_i0_brp_bank = 1'h0; // @[el2_ifu_aln_ctl.scala 354:29]
assign io_i0_brp_prett = misc0eff[50:20]; // @[el2_ifu_aln_ctl.scala 350:19]
assign io_i0_brp_way = alignway[0]; // @[el2_ifu_aln_ctl.scala 344:17]
assign io_i0_brp_ret = alignret[0]; // @[el2_ifu_aln_ctl.scala 342:17]
assign decompressed_io_din = aligndata[15:0]; // @[el2_ifu_aln_ctl.scala 101:23]
assign io_ifu_i0_valid = _T_656 | _T_657; // @[el2_ifu_aln_ctl.scala 336:19]
assign io_ifu_i0_icaf = _T_664 | _T_665; // @[el2_ifu_aln_ctl.scala 338:18]
assign io_ifu_i0_icaf_type = _T_678 ? f1ictype : f0ictype; // @[el2_ifu_aln_ctl.scala 340:23]
assign io_ifu_i0_icaf_f1 = _T_683 & _T_516; // @[el2_ifu_aln_ctl.scala 344:21]
assign io_ifu_i0_dbecc = _T_689 | _T_690; // @[el2_ifu_aln_ctl.scala 346:19]
assign io_ifu_i0_instr = _T_695 | _T_696; // @[el2_ifu_aln_ctl.scala 352:19]
assign io_ifu_i0_pc = {{1'd0}, f0pc}; // @[el2_ifu_aln_ctl.scala 324:16]
assign io_ifu_i0_pc4 = aligndata[1:0] == 2'h3; // @[el2_ifu_aln_ctl.scala 328:17]
assign io_ifu_fb_consume1 = _T_313 & _T_1; // @[el2_ifu_aln_ctl.scala 242:22]
assign io_ifu_fb_consume2 = _T_316 & _T_1; // @[el2_ifu_aln_ctl.scala 243:22]
assign io_ifu_i0_bp_index = _T_776[6:0]; // @[el2_ifu_aln_ctl.scala 384:22]
assign io_ifu_i0_bp_fghr = i0_ends_f1 ? f1fghr : f0fghr; // @[el2_ifu_aln_ctl.scala 386:21]
assign io_ifu_i0_bp_btag = _T_737 ? firstbrtag_hash : secondbrtag_hash; // @[el2_ifu_aln_ctl.scala 388:21]
assign io_ifu_pmu_instr_aligned = io_dec_i0_decode_d & _T_784; // @[el2_ifu_aln_ctl.scala 394:28]
assign io_ifu_i0_cinst = aligndata[15:0]; // @[el2_ifu_aln_ctl.scala 330:19]
assign io_i0_brp_valid = _T_721 | _T_725; // @[el2_ifu_aln_ctl.scala 362:19]
assign io_i0_brp_toffset = i0_ends_f1 ? f1poffset : f0poffset; // @[el2_ifu_aln_ctl.scala 374:21]
assign io_i0_brp_hist = {_T_746,_T_751}; // @[el2_ifu_aln_ctl.scala 370:18]
assign io_i0_brp_br_error = _T_768 | _T_771; // @[el2_ifu_aln_ctl.scala 382:22]
assign io_i0_brp_br_start_error = _T_656 & alignbrend[0]; // @[el2_ifu_aln_ctl.scala 378:29]
assign io_i0_brp_bank = _T_737 ? f0pc[1] : secondpc[1]; // @[el2_ifu_aln_ctl.scala 380:29]
assign io_i0_brp_prett = i0_ends_f1 ? f1prett : f0prett; // @[el2_ifu_aln_ctl.scala 376:19]
assign io_i0_brp_way = _T_737 ? alignway[0] : alignway[1]; // @[el2_ifu_aln_ctl.scala 368:17]
assign io_i0_brp_ret = _T_728 | _T_730; // @[el2_ifu_aln_ctl.scala 364:17]
assign decompressed_io_din = aligndata[15:0]; // @[el2_ifu_aln_ctl.scala 390:23]
`ifdef RANDOMIZE_GARBAGE_ASSIGN
`define RANDOMIZE
`endif
@ -887,39 +1048,45 @@ initial begin
_RAND_0 = {1{`RANDOM}};
error_stall = _RAND_0[0:0];
_RAND_1 = {1{`RANDOM}};
f0val = _RAND_1[1:0];
wrptr = _RAND_1[1:0];
_RAND_2 = {1{`RANDOM}};
rdptr = _RAND_2[1:0];
_RAND_3 = {1{`RANDOM}};
q1off = _RAND_3[0:0];
f2val = _RAND_3[1:0];
_RAND_4 = {1{`RANDOM}};
q2off = _RAND_4[0:0];
f1val = _RAND_4[1:0];
_RAND_5 = {1{`RANDOM}};
q0off = _RAND_5[0:0];
f0val = _RAND_5[1:0];
_RAND_6 = {1{`RANDOM}};
q1 = _RAND_6[31:0];
q2off = _RAND_6[0:0];
_RAND_7 = {1{`RANDOM}};
q0 = _RAND_7[31:0];
q1off = _RAND_7[0:0];
_RAND_8 = {1{`RANDOM}};
q2 = _RAND_8[31:0];
_RAND_9 = {2{`RANDOM}};
_T_768 = _RAND_9[54:0];
_RAND_10 = {2{`RANDOM}};
_T_770 = _RAND_10[54:0];
_RAND_11 = {2{`RANDOM}};
_T_766 = _RAND_11[54:0];
q0off = _RAND_8[0:0];
_RAND_9 = {1{`RANDOM}};
q1 = _RAND_9[31:0];
_RAND_10 = {1{`RANDOM}};
q0 = _RAND_10[31:0];
_RAND_11 = {1{`RANDOM}};
q2 = _RAND_11[31:0];
_RAND_12 = {1{`RANDOM}};
f1val = _RAND_12[1:0];
f2pc = _RAND_12[30:0];
_RAND_13 = {1{`RANDOM}};
wrptr = _RAND_13[1:0];
f1pc = _RAND_13[30:0];
_RAND_14 = {1{`RANDOM}};
f2val = _RAND_14[1:0];
f0pc = _RAND_14[30:0];
_RAND_15 = {1{`RANDOM}};
brdata1 = _RAND_15[11:0];
brdata2 = _RAND_15[11:0];
_RAND_16 = {1{`RANDOM}};
brdata0 = _RAND_16[11:0];
brdata1 = _RAND_16[11:0];
_RAND_17 = {1{`RANDOM}};
brdata2 = _RAND_17[11:0];
brdata0 = _RAND_17[11:0];
_RAND_18 = {2{`RANDOM}};
_T_14 = _RAND_18[54:0];
_RAND_19 = {2{`RANDOM}};
_T_16 = _RAND_19[54:0];
_RAND_20 = {2{`RANDOM}};
_T_18 = _RAND_20[54:0];
`endif // RANDOMIZE_REG_INIT
`endif // RANDOMIZE
end // initial
@ -934,29 +1101,19 @@ end // initial
error_stall <= error_stall_in;
end
if (reset) begin
f0val <= 2'h0;
wrptr <= 2'h0;
end else begin
f0val <= _T_485;
wrptr <= wrptr_in;
end
if (reset) begin
rdptr <= 2'h0;
end else begin
rdptr <= wrptr_in;
rdptr <= rdptr_in;
end
if (reset) begin
q1off <= 1'h0;
f2val <= 2'h0;
end else begin
q1off <= q1off_in;
end
if (reset) begin
q2off <= 1'h0;
end else begin
q2off <= q2off_in;
end
if (reset) begin
q0off <= 1'h0;
end else begin
q0off <= q0off_in;
f2val <= f2val_in;
end
if (reset) begin
f1val <= 2'h0;
@ -964,14 +1121,24 @@ end // initial
f1val <= f1val_in;
end
if (reset) begin
wrptr <= 2'h0;
f0val <= 2'h0;
end else begin
wrptr <= wrptr_in;
f0val <= f0val_in;
end
if (reset) begin
f2val <= 2'h0;
q2off <= 1'h0;
end else begin
f2val <= f2val_in;
q2off <= q2off_in;
end
if (reset) begin
q1off <= 1'h0;
end else begin
q1off <= q1off_in;
end
if (reset) begin
q0off <= 1'h0;
end else begin
q0off <= q0off_in;
end
end
always @(posedge clock) begin
@ -991,19 +1158,24 @@ end // initial
q2 <= io_ifu_fetch_data_f;
end
if (reset) begin
_T_768 <= 55'h0;
end else if (qwen[1]) begin
_T_768 <= misc_data_in;
f2pc <= 31'h0;
end else if (fetch_to_f2) begin
f2pc <= io_ifu_fetch_pc;
end
if (reset) begin
_T_770 <= 55'h0;
end else if (qwen[0]) begin
_T_770 <= misc_data_in;
f1pc <= 31'h0;
end else if (f1_shift_wr_en) begin
f1pc <= f1pc_in;
end
if (reset) begin
_T_766 <= 55'h0;
f0pc <= 31'h0;
end else if (f0_shift_wr_en) begin
f0pc <= f0pc_in;
end
if (reset) begin
brdata2 <= 12'h0;
end else if (qwen[2]) begin
_T_766 <= misc_data_in;
brdata2 <= brdata_in;
end
if (reset) begin
brdata1 <= 12'h0;
@ -1016,9 +1188,19 @@ end // initial
brdata0 <= brdata_in;
end
if (reset) begin
brdata2 <= 12'h0;
_T_14 <= 55'h0;
end else if (qwen[2]) begin
brdata2 <= brdata_in;
_T_14 <= misc_data_in;
end
if (reset) begin
_T_16 <= 55'h0;
end else if (qwen[1]) begin
_T_16 <= misc_data_in;
end
if (reset) begin
_T_18 <= 55'h0;
end else if (qwen[0]) begin
_T_18 <= misc_data_in;
end
end
endmodule

View File

@ -92,12 +92,21 @@ class el2_ifu_aln_ctl extends Module with el2_lib {
val f0pc_in = WireInit(UInt(31.W), 0.U)
val error_stall = WireInit(Bool(), 0.U)
val f2_wr_en = WireInit(Bool(), 0.U)
val shift_4B = WireInit(Bool(), 0.U)
val f1_shift_wr_en = WireInit(Bool(), 0.U)
val f0_shift_wr_en = WireInit(Bool(), 0.U)
val qwen = WireInit(UInt(3.W), 0.U)
val brdata_in = WireInit(UInt(BRDATA_SIZE.W), 0.U)
val misc_data_in = WireInit(UInt((MHI+1).W), 0.U)
val fetch_to_f0 = WireInit(Bool(), 0.U)
val fetch_to_f1 = WireInit(Bool(), 0.U)
val fetch_to_f2 = WireInit(Bool(), 0.U)
val f1_shift_2B = WireInit(Bool(), 0.U)
val first4B = WireInit(Bool(), 0.U)
val shift_2B = WireInit(Bool(), 0.U)
val f0_shift_2B = WireInit(Bool(), 0.U)
error_stall_in := (error_stall | io.ifu_async_error_start) & !io.exu_flush_final
error_stall := withClock(io.active_clk) {RegNext(error_stall_in, init = 0.U)}
@ -170,7 +179,7 @@ class el2_ifu_aln_ctl extends Module with el2_lib {
val q1sel = Cat(q1ptr, !q1ptr)
val misc_data_in = Cat(io.iccm_rd_ecc_double_err, io.ic_access_fault_f, io.ic_access_fault_type_f,
misc_data_in := Cat(io.iccm_rd_ecc_double_err, io.ic_access_fault_f, io.ic_access_fault_type_f,
io.ifu_bp_btb_target_f(31,1), io.ifu_bp_poffset_f, io.ifu_bp_fghr_f)
val misceff = Mux1H(Seq(qren(0).asBool() -> Cat(misc1, misc0),
@ -205,6 +214,7 @@ class el2_ifu_aln_ctl extends Module with el2_lib {
val (brdata0eff,brdata1eff) = (brdataeff(11,0) , brdataeff(23,12))
val brdata0final = Mux1H(Seq(q0sel(0).asBool -> brdata0eff, q0sel(1).asBool -> brdata0eff(11,6)))
val brdata1final = Mux1H(Seq(q1sel(0).asBool -> brdata1eff, q1sel(1).asBool -> brdata1eff(11,6)))
val f0ret = Cat(brdata0final(6),brdata0final(0))
@ -238,12 +248,12 @@ class el2_ifu_aln_ctl extends Module with el2_lib {
shift_f2_f0 := !sf0_valid & !sf1_valid & f2_valid
shift_f2_f1 := !sf0_valid & sf1_valid & f2_valid
val fetch_to_f0 = !sf0_valid & !sf1_valid & !f2_valid & ifvalid
val fetch_to_f1 = (!sf0_valid & !sf1_valid & f2_valid & ifvalid) |
fetch_to_f0 := !sf0_valid & !sf1_valid & !f2_valid & ifvalid
fetch_to_f1 := (!sf0_valid & !sf1_valid & f2_valid & ifvalid) |
(!sf0_valid & sf1_valid & !f2_valid & ifvalid) |
( sf0_valid & !sf1_valid & !f2_valid & ifvalid)
val fetch_to_f2 = (!sf0_valid & sf1_valid & f2_valid & ifvalid) |
fetch_to_f2 := (!sf0_valid & sf1_valid & f2_valid & ifvalid) |
( sf0_valid & sf1_valid & !f2_valid & ifvalid)
val f0pc_plus1 = f0pc + 1.U
@ -270,102 +280,29 @@ class el2_ifu_aln_ctl extends Module with el2_lib {
(shift_f2_f1 & !io.exu_flush_final).asBool->f2val,
(!fetch_to_f1 & !shift_f2_f1 & !shift_f1_f0 & !io.exu_flush_final).asBool->sf1val))
sf0val := Mux1H(Seq(shift_2B.asBool->Cat(0.U, f0val(1),)))
val i0_shift = io.dec_i0_decode_d & ~error_stall
io.ifu_pmu_instr_aligned := i0_shift
val aligndata = Mux1H(Seq(f0val(0).asBool -> q0final, (~f0val(1) & f0val(0)).asBool -> Cat(q1final,q0final)))
val decompressed = Module(new el2_ifu_compress_ctl())
decompressed.io.din := aligndata
io.ifu_i0_instr := decompressed.io.dout
// 16-bit compressed instruction from the aligner to the dec for tracer
io.ifu_i0_cinst := aligndata(15,0)
// Checking if its a 32-bit instruction or not
//val first4B = decompressed.io.rvc
val first4B = WireInit(Bool(), 0.U)
val first2B = ~first4B
val alignicaf = Mux1H(Seq(f0val(1).asBool -> f0icaf, (~f0val(1) & f0val(0)).asBool -> Cat(f1icaf,f0icaf)))
io.ifu_i0_icaf := Mux1H(Seq(first4B.asBool -> alignicaf.orR, first2B.asBool -> alignicaf(0)))
io.ifu_i0_valid := Mux1H(Seq(first4B.asBool -> alignval(1), first2B.asBool -> alignval(0)))
io.ifu_i0_pc4 := first4B
val shift_2B = i0_shift & first2B
val shift_4B = i0_shift & first4B
val f0_shift_2B = Mux1H(Seq(shift_2B.asBool -> f0val(0), shift_4B.asBool -> (!f0val(0) & f0val(0))))
val f1_shift_2B = f0val(0) & !f0val(1) & shift_4B
val qeff = Mux1H(Seq(qren(0).asBool->Cat(q1,q0),
qren(1).asBool->Cat(q2,q1),
qren(2).asBool->Cat(q0,q2)))
val (q1eff, q0eff) = (qeff(63,32), qeff(31,0))
val brdata0final = Mux1H(Seq(q0sel(0).asBool -> brdata0eff, q0sel(1).asBool -> brdata0eff(11,6)))
//val f0pc = WireInit(UInt(31.W), 0.U)
// val f2pc = WireInit(UInt(31.W), 0.U)
f0val := Mux1H(Seq(shift_2B.asBool -> f0val(1), (!shift_2B & !shift_4B).asBool -> f0val))
sf0val := Mux1H(Seq(shift_2B.asBool->Cat(0.U, f0val(1)),
(!shift_2B & !shift_4B).asBool->f1val))
f0val_in := Mux1H(Seq((fetch_to_f0 & !io.exu_flush_final).asBool->io.ifu_fetch_val,
(shift_f2_f0 & !io.exu_flush_final).asBool->f2val,
(shift_f1_f0 & !io.exu_flush_final).asBool()->sf1val,
(!fetch_to_f0 & !shift_f2_f0 & !shift_f1_f0 & !io.exu_flush_final).asBool->sf0val))
(shift_f2_f0 & !io.exu_flush_final).asBool->f2val,
(shift_f1_f0 & !io.exu_flush_final).asBool()->sf1val,
(!fetch_to_f0 & !shift_f2_f0 & !shift_f1_f0 & !io.exu_flush_final).asBool->sf0val))
val qeff = Mux1H(Seq(qren(0).asBool->Cat(q1,q0),
qren(1).asBool->Cat(q2,q1),
qren(2).asBool->Cat(q0,q2)))
val (q1eff, q0eff) = (qeff(63,32), qeff(31,0))
q0final := Mux1H(Seq(q0sel(0).asBool->q0eff, q0sel(1).asBool->q0eff(31,16)))
q1final := Mux1H(Seq(q1sel(0).asBool->q1eff(15,0), q1sel(1).asBool->q1eff(31,16)))
val aligndata = Mux1H(Seq(f0val(0).asBool -> q0final, (~f0val(1) & f0val(0)).asBool -> Cat(q1final,q0final)))
alignval := Mux1H(Seq(f0val(1).asBool->3.U, (!f0val(1) & f0val(0)) -> Cat(f1val(0),1.U)))
val alignicaf = Mux1H(Seq(f0val(1).asBool -> f0icaf, (~f0val(1) & f0val(0)).asBool -> Cat(f1icaf,f0icaf)))
val aligndbecc = Mux1H(Seq(f0val(1).asBool -> Fill(2,f0dbecc), (!f0val(1) & f0val(0)).asBool -> Cat(f1dbecc,f0dbecc)))
val alignbrend = Mux1H(Seq(f0val(1).asBool()->f0brend, (!f0val(1) & f0val(0)).asBool->Cat(f1brend(0),f0brend(0))))
@ -382,14 +319,24 @@ class el2_ifu_aln_ctl extends Module with el2_lib {
val alignfromf1 = !f0val(1) & f0val(0)
//val f1pc = WireInit(UInt(31.W), init = 0.U)
val secondpc = Mux1H(Seq(f0val(1).asBool()->f0pc_plus1 , (!f0val(1) & f0val(0)).asBool->f1pc))
io.ifu_i0_pc := f0pc
val firstpc = f0pc
io.ifu_i0_pc4 := first4B
io.ifu_i0_cinst := aligndata(15,0)
first4B := aligndata(1,0) === 3.U
val first2B = ~first4B
io.ifu_i0_valid := Mux1H(Seq(first4B.asBool -> alignval(1), first2B.asBool -> alignval(0)))
io.ifu_i0_icaf := Mux1H(Seq(first4B.asBool -> alignicaf.orR, first2B.asBool -> alignicaf(0)))
io.ifu_i0_icaf_type := Mux((first4B & !f0val(1) & f0val(0) & !alignicaf(0) & !aligndbecc(0)).asBool, f1ictype, f0ictype)
val icaf_eff = alignicaf(1) | aligndbecc(1)
@ -398,6 +345,12 @@ class el2_ifu_aln_ctl extends Module with el2_lib {
io.ifu_i0_dbecc := Mux1H(Seq(first4B.asBool->aligndbecc.orR, first2B.asBool->aligndbecc(0)))
val ifirst = aligndata
val decompressed = Module(new el2_ifu_compress_ctl())
io.ifu_i0_instr := Mux1H(Seq(first4B.asBool -> ifirst, first2B.asBool -> decompressed.io.dout))
val firstpc_hash = el2_btb_addr_hash(f0pc)
val secondpc_hash = el2_btb_addr_hash(secondpc)
@ -410,22 +363,23 @@ class el2_ifu_aln_ctl extends Module with el2_lib {
io.i0_brp.ret := (first2B & alignret(0)) | (first4B & alignret(1))
val i0_brp_pc4 = (first2B & alignpc4(0)) | (first4B & alignpc4(1))
io.i0_brp.way := Mux((first2B | alignbrend(0)).asBool, alignway(0), alignway(1))
io.i0_brp.hist := Cat((first2B & alignhist1(0)) | (first4B & alignhist1(1)),
(first2B & alignhist0(0)) | (first4B & alignhist0(1)))
io.i0_brp.toffset := Mux((first4B & alignfromf1).asBool, f1poffset, f0poffset)
val i0_ends_f1 = first4B & alignfromf1
io.i0_brp.toffset := Mux(i0_ends_f1.asBool, f1poffset, f0poffset)
io.i0_brp.prett := Mux((first4B & alignfromf1).asBool, f1prett, f0prett)
io.i0_brp.prett := Mux(i0_ends_f1.asBool, f1prett, f0prett)
io.i0_brp.br_start_error := (first4B & alignval(1) & alignbrend(0))
io.i0_brp.bank := Mux((first2B | alignbrend(0)).asBool, firstpc(1), secondpc(1))
val i0_brp_pc4 = (first2B & alignpc4(0)) | (first4B & alignpc4(1))
io.i0_brp.br_error := (io.i0_brp.valid & i0_brp_pc4 & first2B) | (io.i0_brp.valid & ~i0_brp_pc4 & first4B)
io.i0_brp.br_error := (io.i0_brp.valid & i0_brp_pc4 & first2B) | (io.i0_brp.valid & !i0_brp_pc4 & first4B)
io.ifu_i0_bp_index := Mux((first2B | alignbrend(0)).asBool, firstpc_hash, secondpc_hash)
@ -433,10 +387,17 @@ class el2_ifu_aln_ctl extends Module with el2_lib {
io.ifu_i0_bp_btag := Mux((first2B | alignbrend(0)).asBool, firstbrtag_hash, secondbrtag_hash)
decompressed.io.din := aligndata
val i0_shift = io.dec_i0_decode_d & ~error_stall
io.ifu_pmu_instr_aligned := i0_shift
shift_2B := i0_shift & first2B
shift_4B := i0_shift & first4B
f0_shift_2B := Mux1H(Seq(shift_2B.asBool -> f0val(0), shift_4B.asBool -> (!f0val(0) & f0val(0))))
f1_shift_2B := f0val(0) & !f0val(1) & shift_4B
}
object ifu_aln extends App {

View File

@ -1,5 +0,0 @@
package lsu
class el2_lsu {
}