Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
backend.atomic: when addr_valid, just access tlb, ignore data_valid (#…
  • Loading branch information
Lemover committed Sep 14, 2021
1 parent ef90f6b commit 82d348f
Showing 1 changed file with 8 additions and 11 deletions.
19 changes: 8 additions & 11 deletions src/main/scala/xiangshan/mem/pipeline/AtomicsUnit.scala
Expand Up @@ -45,7 +45,6 @@ class AtomicsUnit(implicit p: Parameters) extends XSModule with MemoryOpConstant
//-------------------------------------------------------
val s_invalid :: s_tlb :: s_flush_sbuffer_req :: s_flush_sbuffer_resp :: s_cache_req :: s_cache_resp :: s_finish :: Nil = Enum(7)
val state = RegInit(s_invalid)
val addr_valid = RegInit(false.B)
val data_valid = RegInit(false.B)
val in = Reg(new ExuInput())
val exceptionVec = RegInit(0.U.asTypeOf(ExceptionVec()))
Expand Down Expand Up @@ -89,19 +88,16 @@ class AtomicsUnit(implicit p: Parameters) extends XSModule with MemoryOpConstant
when (io.in.fire()) {
in := io.in.bits
in.src(1) := in.src(1) // leave src2 unchanged
addr_valid := true.B
}
when (io.storeDataIn.fire()) {
in.src(1) := io.storeDataIn.bits.data
data_valid := true.B
}
when(data_valid && addr_valid) {
state := s_tlb
addr_valid := false.B
data_valid := false.B
}
}

when (io.storeDataIn.fire()) {
in.src(1) := io.storeDataIn.bits.data
data_valid := true.B
}

assert(!(io.storeDataIn.fire() && data_valid), "atomic unit re-receive data")

// Send TLB feedback to store issue queue
// we send feedback right after we receives request
Expand Down Expand Up @@ -213,7 +209,7 @@ class AtomicsUnit(implicit p: Parameters) extends XSModule with MemoryOpConstant
}

when (state === s_cache_resp) {
io.dcache.resp.ready := true.B
io.dcache.resp.ready := data_valid
when(io.dcache.resp.fire()) {
is_lrsc_valid := io.dcache.resp.bits.id
val rdata = io.dcache.resp.bits.data
Expand Down Expand Up @@ -273,6 +269,7 @@ class AtomicsUnit(implicit p: Parameters) extends XSModule with MemoryOpConstant
XSDebug("atomics writeback: pc %x data %x\n", io.out.bits.uop.cf.pc, io.dcache.resp.bits.data)
state := s_invalid
}
data_valid := false.B
}

when(io.redirect.valid || io.flush){
Expand Down

0 comments on commit 82d348f

Please sign in to comment.