probe req transactors in coherence hub
This commit is contained in:
parent
b6e6d603cc
commit
70cdf869ac
@ -161,6 +161,7 @@ class XactTracker(id: Int) extends Component {
|
|||||||
val io = new Bundle {
|
val io = new Bundle {
|
||||||
val mem_req = (new ioDecoupled) { new HubMemReq() }.flip
|
val mem_req = (new ioDecoupled) { new HubMemReq() }.flip
|
||||||
val alloc_req = (new ioDecoupled) { new TrackerAllocReq() }
|
val alloc_req = (new ioDecoupled) { new TrackerAllocReq() }
|
||||||
|
val probe_req = (new ioDecoupled) { new ProbeRequest() }.flip
|
||||||
val can_alloc = Bool(INPUT)
|
val can_alloc = Bool(INPUT)
|
||||||
val xact_finish = Bool(INPUT)
|
val xact_finish = Bool(INPUT)
|
||||||
val p_rep_has_data = Bool(INPUT)
|
val p_rep_has_data = Bool(INPUT)
|
||||||
@ -174,6 +175,7 @@ class XactTracker(id: Int) extends Component {
|
|||||||
val tile_xact_id = Bits(TILE_XACT_ID_BITS, OUTPUT)
|
val tile_xact_id = Bits(TILE_XACT_ID_BITS, OUTPUT)
|
||||||
val sharer_count = Bits(TILE_ID_BITS, OUTPUT)
|
val sharer_count = Bits(TILE_ID_BITS, OUTPUT)
|
||||||
val t_type = Bits(TTYPE_BITS, OUTPUT)
|
val t_type = Bits(TTYPE_BITS, OUTPUT)
|
||||||
|
val push_p_req = Bits(NTILES, OUTPUT)
|
||||||
val pop_p_rep = Bits(NTILES, OUTPUT)
|
val pop_p_rep = Bits(NTILES, OUTPUT)
|
||||||
val pop_p_rep_data = Bits(NTILES, OUTPUT)
|
val pop_p_rep_data = Bits(NTILES, OUTPUT)
|
||||||
val pop_x_init = Bool(OUTPUT)
|
val pop_x_init = Bool(OUTPUT)
|
||||||
@ -356,4 +358,17 @@ class CoherenceHubNoDir extends CoherenceHub {
|
|||||||
!foldR(trackerList.map(t => t.io.busy && coherenceConflict(t.io.addr, init_arb.io.out.bits.xact_init.address)))(_||_)
|
!foldR(trackerList.map(t => t.io.busy && coherenceConflict(t.io.addr, init_arb.io.out.bits.xact_init.address)))(_||_)
|
||||||
|
|
||||||
|
|
||||||
|
// Handle probe request generation
|
||||||
|
// Must arbitrate for each request port
|
||||||
|
for( j <- 0 until NTILES ) {
|
||||||
|
val p_req_arb = (new Arbiter(NGLOBAL_XACTS)) { new ProbeRequest() }
|
||||||
|
for( i <- 0 until NGLOBAL_XACTS ) {
|
||||||
|
val t = trackerList(i).io
|
||||||
|
p_req_arb.io.in(i).bits := t.probe_req.bits
|
||||||
|
p_req_arb.io.in(i).ready := t.probe_req.ready
|
||||||
|
p_req_arb.io.in(i).valid := t.probe_req.valid && t.push_p_req(j)
|
||||||
|
}
|
||||||
|
p_req_arb.io.out <> io.tiles(j).probe_req
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user