Set correct static tileId for core and Gemmini tiles

Otherwise, in multiple cluster configs, tiles can have duplicate global
tileId which results in Diplomacy connection errors for interrupt nodes
(among other things).
This commit is contained in:
Hansung Kim
2024-06-11 16:17:08 -07:00
parent a8e35b1f5a
commit a0bff40a87

View File

@@ -43,7 +43,7 @@ class WithRadianceCores(
) extends Config((site, _, up) => { ) extends Config((site, _, up) => {
case TilesLocated(`location`) => { case TilesLocated(`location`) => {
val prev = up(TilesLocated(`location`)) val prev = up(TilesLocated(`location`))
val idOffset = prev.size val idOffset = up(NumTiles)
val vortex = RadianceTileParams( val vortex = RadianceTileParams(
core = VortexCoreParams(fpu = None), core = VortexCoreParams(fpu = None),
btb = None, btb = None,
@@ -72,6 +72,7 @@ class WithRadianceCores(
crossing crossing
)) ++ prev )) ++ prev
} }
case NumTiles => up(NumTiles) + n
}) { }) {
def this(n: Int, location: HierarchicalLocation = InSubsystem, useVxCache: Boolean = false) = this(n, location, RocketCrossingParams( def this(n: Int, location: HierarchicalLocation = InSubsystem, useVxCache: Boolean = false) = this(n, location, RocketCrossingParams(
master = HierarchicalElementMasterPortParams.locationDefault(location), master = HierarchicalElementMasterPortParams.locationDefault(location),
@@ -88,8 +89,9 @@ class WithRadianceGemmini(location: HierarchicalLocation,
dim: Int, accSizeInKB: Int, tileSize: Int) extends Config((site, _, up) => { dim: Int, accSizeInKB: Int, tileSize: Int) extends Config((site, _, up) => {
case TilesLocated(`location`) => { case TilesLocated(`location`) => {
val prev = up(TilesLocated(`location`)) val prev = up(TilesLocated(`location`))
val idOffset = prev.size val idOffset = up(NumTiles)
if (idOffset == 0) { if (idOffset == 0) {
// FIXME: this doesn't work for multiple clusters when idOffset may not be 0
println("******WARNING****** gemmini tile id is 0! radiance tiles in the same cluster needs to be before gemmini") println("******WARNING****** gemmini tile id is 0! radiance tiles in the same cluster needs to be before gemmini")
} }
val smKey = site(RadianceSharedMemKey).get val smKey = site(RadianceSharedMemKey).get
@@ -124,6 +126,7 @@ class WithRadianceGemmini(location: HierarchicalLocation,
slaveAddress = smKey.address + smKey.size + 0x3000 slaveAddress = smKey.address + smKey.size + 0x3000
)) ))
} }
case NumTiles => up(NumTiles) + 1
}) { }) {
def this(location: HierarchicalLocation = InSubsystem, dim: Int, accSizeInKB: Int, tileSize: Int) = def this(location: HierarchicalLocation = InSubsystem, dim: Int, accSizeInKB: Int, tileSize: Int) =
this(location, RocketCrossingParams( this(location, RocketCrossingParams(
@@ -172,7 +175,7 @@ class WithFuzzerCores(
) extends Config((site, _, up) => { ) extends Config((site, _, up) => {
case TilesLocated(InSubsystem) => { case TilesLocated(InSubsystem) => {
val prev = up(TilesLocated(InSubsystem)) val prev = up(TilesLocated(InSubsystem))
val idOffset = prev.size val idOffset = up(NumTiles)
val fuzzer = FuzzerTileParams( val fuzzer = FuzzerTileParams(
core = VortexCoreParams(fpu = None), core = VortexCoreParams(fpu = None),
useVxCache = useVxCache) useVxCache = useVxCache)
@@ -181,6 +184,7 @@ class WithFuzzerCores(
RocketCrossingParams() RocketCrossingParams()
)) ++ prev )) ++ prev
} }
case NumTiles => up(NumTiles) + 1
}) })
class WithRadianceCluster( class WithRadianceCluster(
@@ -288,7 +292,7 @@ class WithNCustomSmallRocketCores(
) extends Config((site, here, up) => { ) extends Config((site, here, up) => {
case TilesLocated(InSubsystem) => { case TilesLocated(InSubsystem) => {
val prev = up(TilesLocated(InSubsystem)) val prev = up(TilesLocated(InSubsystem))
val idOffset = overrideIdOffset.getOrElse(prev.size) val idOffset = up(NumTiles)
val med = RocketTileParams( val med = RocketTileParams(
core = RocketCoreParams(fpu = None), core = RocketCoreParams(fpu = None),
btb = None, btb = None,
@@ -316,6 +320,7 @@ class WithNCustomSmallRocketCores(
crossing crossing
)) ++ prev )) ++ prev
} }
case NumTiles => up(NumTiles) + n
}) })
class WithExtGPUMem(address: BigInt = BigInt("0x100000000", 16), class WithExtGPUMem(address: BigInt = BigInt("0x100000000", 16),