Don't stall I$ response when resolving a branch misprediction
This avoids a fetch bubble. Not clear if this is the best way to do it. Perhaps this change should instead be made to Frontend (i.e., ignore resp.ready when req.valid is high), but that might exacerbate a critical path.
This commit is contained in:
parent
d7790ac6a4
commit
354cb2d5ec
@ -505,7 +505,7 @@ class Rocket(implicit p: Parameters) extends CoreModule()(p) {
|
|||||||
mem_npc)).toUInt // mispredicted branch
|
mem_npc)).toUInt // mispredicted branch
|
||||||
io.imem.flush_icache := wb_reg_valid && wb_ctrl.fence_i
|
io.imem.flush_icache := wb_reg_valid && wb_ctrl.fence_i
|
||||||
io.imem.flush_tlb := csr.io.fatc
|
io.imem.flush_tlb := csr.io.fatc
|
||||||
io.imem.resp.ready := !ctrl_stalld || csr.io.interrupt
|
io.imem.resp.ready := !ctrl_stalld || csr.io.interrupt || take_pc_mem
|
||||||
|
|
||||||
io.imem.btb_update.valid := mem_reg_valid && !mem_npc_misaligned && mem_wrong_npc && mem_cfi_taken && !take_pc_wb
|
io.imem.btb_update.valid := mem_reg_valid && !mem_npc_misaligned && mem_wrong_npc && mem_cfi_taken && !take_pc_wb
|
||||||
io.imem.btb_update.bits.isJump := mem_ctrl.jal || mem_ctrl.jalr
|
io.imem.btb_update.bits.isJump := mem_ctrl.jal || mem_ctrl.jalr
|
||||||
|
Loading…
Reference in New Issue
Block a user