Skip to content

Commit df74ae8

Browse files
committed
Add option to use MergedCreditedCrossing in HierarchicalElements
1 parent c021543 commit df74ae8

File tree

4 files changed

+22
-5
lines changed

4 files changed

+22
-5
lines changed

src/main/scala/subsystem/Configs.scala

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import freechips.rocketchip.devices.debug.{DebugModuleKey, DefaultDebugModulePar
1212
import freechips.rocketchip.devices.tilelink.{
1313
BuiltInErrorDeviceParams, BootROMLocated, BootROMParams, CLINTKey, DevNullDevice, CLINTParams, PLICKey, PLICParams, DevNullParams
1414
}
15-
import freechips.rocketchip.prci.{SynchronousCrossing, AsynchronousCrossing, RationalCrossing, ClockCrossingType}
15+
import freechips.rocketchip.prci.{SynchronousCrossing, AsynchronousCrossing, RationalCrossing, ClockCrossingType, CreditedCrossing}
1616
import freechips.rocketchip.diplomacy.{
1717
AddressSet, MonitorsEnabled,
1818
}
@@ -517,6 +517,16 @@ class WithRationalRocketTiles extends Config((site, here, up) => {
517517
}
518518
})
519519

520+
class WithCreditedRocketTiles(mergedCredited: Boolean = false) extends Config((site, here, up) => {
521+
case TilesLocated(location) => up(TilesLocated(location), site) map {
522+
case tp: RocketTileAttachParams => tp.copy(crossingParams = tp.crossingParams.copy(
523+
crossingType = CreditedCrossing(),
524+
forceMergedCreditedTLCrossings = mergedCredited
525+
))
526+
case t => t
527+
}
528+
})
529+
520530
class WithEdgeDataBits(dataBits: Int) extends Config((site, here, up) => {
521531
case MemoryBusKey => up(MemoryBusKey, site).copy(beatBytes = dataBits/8)
522532
case ExtIn => up(ExtIn, site).map(_.copy(beatBytes = dataBits/8))

src/main/scala/subsystem/HierarchicalElement.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ trait HierarchicalElementCrossingParamsLike {
3535
def resetCrossingType: ResetCrossingType
3636
/** Keep the element clock separate from the interconnect clock (e.g. even if they are synchronous to one another) */
3737
def forceSeparateClockReset: Boolean
38+
/** Used a MergedCreditedTLCrossing for credited TL crossings to save pins */
39+
def forceMergedCreditedTLCrossings: Boolean
3840
}
3941

4042
/** An interface for describing the parameterization of how a particular element port is connected to an interconnect */

src/main/scala/subsystem/HierarchicalElementPRCIDomain.scala

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import freechips.rocketchip.diplomacy.{DisableMonitors, FlipRendering}
1111
import freechips.rocketchip.interrupts.{IntInwardNode, IntOutwardNode}
1212
import freechips.rocketchip.prci.{ClockCrossingType, ResetCrossingType, ResetDomain, ClockSinkNode, ClockSinkParameters, ClockIdentityNode, FixedClockBroadcast, ClockDomain}
1313
import freechips.rocketchip.tile.{RocketTile, TraceBundle}
14-
import freechips.rocketchip.tilelink.{TLInwardNode, TLOutwardNode}
14+
import freechips.rocketchip.tilelink.{TLInwardNode, TLOutwardNode, UseTLMergedCreditedCrossing}
1515
import freechips.rocketchip.util.TraceCoreInterface
1616

1717
import freechips.rocketchip.tilelink.TLClockDomainCrossing
@@ -83,7 +83,9 @@ abstract class HierarchicalElementPRCIDomain[T <: BaseHierarchicalElement](
8383
element { element.makeSlaveBoundaryBuffers(crossingType) }
8484
}
8585
val tlSlaveClockXing = this.crossIn(tlSlaveResetXing)
86-
tlSlaveClockXing(crossingType)
86+
tlSlaveClockXing(crossingType)(p.alterPartial {
87+
case UseTLMergedCreditedCrossing => crossingParams.forceMergedCreditedTLCrossings
88+
})
8789
} } }
8890

8991
/** External code looking to connect the ports where this tile masters an interconnect
@@ -95,6 +97,8 @@ abstract class HierarchicalElementPRCIDomain[T <: BaseHierarchicalElement](
9597
element_reset_domain.crossTLOut(element.masterNode)
9698
} }
9799
val tlMasterClockXing = this.crossOut(tlMasterResetXing)
98-
tlMasterClockXing(crossingType)
100+
tlMasterClockXing(crossingType)(p.alterPartial {
101+
case UseTLMergedCreditedCrossing => crossingParams.forceMergedCreditedTLCrossings
102+
})
99103
}
100104
}

src/main/scala/subsystem/RocketSubsystem.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ case class RocketCrossingParams(
1616
slave: HierarchicalElementSlavePortParams = HierarchicalElementSlavePortParams(),
1717
mmioBaseAddressPrefixWhere: TLBusWrapperLocation = CBUS,
1818
resetCrossingType: ResetCrossingType = NoResetCrossing(),
19-
forceSeparateClockReset: Boolean = false
19+
forceSeparateClockReset: Boolean = false,
20+
forceMergedCreditedTLCrossings: Boolean = false
2021
) extends HierarchicalElementCrossingParamsLike
2122

2223
case class RocketTileAttachParams(

0 commit comments

Comments
 (0)