@@ -36,24 +36,13 @@ abstract class TLBusWrapper(params: HasTLBusParams, val busName: String)(implici
3636 with HasTLBusParams
3737 with CanHaveBuiltInDevices
3838{
39- private val clockGroupAggregator = LazyModule (new ClockGroupAggregator (busName){ override def shouldBeInlined = true }).suggestName(busName + " _clock_groups" )
40- private val clockGroup = LazyModule (new ClockGroup (busName){ override def shouldBeInlined = true })
41- val clockGroupNode = clockGroupAggregator.node // other bus clock groups attach here
42- val clockNode = clockGroup.node
43- val fixedClockNode = FixedClockBroadcast (fixedClockOpt) // device clocks attach here
39+ val clockNode = ClockAdapterNode () // device clocks attach here
40+ val fixedClockNode = FixedClockBroadcast (fixedClockOpt)
4441 private val clockSinkNode = ClockSinkNode (List (ClockSinkParameters (take = fixedClockOpt)))
4542
46- clockGroup.node := clockGroupAggregator.node
47- fixedClockNode := clockGroup.node // first member of group is always domain's own clock
43+ fixedClockNode := clockNode
4844 clockSinkNode := fixedClockNode
4945
50- InModuleBody {
51- // make sure the above connections work properly because mismatched-by-name signals will just be ignored.
52- (clockGroup.node.edges.in zip clockGroupAggregator.node.edges.out).zipWithIndex map { case ((in : ClockGroupEdgeParameters , out : ClockGroupEdgeParameters ), i) =>
53- require(in.members.keys == out.members.keys, s " clockGroup := clockGroupAggregator not working as you expect for index ${i}, becuase clockGroup has ${in.members.keys} and clockGroupAggregator has ${out.members.keys}" )
54- }
55- }
56-
5746 def clockBundle = clockSinkNode.in.head._1
5847 def beatBytes = params.beatBytes
5948 def blockBytes = params.blockBytes
@@ -94,23 +83,23 @@ abstract class TLBusWrapper(params: HasTLBusParams, val busName: String)(implici
9483 def coupleFrom [T ](name : String )(gen : TLInwardNode => T ): T =
9584 from(name) { gen(inwardNode :*=* TLNameNode (" tl" )) }
9685
97- def crossToBus (bus : TLBusWrapper , xType : ClockCrossingType , allClockGroupNode : ClockGroupEphemeralNode ): NoHandle = {
98- bus.clockGroupNode := asyncMux(xType, allClockGroupNode , this .clockGroupNode )
86+ def crossToBus (bus : TLBusWrapper , xType : ClockCrossingType , asyncClockNode : ClockEphemeralNode ): NoHandle = {
87+ bus.clockNode := asyncMux(xType, asyncClockNode , this .clockNode )
9988 coupleTo(s " bus_named_ ${bus.busName}" ) {
10089 bus.crossInHelper(xType) :*= TLWidthWidget (beatBytes) :*= _
10190 }
10291 }
10392
104- def crossFromBus (bus : TLBusWrapper , xType : ClockCrossingType , allClockGroupNode : ClockGroupEphemeralNode ): NoHandle = {
105- bus.clockGroupNode := asyncMux(xType, allClockGroupNode, this .clockGroupNode )
93+ def crossFromBus (bus : TLBusWrapper , xType : ClockCrossingType , asyncClockNode : ClockEphemeralNode ): NoHandle = {
94+ this .clockNode := asyncMux(xType, asyncClockNode, bus.clockNode )
10695 coupleFrom(s " bus_named_ ${bus.busName}" ) {
10796 _ :=* TLWidthWidget (bus.beatBytes) :=* bus.crossOutHelper(xType)
10897 }
10998 }
11099}
111100
112101trait TLBusWrapperInstantiationLike {
113- def instantiate (context : HasTileLinkLocations , loc : Location [TLBusWrapper ])(implicit p : Parameters ): TLBusWrapper
102+ def instantiate (context : HasTileLinkLocations with HasPRCILocations with LazyModule , loc : Location [TLBusWrapper ])(implicit p : Parameters ): TLBusWrapper
114103}
115104
116105trait TLBusWrapperConnectionLike {
@@ -183,8 +172,8 @@ class TLBusWrapperConnection
183172 val masterTLBus = context.locateTLBusWrapper(master)
184173 val slaveTLBus = context.locateTLBusWrapper(slave)
185174 def bindClocks (implicit p : Parameters ) = driveClockFromMaster match {
186- case Some (true ) => slaveTLBus.clockGroupNode := asyncMux(xType, context.allClockGroupsNode , masterTLBus.clockGroupNode )
187- case Some (false ) => masterTLBus.clockGroupNode := asyncMux(xType, context.allClockGroupsNode , slaveTLBus.clockGroupNode )
175+ case Some (true ) => slaveTLBus.clockNode := asyncMux(xType, masterTLBus.clockNode , masterTLBus.clockNode )
176+ case Some (false ) => masterTLBus.clockNode := asyncMux(xType, slaveTLBus.clockNode , slaveTLBus.clockNode )
188177 case None =>
189178 }
190179 def bindTLNodes (implicit p : Parameters ) = nodeBinding match {
@@ -214,10 +203,10 @@ class TLBusWrapperTopology(
214203) extends CanInstantiateWithinContextThatHasTileLinkLocations
215204 with CanConnectWithinContextThatHasTileLinkLocations
216205{
217- def instantiate (context : HasTileLinkLocations )(implicit p : Parameters ): Unit = {
206+ def instantiate (context : HasTileLinkLocations with HasPRCILocations with LazyModule )(implicit p : Parameters ): Unit = {
218207 instantiations.foreach { case (loc, params) => context { params.instantiate(context, loc) } }
219208 }
220- def connect (context : HasTileLinkLocations )(implicit p : Parameters ): Unit = {
209+ def connect (context : HasTileLinkLocations with HasPRCILocations with LazyModule )(implicit p : Parameters ): Unit = {
221210 connections.foreach { case (master, slave, params) => context { params.connect(context, master, slave) } }
222211 }
223212}
@@ -244,7 +233,7 @@ case class AddressAdjusterWrapperParams(
244233 with TLBusWrapperInstantiationLike
245234{
246235 val dtsFrequency = None
247- def instantiate (context : HasTileLinkLocations , loc : Location [TLBusWrapper ])(implicit p : Parameters ): AddressAdjusterWrapper = {
236+ def instantiate (context : HasTileLinkLocations with HasPRCILocations with LazyModule , loc : Location [TLBusWrapper ])(implicit p : Parameters ): AddressAdjusterWrapper = {
248237 val aaWrapper = LazyModule (new AddressAdjusterWrapper (this , context.busContextName + " _" + loc.name))
249238 aaWrapper.suggestName(context.busContextName + " _" + loc.name + " _wrapper" )
250239 context.tlBusWrapperLocationMap += (loc -> aaWrapper)
@@ -274,7 +263,7 @@ case class TLJBarWrapperParams(
274263 with TLBusWrapperInstantiationLike
275264{
276265 val dtsFrequency = None
277- def instantiate (context : HasTileLinkLocations , loc : Location [TLBusWrapper ])(implicit p : Parameters ): TLJBarWrapper = {
266+ def instantiate (context : HasTileLinkLocations with HasPRCILocations with LazyModule , loc : Location [TLBusWrapper ])(implicit p : Parameters ): TLJBarWrapper = {
278267 val jbarWrapper = LazyModule (new TLJBarWrapper (this , context.busContextName + " _" + loc.name))
279268 jbarWrapper.suggestName(context.busContextName + " _" + loc.name + " _wrapper" )
280269 context.tlBusWrapperLocationMap += (loc -> jbarWrapper)
0 commit comments