use isOneOf as much as possible
This commit is contained in:
@ -349,7 +349,7 @@ class CSRFile(implicit p: Parameters) extends CoreModule()(p)
|
||||
val cpu_wen = cpu_ren && io.rw.cmd =/= CSR.R && priv_sufficient
|
||||
val wen = cpu_wen && !read_only
|
||||
|
||||
val wdata = (Mux((io.rw.cmd === CSR.S || io.rw.cmd === CSR.C), io.rw.rdata, UInt(0)) |
|
||||
val wdata = (Mux(io.rw.cmd.isOneOf(CSR.S, CSR.C), io.rw.rdata, UInt(0)) |
|
||||
Mux(io.rw.cmd =/= CSR.C, io.rw.wdata, UInt(0))) &
|
||||
~Mux(io.rw.cmd === CSR.C, io.rw.wdata, UInt(0))
|
||||
|
||||
|
@ -88,7 +88,7 @@ class DCache(implicit p: Parameters) extends L1HellaCacheModule()(p) {
|
||||
val release_state = Reg(init=s_ready)
|
||||
val pstore1_valid = Wire(Bool())
|
||||
val pstore2_valid = Reg(Bool())
|
||||
val inWriteback = release_state === s_voluntary_writeback || release_state === s_probe_rep_dirty
|
||||
val inWriteback = release_state.isOneOf(s_voluntary_writeback, s_probe_rep_dirty)
|
||||
val releaseWay = Wire(UInt())
|
||||
io.cpu.req.ready := (release_state === s_ready) && !grant_wait && !s1_nack
|
||||
|
||||
@ -345,14 +345,14 @@ class DCache(implicit p: Parameters) extends L1HellaCacheModule()(p) {
|
||||
}
|
||||
}
|
||||
when (releaseDone) { release_state := s_ready }
|
||||
when (release_state === s_probe_rep_miss || release_state === s_probe_rep_clean) {
|
||||
when (release_state.isOneOf(s_probe_rep_miss, s_probe_rep_clean)) {
|
||||
io.mem.release.valid := true
|
||||
}
|
||||
when (release_state === s_probe_rep_clean || release_state === s_probe_rep_dirty) {
|
||||
when (release_state.isOneOf(s_probe_rep_clean, s_probe_rep_dirty)) {
|
||||
io.mem.release.bits := probeResponseMessage
|
||||
when (releaseDone) { release_state := s_probe_write_meta }
|
||||
}
|
||||
when (release_state === s_voluntary_writeback || release_state === s_voluntary_write_meta) {
|
||||
when (release_state.isOneOf(s_voluntary_writeback, s_voluntary_write_meta)) {
|
||||
io.mem.release.bits := voluntaryReleaseMessage
|
||||
newCoh := voluntaryNewCoh
|
||||
releaseWay := s2_victim_way
|
||||
@ -371,7 +371,7 @@ class DCache(implicit p: Parameters) extends L1HellaCacheModule()(p) {
|
||||
dataArb.io.in(2).bits.addr := Cat(io.mem.release.bits.addr_block, releaseDataBeat(log2Up(refillCycles)-1,0)) << rowOffBits
|
||||
dataArb.io.in(2).bits.way_en := ~UInt(0, nWays)
|
||||
|
||||
metaWriteArb.io.in(2).valid := (release_state === s_voluntary_write_meta || release_state === s_probe_write_meta)
|
||||
metaWriteArb.io.in(2).valid := release_state.isOneOf(s_voluntary_write_meta, s_probe_write_meta)
|
||||
metaWriteArb.io.in(2).bits.way_en := releaseWay
|
||||
metaWriteArb.io.in(2).bits.idx := io.mem.release.bits.full_addr()(idxMSB, idxLSB)
|
||||
metaWriteArb.io.in(2).bits.data.coh := newCoh
|
||||
|
@ -282,12 +282,6 @@ class MSHR(id: Int)(implicit p: Parameters) extends L1HellaCacheModule()(p) {
|
||||
val s_invalid :: s_wb_req :: s_wb_resp :: s_meta_clear :: s_refill_req :: s_refill_resp :: s_meta_write_req :: s_meta_write_resp :: s_drain_rpq :: Nil = Enum(UInt(), 9)
|
||||
val state = Reg(init=s_invalid)
|
||||
|
||||
def stateIsOneOf(check_states: Seq[UInt]): Bool =
|
||||
check_states.map(state === _).reduce(_ || _)
|
||||
|
||||
def stateIsOneOf(st1: UInt, st2: UInt*): Bool =
|
||||
stateIsOneOf(st1 +: st2)
|
||||
|
||||
val new_coh_state = Reg(init=ClientMetadata.onReset)
|
||||
val req = Reg(new MSHRReqInternal())
|
||||
val req_idx = req.addr(untagBits-1,blockOffBits)
|
||||
@ -306,14 +300,14 @@ class MSHR(id: Int)(implicit p: Parameters) extends L1HellaCacheModule()(p) {
|
||||
val (refill_cnt, refill_count_done) = Counter(io.mem_grant.valid && gnt_multi_data, refillCycles)
|
||||
val refill_done = io.mem_grant.valid && (!gnt_multi_data || refill_count_done)
|
||||
val sec_rdy = idx_match &&
|
||||
(stateIsOneOf(states_before_refill) ||
|
||||
(stateIsOneOf(s_refill_req, s_refill_resp) &&
|
||||
(state.isOneOf(states_before_refill) ||
|
||||
(state.isOneOf(s_refill_req, s_refill_resp) &&
|
||||
!cmd_requires_second_acquire && !refill_done))
|
||||
|
||||
val rpq = Module(new Queue(new ReplayInternal, p(ReplayQueueDepth)))
|
||||
rpq.io.enq.valid := (io.req_pri_val && io.req_pri_rdy || io.req_sec_val && sec_rdy) && !isPrefetch(io.req_bits.cmd)
|
||||
rpq.io.enq.bits := io.req_bits
|
||||
rpq.io.deq.ready := io.replay.ready && state === s_drain_rpq || state === s_invalid
|
||||
rpq.io.deq.ready := (io.replay.ready && state === s_drain_rpq) || state === s_invalid
|
||||
|
||||
val coh_on_grant = req.old_meta.coh.onGrant(
|
||||
incoming = io.mem_grant.bits,
|
||||
@ -373,7 +367,7 @@ class MSHR(id: Int)(implicit p: Parameters) extends L1HellaCacheModule()(p) {
|
||||
|
||||
val fq = Module(new FinishQueue(1))
|
||||
val g = io.mem_grant.bits
|
||||
val can_finish = state === s_invalid || state === s_refill_req
|
||||
val can_finish = state.isOneOf(s_invalid, s_refill_req)
|
||||
fq.io.enq.valid := io.mem_grant.valid && g.requiresAck() && refill_done
|
||||
fq.io.enq.bits := g.makeFinish()
|
||||
io.mem_finish.valid := fq.io.deq.valid && can_finish
|
||||
@ -390,9 +384,9 @@ class MSHR(id: Int)(implicit p: Parameters) extends L1HellaCacheModule()(p) {
|
||||
val meta_hazard = Reg(init=UInt(0,2))
|
||||
when (meta_hazard =/= UInt(0)) { meta_hazard := meta_hazard + 1 }
|
||||
when (io.meta_write.fire()) { meta_hazard := 1 }
|
||||
io.probe_rdy := !idx_match || (!stateIsOneOf(states_before_refill) && meta_hazard === 0)
|
||||
io.probe_rdy := !idx_match || (!state.isOneOf(states_before_refill) && meta_hazard === 0)
|
||||
|
||||
io.meta_write.valid := state === s_meta_write_req || state === s_meta_clear
|
||||
io.meta_write.valid := state.isOneOf(s_meta_write_req, s_meta_clear)
|
||||
io.meta_write.bits.idx := req_idx
|
||||
io.meta_write.bits.data.coh := Mux(state === s_meta_clear,
|
||||
req.old_meta.coh.onCacheControl(M_FLUSH),
|
||||
|
@ -130,7 +130,7 @@ class PTW(n: Int)(implicit p: Parameters) extends CoreModule()(p) {
|
||||
pte_wdata.a := true
|
||||
pte_wdata.d := r_req.store
|
||||
|
||||
io.mem.req.valid := state === s_req || state === s_set_dirty
|
||||
io.mem.req.valid := state.isOneOf(s_req, s_set_dirty)
|
||||
io.mem.req.bits.phys := Bool(true)
|
||||
io.mem.req.bits.cmd := Mux(state === s_set_dirty, M_XA_OR, M_XRD)
|
||||
io.mem.req.bits.typ := log2Ceil(xLen/8)
|
||||
|
Reference in New Issue
Block a user