Add config classes to drive unit testing of L2 TileLink agents.
Closes #43
This commit is contained in:
parent
4f84d8f757
commit
d69446e177
114
uncore/src/main/scala/builder.scala
Normal file
114
uncore/src/main/scala/builder.scala
Normal file
@ -0,0 +1,114 @@
|
||||
package uncore
|
||||
|
||||
import Chisel._
|
||||
import cde.{Config, Parameters, ParameterDump, Knob, Dump}
|
||||
import junctions.PAddrBits
|
||||
|
||||
object UncoreBuilder extends App with FileSystemUtilities {
|
||||
val topModuleName = args(0)
|
||||
val configClassName = args(1)
|
||||
val config = try {
|
||||
Class.forName(s"uncore.$configClassName").newInstance.asInstanceOf[Config]
|
||||
} catch {
|
||||
case e: java.lang.ClassNotFoundException =>
|
||||
throwException("Unable to find configClassName \"" + configClassName +
|
||||
"\", did you misspell it?", e)
|
||||
}
|
||||
val world = config.toInstance
|
||||
val paramsFromConfig: Parameters = Parameters.root(world)
|
||||
|
||||
val gen = () =>
|
||||
Class.forName(s"uncore.$topModuleName")
|
||||
.getConstructor(classOf[cde.Parameters])
|
||||
.newInstance(paramsFromConfig)
|
||||
.asInstanceOf[Module]
|
||||
|
||||
chiselMain.run(args.drop(2), gen)
|
||||
|
||||
val pdFile = createOutputFile(s"$topModuleName.prm")
|
||||
pdFile.write(ParameterDump.getDump)
|
||||
pdFile.close
|
||||
|
||||
}
|
||||
|
||||
class DefaultL2Config extends Config (
|
||||
topDefinitions = { (pname,site,here) =>
|
||||
pname match {
|
||||
case PAddrBits => 32
|
||||
case CacheId => 0
|
||||
case CacheName => "L2Bank"
|
||||
case TLId => "L1toL2"
|
||||
case InnerTLId => "L1toL2"
|
||||
case OuterTLId => "L2toMC"
|
||||
case "N_CACHED" => Dump("N_CACHED",here[Int]("CACHED_CLIENTS_PER_PORT"))
|
||||
case "N_UNCACHED" => Dump("N_UNCACHED",here[Int]("MAX_CLIENTS_PER_PORT") - here[Int]("N_CACHED"))
|
||||
case "MAX_CLIENT_XACTS" => 4
|
||||
case "MAX_CLIENTS_PER_PORT" => Knob("NTILES")
|
||||
case "CACHED_CLIENTS_PER_PORT" => Knob("N_CACHED_TILES")
|
||||
case TLKey("L1toL2") =>
|
||||
TileLinkParameters(
|
||||
coherencePolicy = new MESICoherence(site(L2DirectoryRepresentation)),
|
||||
nManagers = 1,
|
||||
nCachingClients = here[Int]("N_CACHED"),
|
||||
nCachelessClients = here[Int]("N_UNCACHED"),
|
||||
maxClientXacts = here[Int]("MAX_CLIENT_XACTS"),
|
||||
maxClientsPerPort = here[Int]("MAX_CLIENTS_PER_PORT"),
|
||||
maxManagerXacts = site(NAcquireTransactors) + 2,
|
||||
dataBits = site(CacheBlockBytes)*8,
|
||||
dataBeats = 2)
|
||||
case TLKey("L2toMC") =>
|
||||
TileLinkParameters(
|
||||
coherencePolicy = new MEICoherence(new NullRepresentation(1)),
|
||||
nManagers = 1,
|
||||
nCachingClients = 1,
|
||||
nCachelessClients = 0,
|
||||
maxClientXacts = 1,
|
||||
maxClientsPerPort = site(NAcquireTransactors) + 2,
|
||||
maxManagerXacts = 1,
|
||||
dataBits = site(CacheBlockBytes)*8,
|
||||
dataBeats = 2)
|
||||
case CacheBlockBytes => 64
|
||||
case CacheBlockOffsetBits => log2Up(here(CacheBlockBytes))
|
||||
case "L2_SETS" => Knob("L2_SETS")
|
||||
case NSets => Dump("L2_SETS",here[Int]("L2_SETS"))
|
||||
case NWays => Knob("L2_WAYS")
|
||||
case RowBits => site(TLKey(site(TLId))).dataBitsPerBeat
|
||||
case CacheIdBits => Dump("CACHE_ID_BITS",1)
|
||||
case L2StoreDataQueueDepth => 1
|
||||
case NAcquireTransactors => Dump("N_ACQUIRE_TRANSACTORS",2)
|
||||
case NSecondaryMisses => 4
|
||||
case L2DirectoryRepresentation => new FullRepresentation(here[Int]("N_CACHED"))
|
||||
case L2Replacer => () => new SeqRandom(site(NWays))
|
||||
case ECCCode => None
|
||||
case AmoAluOperandBits => 64
|
||||
case SplitMetadata => false
|
||||
// case XLen => 128
|
||||
}},
|
||||
knobValues = {
|
||||
case "L2_WAYS" => 1
|
||||
case "L2_SETS" => 1024
|
||||
case "NTILES" => 2
|
||||
case "N_CACHED_TILES" => 2
|
||||
case "L2_CAPACITY_IN_KB" => 256
|
||||
}
|
||||
)
|
||||
|
||||
class WithPLRU extends Config(
|
||||
(pname, site, here) => pname match {
|
||||
case L2Replacer => () => new SeqPLRU(site(NSets), site(NWays))
|
||||
})
|
||||
|
||||
class PLRUL2Config extends Config(new WithPLRU ++ new DefaultL2Config)
|
||||
|
||||
class With1L2Ways extends Config(knobValues = { case "L2_WAYS" => 1 })
|
||||
class With2L2Ways extends Config(knobValues = { case "L2_WAYS" => 2 })
|
||||
class With4L2Ways extends Config(knobValues = { case "L2_WAYS" => 4 })
|
||||
|
||||
class With1Cached extends Config(knobValues = { case "N_CACHED_TILES" => 1 })
|
||||
class With2Cached extends Config(knobValues = { case "N_CACHED_TILES" => 2 })
|
||||
|
||||
|
||||
class W1Cached1WaysConfig extends Config(new With1L2Ways ++ new With1Cached ++ new DefaultL2Config)
|
||||
class W1Cached2WaysConfig extends Config(new With2L2Ways ++ new With1Cached ++ new DefaultL2Config)
|
||||
class W2Cached1WaysConfig extends Config(new With1L2Ways ++ new With2Cached ++ new DefaultL2Config)
|
||||
class W2Cached2WaysConfig extends Config(new With2L2Ways ++ new With2Cached ++ new DefaultL2Config)
|
Loading…
Reference in New Issue
Block a user