Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support Tile Clusters (tree-like hierarchies) #3238

Closed
wants to merge 37 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
5fb9f34
Relax HasTiles to support Attachable only
jerryz123 Jan 20, 2023
04257b9
Force tiles to provide names
jerryz123 Jan 21, 2023
342aace
HasCoreIO to HasRocketCoreIO
jerryz123 Jan 21, 2023
0907c57
Add abstract Element class
jerryz123 Jan 21, 2023
8190e6f
Move more stuff to element
jerryz123 Jan 21, 2023
c6a5781
Generalize more things to Element
jerryz123 Jan 23, 2023
e70c54c
Rename SubsystemExternal to HasTiles
jerryz123 Jan 23, 2023
e1e0c6b
Generalize InstantiatesTiles to InstantiatesElements
jerryz123 Jan 23, 2023
7ffdc3d
Rename HasTilesModuleImp to HasTilesRootModuleImp
jerryz123 Jan 23, 2023
46d7d24
HasTilesModuleImp to HasElementsModuleImp
jerryz123 Jan 23, 2023
7fc6230
Create ElementPRCIDomain
jerryz123 Jan 23, 2023
4ae1bb2
traceNode to Seqs
jerryz123 Jan 23, 2023
7b1489a
Use Nodes in HasElement for interrupts
jerryz123 Jan 23, 2023
40c5efc
Genericize traceNodes
jerryz123 Jan 23, 2023
932b724
Genericize crossTracesout
jerryz123 Jan 23, 2023
115a3b0
Genericize rest of TilePRCIDomain
jerryz123 Jan 23, 2023
4ee3388
Genericize interrupts
jerryz123 Jan 24, 2023
9b8c6a8
Move more stuff to Element
jerryz123 Jan 25, 2023
5b71ebd
Use map for tracenodes
jerryz123 Jan 25, 2023
5e3e968
Improve tile context node types
jerryz123 Jan 26, 2023
04120ab
Fix tiles in clusters
jerryz123 Jan 30, 2023
2d51ef7
Don't print minLatency in TLMonitor to improve dedup
jerryz123 Jan 30, 2023
f4b98f4
Add clustesr
jerryz123 Jan 30, 2023
ca3041f
Rename staticHartId to tileId
jerryz123 Jan 30, 2023
01b087f
Remove CCBUS TLBusWrapperLocations
jerryz123 Jan 30, 2023
00f6682
Improve deduplication of clustesr
jerryz123 Jan 30, 2023
748a545
Deprecate basesubsystemn clocking backwards compatibility features
jerryz123 Jan 31, 2023
eaf0f34
Fix no SEIP configs
jerryz123 Jan 31, 2023
b00c5c8
Fix ElementPRCIDomain missing its implicit clock/reset
jerryz123 Jan 31, 2023
f576f19
Move BankedL2Params.scala to BankedCoherenceParams.scala
jerryz123 Jan 31, 2023
b16b339
Rename BankedL2Key to BankedCoherenceKey
jerryz123 Jan 31, 2023
c94ba8d
Rename L2 to LLC
jerryz123 Jan 31, 2023
6e727f0
Rename LLC to COH
jerryz123 Jan 31, 2023
b68bf0c
Remove deprecated stuff out of BusWrapper
jerryz123 Jan 31, 2023
ba35010
Add busContextName
jerryz123 Jan 31, 2023
2e9077c
Remove old sbus arg to CoherentBusTopoParams
jerryz123 Jan 31, 2023
9cfbf2e
Support CloneCluster
jerryz123 Feb 1, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion src/main/scala/devices/debug/Debug.scala
Original file line number Diff line number Diff line change
Expand Up @@ -690,7 +690,8 @@ class TLDebugModuleOuterAsync(device: Device)(implicit p: Parameters) extends La
})

val dmOuter = LazyModule( new TLDebugModuleOuter(device))
val intnode = IntSyncCrossingSource(alreadyRegistered = true) :*= dmOuter.intnode
val intnode = IntSyncIdentityNode()
intnode :*= IntSyncCrossingSource(alreadyRegistered = true) :*= dmOuter.intnode

