TLBuffer: replace TLBufferChain with TLBuffer.chain
This commit is contained in:
parent
ce2b904b19
commit
05d48d1807
@ -28,16 +28,12 @@ class FrontBus(params: FrontBusParams)(implicit p: Parameters) extends TLBusWrap
|
|||||||
master_fixer.node :=* master_buffer.node
|
master_fixer.node :=* master_buffer.node
|
||||||
inwardNode :=* master_fixer.node
|
inwardNode :=* master_fixer.node
|
||||||
|
|
||||||
def fromSyncPorts(addBuffers: Int = 0, name: Option[String] = None): TLInwardNode = {
|
def fromSyncPorts(addBuffers: Int = 0, name: Option[String] = None): TLInwardNode = SourceCardinality { implicit p =>
|
||||||
val (in, out) = bufferChain(addBuffers, name)
|
TLBuffer.chain(addBuffers).foldLeft(master_buffer.node:TLInwardNode)(_ :=? _)
|
||||||
master_buffer.node :=* out
|
|
||||||
in
|
|
||||||
}
|
}
|
||||||
|
|
||||||
def fromSyncMasters(addBuffers: Int = 0, name: Option[String] = None): TLInwardNode = {
|
def fromSyncMasters(addBuffers: Int = 0, name: Option[String] = None): TLInwardNode = SourceCardinality { implicit p =>
|
||||||
val (in, out) = bufferChain(addBuffers, name)
|
TLBuffer.chain(addBuffers).foldLeft(master_buffer.node:TLInwardNode)(_ :=? _)
|
||||||
master_buffer.node :=* out
|
|
||||||
in
|
|
||||||
}
|
}
|
||||||
|
|
||||||
def fromCoherentChip: TLInwardNode = inwardNode
|
def fromCoherentChip: TLInwardNode = inwardNode
|
||||||
|
@ -39,9 +39,7 @@ class SystemBus(params: SystemBusParams)(implicit p: Parameters) extends TLBusWr
|
|||||||
def toSplitSlaves: TLOutwardNode = outwardSplitNode
|
def toSplitSlaves: TLOutwardNode = outwardSplitNode
|
||||||
|
|
||||||
def toPeripheryBus(addBuffers: Int = 0): TLOutwardNode = {
|
def toPeripheryBus(addBuffers: Int = 0): TLOutwardNode = {
|
||||||
val (in, out) = bufferChain(addBuffers, name = Some("pbus"))
|
TLBuffer.chain(addBuffers).foldRight(pbus_fixer.node:TLOutwardNode)(_ := _)
|
||||||
in := pbus_fixer.node
|
|
||||||
out
|
|
||||||
}
|
}
|
||||||
|
|
||||||
val toMemoryBus: TLOutwardNode = outwardNode
|
val toMemoryBus: TLOutwardNode = outwardNode
|
||||||
|
@ -78,21 +78,3 @@ object TLBuffer
|
|||||||
buffers.map(_.node)
|
buffers.map(_.node)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class TLBufferChain(depth: Int)(implicit p: Parameters) extends SimpleLazyModule {
|
|
||||||
val buf_chain = List.fill(depth)(LazyModule(new TLBuffer(BufferParams.default)))
|
|
||||||
val node = buf_chain.map(_.node:TLNode).reduceOption(_ :=? _).getOrElse(TLIdentityNode())
|
|
||||||
}
|
|
||||||
|
|
||||||
object TLBufferChain
|
|
||||||
{
|
|
||||||
def apply(depth: Int)(x: TLOutwardNode)(implicit p: Parameters, sourceInfo: SourceInfo): TLOutwardNode = {
|
|
||||||
if (depth > 0) {
|
|
||||||
val buffer = LazyModule(new TLBufferChain(depth))
|
|
||||||
buffer.node :=? x
|
|
||||||
buffer.node
|
|
||||||
} else {
|
|
||||||
x
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
@ -68,34 +68,24 @@ abstract class TLBusWrapper(params: TLBusParams, val busName: String)(implicit p
|
|||||||
protected def inwardNode: TLInwardNode = xbar.node
|
protected def inwardNode: TLInwardNode = xbar.node
|
||||||
protected def inwardBufNode: TLInwardNode = master_buffer.node
|
protected def inwardBufNode: TLInwardNode = master_buffer.node
|
||||||
|
|
||||||
protected def bufferChain(depth: Int, name: Option[String] = None): (TLInwardNode, TLOutwardNode) = {
|
|
||||||
SourceCardinality { implicit p =>
|
|
||||||
val chain = LazyModule(new TLBufferChain(depth))
|
|
||||||
name.foreach { n => chain.suggestName(s"${busName}_${n}_TLBufferChain")}
|
|
||||||
(chain.node, chain.node)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
def bufferFromMasters: TLInwardNode = inwardBufNode
|
def bufferFromMasters: TLInwardNode = inwardBufNode
|
||||||
|
|
||||||
def bufferToSlaves: TLOutwardNode = outwardBufNode
|
def bufferToSlaves: TLOutwardNode = outwardBufNode
|
||||||
|
|
||||||
def toSyncSlaves(name: Option[String] = None, addBuffers: Int = 0): TLOutwardNode = SinkCardinality { implicit p =>
|
def toSyncSlaves(name: Option[String] = None, addBuffers: Int = 0): TLOutwardNode = SinkCardinality { implicit p =>
|
||||||
TLBufferChain(addBuffers)(outwardBufNode)
|
TLBuffer.chain(addBuffers).foldRight(outwardBufNode)(_ :=? _)
|
||||||
}
|
}
|
||||||
|
|
||||||
def toAsyncSlaves(sync: Int = 3, name: Option[String] = None, addBuffers: Int = 0): TLAsyncOutwardNode = SinkCardinality { implicit p =>
|
def toAsyncSlaves(sync: Int = 3, name: Option[String] = None, addBuffers: Int = 0): TLAsyncOutwardNode = SinkCardinality { implicit p =>
|
||||||
val source = LazyModule(new TLAsyncCrossingSource(sync))
|
val source = LazyModule(new TLAsyncCrossingSource(sync))
|
||||||
name.foreach{ n => source.suggestName(s"${busName}_${n}_TLAsyncCrossingSource")}
|
name.foreach{ n => source.suggestName(s"${busName}_${n}_TLAsyncCrossingSource")}
|
||||||
source.node :=? TLBufferChain(addBuffers)(outwardNode)
|
source.node :=? TLBuffer.chain(addBuffers).foldRight(outwardNode)(_ :=? _)
|
||||||
source.node
|
|
||||||
}
|
}
|
||||||
|
|
||||||
def toRationalSlaves(name: Option[String] = None, addBuffers: Int = 0): TLRationalOutwardNode = SinkCardinality { implicit p =>
|
def toRationalSlaves(name: Option[String] = None, addBuffers: Int = 0): TLRationalOutwardNode = SinkCardinality { implicit p =>
|
||||||
val source = LazyModule(new TLRationalCrossingSource())
|
val source = LazyModule(new TLRationalCrossingSource())
|
||||||
name.foreach{ n => source.suggestName(s"${busName}_${n}_TLRationalCrossingSource")}
|
name.foreach{ n => source.suggestName(s"${busName}_${n}_TLRationalCrossingSource")}
|
||||||
source.node :=? TLBufferChain(addBuffers)(outwardNode)
|
source.node :=? TLBuffer.chain(addBuffers).foldRight(outwardNode)(_ :=? _)
|
||||||
source.node
|
|
||||||
}
|
}
|
||||||
|
|
||||||
def toVariableWidthSlaves: TLOutwardNode = outwardFragNode
|
def toVariableWidthSlaves: TLOutwardNode = outwardFragNode
|
||||||
|
Loading…
Reference in New Issue
Block a user