1
0

BroadcastHub race on allocating VolWBs vs Acquires

This commit is contained in:
Henry Cook 2016-03-17 18:32:35 -07:00
parent 5f3d3a0b2d
commit c13b8d243d

View File

@ -60,6 +60,10 @@ class L2BroadcastHub(implicit p: Parameters) extends ManagerCoherenceAgent()(p)
when (sdq_enq) { sdq(sdq_alloc_id) := io.iacq().data } when (sdq_enq) { sdq(sdq_alloc_id) := io.iacq().data }
// Handle acquire transaction initiation // Handle acquire transaction initiation
val irel_vs_iacq_conflict =
io.inner.acquire.valid &&
io.inner.release.valid &&
io.irel().conflicts(io.iacq())
val sdqLoc = List.fill(nTransactors) { val sdqLoc = List.fill(nTransactors) {
DataQueueLocation(sdq_alloc_id, inStoreQueue).toBits DataQueueLocation(sdq_alloc_id, inStoreQueue).toBits
} }
@ -69,7 +73,7 @@ class L2BroadcastHub(implicit p: Parameters) extends ManagerCoherenceAgent()(p)
trackerList.map(_.io.matches.iacq), trackerList.map(_.io.matches.iacq),
trackerList.map(_.io.alloc.iacq), trackerList.map(_.io.alloc.iacq),
Some(sdqLoc), Some(sdqLoc),
Some(sdq_rdy)) Some(sdq_rdy && !irel_vs_iacq_conflict))
// Queue to store impending Voluntary Release data // Queue to store impending Voluntary Release data
val voluntary = io.irel().isVoluntary() val voluntary = io.irel().isVoluntary()