diff --git a/uncore/src/main/scala/builder.scala b/uncore/src/main/scala/builder.scala new file mode 100644 index 00000000..74cb7fa1 --- /dev/null +++ b/uncore/src/main/scala/builder.scala @@ -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)