fix: mem有例外时,exe不应当读写csr
This commit is contained in:
parent
86add2c2c8
commit
2ff3d1c000
|
@ -239,8 +239,12 @@ class Csr(implicit val config: CpuConfig) extends Module with HasCSRConst {
|
||||||
val mem_inst = mem_inst_info.inst
|
val mem_inst = mem_inst_info.inst
|
||||||
val mem_valid = mem_inst_info.valid
|
val mem_valid = mem_inst_info.valid
|
||||||
val mem_addr = mem_inst(31, 20)
|
val mem_addr = mem_inst(31, 20)
|
||||||
|
|
||||||
|
val has_exception = mem_ex.exception.asUInt.orR
|
||||||
|
val has_interrupt = mem_ex.interrupt.asUInt.orR
|
||||||
|
val has_exc_int = has_exception || has_interrupt
|
||||||
// 不带前缀的信号为exe阶段的信号
|
// 不带前缀的信号为exe阶段的信号
|
||||||
val valid = io.executeUnit.in.valid
|
val valid = io.executeUnit.in.valid && !has_exc_int
|
||||||
val info = io.executeUnit.in.info
|
val info = io.executeUnit.in.info
|
||||||
val op = io.executeUnit.in.info.op
|
val op = io.executeUnit.in.info.op
|
||||||
val fusel = io.executeUnit.in.info.fusel
|
val fusel = io.executeUnit.in.info.fusel
|
||||||
|
@ -288,9 +292,6 @@ class Csr(implicit val config: CpuConfig) extends Module with HasCSRConst {
|
||||||
mem_addr === privUret && mem_inst_info.op === CSROpType.jmp && mem_inst_info.fusel === FuType.csr && mem_valid
|
mem_addr === privUret && mem_inst_info.op === CSROpType.jmp && mem_inst_info.fusel === FuType.csr && mem_valid
|
||||||
ret := isMret || isSret || isUret
|
ret := isMret || isSret || isUret
|
||||||
|
|
||||||
val has_exception = mem_ex.exception.asUInt.orR
|
|
||||||
val has_interrupt = mem_ex.interrupt.asUInt.orR
|
|
||||||
val has_exc_int = has_exception || has_interrupt
|
|
||||||
val exceptionNO = ExcPriority.foldRight(0.U)((i: Int, sum: UInt) => Mux(mem_ex.exception(i), i.U, sum))
|
val exceptionNO = ExcPriority.foldRight(0.U)((i: Int, sum: UInt) => Mux(mem_ex.exception(i), i.U, sum))
|
||||||
val interruptNO = IntPriority.foldRight(0.U)((i: Int, sum: UInt) => Mux(mem_ex.interrupt(i), i.U, sum))
|
val interruptNO = IntPriority.foldRight(0.U)((i: Int, sum: UInt) => Mux(mem_ex.interrupt(i), i.U, sum))
|
||||||
val causeNO = (has_interrupt << (XLEN - 1)) | Mux(has_interrupt, interruptNO, exceptionNO)
|
val causeNO = (has_interrupt << (XLEN - 1)) | Mux(has_interrupt, interruptNO, exceptionNO)
|
||||||
|
|
Loading…
Reference in New Issue