xref: /XiangShan/src/main/scala/top/Configs.scala (revision 3a6496e961d63edfffda3088ef59961966d44408)
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}
26f06ca0bfSLingrui98import xiangshan.frontend.{ICacheParameters}
27*3a6496e9SYinan Xuimport xiangshan.backend.exu.ExuParameters
2845c767e3SLinJiaweiimport xiangshan.backend.dispatch.DispatchParameters
29f06ca0bfSLingrui98import xiangshan.cache.{DCacheParameters, L1plusCacheParameters}
3045c767e3SLinJiaweiimport xiangshan.cache.prefetch.{BOPParameters, L1plusPrefetcherParameters, L2PrefetcherParameters, StreamPrefetchParameters}
3145c767e3SLinJiawei
3245c767e3SLinJiaweiclass DefaultConfig(n: Int) extends Config((site, here, up) => {
3345c767e3SLinJiawei  case XLen => 64
3445c767e3SLinJiawei  case DebugOptionsKey => DebugOptions()
3545c767e3SLinJiawei  case SoCParamsKey => SoCParameters(
3645c767e3SLinJiawei    cores = List.tabulate(n){ i => XSCoreParameters(HartId = i) }
3745c767e3SLinJiawei  )
3845c767e3SLinJiawei})
3945c767e3SLinJiawei
4005f23f57SWilliam Wang// Synthesizable minimal XiangShan
4105f23f57SWilliam Wang// * It is still an out-of-order, super-scalaer arch
4205f23f57SWilliam Wang// * L1 cache included
4305f23f57SWilliam Wang// * L2 cache NOT included
4405f23f57SWilliam Wang// * L3 cache included
4545c767e3SLinJiaweiclass MinimalConfig(n: Int = 1) extends Config(
4645c767e3SLinJiawei  new DefaultConfig(n).alter((site, here, up) => {
4745c767e3SLinJiawei    case SoCParamsKey => up(SoCParamsKey).copy(
4845c767e3SLinJiawei      cores = up(SoCParamsKey).cores.map(_.copy(
4905f23f57SWilliam Wang        DecodeWidth = 2,
5005f23f57SWilliam Wang        RenameWidth = 2,
5105f23f57SWilliam Wang        FetchWidth = 4,
5245c767e3SLinJiawei        IssQueSize = 8,
53*3a6496e9SYinan Xu        NRPhyRegs = 64,
5445c767e3SLinJiawei        LoadQueueSize = 16,
55*3a6496e9SYinan Xu        StoreQueueSize = 12,
5645c767e3SLinJiawei        RoqSize = 32,
5745c767e3SLinJiawei        BrqSize = 8,
58*3a6496e9SYinan Xu        FtqSize = 8,
5945c767e3SLinJiawei        IBufSize = 16,
6005f23f57SWilliam Wang        StoreBufferSize = 4,
6105f23f57SWilliam Wang        StoreBufferThreshold = 3,
6245c767e3SLinJiawei        dpParams = DispatchParameters(
63*3a6496e9SYinan Xu          IntDqSize = 12,
64*3a6496e9SYinan Xu          FpDqSize = 12,
65*3a6496e9SYinan Xu          LsDqSize = 12,
6645c767e3SLinJiawei          IntDqDeqWidth = 4,
6745c767e3SLinJiawei          FpDqDeqWidth = 4,
6845c767e3SLinJiawei          LsDqDeqWidth = 4
6945c767e3SLinJiawei        ),
70*3a6496e9SYinan Xu        exuParameters = ExuParameters(
71*3a6496e9SYinan Xu          JmpCnt = 1,
72*3a6496e9SYinan Xu          AluCnt = 2,
73*3a6496e9SYinan Xu          MulCnt = 0,
74*3a6496e9SYinan Xu          MduCnt = 1,
75*3a6496e9SYinan Xu          FmacCnt = 1,
76*3a6496e9SYinan Xu          FmiscCnt = 1,
77*3a6496e9SYinan Xu          FmiscDivSqrtCnt = 0,
78*3a6496e9SYinan Xu          LduCnt = 2,
79*3a6496e9SYinan Xu          StuCnt = 2
80*3a6496e9SYinan Xu        ),
8105f23f57SWilliam Wang        icacheParameters = ICacheParameters(
82*3a6496e9SYinan Xu          nSets = 64, // 16KB ICache
8305f23f57SWilliam Wang          tagECC = Some("parity"),
8405f23f57SWilliam Wang          dataECC = Some("parity"),
8505f23f57SWilliam Wang          replacer = Some("setplru"),
8605f23f57SWilliam Wang          nMissEntries = 2
8705f23f57SWilliam Wang        ),
8805f23f57SWilliam Wang        dcacheParameters = DCacheParameters(
89*3a6496e9SYinan Xu          nSets = 64, // 32KB DCache
90*3a6496e9SYinan Xu          nWays = 8,
9105f23f57SWilliam Wang          tagECC = Some("secded"),
9205f23f57SWilliam Wang          dataECC = Some("secded"),
9305f23f57SWilliam Wang          replacer = Some("setplru"),
9405f23f57SWilliam Wang          nMissEntries = 4,
9505f23f57SWilliam Wang          nProbeEntries = 4,
9605f23f57SWilliam Wang          nReleaseEntries = 4,
9705f23f57SWilliam Wang          nStoreReplayEntries = 4,
9805f23f57SWilliam Wang        ),
99*3a6496e9SYinan Xu        L2Size = 128 * 1024, // 128KB
10005f23f57SWilliam Wang        L2NWays = 8,
10145c767e3SLinJiawei        EnableBPD = false, // disable TAGE
10245c767e3SLinJiawei        EnableLoop = false,
103175bcfe9SLinJiawei        TlbEntrySize = 4,
104175bcfe9SLinJiawei        TlbSPEntrySize = 2,
105175bcfe9SLinJiawei        PtwL1EntrySize = 2,
10605f23f57SWilliam Wang        PtwL2EntrySize = 64,
10705f23f57SWilliam Wang        PtwL3EntrySize = 128,
108175bcfe9SLinJiawei        PtwSPEntrySize = 2,
10905f23f57SWilliam Wang        useFakeL2Cache = true,
11005f23f57SWilliam Wang      )),
11105f23f57SWilliam Wang      L3Size = 32 * 1024, // 32KB
11205f23f57SWilliam Wang    )
11305f23f57SWilliam Wang  })
11405f23f57SWilliam Wang)
11505f23f57SWilliam Wang
11605f23f57SWilliam Wang// Non-synthesizable MinimalConfig, for fast simulation only
11705f23f57SWilliam Wangclass MinimalSimConfig(n: Int = 1) extends Config(
11805f23f57SWilliam Wang  new MinimalConfig(n).alter((site, here, up) => {
11905f23f57SWilliam Wang    case SoCParamsKey => up(SoCParamsKey).copy(
12005f23f57SWilliam Wang      cores = up(SoCParamsKey).cores.map(_.copy(
121175bcfe9SLinJiawei        useFakeDCache = true,
122175bcfe9SLinJiawei        useFakePTW = true,
123175bcfe9SLinJiawei        useFakeL1plusCache = true,
124175bcfe9SLinJiawei      )),
125175bcfe9SLinJiawei      useFakeL3Cache = true
12645c767e3SLinJiawei    )
12745c767e3SLinJiawei  })
12845c767e3SLinJiawei)
129e6f5a5abSLingrui98
130e6f5a5abSLingrui98class MinimalSimConfigForFetch(n: Int = 1) extends Config(
131e6f5a5abSLingrui98  new MinimalSimConfig(n).alter((site, here, up) => {
132e6f5a5abSLingrui98    case SoCParamsKey => up(SoCParamsKey).copy(
133e6f5a5abSLingrui98      cores = up(SoCParamsKey).cores.map(_.copy(
134e6f5a5abSLingrui98        FetchWidth = 8
135e6f5a5abSLingrui98      ))
136e6f5a5abSLingrui98    )
137e6f5a5abSLingrui98  })
138e6f5a5abSLingrui98)
139