stall rocket decode when not rocc ready
This commit is contained in:
parent
e293d89035
commit
ea018b3d84
@ -370,6 +370,7 @@ class Control extends CoreModule
|
|||||||
val wb_reg_xcpt = Reg(Bool())
|
val wb_reg_xcpt = Reg(Bool())
|
||||||
val wb_reg_replay = Reg(Bool())
|
val wb_reg_replay = Reg(Bool())
|
||||||
val wb_reg_cause = Reg(UInt())
|
val wb_reg_cause = Reg(UInt())
|
||||||
|
val wb_reg_rocc_pending = Reg(init=Bool(false))
|
||||||
|
|
||||||
val take_pc_wb = Bool()
|
val take_pc_wb = Bool()
|
||||||
val mem_misprediction = io.dpath.mem_misprediction && mem_reg_valid && (mem_ctrl.branch || mem_ctrl.jalr || mem_ctrl.jal)
|
val mem_misprediction = io.dpath.mem_misprediction && mem_reg_valid && (mem_ctrl.branch || mem_ctrl.jalr || mem_ctrl.jal)
|
||||||
@ -510,6 +511,9 @@ class Control extends CoreModule
|
|||||||
val wb_rocc_val = wb_reg_valid && wb_ctrl.rocc && !replay_wb_common
|
val wb_rocc_val = wb_reg_valid && wb_ctrl.rocc && !replay_wb_common
|
||||||
val replay_wb = replay_wb_common || wb_reg_valid && wb_ctrl.rocc && !io.rocc.cmd.ready
|
val replay_wb = replay_wb_common || wb_reg_valid && wb_ctrl.rocc && !io.rocc.cmd.ready
|
||||||
|
|
||||||
|
when (wb_rocc_val) { wb_reg_rocc_pending := !io.rocc.cmd.ready }
|
||||||
|
when (wb_reg_xcpt) { wb_reg_rocc_pending := Bool(false) }
|
||||||
|
|
||||||
class Scoreboard(n: Int)
|
class Scoreboard(n: Int)
|
||||||
{
|
{
|
||||||
def set(en: Bool, addr: UInt): Unit = update(en, _next | mask(en, addr))
|
def set(en: Bool, addr: UInt): Unit = update(en, _next | mask(en, addr))
|
||||||
@ -646,6 +650,7 @@ class Control extends CoreModule
|
|||||||
id_ex_hazard || id_mem_hazard || id_wb_hazard || id_sboard_hazard ||
|
id_ex_hazard || id_mem_hazard || id_wb_hazard || id_sboard_hazard ||
|
||||||
id_ctrl.fp && id_stall_fpu ||
|
id_ctrl.fp && id_stall_fpu ||
|
||||||
id_ctrl.mem && !io.dmem.req.ready ||
|
id_ctrl.mem && !io.dmem.req.ready ||
|
||||||
|
Bool(!params(BuildRoCC).isEmpty) && wb_reg_rocc_pending && id_ctrl.rocc && !io.rocc.cmd.ready ||
|
||||||
id_do_fence
|
id_do_fence
|
||||||
val ctrl_draind = id_interrupt
|
val ctrl_draind = id_interrupt
|
||||||
ctrl_killd := !io.imem.resp.valid || take_pc || ctrl_stalld || ctrl_draind
|
ctrl_killd := !io.imem.resp.valid || take_pc || ctrl_stalld || ctrl_draind
|
||||||
|
Loading…
Reference in New Issue
Block a user