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} 26*d4aca96cSlqreimport freechips.rocketchip.devices.debug._ 27*d4aca96cSlqreimport freechips.rocketchip.tile.MaxHartIdBits 28*d4aca96cSlqreimport sifive.blocks.inclusivecache.{InclusiveCache, InclusiveCacheMicroParameters, CacheParameters} 2945c767e3SLinJiaweiimport xiangshan.backend.dispatch.DispatchParameters 30072158bfSYinan Xuimport xiangshan.backend.exu.ExuParameters 3145c767e3SLinJiaweiimport xiangshan.cache.{DCacheParameters, ICacheParameters, L1plusCacheParameters} 3245c767e3SLinJiaweiimport xiangshan.cache.prefetch.{BOPParameters, L1plusPrefetcherParameters, L2PrefetcherParameters, StreamPrefetchParameters} 33*d4aca96cSlqreimport device.{XSDebugModuleParams, EnableJtag} 3445c767e3SLinJiawei 3545c767e3SLinJiaweiclass DefaultConfig(n: Int) extends Config((site, here, up) => { 3645c767e3SLinJiawei case XLen => 64 3745c767e3SLinJiawei case DebugOptionsKey => DebugOptions() 3845c767e3SLinJiawei case SoCParamsKey => SoCParameters( 3945c767e3SLinJiawei cores = List.tabulate(n){ i => XSCoreParameters(HartId = i) } 4045c767e3SLinJiawei ) 41*d4aca96cSlqre case ExportDebug => DebugAttachParams(protocols = Set(JTAG)) 42*d4aca96cSlqre case DebugModuleKey => Some(XSDebugModuleParams(site(XLen))) 43*d4aca96cSlqre case JtagDTMKey => JtagDTMKey 44*d4aca96cSlqre case MaxHartIdBits => 2 45*d4aca96cSlqre case EnableJtag => false.B 4645c767e3SLinJiawei}) 4745c767e3SLinJiawei 4805f23f57SWilliam Wang// Synthesizable minimal XiangShan 4905f23f57SWilliam Wang// * It is still an out-of-order, super-scalaer arch 5005f23f57SWilliam Wang// * L1 cache included 5105f23f57SWilliam Wang// * L2 cache NOT included 5205f23f57SWilliam Wang// * L3 cache included 5345c767e3SLinJiaweiclass MinimalConfig(n: Int = 1) extends Config( 5445c767e3SLinJiawei new DefaultConfig(n).alter((site, here, up) => { 5545c767e3SLinJiawei case SoCParamsKey => up(SoCParamsKey).copy( 5645c767e3SLinJiawei cores = up(SoCParamsKey).cores.map(_.copy( 5705f23f57SWilliam Wang DecodeWidth = 2, 5805f23f57SWilliam Wang RenameWidth = 2, 5905f23f57SWilliam Wang FetchWidth = 4, 6045c767e3SLinJiawei IssQueSize = 8, 61072158bfSYinan Xu NRPhyRegs = 64, 6245c767e3SLinJiawei LoadQueueSize = 16, 63072158bfSYinan Xu StoreQueueSize = 12, 6445c767e3SLinJiawei RoqSize = 32, 6545c767e3SLinJiawei BrqSize = 8, 66072158bfSYinan Xu FtqSize = 8, 6745c767e3SLinJiawei IBufSize = 16, 6805f23f57SWilliam Wang StoreBufferSize = 4, 6905f23f57SWilliam Wang StoreBufferThreshold = 3, 7045c767e3SLinJiawei dpParams = DispatchParameters( 71072158bfSYinan Xu IntDqSize = 12, 72072158bfSYinan Xu FpDqSize = 12, 73072158bfSYinan Xu LsDqSize = 12, 7445c767e3SLinJiawei IntDqDeqWidth = 4, 7545c767e3SLinJiawei FpDqDeqWidth = 4, 7645c767e3SLinJiawei LsDqDeqWidth = 4 7745c767e3SLinJiawei ), 78072158bfSYinan Xu exuParameters = ExuParameters( 79072158bfSYinan Xu JmpCnt = 1, 80072158bfSYinan Xu AluCnt = 2, 81072158bfSYinan Xu MulCnt = 0, 82072158bfSYinan Xu MduCnt = 1, 83072158bfSYinan Xu FmacCnt = 1, 84072158bfSYinan Xu FmiscCnt = 1, 85072158bfSYinan Xu FmiscDivSqrtCnt = 0, 86072158bfSYinan Xu LduCnt = 2, 87072158bfSYinan Xu StuCnt = 2 88072158bfSYinan Xu ), 8905f23f57SWilliam Wang icacheParameters = ICacheParameters( 90072158bfSYinan Xu nSets = 64, // 16KB ICache 9105f23f57SWilliam Wang tagECC = Some("parity"), 9205f23f57SWilliam Wang dataECC = Some("parity"), 9305f23f57SWilliam Wang replacer = Some("setplru"), 9405f23f57SWilliam Wang nMissEntries = 2 9505f23f57SWilliam Wang ), 9605f23f57SWilliam Wang dcacheParameters = DCacheParameters( 97072158bfSYinan Xu nSets = 64, // 32KB DCache 98072158bfSYinan Xu nWays = 8, 9905f23f57SWilliam Wang tagECC = Some("secded"), 10005f23f57SWilliam Wang dataECC = Some("secded"), 10105f23f57SWilliam Wang replacer = Some("setplru"), 10205f23f57SWilliam Wang nMissEntries = 4, 10305f23f57SWilliam Wang nProbeEntries = 4, 10405f23f57SWilliam Wang nReleaseEntries = 4, 10505f23f57SWilliam Wang nStoreReplayEntries = 4, 10605f23f57SWilliam Wang ), 10745c767e3SLinJiawei EnableBPD = false, // disable TAGE 10845c767e3SLinJiawei EnableLoop = false, 109175bcfe9SLinJiawei TlbEntrySize = 4, 110175bcfe9SLinJiawei TlbSPEntrySize = 2, 111175bcfe9SLinJiawei PtwL1EntrySize = 2, 11205f23f57SWilliam Wang PtwL2EntrySize = 64, 11305f23f57SWilliam Wang PtwL3EntrySize = 128, 114175bcfe9SLinJiawei PtwSPEntrySize = 2, 1156c0058d3SYinan Xu useFakeL2Cache = true, // disable L2 Cache 11605f23f57SWilliam Wang )), 1176c0058d3SYinan Xu L3Size = 256 * 1024, // 256KB L3 Cache 11805f23f57SWilliam Wang ) 11905f23f57SWilliam Wang }) 12005f23f57SWilliam Wang) 12105f23f57SWilliam Wang 12205f23f57SWilliam Wang// Non-synthesizable MinimalConfig, for fast simulation only 12305f23f57SWilliam Wangclass MinimalSimConfig(n: Int = 1) extends Config( 12405f23f57SWilliam Wang new MinimalConfig(n).alter((site, here, up) => { 12505f23f57SWilliam Wang case SoCParamsKey => up(SoCParamsKey).copy( 12605f23f57SWilliam Wang cores = up(SoCParamsKey).cores.map(_.copy( 127175bcfe9SLinJiawei useFakeDCache = true, 128175bcfe9SLinJiawei useFakePTW = true, 129175bcfe9SLinJiawei useFakeL1plusCache = true, 130175bcfe9SLinJiawei )), 131175bcfe9SLinJiawei useFakeL3Cache = true 13245c767e3SLinJiawei ) 13345c767e3SLinJiawei }) 13445c767e3SLinJiawei) 135