Fix #69 discoverd fmax issue with decode stage branch predictions
This commit is contained in:
parent
fdd2194c8f
commit
63cd5f42af
|
@ -268,7 +268,7 @@ class BranchPlugin(earlyBranch : Boolean,
|
|||
default{
|
||||
branch_src1 := input(PC)
|
||||
branch_src2 := ((input(BRANCH_CTRL) === BranchCtrlEnum.JAL) ? imm.j_sext | imm.b_sext).asUInt
|
||||
when(input(PREDICTION_HAD_BRANCHED) && ! missAlignedTarget){
|
||||
when(input(PREDICTION_HAD_BRANCHED)){ //Assume the predictor never predict missaligned stuff, this avoid the need to know if the instruction should branch or not
|
||||
branch_src2 := (if(pipeline(RVC_GEN)) Mux(input(IS_RVC), B(2), B(4)) else B(4)).asUInt.resized
|
||||
}
|
||||
}
|
||||
|
|
|
@ -488,6 +488,15 @@ abstract class IBusFetcherImpl(val resetVector : BigInt,
|
|||
|
||||
decodePrediction.cmd.hadBranch := decode.input(BRANCH_CTRL) === BranchCtrlEnum.JAL || (decode.input(BRANCH_CTRL) === BranchCtrlEnum.B && conditionalBranchPrediction)
|
||||
|
||||
val noPredictionOnMissaligned = (!pipeline(RVC_GEN)) generate new Area{
|
||||
val missaligned = decode.input(BRANCH_CTRL).mux(
|
||||
BranchCtrlEnum.JALR -> (imm.i_sext(1) ^ decode.input(RS1)(1)),
|
||||
BranchCtrlEnum.JAL -> imm.j_sext(1),
|
||||
default -> imm.b_sext(1)
|
||||
)
|
||||
decodePrediction.cmd.hadBranch clearWhen(missaligned)
|
||||
}
|
||||
|
||||
predictionJumpInterface.valid := decodePrediction.cmd.hadBranch && decode.arbitration.isFiring //TODO OH Doublon de priorité
|
||||
predictionJumpInterface.payload := decode.input(PC) + ((decode.input(BRANCH_CTRL) === BranchCtrlEnum.JAL) ? imm.j_sext | imm.b_sext).asUInt
|
||||
|
||||
|
|
Loading…
Reference in New Issue