xref: /XiangShan/src/main/scala/top/Configs.scala (revision 5854c1ed5b0edc307f0bd863fd2dc140f5221006)
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}
26d4aca96cSlqreimport freechips.rocketchip.devices.debug._
27d4aca96cSlqreimport freechips.rocketchip.tile.MaxHartIdBits
28d4aca96cSlqreimport 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*5854c1edSLemoverimport xiangshan.cache.mmu.{L2TLBParameters}
34d4aca96cSlqreimport device.{XSDebugModuleParams, EnableJtag}
3545c767e3SLinJiawei
3645c767e3SLinJiaweiclass DefaultConfig(n: Int) extends Config((site, here, up) => {
3745c767e3SLinJiawei  case XLen => 64
3845c767e3SLinJiawei  case DebugOptionsKey => DebugOptions()
3945c767e3SLinJiawei  case SoCParamsKey => SoCParameters(
4045c767e3SLinJiawei    cores = List.tabulate(n){ i => XSCoreParameters(HartId = i) }
4145c767e3SLinJiawei  )
42d4aca96cSlqre  case ExportDebug => DebugAttachParams(protocols = Set(JTAG))
43d4aca96cSlqre  case DebugModuleKey => Some(XSDebugModuleParams(site(XLen)))
44d4aca96cSlqre  case JtagDTMKey => JtagDTMKey
45d4aca96cSlqre  case MaxHartIdBits => 2
46d4aca96cSlqre  case EnableJtag => false.B
4745c767e3SLinJiawei})
4845c767e3SLinJiawei
4905f23f57SWilliam Wang// Synthesizable minimal XiangShan
5005f23f57SWilliam Wang// * It is still an out-of-order, super-scalaer arch
5105f23f57SWilliam Wang// * L1 cache included
5205f23f57SWilliam Wang// * L2 cache NOT included
5305f23f57SWilliam Wang// * L3 cache included
5445c767e3SLinJiaweiclass MinimalConfig(n: Int = 1) extends Config(
5545c767e3SLinJiawei  new DefaultConfig(n).alter((site, here, up) => {
5645c767e3SLinJiawei    case SoCParamsKey => up(SoCParamsKey).copy(
5745c767e3SLinJiawei      cores = up(SoCParamsKey).cores.map(_.copy(
5805f23f57SWilliam Wang        DecodeWidth = 2,
5905f23f57SWilliam Wang        RenameWidth = 2,
6005f23f57SWilliam Wang        FetchWidth = 4,
6145c767e3SLinJiawei        IssQueSize = 8,
62072158bfSYinan Xu        NRPhyRegs = 64,
6345c767e3SLinJiawei        LoadQueueSize = 16,
64072158bfSYinan Xu        StoreQueueSize = 12,
6545c767e3SLinJiawei        RoqSize = 32,
6645c767e3SLinJiawei        BrqSize = 8,
67072158bfSYinan Xu        FtqSize = 8,
6845c767e3SLinJiawei        IBufSize = 16,
6905f23f57SWilliam Wang        StoreBufferSize = 4,
7005f23f57SWilliam Wang        StoreBufferThreshold = 3,
7145c767e3SLinJiawei        dpParams = DispatchParameters(
72072158bfSYinan Xu          IntDqSize = 12,
73072158bfSYinan Xu          FpDqSize = 12,
74072158bfSYinan Xu          LsDqSize = 12,
7545c767e3SLinJiawei          IntDqDeqWidth = 4,
7645c767e3SLinJiawei          FpDqDeqWidth = 4,
7745c767e3SLinJiawei          LsDqDeqWidth = 4
7845c767e3SLinJiawei        ),
79072158bfSYinan Xu        exuParameters = ExuParameters(
80072158bfSYinan Xu          JmpCnt = 1,
81072158bfSYinan Xu          AluCnt = 2,
82072158bfSYinan Xu          MulCnt = 0,
83072158bfSYinan Xu          MduCnt = 1,
84072158bfSYinan Xu          FmacCnt = 1,
85072158bfSYinan Xu          FmiscCnt = 1,
86072158bfSYinan Xu          FmiscDivSqrtCnt = 0,
87072158bfSYinan Xu          LduCnt = 2,
88072158bfSYinan Xu          StuCnt = 2
89072158bfSYinan Xu        ),
9005f23f57SWilliam Wang        icacheParameters = ICacheParameters(
91072158bfSYinan Xu          nSets = 64, // 16KB ICache
9205f23f57SWilliam Wang          tagECC = Some("parity"),
9305f23f57SWilliam Wang          dataECC = Some("parity"),
9405f23f57SWilliam Wang          replacer = Some("setplru"),
9505f23f57SWilliam Wang          nMissEntries = 2
9605f23f57SWilliam Wang        ),
9705f23f57SWilliam Wang        dcacheParameters = DCacheParameters(
98072158bfSYinan Xu          nSets = 64, // 32KB DCache
99072158bfSYinan Xu          nWays = 8,
10005f23f57SWilliam Wang          tagECC = Some("secded"),
10105f23f57SWilliam Wang          dataECC = Some("secded"),
10205f23f57SWilliam Wang          replacer = Some("setplru"),
10305f23f57SWilliam Wang          nMissEntries = 4,
10405f23f57SWilliam Wang          nProbeEntries = 4,
10505f23f57SWilliam Wang          nReleaseEntries = 4,
10605f23f57SWilliam Wang          nStoreReplayEntries = 4,
10705f23f57SWilliam Wang        ),
10845c767e3SLinJiawei        EnableBPD = false, // disable TAGE
10945c767e3SLinJiawei        EnableLoop = false,
110b052b972SLemover        TlbEntrySize = 32,
111b052b972SLemover        TlbSPEntrySize = 4,
112*5854c1edSLemover        l2tlbParameters = L2TLBParameters(
113*5854c1edSLemover          l1Size = 4,
114*5854c1edSLemover          l2nSets = 4,
115*5854c1edSLemover          l2nWays = 4,
116*5854c1edSLemover          l3nSets = 4,
117*5854c1edSLemover          l3nWays = 8,
118*5854c1edSLemover          spSize = 2,
119*5854c1edSLemover          missQueueSize = 8
120*5854c1edSLemover        ),
1216c0058d3SYinan Xu        useFakeL2Cache = true, // disable L2 Cache
12205f23f57SWilliam Wang      )),
1236c0058d3SYinan Xu      L3Size = 256 * 1024, // 256KB L3 Cache
12405f23f57SWilliam Wang    )
12505f23f57SWilliam Wang  })
12605f23f57SWilliam Wang)
12705f23f57SWilliam Wang
12805f23f57SWilliam Wang// Non-synthesizable MinimalConfig, for fast simulation only
12905f23f57SWilliam Wangclass MinimalSimConfig(n: Int = 1) extends Config(
13005f23f57SWilliam Wang  new MinimalConfig(n).alter((site, here, up) => {
13105f23f57SWilliam Wang    case SoCParamsKey => up(SoCParamsKey).copy(
13205f23f57SWilliam Wang      cores = up(SoCParamsKey).cores.map(_.copy(
133175bcfe9SLinJiawei        useFakeDCache = true,
134175bcfe9SLinJiawei        useFakePTW = true,
135175bcfe9SLinJiawei        useFakeL1plusCache = true,
136175bcfe9SLinJiawei      )),
137175bcfe9SLinJiawei      useFakeL3Cache = true
13845c767e3SLinJiawei    )
13945c767e3SLinJiawei  })
14045c767e3SLinJiawei)
141