Merge branch 'param-refactor-tl'
This commit is contained in:
@ -15,25 +15,22 @@ class DefaultConfig extends ChiselConfig (
|
||||
topDefinitions = { (pname,site,here) =>
|
||||
type PF = PartialFunction[Any,Any]
|
||||
def findBy(sname:Any):Any = here[PF](site[Any](sname))(pname)
|
||||
def genCsrAddrMap() = {
|
||||
val xLen = site(XLen)
|
||||
val nSCR = site(HTIFNSCR)
|
||||
val csrSize = (1 << 12) * (xLen / 8)
|
||||
val nTiles = site(NTiles)
|
||||
|
||||
(0 until nTiles)
|
||||
.map(i => (s"csr$i", None, MemSize(csrSize, AddrMap.RW))) :+
|
||||
("scr", None, MemSize(nSCR * xLen / 8, AddrMap.RW))
|
||||
def genCsrAddrMap: AddrMap = {
|
||||
val csrSize = (1 << 12) * (site(XLen) / 8)
|
||||
val csrs = (0 until site(NTiles)).map{ i =>
|
||||
AddrMapEntry(s"csr$i", None, MemSize(csrSize, AddrMapConsts.RW))
|
||||
}
|
||||
val scrSize = site(HtifKey).nSCR * (site(XLen) / 8)
|
||||
val scr = AddrMapEntry("scr", None, MemSize(scrSize, AddrMapConsts.RW))
|
||||
new AddrMap(csrs :+ scr)
|
||||
}
|
||||
pname match {
|
||||
//
|
||||
case UseZscale => false
|
||||
//HTIF Parameters
|
||||
case HTIFWidth => Dump("HTIF_WIDTH", 16)
|
||||
case HTIFNSCR => 64
|
||||
case HTIFSCRDataBits => site(XLen)
|
||||
case HTIFOffsetBits => site(CacheBlockOffsetBits)
|
||||
case HTIFNCores => site(NTiles)
|
||||
case HtifKey => HtifParameters(
|
||||
width = Dump("HTIF_WIDTH", 16),
|
||||
nSCR = 64,
|
||||
offsetBits = site(CacheBlockOffsetBits),
|
||||
nCores = site(NTiles))
|
||||
//Memory Parameters
|
||||
case PAddrBits => 32
|
||||
case PgIdxBits => 12
|
||||
@ -50,9 +47,10 @@ class DefaultConfig extends ChiselConfig (
|
||||
case MIFDataBits => Dump("MEM_DATA_BITS", 128)
|
||||
case MIFAddrBits => Dump("MEM_ADDR_BITS", site(PAddrBits) - site(CacheBlockOffsetBits))
|
||||
case MIFDataBeats => site(CacheBlockBytes) * 8 / site(MIFDataBits)
|
||||
case NASTIDataBits => site(MIFDataBits)
|
||||
case NASTIAddrBits => site(PAddrBits)
|
||||
case NASTIIdBits => site(MIFTagBits)
|
||||
case NastiKey => NastiParameters(
|
||||
dataBits = site(MIFDataBits),
|
||||
addrBits = site(PAddrBits),
|
||||
idBits = site(MIFTagBits))
|
||||
//Params used by all caches
|
||||
case NSets => findBy(CacheName)
|
||||
case NWays => findBy(CacheName)
|
||||
@ -74,8 +72,7 @@ class DefaultConfig extends ChiselConfig (
|
||||
case Replacer => () => new RandomReplacement(site(NWays))
|
||||
case AmoAluOperandBits => site(XLen)
|
||||
//L1InstCache
|
||||
case NBTBEntries => 62
|
||||
case NRAS => 2
|
||||
case BtbKey => BtbParameters()
|
||||
//L1DataCache
|
||||
case WordBits => site(XLen)
|
||||
case StoreDataQueueDepth => 17
|
||||
@ -86,15 +83,19 @@ class DefaultConfig extends ChiselConfig (
|
||||
//L2 Memory System Params
|
||||
case NAcquireTransactors => 7
|
||||
case L2StoreDataQueueDepth => 1
|
||||
case L2DirectoryRepresentation => new NullRepresentation(site(TLNCachingClients))
|
||||
case BuildL2CoherenceManager => () =>
|
||||
Module(new L2BroadcastHub, { case InnerTLId => "L1ToL2"; case OuterTLId => "L2ToMC" })
|
||||
case L2DirectoryRepresentation => new NullRepresentation(site(NTiles))
|
||||
case BuildL2CoherenceManager => (p: Parameters) =>
|
||||
Module(new L2BroadcastHub()(p.alterPartial({
|
||||
case InnerTLId => "L1toL2"
|
||||
case OuterTLId => "L2toMC" })))
|
||||
//Tile Constants
|
||||
case BuildTiles => {
|
||||
TestGeneration.addSuites(rv64i.map(_("p")))
|
||||
TestGeneration.addSuites((if(site(UseVM)) List("pt","v") else List("pt")).flatMap(env => rv64u.map(_(env))))
|
||||
TestGeneration.addSuites(if(site(NTiles) > 1) List(mtBmarks, bmarks) else List(bmarks))
|
||||
List.fill(site(NTiles)){ (r:Bool) => Module(new RocketTile(resetSignal = r), {case TLId => "L1ToL2"}) }
|
||||
List.fill(site(NTiles)){ (r: Bool, p: Parameters) =>
|
||||
Module(new RocketTile(resetSignal = r)(p.alterPartial({case TLId => "L1toL2"})))
|
||||
}
|
||||
}
|
||||
case BuildRoCC => None
|
||||
case NDCachePorts => 2 + (if(site(BuildRoCC).isEmpty) 0 else 1)
|
||||
@ -108,12 +109,11 @@ class DefaultConfig extends ChiselConfig (
|
||||
case FastLoadByte => false
|
||||
case FastMulDiv => true
|
||||
case XLen => 64
|
||||
case NMultXpr => 32
|
||||
case BuildFPU => {
|
||||
val env = if(site(UseVM)) List("p","pt","v") else List("p","pt")
|
||||
if(site(FDivSqrt)) TestGeneration.addSuites(env.map(rv64uf))
|
||||
else TestGeneration.addSuites(env.map(rv64ufNoDiv))
|
||||
Some(() => Module(new FPU))
|
||||
Some((p: Parameters) => Module(new FPU()(p)))
|
||||
}
|
||||
case FDivSqrt => true
|
||||
case SFMALatency => 2
|
||||
@ -124,41 +124,34 @@ class DefaultConfig extends ChiselConfig (
|
||||
case NCustomMRWCSRs => 0
|
||||
//Uncore Paramters
|
||||
case RTCPeriod => 100 // gives 10 MHz RTC assuming 1 GHz uncore clock
|
||||
case LNEndpoints => site(TLNManagers) + site(TLNClients)
|
||||
case LNHeaderBits => log2Ceil(site(TLNManagers)) + log2Up(site(TLNClients))
|
||||
case TLBlockAddrBits => site(PAddrBits) - site(CacheBlockOffsetBits)
|
||||
case TLNClients => site(TLNCachingClients) + site(TLNCachelessClients)
|
||||
case TLDataBits => site(CacheBlockBytes)*8/site(TLDataBeats)
|
||||
case TLDataBeats => 4
|
||||
case TLWriteMaskBits => (site(TLDataBits) - 1) / 8 + 1
|
||||
case TLNetworkIsOrderedP2P => false
|
||||
case TLNManagers => findBy(TLId)
|
||||
case TLNCachingClients => findBy(TLId)
|
||||
case TLNCachelessClients => findBy(TLId)
|
||||
case TLCoherencePolicy => findBy(TLId)
|
||||
case TLMaxManagerXacts => findBy(TLId)
|
||||
case TLMaxClientXacts => findBy(TLId)
|
||||
case TLMaxClientsPerPort => findBy(TLId)
|
||||
case "L1ToL2" => {
|
||||
case TLNManagers => site(NBanksPerMemoryChannel)*site(NMemoryChannels)
|
||||
case TLNCachingClients => site(NTiles)
|
||||
case TLNCachelessClients => site(NTiles) + 1
|
||||
case TLCoherencePolicy => new MESICoherence(site(L2DirectoryRepresentation))
|
||||
case TLMaxManagerXacts => site(NAcquireTransactors) + 2
|
||||
case TLMaxClientXacts => max(site(NMSHRs) + site(NIOMSHRs),
|
||||
if(site(BuildRoCC).isEmpty) 1
|
||||
else site(RoCCMaxTaggedMemXacts))
|
||||
case TLMaxClientsPerPort => if(site(BuildRoCC).isEmpty) 1 else 3
|
||||
}:PF
|
||||
case "L2ToMC" => {
|
||||
case TLNManagers => 1
|
||||
case TLNCachingClients => site(NBanksPerMemoryChannel)
|
||||
case TLNCachelessClients => 0
|
||||
case TLCoherencePolicy => new MEICoherence(new NullRepresentation(site(NBanksPerMemoryChannel)))
|
||||
case TLMaxManagerXacts => 1
|
||||
case TLMaxClientXacts => 1
|
||||
case TLMaxClientsPerPort => site(NAcquireTransactors) + 2
|
||||
}:PF
|
||||
case LNEndpoints => site(TLKey(site(TLId))).nManagers + site(TLKey(site(TLId))).nClients
|
||||
case LNHeaderBits => log2Ceil(site(TLKey(site(TLId))).nManagers) +
|
||||
log2Up(site(TLKey(site(TLId))).nClients)
|
||||
case TLKey("L1toL2") =>
|
||||
TileLinkParameters(
|
||||
coherencePolicy = new MESICoherence(site(L2DirectoryRepresentation)),
|
||||
nManagers = site(NBanksPerMemoryChannel)*site(NMemoryChannels),
|
||||
nCachingClients = site(NTiles),
|
||||
nCachelessClients = site(NTiles) + 1,
|
||||
maxClientXacts = max(site(NMSHRs) + site(NIOMSHRs),
|
||||
if(site(BuildRoCC).isEmpty) 1
|
||||
else site(RoCCMaxTaggedMemXacts)),
|
||||
maxClientsPerPort = if(site(BuildRoCC).isEmpty) 1 else 3,
|
||||
maxManagerXacts = site(NAcquireTransactors) + 2,
|
||||
addrBits = site(PAddrBits) - site(CacheBlockOffsetBits),
|
||||
dataBits = site(CacheBlockBytes)*8)()
|
||||
case TLKey("L2toMC") =>
|
||||
TileLinkParameters(
|
||||
coherencePolicy = new MEICoherence(new NullRepresentation(site(NBanksPerMemoryChannel))),
|
||||
nManagers = 1,
|
||||
nCachingClients = site(NBanksPerMemoryChannel),
|
||||
nCachelessClients = 0,
|
||||
maxClientXacts = 1,
|
||||
maxClientsPerPort = site(NAcquireTransactors) + 2,
|
||||
maxManagerXacts = 1,
|
||||
addrBits = site(PAddrBits) - site(CacheBlockOffsetBits),
|
||||
dataBits = site(CacheBlockBytes)*8)()
|
||||
case TLKey("Outermost") => site(TLKey("L2toMC"))
|
||||
case NTiles => Knob("NTILES")
|
||||
case NMemoryChannels => 1
|
||||
case NBanksPerMemoryChannel => Knob("NBANKS")
|
||||
@ -169,15 +162,10 @@ class DefaultConfig extends ChiselConfig (
|
||||
case UseBackupMemoryPort => true
|
||||
case MMIOBase => BigInt(1 << 30) // 1 GB
|
||||
case ExternalIOStart => 2 * site(MMIOBase)
|
||||
case NASTIAddrMap => Seq(
|
||||
("mem", None, MemSize(site(MMIOBase), AddrMap.RWX)),
|
||||
("conf", None, MemSubmap(site(ExternalIOStart) - site(MMIOBase),
|
||||
genCsrAddrMap())),
|
||||
("io", Some(site(ExternalIOStart)),
|
||||
MemSize(2 * site(MMIOBase), AddrMap.RW)))
|
||||
case NASTIAddrHashMap => new AddrHashMap(site(NASTIAddrMap))
|
||||
case NASTINMasters => site(TLNManagers) + 1
|
||||
case NASTINSlaves => site(NASTIAddrHashMap).nEntries
|
||||
case GlobalAddrMap => AddrMap(
|
||||
AddrMapEntry("mem", None, MemSize(site(MMIOBase), AddrMapConsts.RWX)),
|
||||
AddrMapEntry("conf", None, MemSubmap(site(ExternalIOStart) - site(MMIOBase), genCsrAddrMap)),
|
||||
AddrMapEntry("io", Some(site(ExternalIOStart)), MemSize(2 * site(MMIOBase), AddrMapConsts.RW)))
|
||||
}},
|
||||
knobValues = {
|
||||
case "NTILES" => 1
|
||||
@ -209,16 +197,16 @@ class WithL2Cache extends ChiselConfig(
|
||||
site(NBanksPerMemoryChannel)*site(NMemoryChannels)) /
|
||||
site(NWays)
|
||||
case NWays => Knob("L2_WAYS")
|
||||
case RowBits => site(TLDataBits)
|
||||
case RowBits => site(TLKey(site(TLId))).dataBits
|
||||
}: PartialFunction[Any,Any]
|
||||
case NAcquireTransactors => 2
|
||||
case NSecondaryMisses => 4
|
||||
case L2DirectoryRepresentation => new FullRepresentation(site(TLNCachingClients))
|
||||
case BuildL2CoherenceManager => () =>
|
||||
Module(new L2HellaCacheBank, {
|
||||
case L2DirectoryRepresentation => new FullRepresentation(site(NTiles))
|
||||
case BuildL2CoherenceManager => (p: Parameters) =>
|
||||
Module(new L2HellaCacheBank()(p.alterPartial({
|
||||
case CacheName => "L2Bank"
|
||||
case InnerTLId => "L1ToL2"
|
||||
case OuterTLId => "L2ToMC"})
|
||||
case InnerTLId => "L1toL2"
|
||||
case OuterTLId => "L2toMC"})))
|
||||
},
|
||||
knobValues = { case "L2_WAYS" => 8; case "L2_CAPACITY_IN_KB" => 2048 }
|
||||
)
|
||||
@ -240,7 +228,7 @@ class WithZscale extends ChiselConfig(
|
||||
case BuildZscale => {
|
||||
TestGeneration.addSuites(List(rv32ui("p"), rv32um("p")))
|
||||
TestGeneration.addSuites(List(zscaleBmarks))
|
||||
(r: Bool) => Module(new Zscale(r), {case TLId => "L1ToL2"})
|
||||
(r: Bool, p: Parameters) => Module(new Zscale(r)(p.alterPartial({case TLId => "L1toL2"})))
|
||||
}
|
||||
case UseZscale => true
|
||||
case BootROMCapacity => Dump("BOOT_CAPACITY", 16*1024)
|
||||
@ -264,7 +252,7 @@ class SmallConfig extends ChiselConfig (
|
||||
case BuildFPU => None
|
||||
case FastMulDiv => false
|
||||
case NTLBEntries => 4
|
||||
case NBTBEntries => 8
|
||||
case BtbKey => BtbParameters(nEntries = 8)
|
||||
}},
|
||||
knobValues = {
|
||||
case "L1D_SETS" => 64
|
||||
|
Reference in New Issue
Block a user