val dmiBypass = LazyModule(new TLBusBypass(beatBytes=4, bufferError=false, maxAtomic=0, maxTransfer=4))
val dmiInnerNode = TLAsyncCrossingSource() := dmiBypass.node := dmiXbar.node
Expand Down
3 changes: 2 additions & 1 deletion src/main/scala/devices/debug/Periphery.scala
Original file line number Diff line number Diff line change
Expand Up @@ -97,9 +97,10 @@ trait HasPeripheryDebug { this: BaseSubsystem =>
}
tlDM
}
val debugNode = debugOpt.map(_.intnode)
}

trait HasPeripheryDebugModuleImp extends LazyModuleImp {
trait HasPeripheryDebugModuleImp extends LazyRawModuleImp {
val outer: HasPeripheryDebug

val psd = IO(new PSDIO)
Expand Down
4 changes: 2 additions & 2 deletions src/main/scala/devices/tilelink/BootROM.scala
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ package freechips.rocketchip.devices.tilelink
import chisel3._
import chisel3.util.log2Ceil
import freechips.rocketchip.config.{Field, Parameters}
import freechips.rocketchip.subsystem.{BaseSubsystem, HierarchicalLocation, HasTiles, TLBusWrapperLocation}
import freechips.rocketchip.subsystem._
import freechips.rocketchip.diplomacy._
import freechips.rocketchip.tilelink._
import freechips.rocketchip.prci.{ClockSinkDomain}
Expand Down Expand Up @@ -66,7 +66,7 @@ object BootROM {
* at a configurable location, but also drives the tiles' reset vectors to point
* at its 'hang' address parameter value.
*/
def attach(params: BootROMParams, subsystem: BaseSubsystem with HasTiles, where: TLBusWrapperLocation)
def attach(params: BootROMParams, subsystem: BaseSubsystem with HasElements with HasTileInputConstants, where: TLBusWrapperLocation)
(implicit p: Parameters): TLROM = {
val tlbus = subsystem.locateTLBusWrapper(where)
val bootROMDomainWrapper = LazyModule(new ClockSinkDomain(take = None))
Expand Down
1 change: 1 addition & 0 deletions src/main/scala/devices/tilelink/CLINT.scala
Original file line number Diff line number Diff line change
Expand Up @@ -116,4 +116,5 @@ trait CanHavePeripheryCLINT { this: BaseSubsystem =>
clint

}
val clintNode = clintOpt.map(_.intnode)
}
1 change: 1 addition & 0 deletions src/main/scala/devices/tilelink/Plic.scala
Original file line number Diff line number Diff line change
Expand Up @@ -365,4 +365,5 @@ trait CanHavePeripheryPLIC { this: BaseSubsystem =>

plic
}
val plicNode = plicOpt.map(_.intnode)
}
8 changes: 4 additions & 4 deletions src/main/scala/groundtest/Configs.scala
Original file line number Diff line number Diff line change
Expand Up @@ -30,25 +30,24 @@ class GroundTestBaseConfig extends Config(
case DebugModuleKey => None
case CLINTKey => None
case PLICKey => None
case SubsystemExternalResetVectorKey => true
case HasTilesExternalResetVectorKey => true
})
)

