TileLinkIO.GrantAck -> TileLinkIO.Finish
This commit is contained in:
parent
3f53d532c2
commit
1163131d1e
@ -214,9 +214,9 @@ class L2HellaCache(bankId: Int)(implicit conf: L2CacheConfig) extends CoherenceA
|
|||||||
grant_arb.io.in zip trackerList map { case (arb, t) => arb <> t.io.client.grant }
|
grant_arb.io.in zip trackerList map { case (arb, t) => arb <> t.io.client.grant }
|
||||||
|
|
||||||
// Free finished transactions
|
// Free finished transactions
|
||||||
val ack = io.client.grant_ack
|
val ack = io.client.finish
|
||||||
trackerList.map(_.io.client.grant_ack.valid := ack.valid)
|
trackerList.map(_.io.client.finish.valid := ack.valid)
|
||||||
trackerList.map(_.io.client.grant_ack.bits := ack.bits)
|
trackerList.map(_.io.client.finish.bits := ack.bits)
|
||||||
ack.ready := Bool(true)
|
ack.ready := Bool(true)
|
||||||
|
|
||||||
// Create an arbiter for the one memory port
|
// Create an arbiter for the one memory port
|
||||||
@ -239,7 +239,7 @@ abstract class L2XactTracker()(implicit conf: L2CacheConfig) extends Module {
|
|||||||
val c_acq = io.client.acquire.bits
|
val c_acq = io.client.acquire.bits
|
||||||
val c_rel = io.client.release.bits
|
val c_rel = io.client.release.bits
|
||||||
val c_gnt = io.client.grant.bits
|
val c_gnt = io.client.grant.bits
|
||||||
val c_ack = io.client.grant_ack.bits
|
val c_ack = io.client.finish.bits
|
||||||
val m_gnt = io.master.grant.bits
|
val m_gnt = io.master.grant.bits
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -423,7 +423,7 @@ class L2AcquireTracker(trackerId: Int, bankId: Int)(implicit conf: L2CacheConfig
|
|||||||
when(io.master.grant.valid && m_gnt.payload.client_xact_id === UInt(trackerId)) {
|
when(io.master.grant.valid && m_gnt.payload.client_xact_id === UInt(trackerId)) {
|
||||||
io.client.grant.valid := Bool(true)
|
io.client.grant.valid := Bool(true)
|
||||||
}
|
}
|
||||||
when(io.client.grant_ack.valid && c_ack.payload.master_xact_id === UInt(trackerId)) {
|
when(io.client.finish.valid && c_ack.payload.master_xact_id === UInt(trackerId)) {
|
||||||
state := s_idle
|
state := s_idle
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -154,7 +154,7 @@ class HTIF(w: Int, pcr_RESET: Int, nSCR: Int, offsetBits: Int)(implicit conf: Ti
|
|||||||
}
|
}
|
||||||
mem_acked := Bool(false)
|
mem_acked := Bool(false)
|
||||||
}
|
}
|
||||||
when (state === state_mem_finish && io.mem.grant_ack.ready) {
|
when (state === state_mem_finish && io.mem.finish.ready) {
|
||||||
state := Mux(cmd === cmd_readmem || pos === UInt(1), state_tx, state_rx)
|
state := Mux(cmd === cmd_readmem || pos === UInt(1), state_tx, state_rx)
|
||||||
pos := pos - UInt(1)
|
pos := pos - UInt(1)
|
||||||
addr := addr + UInt(1 << offsetBits-3)
|
addr := addr + UInt(1 << offsetBits-3)
|
||||||
@ -186,9 +186,9 @@ class HTIF(w: Int, pcr_RESET: Int, nSCR: Int, offsetBits: Int)(implicit conf: Ti
|
|||||||
io.mem.acquire.bits.payload.data := mem_req_data
|
io.mem.acquire.bits.payload.data := mem_req_data
|
||||||
io.mem.acquire.bits.header.src := UInt(conf.ln.nClients) // By convention HTIF is the client with the largest id
|
io.mem.acquire.bits.header.src := UInt(conf.ln.nClients) // By convention HTIF is the client with the largest id
|
||||||
io.mem.acquire.bits.header.dst := UInt(0) // DNC; Overwritten outside module
|
io.mem.acquire.bits.header.dst := UInt(0) // DNC; Overwritten outside module
|
||||||
io.mem.grant_ack.valid := (state === state_mem_finish) && mem_needs_ack
|
io.mem.finish.valid := (state === state_mem_finish) && mem_needs_ack
|
||||||
io.mem.grant_ack.bits.payload.master_xact_id := mem_gxid
|
io.mem.finish.bits.payload.master_xact_id := mem_gxid
|
||||||
io.mem.grant_ack.bits.header.dst := mem_gsrc
|
io.mem.finish.bits.header.dst := mem_gsrc
|
||||||
io.mem.probe.ready := Bool(false)
|
io.mem.probe.ready := Bool(false)
|
||||||
io.mem.release.valid := Bool(false)
|
io.mem.release.valid := Bool(false)
|
||||||
|
|
||||||
|
@ -148,14 +148,14 @@ class Grant(implicit val tlconf: TileLinkConfiguration) extends MasterSourcedMes
|
|||||||
val g_type = UInt(width = tlconf.co.grantTypeWidth)
|
val g_type = UInt(width = tlconf.co.grantTypeWidth)
|
||||||
}
|
}
|
||||||
|
|
||||||
class GrantAck(implicit val tlconf: TileLinkConfiguration) extends ClientSourcedMessage with HasMasterTransactionId
|
class Finish(implicit val tlconf: TileLinkConfiguration) extends ClientSourcedMessage with HasMasterTransactionId
|
||||||
|
|
||||||
|
|
||||||
class UncachedTileLinkIO(implicit conf: TileLinkConfiguration) extends Bundle {
|
class UncachedTileLinkIO(implicit conf: TileLinkConfiguration) extends Bundle {
|
||||||
implicit val ln = conf.ln
|
implicit val ln = conf.ln
|
||||||
val acquire = new DecoupledIO(new LogicalNetworkIO(new Acquire))
|
val acquire = new DecoupledIO(new LogicalNetworkIO(new Acquire))
|
||||||
val grant = new DecoupledIO(new LogicalNetworkIO(new Grant)).flip
|
val grant = new DecoupledIO(new LogicalNetworkIO(new Grant)).flip
|
||||||
val grant_ack = new DecoupledIO(new LogicalNetworkIO(new GrantAck))
|
val finish = new DecoupledIO(new LogicalNetworkIO(new Finish))
|
||||||
override def clone = { new UncachedTileLinkIO().asInstanceOf[this.type] }
|
override def clone = { new UncachedTileLinkIO().asInstanceOf[this.type] }
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -214,9 +214,9 @@ abstract class UncachedTileLinkIOArbiter(n: Int)(implicit conf: TileLinkConfigur
|
|||||||
hookupClientSource(io.in.map(_.acquire), io.out.acquire)
|
hookupClientSource(io.in.map(_.acquire), io.out.acquire)
|
||||||
hookupMasterSource(io.in.map(_.grant), io.out.grant)
|
hookupMasterSource(io.in.map(_.grant), io.out.grant)
|
||||||
|
|
||||||
val grant_ack_arb = Module(new RRArbiter(new LogicalNetworkIO(new GrantAck), n))
|
val finish_arb = Module(new RRArbiter(new LogicalNetworkIO(new Finish), n))
|
||||||
io.out.grant_ack <> grant_ack_arb.io.out
|
io.out.finish <> finish_arb.io.out
|
||||||
grant_ack_arb.io.in zip io.in map { case (arb, req) => arb <> req.grant_ack }
|
finish_arb.io.in zip io.in map { case (arb, req) => arb <> req.finish }
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract class TileLinkIOArbiter(n: Int)(implicit conf: TileLinkConfiguration) extends TileLinkArbiterLike(n)(conf) {
|
abstract class TileLinkIOArbiter(n: Int)(implicit conf: TileLinkConfiguration) extends TileLinkArbiterLike(n)(conf) {
|
||||||
@ -233,9 +233,9 @@ abstract class TileLinkIOArbiter(n: Int)(implicit conf: TileLinkConfiguration) e
|
|||||||
io.in.map{ _.probe.bits := io.out.probe.bits }
|
io.in.map{ _.probe.bits := io.out.probe.bits }
|
||||||
io.out.probe.ready := io.in.map(_.probe.ready).reduce(_||_)
|
io.out.probe.ready := io.in.map(_.probe.ready).reduce(_||_)
|
||||||
|
|
||||||
val grant_ack_arb = Module(new RRArbiter(new LogicalNetworkIO(new GrantAck), n))
|
val finish_arb = Module(new RRArbiter(new LogicalNetworkIO(new Finish), n))
|
||||||
io.out.grant_ack <> grant_ack_arb.io.out
|
io.out.finish <> finish_arb.io.out
|
||||||
grant_ack_arb.io.in zip io.in map { case (arb, req) => arb <> req.grant_ack }
|
finish_arb.io.in zip io.in map { case (arb, req) => arb <> req.finish }
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract trait AppendsArbiterId {
|
abstract trait AppendsArbiterId {
|
||||||
|
@ -64,9 +64,9 @@ class L2CoherenceAgent(bankId: Int)(implicit conf: L2CoherenceAgentConfiguration
|
|||||||
grant_arb.io.in zip trackerList map { case (arb, t) => arb <> t.io.client.grant }
|
grant_arb.io.in zip trackerList map { case (arb, t) => arb <> t.io.client.grant }
|
||||||
|
|
||||||
// Free finished transactions
|
// Free finished transactions
|
||||||
val ack = io.client.grant_ack
|
val ack = io.client.finish
|
||||||
trackerList.map(_.io.client.grant_ack.valid := ack.valid)
|
trackerList.map(_.io.client.finish.valid := ack.valid)
|
||||||
trackerList.map(_.io.client.grant_ack.bits := ack.bits)
|
trackerList.map(_.io.client.finish.bits := ack.bits)
|
||||||
ack.ready := Bool(true)
|
ack.ready := Bool(true)
|
||||||
|
|
||||||
// Create an arbiter for the one memory port
|
// Create an arbiter for the one memory port
|
||||||
@ -89,7 +89,7 @@ abstract class XactTracker()(implicit conf: L2CoherenceAgentConfiguration) exten
|
|||||||
val c_acq = io.client.acquire.bits
|
val c_acq = io.client.acquire.bits
|
||||||
val c_rel = io.client.release.bits
|
val c_rel = io.client.release.bits
|
||||||
val c_gnt = io.client.grant.bits
|
val c_gnt = io.client.grant.bits
|
||||||
val c_ack = io.client.grant_ack.bits
|
val c_ack = io.client.finish.bits
|
||||||
val m_gnt = io.master.grant.bits
|
val m_gnt = io.master.grant.bits
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -273,7 +273,7 @@ class AcquireTracker(trackerId: Int, bankId: Int)(implicit conf: L2CoherenceAgen
|
|||||||
when(io.master.grant.valid && m_gnt.payload.client_xact_id === UInt(trackerId)) {
|
when(io.master.grant.valid && m_gnt.payload.client_xact_id === UInt(trackerId)) {
|
||||||
io.client.grant.valid := Bool(true)
|
io.client.grant.valid := Bool(true)
|
||||||
}
|
}
|
||||||
when(io.client.grant_ack.valid && c_ack.payload.master_xact_id === UInt(trackerId)) {
|
when(io.client.finish.valid && c_ack.payload.master_xact_id === UInt(trackerId)) {
|
||||||
state := s_idle
|
state := s_idle
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user