145c767e3SLinJiaweipackage top 245c767e3SLinJiawei 345c767e3SLinJiaweiimport chisel3._ 445c767e3SLinJiaweiimport chisel3.util._ 545c767e3SLinJiaweiimport xiangshan._ 645c767e3SLinJiaweiimport utils._ 745c767e3SLinJiaweiimport system._ 845c767e3SLinJiaweiimport chipsalliance.rocketchip.config._ 945c767e3SLinJiaweiimport freechips.rocketchip.tile.{BusErrorUnit, BusErrorUnitParams, XLen} 1045c767e3SLinJiaweiimport sifive.blocks.inclusivecache.{InclusiveCache, InclusiveCacheMicroParameters, CacheParameters} 1145c767e3SLinJiaweiimport xiangshan.backend.dispatch.DispatchParameters 1245c767e3SLinJiaweiimport xiangshan.cache.{DCacheParameters, ICacheParameters, L1plusCacheParameters} 1345c767e3SLinJiaweiimport xiangshan.cache.prefetch.{BOPParameters, L1plusPrefetcherParameters, L2PrefetcherParameters, StreamPrefetchParameters} 1445c767e3SLinJiawei 1545c767e3SLinJiaweiclass DefaultConfig(n: Int) extends Config((site, here, up) => { 1645c767e3SLinJiawei case XLen => 64 1745c767e3SLinJiawei case DebugOptionsKey => DebugOptions() 1845c767e3SLinJiawei case SoCParamsKey => SoCParameters( 1945c767e3SLinJiawei cores = List.tabulate(n){ i => XSCoreParameters(HartId = i) } 2045c767e3SLinJiawei ) 2145c767e3SLinJiawei}) 2245c767e3SLinJiawei 23*05f23f57SWilliam Wang// Synthesizable minimal XiangShan 24*05f23f57SWilliam Wang// * It is still an out-of-order, super-scalaer arch 25*05f23f57SWilliam Wang// * L1 cache included 26*05f23f57SWilliam Wang// * L2 cache NOT included 27*05f23f57SWilliam Wang// * L3 cache included 2845c767e3SLinJiaweiclass MinimalConfig(n: Int = 1) extends Config( 2945c767e3SLinJiawei new DefaultConfig(n).alter((site, here, up) => { 3045c767e3SLinJiawei case SoCParamsKey => up(SoCParamsKey).copy( 3145c767e3SLinJiawei cores = up(SoCParamsKey).cores.map(_.copy( 32*05f23f57SWilliam Wang DecodeWidth = 2, 33*05f23f57SWilliam Wang RenameWidth = 2, 34*05f23f57SWilliam Wang FetchWidth = 4, 3545c767e3SLinJiawei IssQueSize = 8, 3645c767e3SLinJiawei NRPhyRegs = 80, 3745c767e3SLinJiawei LoadQueueSize = 16, 3845c767e3SLinJiawei StoreQueueSize = 16, 3945c767e3SLinJiawei RoqSize = 32, 4045c767e3SLinJiawei BrqSize = 8, 4145c767e3SLinJiawei FtqSize = 16, 4245c767e3SLinJiawei IBufSize = 16, 43*05f23f57SWilliam Wang StoreBufferSize = 4, 44*05f23f57SWilliam Wang StoreBufferThreshold = 3, 4545c767e3SLinJiawei dpParams = DispatchParameters( 4645c767e3SLinJiawei IntDqSize = 8, 4745c767e3SLinJiawei FpDqSize = 8, 4845c767e3SLinJiawei LsDqSize = 8, 4945c767e3SLinJiawei IntDqDeqWidth = 4, 5045c767e3SLinJiawei FpDqDeqWidth = 4, 5145c767e3SLinJiawei LsDqDeqWidth = 4 5245c767e3SLinJiawei ), 53*05f23f57SWilliam Wang icacheParameters = ICacheParameters( 54*05f23f57SWilliam Wang nSets = 8, // 4KB ICache 55*05f23f57SWilliam Wang tagECC = Some("parity"), 56*05f23f57SWilliam Wang dataECC = Some("parity"), 57*05f23f57SWilliam Wang replacer = Some("setplru"), 58*05f23f57SWilliam Wang nMissEntries = 2 59*05f23f57SWilliam Wang ), 60*05f23f57SWilliam Wang dcacheParameters = DCacheParameters( 61*05f23f57SWilliam Wang nSets = 8, // 4KB DCache 62*05f23f57SWilliam Wang nWays = 4, 63*05f23f57SWilliam Wang tagECC = Some("secded"), 64*05f23f57SWilliam Wang dataECC = Some("secded"), 65*05f23f57SWilliam Wang replacer = Some("setplru"), 66*05f23f57SWilliam Wang nMissEntries = 4, 67*05f23f57SWilliam Wang nProbeEntries = 4, 68*05f23f57SWilliam Wang nReleaseEntries = 4, 69*05f23f57SWilliam Wang nStoreReplayEntries = 4, 70*05f23f57SWilliam Wang ), 71*05f23f57SWilliam Wang L2Size = 16 * 1024, // 16KB 72*05f23f57SWilliam Wang L2NWays = 8, 7345c767e3SLinJiawei EnableBPD = false, // disable TAGE 7445c767e3SLinJiawei EnableLoop = false, 75175bcfe9SLinJiawei TlbEntrySize = 4, 76175bcfe9SLinJiawei TlbSPEntrySize = 2, 77175bcfe9SLinJiawei PtwL1EntrySize = 2, 78*05f23f57SWilliam Wang PtwL2EntrySize = 64, 79*05f23f57SWilliam Wang PtwL3EntrySize = 128, 80175bcfe9SLinJiawei PtwSPEntrySize = 2, 81*05f23f57SWilliam Wang useFakeL2Cache = true, 82*05f23f57SWilliam Wang )), 83*05f23f57SWilliam Wang L3Size = 32 * 1024, // 32KB 84*05f23f57SWilliam Wang ) 85*05f23f57SWilliam Wang }) 86*05f23f57SWilliam Wang) 87*05f23f57SWilliam Wang 88*05f23f57SWilliam Wang// Non-synthesizable MinimalConfig, for fast simulation only 89*05f23f57SWilliam Wangclass MinimalSimConfig(n: Int = 1) extends Config( 90*05f23f57SWilliam Wang new MinimalConfig(n).alter((site, here, up) => { 91*05f23f57SWilliam Wang case SoCParamsKey => up(SoCParamsKey).copy( 92*05f23f57SWilliam Wang cores = up(SoCParamsKey).cores.map(_.copy( 93175bcfe9SLinJiawei useFakeDCache = true, 94175bcfe9SLinJiawei useFakePTW = true, 95175bcfe9SLinJiawei useFakeL1plusCache = true, 96175bcfe9SLinJiawei )), 97175bcfe9SLinJiawei useFakeL3Cache = true 9845c767e3SLinJiawei ) 9945c767e3SLinJiawei }) 10045c767e3SLinJiawei) 101