class WithTraceGen(
n: Int = 2,
overrideIdOffset: Option[Int] = None,
overrideMemOffset: Option[BigInt] = None)(
params: Seq[DCacheParams] = List.fill(n){ DCacheParams(nSets = 16, nWays = 1) },
nReqs: Int = 8192
) extends Config((site, here, up) => {
case TilesLocated(InSubsystem) => {
val prev = up(TilesLocated(InSubsystem), site)
val idOffset = overrideIdOffset.getOrElse(prev.size)
val idOffset = up(NumTiles)
val memOffset: BigInt = overrideMemOffset.orElse(site(ExtMem).map(_.master.base)).getOrElse(0x0L)
params.zipWithIndex.map { case (dcp, i) =>
TraceGenTileAttachParams(
tileParams = TraceGenParams(
hartId = i + idOffset,
tileId = i + idOffset,
dcache = Some(dcp),
wordBits = site(XLen),
addrBits = 32,
Expand All @@ -68,4 +67,5 @@ class WithTraceGen(
)
} ++ prev
}
case NumTiles => up(NumTiles) + n
})
23 changes: 17 additions & 6 deletions src/main/scala/groundtest/GroundTestSubsystem.scala
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,22 @@ package freechips.rocketchip.groundtest

import chisel3._
import freechips.rocketchip.config.{Parameters}
import freechips.rocketchip.diplomacy.{AddressSet, LazyModule}
import freechips.rocketchip.interrupts.{IntSinkNode, IntSinkPortSimple}
import freechips.rocketchip.subsystem.{BaseSubsystem, BaseSubsystemModuleImp, HasTiles, CanHaveMasterAXI4MemPort}
import freechips.rocketchip.diplomacy._
import freechips.rocketchip.interrupts._
import freechips.rocketchip.tile.{NMI}
import freechips.rocketchip.devices.tilelink.{CLINTConsts}
import freechips.rocketchip.subsystem._
import freechips.rocketchip.tilelink.{TLRAM, TLFragmenter}
import freechips.rocketchip.rocket.{TracedInstruction}
import freechips.rocketchip.util.{TraceCoreInterface}

class GroundTestSubsystem(implicit p: Parameters)
extends BaseSubsystem
with HasTiles
with InstantiatesElements
with HasElementsRootContext
with HasElements
with HasTileNotificationSinks
with HasTileInputConstants
with CanHaveMasterAXI4MemPort
{
val testram = LazyModule(new TLRAM(AddressSet(0x52000000, 0xfff), beatBytes=pbus.beatBytes))
Expand All @@ -23,13 +31,16 @@ class GroundTestSubsystem(implicit p: Parameters)
// No PLIC in ground test; so just sink the interrupts to nowhere
IntSinkNode(IntSinkPortSimple()) :=* ibus.toPLIC

val tileStatusNodes = tiles.collect { case t: GroundTestTile => t.statusNode.makeSink() }
val tileStatusNodes = totalTiles.values.collect { case t: GroundTestTile => t.statusNode.makeSink() }
val clintOpt = None
val debugOpt = None
val plicOpt = None

override lazy val module = new GroundTestSubsystemModuleImp(this)
}

class GroundTestSubsystemModuleImp[+L <: GroundTestSubsystem](_outer: L) extends BaseSubsystemModuleImp(_outer) {
val success = IO(Output(Bool()))
val status = dontTouch(DebugCombiner(outer.tileStatusNodes.map(_.bundle)))
val status = dontTouch(DebugCombiner(outer.tileStatusNodes.map(_.bundle).toSeq))
success := outer.tileCeaseSinkNode.in.head._1.asUInt.andR
}
2 changes: 1 addition & 1 deletion src/main/scala/groundtest/Tile.scala
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ abstract class GroundTestTile(
with SourcesExternalNotifications
{
val cpuDevice: SimpleDevice = new SimpleDevice("groundtest", Nil)
val intOutwardNode: IntOutwardNode = IntIdentityNode()
val intOutwardNode = None
val slaveNode: TLInwardNode = TLIdentityNode()
val statusNode = BundleBridgeSource(() => new GroundTestStatus)

Expand Down
16 changes: 8 additions & 8 deletions src/main/scala/groundtest/TraceGen.scala
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ import freechips.rocketchip.diplomacy.{ClockCrossingType}
import freechips.rocketchip.rocket._
import freechips.rocketchip.tile._
import freechips.rocketchip.tilelink._
import freechips.rocketchip.subsystem.{TileCrossingParamsLike, CanAttachTile}
import freechips.rocketchip.subsystem.{ElementCrossingParamsLike, CanAttachTile}
import freechips.rocketchip.util._
import freechips.rocketchip.prci.{ClockSinkParameters}

Expand Down Expand Up @@ -68,15 +68,15 @@ case class TraceGenParams(
memStart: BigInt, //p(ExtMem).base
numGens: Int,
dcache: Option[DCacheParams] = Some(DCacheParams()),
hartId: Int = 0
tileId: Int = 0
) extends InstantiableTileParams[TraceGenTile] with GroundTestTileParams
{
def instantiate(crossing: TileCrossingParamsLike, lookup: LookupByHartIdImpl)(implicit p: Parameters): TraceGenTile = {
def instantiate(crossing: ElementCrossingParamsLike, lookup: LookupByHartIdImpl)(implicit p: Parameters): TraceGenTile = {
new TraceGenTile(this, crossing, lookup)
}
val beuAddr = None
val blockerCtrlAddr = None
val name = None
val baseName = "tracegentile"
val uniqueName = s"${baseName}_$tileId"
val clockSinkParams = ClockSinkParameters()
}

Expand Down Expand Up @@ -105,7 +105,7 @@ trait HasTraceGenParams {

case class TraceGenTileAttachParams(
tileParams: TraceGenParams,
crossingParams: TileCrossingParamsLike
crossingParams: ElementCrossingParamsLike
) extends CanAttachTile {
type TileType = TraceGenTile
val lookup: LookupByHartIdImpl = HartsWontDeduplicate(tileParams)
Expand Down Expand Up @@ -617,7 +617,7 @@ class TraceGenTile private(
q: Parameters
) extends GroundTestTile(params, crossing, lookup, q)
{
def this(params: TraceGenParams, crossing: TileCrossingParamsLike, lookup: LookupByHartIdImpl)(implicit p: Parameters) =
def this(params: TraceGenParams, crossing: ElementCrossingParamsLike, lookup: LookupByHartIdImpl)(implicit p: Parameters) =
this(params, crossing.crossingType, lookup, p)

val masterNode: TLOutwardNode = TLIdentityNode() := visibilityNode := dcacheOpt.map(_.node).getOrElse(TLTempNode())
Expand All @@ -644,5 +644,5 @@ class TraceGenTileModuleImp(outer: TraceGenTile) extends GroundTestTileModuleImp
status.timeout.bits := 0.U
status.error.valid := false.B

assert(!tracegen.io.timeout, s"TraceGen tile ${outer.tileParams.hartId}: request timed out")
assert(!tracegen.io.timeout, s"TraceGen tile ${outer.tileParams.tileId}: request timed out")
}
4 changes: 4 additions & 0 deletions src/main/scala/interrupts/package.scala
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,10 @@ package object interrupts
type IntOutwardNode = OutwardNodeHandle[IntSourcePortParameters, IntSinkPortParameters, IntEdge, Vec[Bool]]
type IntNode = SimpleNodeHandle[IntSourcePortParameters, IntSinkPortParameters, IntEdge, Vec[Bool]]

type IntSyncInwardNode = InwardNodeHandle[IntSourcePortParameters, IntSinkPortParameters, IntEdge, SyncInterrupts]
type IntSyncOutwardNode = OutwardNodeHandle[IntSourcePortParameters, IntSinkPortParameters, IntEdge, SyncInterrupts]
type IntSyncNode = SimpleNodeHandle[IntSourcePortParameters, IntSinkPortParameters, IntEdge, SyncInterrupts]

implicit class IntClockDomainCrossing(private val x: HasClockDomainCrossing) extends AnyVal {
def crossIn (n: IntInwardNode) (implicit valName: ValName) = IntInwardClockCrossingHelper(valName.name, x, n)
def crossOut(n: IntOutwardNode)(implicit valName: ValName) = IntOutwardClockCrossingHelper(valName.name, x, n)
Expand Down
2 changes: 1 addition & 1 deletion src/main/scala/prci/ClockBundles.scala
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import chisel3._
import freechips.rocketchip.util.RecordMap


class ClockBundle(val params: ClockBundleParameters) extends Bundle
class ClockBundle(val params: ClockBundleParameters = ClockBundleParameters()) extends Bundle
{
val clock = Output(Clock())
val reset = Output(Reset())
Expand Down
3 changes: 2 additions & 1 deletion src/main/scala/prci/ClockDomain.scala
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@ import chisel3._
import freechips.rocketchip.config.Parameters
import freechips.rocketchip.diplomacy._

abstract class Domain(implicit p: Parameters) extends LazyModule with HasDomainCrossing {
abstract class Domain(implicit p: Parameters) extends LazyModule with HasDomainCrossing
{
def clockBundle: ClockBundle

lazy val module = new Impl
Expand Down
6 changes: 3 additions & 3 deletions src/main/scala/prci/ClockGroup.scala
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ package freechips.rocketchip.prci
import freechips.rocketchip.config.Parameters
import freechips.rocketchip.diplomacy._

case class ClockGroupNode(groupName: String)(implicit valName: ValName)
case class ClockGroupingNode(groupName: String)(implicit valName: ValName)
extends MixedNexusNode(ClockGroupImp, ClockImp)(
dFn = { _ => ClockSourceParameters() },
uFn = { seq => ClockGroupSinkParameters(name = groupName, members = seq) })
Expand All @@ -14,7 +14,7 @@ case class ClockGroupNode(groupName: String)(implicit valName: ValName)

class ClockGroup(groupName: String)(implicit p: Parameters) extends LazyModule
{
val node = ClockGroupNode(groupName)
val node = ClockGroupingNode(groupName)

lazy val module = new Impl
class Impl extends LazyRawModuleImp(this) {
Expand Down Expand Up @@ -107,7 +107,7 @@ class FixedClockBroadcast(fixedClockOpt: Option[ClockParameters])(implicit p: Pa

object FixedClockBroadcast
{
def apply(fixedClockOpt: Option[ClockParameters])(implicit p: Parameters, valName: ValName) = LazyModule(new FixedClockBroadcast(fixedClockOpt)).node
def apply(fixedClockOpt: Option[ClockParameters] = None)(implicit p: Parameters, valName: ValName) = LazyModule(new FixedClockBroadcast(fixedClockOpt)).node
}

case class PRCIClockGroupNode()(implicit valName: ValName)
Expand Down
47 changes: 0 additions & 47 deletions src/main/scala/prci/ClockGroupDriver.scala

This file was deleted.

3 changes: 3 additions & 0 deletions src/main/scala/prci/package.scala
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@ package object prci
type ClockInwardNode = InwardNodeHandle[ClockSourceParameters, ClockSinkParameters, ClockEdgeParameters, ClockBundle]
type ClockOutwardNode = OutwardNodeHandle[ClockSourceParameters, ClockSinkParameters, ClockEdgeParameters, ClockBundle]
type ClockNode = NodeHandle[ClockSourceParameters, ClockSinkParameters, ClockEdgeParameters, ClockBundle, ClockSourceParameters, ClockSinkParameters, ClockEdgeParameters, ClockBundle]

type ClockGroupNode = NodeHandle[ClockGroupSourceParameters, ClockGroupSinkParameters, ClockGroupEdgeParameters, ClockGroupBundle, ClockGroupSourceParameters, ClockGroupSinkParameters, ClockGroupEdgeParameters, ClockGroupBundle]

def asyncMux[T](xType: ClockCrossingType, async: T, notasync: T): T = xType match {
case _: AsynchronousCrossing => async
case _ => notasync
Expand Down
9 changes: 5 additions & 4 deletions src/main/scala/rocket/CSR.scala
Original file line number Diff line number Diff line change
Expand Up @@ -239,10 +239,10 @@ class CSRDecodeIO(implicit p: Parameters) extends CoreBundle {
val virtual_system_illegal = Output(Bool())
}

class CSRFileIO(implicit p: Parameters) extends CoreBundle
class CSRFileIO(hasBeu: Boolean)(implicit p: Parameters) extends CoreBundle
with HasCoreParameters {
val ungated_clock = Input(Clock())
val interrupts = Input(new CoreInterrupts())
val interrupts = Input(new CoreInterrupts(hasBeu))
val hartid = Input(UInt(hartIdLen.W))
val rw = new Bundle {
val addr = Input(UInt(CSR.ADDRSZ.W))
Expand Down Expand Up @@ -357,10 +357,11 @@ class VType(implicit p: Parameters) extends CoreBundle {

class CSRFile(
perfEventSets: EventSets = new EventSets(Seq()),
customCSRs: Seq[CustomCSR] = Nil)(implicit p: Parameters)
customCSRs: Seq[CustomCSR] = Nil,
hasBeu: Boolean = false)(implicit p: Parameters)
extends CoreModule()(p)
with HasCoreParameters {
val io = IO(new CSRFileIO {
val io = IO(new CSRFileIO(hasBeu) {
val customCSRs = Output(Vec(CSRFile.this.customCSRs.size, new CustomCSRIO))
})

Expand Down
6 changes: 3 additions & 3 deletions src/main/scala/rocket/Frontend.scala
Original file line number Diff line number Diff line change
Expand Up @@ -60,9 +60,9 @@ class FrontendIO(implicit p: Parameters) extends CoreBundle()(p) {
val progress = Output(Bool())
}

class Frontend(val icacheParams: ICacheParams, staticIdForMetadataUseOnly: Int)(implicit p: Parameters) extends LazyModule {
class Frontend(val icacheParams: ICacheParams, tileId: Int)(implicit p: Parameters) extends LazyModule {
lazy val module = new FrontendModule(this)
val icache = LazyModule(new ICache(icacheParams, staticIdForMetadataUseOnly))
val icache = LazyModule(new ICache(icacheParams, tileId))
val masterNode = icache.masterNode
val slaveNode = icache.slaveNode
val resetVectorSinkNode = BundleBridgeSink[UInt](Some(() => UInt(masterNode.edges.out.head.bundle.addressBits.W)))
Expand Down Expand Up @@ -382,7 +382,7 @@ class FrontendModule(outer: Frontend) extends LazyModuleImp(outer)
/** Mix-ins for constructing tiles that have an ICache-based pipeline frontend */
trait HasICacheFrontend extends CanHavePTW { this: BaseTile =>
val module: HasICacheFrontendModule
val frontend = LazyModule(new Frontend(tileParams.icache.get, staticIdForMetadataUseOnly))
val frontend = LazyModule(new Frontend(tileParams.icache.get, tileId))
tlMasterXbar.node := frontend.masterNode
connectTLSlave(frontend.slaveNode, tileParams.core.fetchBytes)
frontend.icache.hartIdSinkNodeOpt.foreach { _ := hartIdNexusNode }
Expand Down
10 changes: 5 additions & 5 deletions src/main/scala/rocket/HellaCache.scala
Original file line number Diff line number Diff line change
Expand Up @@ -188,17 +188,17 @@ class HellaCacheIO(implicit p: Parameters) extends CoreBundle()(p) {

/** Base classes for Diplomatic TL2 HellaCaches */

abstract class HellaCache(staticIdForMetadataUseOnly: Int)(implicit p: Parameters) extends LazyModule
abstract class HellaCache(tileId: Int)(implicit p: Parameters) extends LazyModule
with HasNonDiplomaticTileParameters {
protected val cfg = tileParams.dcache.get

protected def cacheClientParameters = cfg.scratch.map(x => Seq()).getOrElse(Seq(TLMasterParameters.v1(
name = s"Core ${staticIdForMetadataUseOnly} DCache",
name = s"Core ${tileId} DCache",
sourceId = IdRange(0, 1 max cfg.nMSHRs),
supportsProbe = TransferSizes(cfg.blockBytes, cfg.blockBytes))))

protected def mmioClientParameters = Seq(TLMasterParameters.v1(
name = s"Core ${staticIdForMetadataUseOnly} DCache MMIO",
name = s"Core ${tileId} DCache MMIO",
sourceId = IdRange(firstMMIO, firstMMIO + cfg.nMMIOs),
requestFifo = true))

Expand Down Expand Up @@ -252,9 +252,9 @@ case object BuildHellaCache extends Field[BaseTile => Parameters => HellaCache](
object HellaCacheFactory {
def apply(tile: BaseTile)(p: Parameters): HellaCache = {
if (tile.tileParams.dcache.get.nMSHRs == 0)
new DCache(tile.staticIdForMetadataUseOnly, tile.crossing)(p)
new DCache(tile.tileId, tile.crossing)(p)
else
new NonBlockingDCache(tile.staticIdForMetadataUseOnly)(p)
new NonBlockingDCache(tile.tileId)(p)
}
}

Expand Down
Loading