make sure L2 waits for outer grant before sending grant for write request
This commit is contained in:
parent
42d3d09d7a
commit
b59ce5fed4
@ -568,6 +568,7 @@ class L2AcquireTracker(trackerId: Int)(implicit p: Parameters) extends L2XactTra
|
|||||||
val pending_writes = Reg(init=Bits(0, width = io.inner.tlDataBeats))
|
val pending_writes = Reg(init=Bits(0, width = io.inner.tlDataBeats))
|
||||||
val pending_resps = Reg(init=Bits(0, width = io.inner.tlDataBeats))
|
val pending_resps = Reg(init=Bits(0, width = io.inner.tlDataBeats))
|
||||||
val pending_ignt_data = Reg(init=Bits(0, width = io.inner.tlDataBeats))
|
val pending_ignt_data = Reg(init=Bits(0, width = io.inner.tlDataBeats))
|
||||||
|
val pending_ignt_ack = Reg(init = Bool(false))
|
||||||
val pending_meta_write = Reg{ Bool() }
|
val pending_meta_write = Reg{ Bool() }
|
||||||
|
|
||||||
val all_pending_done =
|
val all_pending_done =
|
||||||
@ -731,10 +732,15 @@ class L2AcquireTracker(trackerId: Int)(implicit p: Parameters) extends L2XactTra
|
|||||||
addPendingBitWhenBeatHasData(io.inner.release) |
|
addPendingBitWhenBeatHasData(io.inner.release) |
|
||||||
addPendingBitWhenBeatHasData(io.outer.grant) |
|
addPendingBitWhenBeatHasData(io.outer.grant) |
|
||||||
addPendingBitInternal(io.data.resp)
|
addPendingBitInternal(io.data.resp)
|
||||||
|
pending_ignt_ack := pending_ignt_ack |
|
||||||
|
io.data.write.fire() |
|
||||||
|
io.outer.grant.fire() && io.outer.grant.bits.hasData()
|
||||||
ignt_q.io.deq.ready := ignt_data_done
|
ignt_q.io.deq.ready := ignt_data_done
|
||||||
io.inner.grant.valid := state === s_busy &&
|
io.inner.grant.valid := state === s_busy &&
|
||||||
ignt_q.io.deq.valid &&
|
ignt_q.io.deq.valid &&
|
||||||
(!io.ignt().hasData() || pending_ignt_data(ignt_data_idx))
|
Mux(io.ignt().hasData(),
|
||||||
|
pending_ignt_data(ignt_data_idx),
|
||||||
|
pending_ignt_ack)
|
||||||
// Make the Grant message using the data stored in the secondary miss queue
|
// Make the Grant message using the data stored in the secondary miss queue
|
||||||
io.inner.grant.bits := pending_coh.inner.makeGrant(
|
io.inner.grant.bits := pending_coh.inner.makeGrant(
|
||||||
pri = xact,
|
pri = xact,
|
||||||
@ -833,6 +839,7 @@ class L2AcquireTracker(trackerId: Int)(implicit p: Parameters) extends L2XactTra
|
|||||||
pending_writes := addPendingBitWhenBeatHasDataAndAllocs(io.inner.acquire)
|
pending_writes := addPendingBitWhenBeatHasDataAndAllocs(io.inner.acquire)
|
||||||
pending_resps := UInt(0)
|
pending_resps := UInt(0)
|
||||||
pending_ignt_data := UInt(0)
|
pending_ignt_data := UInt(0)
|
||||||
|
pending_ignt_ack := Bool(false)
|
||||||
pending_meta_write := UInt(0)
|
pending_meta_write := UInt(0)
|
||||||
state := s_meta_read
|
state := s_meta_read
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user