1c6d43980SLemover/*************************************************************************************** 2c6d43980SLemover* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences 3f320e0f0SYinan Xu* Copyright (c) 2020-2021 Peng Cheng Laboratory 4c6d43980SLemover* 5c6d43980SLemover* XiangShan is licensed under Mulan PSL v2. 6c6d43980SLemover* You can use this software according to the terms and conditions of the Mulan PSL v2. 7c6d43980SLemover* You may obtain a copy of Mulan PSL v2 at: 8c6d43980SLemover* http://license.coscl.org.cn/MulanPSL2 9c6d43980SLemover* 10c6d43980SLemover* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, 11c6d43980SLemover* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, 12c6d43980SLemover* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. 13c6d43980SLemover* 14c6d43980SLemover* See the Mulan PSL v2 for more details. 15c6d43980SLemover***************************************************************************************/ 16c6d43980SLemover 1745c767e3SLinJiaweipackage top 1845c767e3SLinJiawei 1945c767e3SLinJiaweiimport chisel3._ 2045c767e3SLinJiaweiimport chisel3.util._ 2145c767e3SLinJiaweiimport xiangshan._ 2245c767e3SLinJiaweiimport utils._ 2345c767e3SLinJiaweiimport system._ 2445c767e3SLinJiaweiimport chipsalliance.rocketchip.config._ 2545c767e3SLinJiaweiimport freechips.rocketchip.tile.{BusErrorUnit, BusErrorUnitParams, XLen} 26f06ca0bfSLingrui98import xiangshan.frontend.{ICacheParameters} 27d4aca96cSlqreimport freechips.rocketchip.devices.debug._ 28d4aca96cSlqreimport freechips.rocketchip.tile.MaxHartIdBits 29d4aca96cSlqreimport sifive.blocks.inclusivecache.{InclusiveCache, InclusiveCacheMicroParameters, CacheParameters} 3045c767e3SLinJiaweiimport xiangshan.backend.dispatch.DispatchParameters 313a6496e9SYinan Xuimport xiangshan.backend.exu.ExuParameters 3245c767e3SLinJiaweiimport xiangshan.backend.dispatch.DispatchParameters 33f06ca0bfSLingrui98import xiangshan.cache.{DCacheParameters, L1plusCacheParameters} 3445c767e3SLinJiaweiimport xiangshan.cache.prefetch.{BOPParameters, L1plusPrefetcherParameters, L2PrefetcherParameters, StreamPrefetchParameters} 35*a0301c0dSLemoverimport xiangshan.cache.mmu.{L2TLBParameters, TLBParameters} 36d4aca96cSlqreimport device.{XSDebugModuleParams, EnableJtag} 3745c767e3SLinJiawei 3845c767e3SLinJiaweiclass DefaultConfig(n: Int) extends Config((site, here, up) => { 3945c767e3SLinJiawei case XLen => 64 4045c767e3SLinJiawei case DebugOptionsKey => DebugOptions() 4145c767e3SLinJiawei case SoCParamsKey => SoCParameters( 4245c767e3SLinJiawei cores = List.tabulate(n){ i => XSCoreParameters(HartId = i) } 4345c767e3SLinJiawei ) 44d4aca96cSlqre case ExportDebug => DebugAttachParams(protocols = Set(JTAG)) 45d4aca96cSlqre case DebugModuleKey => Some(XSDebugModuleParams(site(XLen))) 46d4aca96cSlqre case JtagDTMKey => JtagDTMKey 47d4aca96cSlqre case MaxHartIdBits => 2 48d4aca96cSlqre case EnableJtag => false.B 4945c767e3SLinJiawei}) 5045c767e3SLinJiawei 5105f23f57SWilliam Wang// Synthesizable minimal XiangShan 5205f23f57SWilliam Wang// * It is still an out-of-order, super-scalaer arch 5305f23f57SWilliam Wang// * L1 cache included 5405f23f57SWilliam Wang// * L2 cache NOT included 5505f23f57SWilliam Wang// * L3 cache included 5645c767e3SLinJiaweiclass MinimalConfig(n: Int = 1) extends Config( 5745c767e3SLinJiawei new DefaultConfig(n).alter((site, here, up) => { 5845c767e3SLinJiawei case SoCParamsKey => up(SoCParamsKey).copy( 5945c767e3SLinJiawei cores = up(SoCParamsKey).cores.map(_.copy( 6005f23f57SWilliam Wang DecodeWidth = 2, 6105f23f57SWilliam Wang RenameWidth = 2, 6205f23f57SWilliam Wang FetchWidth = 4, 6345c767e3SLinJiawei IssQueSize = 8, 643a6496e9SYinan Xu NRPhyRegs = 64, 6545c767e3SLinJiawei LoadQueueSize = 16, 663a6496e9SYinan Xu StoreQueueSize = 12, 6745c767e3SLinJiawei RoqSize = 32, 6845c767e3SLinJiawei BrqSize = 8, 693a6496e9SYinan Xu FtqSize = 8, 7045c767e3SLinJiawei IBufSize = 16, 7105f23f57SWilliam Wang StoreBufferSize = 4, 7205f23f57SWilliam Wang StoreBufferThreshold = 3, 7345c767e3SLinJiawei dpParams = DispatchParameters( 743a6496e9SYinan Xu IntDqSize = 12, 753a6496e9SYinan Xu FpDqSize = 12, 763a6496e9SYinan Xu LsDqSize = 12, 7745c767e3SLinJiawei IntDqDeqWidth = 4, 7845c767e3SLinJiawei FpDqDeqWidth = 4, 7945c767e3SLinJiawei LsDqDeqWidth = 4 8045c767e3SLinJiawei ), 813a6496e9SYinan Xu exuParameters = ExuParameters( 823a6496e9SYinan Xu JmpCnt = 1, 833a6496e9SYinan Xu AluCnt = 2, 843a6496e9SYinan Xu MulCnt = 0, 853a6496e9SYinan Xu MduCnt = 1, 863a6496e9SYinan Xu FmacCnt = 1, 873a6496e9SYinan Xu FmiscCnt = 1, 883a6496e9SYinan Xu FmiscDivSqrtCnt = 0, 893a6496e9SYinan Xu LduCnt = 2, 903a6496e9SYinan Xu StuCnt = 2 913a6496e9SYinan Xu ), 9205f23f57SWilliam Wang icacheParameters = ICacheParameters( 933a6496e9SYinan Xu nSets = 64, // 16KB ICache 9405f23f57SWilliam Wang tagECC = Some("parity"), 9505f23f57SWilliam Wang dataECC = Some("parity"), 9605f23f57SWilliam Wang replacer = Some("setplru"), 9705f23f57SWilliam Wang nMissEntries = 2 9805f23f57SWilliam Wang ), 9905f23f57SWilliam Wang dcacheParameters = DCacheParameters( 1003a6496e9SYinan Xu nSets = 64, // 32KB DCache 1013a6496e9SYinan Xu nWays = 8, 10205f23f57SWilliam Wang tagECC = Some("secded"), 10305f23f57SWilliam Wang dataECC = Some("secded"), 10405f23f57SWilliam Wang replacer = Some("setplru"), 10505f23f57SWilliam Wang nMissEntries = 4, 10605f23f57SWilliam Wang nProbeEntries = 4, 10705f23f57SWilliam Wang nReleaseEntries = 4, 10805f23f57SWilliam Wang nStoreReplayEntries = 4, 10905f23f57SWilliam Wang ), 11045c767e3SLinJiawei EnableBPD = false, // disable TAGE 11145c767e3SLinJiawei EnableLoop = false, 112*a0301c0dSLemover itlbParameters = TLBParameters( 113*a0301c0dSLemover name = "itlb", 114*a0301c0dSLemover fetchi = true, 115*a0301c0dSLemover useDmode = false, 116*a0301c0dSLemover sameCycle = true, 117*a0301c0dSLemover normalReplacer = Some("plru"), 118*a0301c0dSLemover superReplacer = Some("plru"), 119*a0301c0dSLemover normalNWays = 4, 120*a0301c0dSLemover normalNSets = 1, 121*a0301c0dSLemover superNWays = 2, 122*a0301c0dSLemover shouldBlock = true 123*a0301c0dSLemover ), 124*a0301c0dSLemover ldtlbParameters = TLBParameters( 125*a0301c0dSLemover name = "ldtlb", 126*a0301c0dSLemover normalNSets = 4, // when da or sa 127*a0301c0dSLemover normalNWays = 1, // when fa or sa 128*a0301c0dSLemover normalAssociative = "sa", 129*a0301c0dSLemover normalReplacer = Some("setplru"), 130*a0301c0dSLemover superNWays = 4, 131*a0301c0dSLemover normalAsVictim = true, 132*a0301c0dSLemover outReplace = true 133*a0301c0dSLemover ), 134*a0301c0dSLemover sttlbParameters = TLBParameters( 135*a0301c0dSLemover name = "sttlb", 136*a0301c0dSLemover normalNSets = 4, // when da or sa 137*a0301c0dSLemover normalNWays = 1, // when fa or sa 138*a0301c0dSLemover normalAssociative = "sa", 139*a0301c0dSLemover normalReplacer = Some("setplru"), 140*a0301c0dSLemover normalAsVictim = true, 141*a0301c0dSLemover superNWays = 4, 142*a0301c0dSLemover outReplace = true 143*a0301c0dSLemover ), 144*a0301c0dSLemover btlbParameters = TLBParameters( 145*a0301c0dSLemover name = "btlb", 146*a0301c0dSLemover normalNSets = 1, 147*a0301c0dSLemover normalNWays = 8, 148*a0301c0dSLemover superNWays = 2 149*a0301c0dSLemover ), 1505854c1edSLemover l2tlbParameters = L2TLBParameters( 1515854c1edSLemover l1Size = 4, 1525854c1edSLemover l2nSets = 4, 1535854c1edSLemover l2nWays = 4, 1545854c1edSLemover l3nSets = 4, 1555854c1edSLemover l3nWays = 8, 1565854c1edSLemover spSize = 2, 1575854c1edSLemover missQueueSize = 8 1585854c1edSLemover ), 1596c0058d3SYinan Xu useFakeL2Cache = true, // disable L2 Cache 16005f23f57SWilliam Wang )), 1616c0058d3SYinan Xu L3Size = 256 * 1024, // 256KB L3 Cache 16205f23f57SWilliam Wang ) 16305f23f57SWilliam Wang }) 16405f23f57SWilliam Wang) 16505f23f57SWilliam Wang 16605f23f57SWilliam Wang// Non-synthesizable MinimalConfig, for fast simulation only 16705f23f57SWilliam Wangclass MinimalSimConfig(n: Int = 1) extends Config( 16805f23f57SWilliam Wang new MinimalConfig(n).alter((site, here, up) => { 16905f23f57SWilliam Wang case SoCParamsKey => up(SoCParamsKey).copy( 17005f23f57SWilliam Wang cores = up(SoCParamsKey).cores.map(_.copy( 171175bcfe9SLinJiawei useFakeDCache = true, 172175bcfe9SLinJiawei useFakePTW = true, 173175bcfe9SLinJiawei useFakeL1plusCache = true, 174175bcfe9SLinJiawei )), 175175bcfe9SLinJiawei useFakeL3Cache = true 17645c767e3SLinJiawei ) 17745c767e3SLinJiawei }) 17845c767e3SLinJiawei)