Unfortunately, I had to touch a lot of code, which weren't quite possible to split up into multiple commits. This commit gets rid of the "extra" infrastructure to add periphery devices into Top.
201 lines
6.3 KiB
Scala
201 lines
6.3 KiB
Scala
package coreplex
|
|
|
|
import Chisel._
|
|
import groundtest._
|
|
import rocketchip.{GlobalAddrMap}
|
|
import rocket._
|
|
import uncore.tilelink._
|
|
import uncore.coherence._
|
|
import uncore.agents._
|
|
import uncore.devices.NTiles
|
|
import uncore.unittests._
|
|
import junctions._
|
|
import junctions.unittests._
|
|
import scala.collection.mutable.LinkedHashSet
|
|
import cde.{Parameters, Config, Dump, Knob, CDEMatchError}
|
|
import scala.math.max
|
|
import ConfigUtils._
|
|
|
|
class WithComparator extends Config(
|
|
(pname, site, here) => pname match {
|
|
case GroundTestKey => Seq.fill(site(NTiles)) {
|
|
GroundTestTileSettings(uncached = site(ComparatorKey).targets.size)
|
|
}
|
|
case BuildGroundTest =>
|
|
(p: Parameters) => Module(new ComparatorCore()(p))
|
|
case ComparatorKey => ComparatorParameters(
|
|
targets = Seq("mem", "io:ext:testram").map(name =>
|
|
site(GlobalAddrMap).get(name).start.longValue),
|
|
width = 8,
|
|
operations = 1000,
|
|
atomics = site(UseAtomics),
|
|
prefetches = site("COMPARATOR_PREFETCHES"))
|
|
case FPUConfig => None
|
|
case UseAtomics => false
|
|
case "COMPARATOR_PREFETCHES" => false
|
|
case _ => throw new CDEMatchError
|
|
})
|
|
|
|
class WithAtomics extends Config(
|
|
(pname, site, here) => pname match {
|
|
case UseAtomics => true
|
|
case _ => throw new CDEMatchError
|
|
})
|
|
|
|
class WithPrefetches extends Config(
|
|
(pname, site, here) => pname match {
|
|
case "COMPARATOR_PREFETCHES" => true
|
|
case _ => throw new CDEMatchError
|
|
})
|
|
|
|
class WithMemtest extends Config(
|
|
(pname, site, here) => pname match {
|
|
case GroundTestKey => Seq.fill(site(NTiles)) {
|
|
GroundTestTileSettings(1, 1)
|
|
}
|
|
case GeneratorKey => GeneratorParameters(
|
|
maxRequests = 128,
|
|
startAddress = site(GlobalAddrMap).get("mem").start)
|
|
case BuildGroundTest =>
|
|
(p: Parameters) => Module(new GeneratorTest()(p))
|
|
case _ => throw new CDEMatchError
|
|
})
|
|
|
|
class WithNGenerators(nUncached: Int, nCached: Int) extends Config(
|
|
(pname, site, here) => pname match {
|
|
case GroundTestKey => Seq.fill(site(NTiles)) {
|
|
GroundTestTileSettings(nUncached, nCached)
|
|
}
|
|
case _ => throw new CDEMatchError
|
|
})
|
|
|
|
class WithCacheFillTest extends Config(
|
|
(pname, site, here) => pname match {
|
|
case GroundTestKey => Seq.fill(site(NTiles)) {
|
|
GroundTestTileSettings(uncached = 1)
|
|
}
|
|
case BuildGroundTest =>
|
|
(p: Parameters) => Module(new CacheFillTest()(p))
|
|
case _ => throw new CDEMatchError
|
|
},
|
|
knobValues = {
|
|
case "L2_WAYS" => 4
|
|
case "L2_CAPACITY_IN_KB" => 4
|
|
case _ => throw new CDEMatchError
|
|
})
|
|
|
|
class WithBroadcastRegressionTest extends Config(
|
|
(pname, site, here) => pname match {
|
|
case GroundTestKey => Seq.fill(site(NTiles)) {
|
|
GroundTestTileSettings(1, 1, maxXacts = 3)
|
|
}
|
|
case BuildGroundTest =>
|
|
(p: Parameters) => Module(new RegressionTest()(p))
|
|
case GroundTestRegressions =>
|
|
(p: Parameters) => RegressionTests.broadcastRegressions(p)
|
|
case _ => throw new CDEMatchError
|
|
})
|
|
|
|
class WithCacheRegressionTest extends Config(
|
|
(pname, site, here) => pname match {
|
|
case GroundTestKey => Seq.fill(site(NTiles)) {
|
|
GroundTestTileSettings(1, 1, maxXacts = 5)
|
|
}
|
|
case BuildGroundTest =>
|
|
(p: Parameters) => Module(new RegressionTest()(p))
|
|
case GroundTestRegressions =>
|
|
(p: Parameters) => RegressionTests.cacheRegressions(p)
|
|
case _ => throw new CDEMatchError
|
|
})
|
|
|
|
class WithNastiConverterTest extends Config(
|
|
(pname, site, here) => pname match {
|
|
case GroundTestKey => Seq.fill(site(NTiles)) {
|
|
GroundTestTileSettings(uncached = 1)
|
|
}
|
|
case GeneratorKey => GeneratorParameters(
|
|
maxRequests = 128,
|
|
startAddress = site(GlobalAddrMap).get("mem").start)
|
|
case BuildGroundTest =>
|
|
(p: Parameters) => Module(new NastiConverterTest()(p))
|
|
case _ => throw new CDEMatchError
|
|
})
|
|
|
|
class WithTraceGen extends Config(
|
|
topDefinitions = (pname, site, here) => pname match {
|
|
case GroundTestKey => Seq.fill(site(NTiles)) {
|
|
GroundTestTileSettings(uncached = 1, cached = 1)
|
|
}
|
|
case BuildGroundTest =>
|
|
(p: Parameters) => Module(new GroundTestTraceGenerator()(p))
|
|
case GeneratorKey => GeneratorParameters(
|
|
maxRequests = 256,
|
|
startAddress = 0)
|
|
case AddressBag => {
|
|
val nSets = 32 // L2 NSets
|
|
val nWays = 1
|
|
val blockOffset = site(CacheBlockOffsetBits)
|
|
val baseAddr = site(GlobalAddrMap).get("mem").start
|
|
val nBeats = site(MIFDataBeats)
|
|
List.tabulate(4 * nWays) { i =>
|
|
Seq.tabulate(nBeats) { j => (j * 8) + ((i * nSets) << blockOffset) }
|
|
}.flatten.map(addr => baseAddr + BigInt(addr))
|
|
}
|
|
case UseAtomics => true
|
|
case _ => throw new CDEMatchError
|
|
},
|
|
knobValues = {
|
|
case "L1D_SETS" => 16
|
|
case "L1D_WAYS" => 1
|
|
})
|
|
|
|
class WithPCIeMockupTest extends Config(
|
|
(pname, site, here) => pname match {
|
|
case NTiles => 2
|
|
case GroundTestKey => Seq(
|
|
GroundTestTileSettings(1, 1),
|
|
GroundTestTileSettings(1))
|
|
case GeneratorKey => GeneratorParameters(
|
|
maxRequests = 128,
|
|
startAddress = site(GlobalAddrMap).get("mem").start)
|
|
case BuildGroundTest =>
|
|
(p: Parameters) => p(TileId) match {
|
|
case 0 => Module(new GeneratorTest()(p))
|
|
case 1 => Module(new NastiConverterTest()(p))
|
|
}
|
|
case _ => throw new CDEMatchError
|
|
})
|
|
|
|
class WithDirectMemtest extends Config(
|
|
(pname, site, here) => {
|
|
val nGens = 8
|
|
pname match {
|
|
case GroundTestKey => Seq(GroundTestTileSettings(uncached = nGens))
|
|
case GeneratorKey => GeneratorParameters(
|
|
maxRequests = 1024,
|
|
startAddress = 0)
|
|
case BuildGroundTest =>
|
|
(p: Parameters) => Module(new GeneratorTest()(p))
|
|
case _ => throw new CDEMatchError
|
|
}
|
|
})
|
|
|
|
class WithDirectComparator extends Config(
|
|
(pname, site, here) => pname match {
|
|
case GroundTestKey => Seq.fill(site(NTiles)) {
|
|
GroundTestTileSettings(uncached = site(ComparatorKey).targets.size)
|
|
}
|
|
case BuildGroundTest =>
|
|
(p: Parameters) => Module(new ComparatorCore()(p))
|
|
case ComparatorKey => ComparatorParameters(
|
|
targets = Seq(0L, 0x100L),
|
|
width = 8,
|
|
operations = 1000,
|
|
atomics = site(UseAtomics),
|
|
prefetches = site("COMPARATOR_PREFETCHES"))
|
|
case FPUConfig => None
|
|
case UseAtomics => false
|
|
case "COMPARATOR_PREFETCHES" => false
|
|
case _ => throw new CDEMatchError
|
|
})
|