tilelink2: most adapters can wipe away latency
This commit is contained in:
		| @@ -47,9 +47,10 @@ class TLFragmenter(minSize: Int, maxSize: Int, alwaysMin: Boolean = false) exten | ||||
|     supportsPutPartial = TransferSizes.none, | ||||
|     supportsHint       = TransferSizes.none) | ||||
|  | ||||
|   // Because the Fragmenter stalls inner A while serving outer, it can wipe away inner latency | ||||
|   val node = TLAdapterNode( | ||||
|     clientFn  = { case Seq(c) => c.copy(clients = c.clients.map(mapClient)) }, | ||||
|     managerFn = { case Seq(m) => m.copy(managers = m.managers.map(mapManager)) }) | ||||
|     managerFn = { case Seq(m) => m.copy(managers = m.managers.map(mapManager), minLatency = 0) }) | ||||
|  | ||||
|   lazy val module = new LazyModuleImp(this) { | ||||
|     val io = new Bundle { | ||||
|   | ||||
| @@ -8,9 +8,10 @@ import chisel3.internal.sourceinfo.SourceInfo | ||||
| // Acks Hints for managers that don't support them or Acks all Hints if !passthrough | ||||
| class TLHintHandler(supportManagers: Boolean = true, supportClients: Boolean = false, passthrough: Boolean = true) extends LazyModule | ||||
| { | ||||
|   // HintAcks can come back combinationally => minLatency=0 | ||||
|   val node = TLAdapterNode( | ||||
|     clientFn  = { case Seq(c) => if (!supportClients)  c else c.copy(clients  = c.clients .map(_.copy(supportsHint = TransferSizes(1, c.maxTransfer)))) }, | ||||
|     managerFn = { case Seq(m) => if (!supportManagers) m else m.copy(managers = m.managers.map(_.copy(supportsHint = TransferSizes(1, m.maxTransfer)))) }) | ||||
|     clientFn  = { case Seq(c) => if (!supportClients)  c else c.copy(minLatency = 0, clients  = c.clients .map(_.copy(supportsHint = TransferSizes(1, c.maxTransfer)))) }, | ||||
|     managerFn = { case Seq(m) => if (!supportManagers) m else m.copy(minLatency = 0, managers = m.managers.map(_.copy(supportsHint = TransferSizes(1, m.maxTransfer)))) }) | ||||
|  | ||||
|   lazy val module = new LazyModuleImp(this) { | ||||
|     val io = new Bundle { | ||||
|   | ||||
| @@ -10,9 +10,10 @@ import scala.math.{min,max} | ||||
| // innBeatBytes => the new client-facing bus width | ||||
| class TLWidthWidget(innerBeatBytes: Int) extends LazyModule | ||||
| { | ||||
|   // Because we stall the request while sending beats, atomics can overlap => minLatency=0 | ||||
|   val node = TLAdapterNode( | ||||
|     clientFn  = { case Seq(c) => c }, | ||||
|     managerFn = { case Seq(m) => m.copy(beatBytes = innerBeatBytes) }) | ||||
|     clientFn  = { case Seq(c) => c.copy(minLatency = 0) }, | ||||
|     managerFn = { case Seq(m) => m.copy(minLatency = 0, beatBytes = innerBeatBytes) }) | ||||
|  | ||||
|   lazy val module = new LazyModuleImp(this) { | ||||
|     val io = new Bundle { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user