提交 37e3a7b0 编写于 作者: L LinJiawei

fix cfiIndexValid bug

上级 9152c28e
......@@ -4,7 +4,7 @@ import chisel3._
import chisel3.util._
import utils._
import xiangshan._
import xiangshan.backend.decode.DecodeStage
import xiangshan.backend.decode.{DecodeStage, ImmUnion}
import xiangshan.backend.rename.{BusyTable, Rename}
import xiangshan.backend.dispatch.Dispatch
import xiangshan.backend.exu._
......@@ -122,7 +122,7 @@ class RedirectGenerator extends XSModule with HasCircularQueuePtrHelper {
val ftqRead = io.stage2FtqRead.entry
val pc = GetPcByFtq(ftqRead.ftqPC, s2_redirect_bits_reg.ftqOffset)
val brTarget = pc + SignExt(s2_imm12_reg, XLEN)
val brTarget = pc + SignExt(ImmUnion.B.toImm32(s2_imm12_reg), XLEN)
val snpc = pc + Mux(s2_pd.isRVC, 2.U, 4.U)
val isReplay = RedirectLevel.flushItself(s2_redirect_bits_reg.level)
val target = Mux(isReplay,
......
......@@ -438,19 +438,25 @@ class IFU extends XSModule with HasIFUConst with HasCircularQueuePtrHelper
when (if4_pendingPrevHalfInstr) {
toFtqBuf.metas(0) := if4_prevHalfInstr.bits.meta
}
val cfiIsCall = if4_pd.pd(if4_bp.jmpIdx).isCall
val cfiIsRet = if4_pd.pd(if4_bp.jmpIdx).isRet
val cfiIsRVC = if4_pd.pd(if4_bp.jmpIdx).isRVC
val if4_jmpIdx = WireInit(if4_bp.jmpIdx)
val if4_taken = WireInit(if4_bp.taken)
val if4_real_valids = if4_pd.mask &
(Fill(PredictWidth, !if4_taken) |
(Fill(PredictWidth, 1.U(1.W)) >> (~if4_jmpIdx)))
val cfiIsCall = if4_pd.pd(if4_jmpIdx).isCall
val cfiIsRet = if4_pd.pd(if4_jmpIdx).isRet
val cfiIsRVC = if4_pd.pd(if4_jmpIdx).isRVC
toFtqBuf.cfiIsCall := cfiIsCall
toFtqBuf.cfiIsRet := cfiIsRet
toFtqBuf.cfiIsRVC := cfiIsRVC
toFtqBuf.cfiIndex.valid := if4_bp.taken
toFtqBuf.cfiIndex.bits := Mux(cfiIsRVC, if4_bp.jmpIdx, if4_bp.jmpIdx - 1.U)
toFtqBuf.cfiIndex.valid := if4_taken
toFtqBuf.cfiIndex.bits := Mux(cfiIsRVC, if4_jmpIdx, if4_jmpIdx - 1.U)
toFtqBuf.br_mask := if4_bp.brMask.asTypeOf(Vec(PredictWidth, Bool()))
toFtqBuf.rvc_mask := VecInit(if4_pd.pd.map(_.isRVC))
toFtqBuf.valids := if4_pd.mask.asTypeOf(Vec(PredictWidth, Bool()))
toFtqBuf.target := Mux(if4_bp.taken, if4_bp.target, if4_snpc)
toFtqBuf.valids := if4_real_valids.asTypeOf(Vec(PredictWidth, Bool()))
toFtqBuf.target := Mux(if4_taken, if4_target, if4_snpc)
......@@ -520,7 +526,7 @@ class IFU extends XSModule with HasIFUConst with HasCircularQueuePtrHelper
fetchPacketWire.instrs := if4_pd.instrs
fetchPacketWire.mask := if4_pd.mask & (Fill(PredictWidth, !if4_bp.taken) | (Fill(PredictWidth, 1.U(1.W)) >> (~if4_bp.jmpIdx)))
fetchPacketWire.mask := if4_real_valids
fetchPacketWire.pdmask := if4_pd.mask
fetchPacketWire.pc := if4_pd.pc
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册