xref: /XiangShan/src/main/scala/top/Configs.scala (revision a0301c0d86a76a8bbed79fab2db5e6571a62b88a)
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)