1c6d43980SLemover/*************************************************************************************** 2c6d43980SLemover* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences 3c6d43980SLemover* 4c6d43980SLemover* XiangShan is licensed under Mulan PSL v2. 5c6d43980SLemover* You can use this software according to the terms and conditions of the Mulan PSL v2. 6c6d43980SLemover* You may obtain a copy of Mulan PSL v2 at: 7c6d43980SLemover* http://license.coscl.org.cn/MulanPSL2 8c6d43980SLemover* 9c6d43980SLemover* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, 10c6d43980SLemover* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, 11c6d43980SLemover* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. 12c6d43980SLemover* 13c6d43980SLemover* See the Mulan PSL v2 for more details. 14c6d43980SLemover***************************************************************************************/ 15c6d43980SLemover 1645c767e3SLinJiaweipackage top 1745c767e3SLinJiawei 1845c767e3SLinJiaweiimport chisel3._ 1945c767e3SLinJiaweiimport chisel3.util._ 2045c767e3SLinJiaweiimport xiangshan._ 2145c767e3SLinJiaweiimport utils._ 2245c767e3SLinJiaweiimport system._ 2345c767e3SLinJiaweiimport chipsalliance.rocketchip.config._ 2445c767e3SLinJiaweiimport freechips.rocketchip.tile.{BusErrorUnit, BusErrorUnitParams, XLen} 2545c767e3SLinJiaweiimport sifive.blocks.inclusivecache.{InclusiveCache, InclusiveCacheMicroParameters, CacheParameters} 26*f06ca0bfSLingrui98import xiangshan.frontend.{ICacheParameters} 2745c767e3SLinJiaweiimport xiangshan.backend.dispatch.DispatchParameters 28*f06ca0bfSLingrui98import xiangshan.cache.{DCacheParameters, L1plusCacheParameters} 2945c767e3SLinJiaweiimport xiangshan.cache.prefetch.{BOPParameters, L1plusPrefetcherParameters, L2PrefetcherParameters, StreamPrefetchParameters} 3045c767e3SLinJiawei 3145c767e3SLinJiaweiclass DefaultConfig(n: Int) extends Config((site, here, up) => { 3245c767e3SLinJiawei case XLen => 64 3345c767e3SLinJiawei case DebugOptionsKey => DebugOptions() 3445c767e3SLinJiawei case SoCParamsKey => SoCParameters( 3545c767e3SLinJiawei cores = List.tabulate(n){ i => XSCoreParameters(HartId = i) } 3645c767e3SLinJiawei ) 3745c767e3SLinJiawei}) 3845c767e3SLinJiawei 3905f23f57SWilliam Wang// Synthesizable minimal XiangShan 4005f23f57SWilliam Wang// * It is still an out-of-order, super-scalaer arch 4105f23f57SWilliam Wang// * L1 cache included 4205f23f57SWilliam Wang// * L2 cache NOT included 4305f23f57SWilliam Wang// * L3 cache included 4445c767e3SLinJiaweiclass MinimalConfig(n: Int = 1) extends Config( 4545c767e3SLinJiawei new DefaultConfig(n).alter((site, here, up) => { 4645c767e3SLinJiawei case SoCParamsKey => up(SoCParamsKey).copy( 4745c767e3SLinJiawei cores = up(SoCParamsKey).cores.map(_.copy( 4805f23f57SWilliam Wang DecodeWidth = 2, 4905f23f57SWilliam Wang RenameWidth = 2, 5005f23f57SWilliam Wang FetchWidth = 4, 5145c767e3SLinJiawei IssQueSize = 8, 5245c767e3SLinJiawei NRPhyRegs = 80, 5345c767e3SLinJiawei LoadQueueSize = 16, 5445c767e3SLinJiawei StoreQueueSize = 16, 5545c767e3SLinJiawei RoqSize = 32, 5645c767e3SLinJiawei BrqSize = 8, 5745c767e3SLinJiawei FtqSize = 16, 5845c767e3SLinJiawei IBufSize = 16, 5905f23f57SWilliam Wang StoreBufferSize = 4, 6005f23f57SWilliam Wang StoreBufferThreshold = 3, 6145c767e3SLinJiawei dpParams = DispatchParameters( 6245c767e3SLinJiawei IntDqSize = 8, 6345c767e3SLinJiawei FpDqSize = 8, 6445c767e3SLinJiawei LsDqSize = 8, 6545c767e3SLinJiawei IntDqDeqWidth = 4, 6645c767e3SLinJiawei FpDqDeqWidth = 4, 6745c767e3SLinJiawei LsDqDeqWidth = 4 6845c767e3SLinJiawei ), 6905f23f57SWilliam Wang icacheParameters = ICacheParameters( 7005f23f57SWilliam Wang nSets = 8, // 4KB ICache 7105f23f57SWilliam Wang tagECC = Some("parity"), 7205f23f57SWilliam Wang dataECC = Some("parity"), 7305f23f57SWilliam Wang replacer = Some("setplru"), 7405f23f57SWilliam Wang nMissEntries = 2 7505f23f57SWilliam Wang ), 7605f23f57SWilliam Wang dcacheParameters = DCacheParameters( 7705f23f57SWilliam Wang nSets = 8, // 4KB DCache 7805f23f57SWilliam Wang nWays = 4, 7905f23f57SWilliam Wang tagECC = Some("secded"), 8005f23f57SWilliam Wang dataECC = Some("secded"), 8105f23f57SWilliam Wang replacer = Some("setplru"), 8205f23f57SWilliam Wang nMissEntries = 4, 8305f23f57SWilliam Wang nProbeEntries = 4, 8405f23f57SWilliam Wang nReleaseEntries = 4, 8505f23f57SWilliam Wang nStoreReplayEntries = 4, 8605f23f57SWilliam Wang ), 8705f23f57SWilliam Wang L2Size = 16 * 1024, // 16KB 8805f23f57SWilliam Wang L2NWays = 8, 8945c767e3SLinJiawei EnableBPD = false, // disable TAGE 9045c767e3SLinJiawei EnableLoop = false, 91175bcfe9SLinJiawei TlbEntrySize = 4, 92175bcfe9SLinJiawei TlbSPEntrySize = 2, 93175bcfe9SLinJiawei PtwL1EntrySize = 2, 9405f23f57SWilliam Wang PtwL2EntrySize = 64, 9505f23f57SWilliam Wang PtwL3EntrySize = 128, 96175bcfe9SLinJiawei PtwSPEntrySize = 2, 9705f23f57SWilliam Wang useFakeL2Cache = true, 9805f23f57SWilliam Wang )), 9905f23f57SWilliam Wang L3Size = 32 * 1024, // 32KB 10005f23f57SWilliam Wang ) 10105f23f57SWilliam Wang }) 10205f23f57SWilliam Wang) 10305f23f57SWilliam Wang 10405f23f57SWilliam Wang// Non-synthesizable MinimalConfig, for fast simulation only 10505f23f57SWilliam Wangclass MinimalSimConfig(n: Int = 1) extends Config( 10605f23f57SWilliam Wang new MinimalConfig(n).alter((site, here, up) => { 10705f23f57SWilliam Wang case SoCParamsKey => up(SoCParamsKey).copy( 10805f23f57SWilliam Wang cores = up(SoCParamsKey).cores.map(_.copy( 109175bcfe9SLinJiawei useFakeDCache = true, 110175bcfe9SLinJiawei useFakePTW = true, 111175bcfe9SLinJiawei useFakeL1plusCache = true, 112175bcfe9SLinJiawei )), 113175bcfe9SLinJiawei useFakeL3Cache = true 11445c767e3SLinJiawei ) 11545c767e3SLinJiawei }) 11645c767e3SLinJiawei) 117