xref: /XiangShan/src/main/scala/top/Configs.scala (revision 05f23f575dc9b9d5ecb9f7884862bbe593024bf4)
145c767e3SLinJiaweipackage top
245c767e3SLinJiawei
345c767e3SLinJiaweiimport chisel3._
445c767e3SLinJiaweiimport chisel3.util._
545c767e3SLinJiaweiimport xiangshan._
645c767e3SLinJiaweiimport utils._
745c767e3SLinJiaweiimport system._
845c767e3SLinJiaweiimport chipsalliance.rocketchip.config._
945c767e3SLinJiaweiimport freechips.rocketchip.tile.{BusErrorUnit, BusErrorUnitParams, XLen}
1045c767e3SLinJiaweiimport sifive.blocks.inclusivecache.{InclusiveCache, InclusiveCacheMicroParameters, CacheParameters}
1145c767e3SLinJiaweiimport xiangshan.backend.dispatch.DispatchParameters
1245c767e3SLinJiaweiimport xiangshan.cache.{DCacheParameters, ICacheParameters, L1plusCacheParameters}
1345c767e3SLinJiaweiimport xiangshan.cache.prefetch.{BOPParameters, L1plusPrefetcherParameters, L2PrefetcherParameters, StreamPrefetchParameters}
1445c767e3SLinJiawei
1545c767e3SLinJiaweiclass DefaultConfig(n: Int) extends Config((site, here, up) => {
1645c767e3SLinJiawei  case XLen => 64
1745c767e3SLinJiawei  case DebugOptionsKey => DebugOptions()
1845c767e3SLinJiawei  case SoCParamsKey => SoCParameters(
1945c767e3SLinJiawei    cores = List.tabulate(n){ i => XSCoreParameters(HartId = i) }
2045c767e3SLinJiawei  )
2145c767e3SLinJiawei})
2245c767e3SLinJiawei
23*05f23f57SWilliam Wang// Synthesizable minimal XiangShan
24*05f23f57SWilliam Wang// * It is still an out-of-order, super-scalaer arch
25*05f23f57SWilliam Wang// * L1 cache included
26*05f23f57SWilliam Wang// * L2 cache NOT included
27*05f23f57SWilliam Wang// * L3 cache included
2845c767e3SLinJiaweiclass MinimalConfig(n: Int = 1) extends Config(
2945c767e3SLinJiawei  new DefaultConfig(n).alter((site, here, up) => {
3045c767e3SLinJiawei    case SoCParamsKey => up(SoCParamsKey).copy(
3145c767e3SLinJiawei      cores = up(SoCParamsKey).cores.map(_.copy(
32*05f23f57SWilliam Wang        DecodeWidth = 2,
33*05f23f57SWilliam Wang        RenameWidth = 2,
34*05f23f57SWilliam Wang        FetchWidth = 4,
3545c767e3SLinJiawei        IssQueSize = 8,
3645c767e3SLinJiawei        NRPhyRegs = 80,
3745c767e3SLinJiawei        LoadQueueSize = 16,
3845c767e3SLinJiawei        StoreQueueSize = 16,
3945c767e3SLinJiawei        RoqSize = 32,
4045c767e3SLinJiawei        BrqSize = 8,
4145c767e3SLinJiawei        FtqSize = 16,
4245c767e3SLinJiawei        IBufSize = 16,
43*05f23f57SWilliam Wang        StoreBufferSize = 4,
44*05f23f57SWilliam Wang        StoreBufferThreshold = 3,
4545c767e3SLinJiawei        dpParams = DispatchParameters(
4645c767e3SLinJiawei          IntDqSize = 8,
4745c767e3SLinJiawei          FpDqSize = 8,
4845c767e3SLinJiawei          LsDqSize = 8,
4945c767e3SLinJiawei          IntDqDeqWidth = 4,
5045c767e3SLinJiawei          FpDqDeqWidth = 4,
5145c767e3SLinJiawei          LsDqDeqWidth = 4
5245c767e3SLinJiawei        ),
53*05f23f57SWilliam Wang        icacheParameters = ICacheParameters(
54*05f23f57SWilliam Wang          nSets = 8, // 4KB ICache
55*05f23f57SWilliam Wang          tagECC = Some("parity"),
56*05f23f57SWilliam Wang          dataECC = Some("parity"),
57*05f23f57SWilliam Wang          replacer = Some("setplru"),
58*05f23f57SWilliam Wang          nMissEntries = 2
59*05f23f57SWilliam Wang        ),
60*05f23f57SWilliam Wang        dcacheParameters = DCacheParameters(
61*05f23f57SWilliam Wang          nSets = 8, // 4KB DCache
62*05f23f57SWilliam Wang          nWays = 4,
63*05f23f57SWilliam Wang          tagECC = Some("secded"),
64*05f23f57SWilliam Wang          dataECC = Some("secded"),
65*05f23f57SWilliam Wang          replacer = Some("setplru"),
66*05f23f57SWilliam Wang          nMissEntries = 4,
67*05f23f57SWilliam Wang          nProbeEntries = 4,
68*05f23f57SWilliam Wang          nReleaseEntries = 4,
69*05f23f57SWilliam Wang          nStoreReplayEntries = 4,
70*05f23f57SWilliam Wang        ),
71*05f23f57SWilliam Wang        L2Size = 16 * 1024, // 16KB
72*05f23f57SWilliam Wang        L2NWays = 8,
7345c767e3SLinJiawei        EnableBPD = false, // disable TAGE
7445c767e3SLinJiawei        EnableLoop = false,
75175bcfe9SLinJiawei        TlbEntrySize = 4,
76175bcfe9SLinJiawei        TlbSPEntrySize = 2,
77175bcfe9SLinJiawei        PtwL1EntrySize = 2,
78*05f23f57SWilliam Wang        PtwL2EntrySize = 64,
79*05f23f57SWilliam Wang        PtwL3EntrySize = 128,
80175bcfe9SLinJiawei        PtwSPEntrySize = 2,
81*05f23f57SWilliam Wang        useFakeL2Cache = true,
82*05f23f57SWilliam Wang      )),
83*05f23f57SWilliam Wang      L3Size = 32 * 1024, // 32KB
84*05f23f57SWilliam Wang    )
85*05f23f57SWilliam Wang  })
86*05f23f57SWilliam Wang)
87*05f23f57SWilliam Wang
88*05f23f57SWilliam Wang// Non-synthesizable MinimalConfig, for fast simulation only
89*05f23f57SWilliam Wangclass MinimalSimConfig(n: Int = 1) extends Config(
90*05f23f57SWilliam Wang  new MinimalConfig(n).alter((site, here, up) => {
91*05f23f57SWilliam Wang    case SoCParamsKey => up(SoCParamsKey).copy(
92*05f23f57SWilliam Wang      cores = up(SoCParamsKey).cores.map(_.copy(
93175bcfe9SLinJiawei        useFakeDCache = true,
94175bcfe9SLinJiawei        useFakePTW = true,
95175bcfe9SLinJiawei        useFakeL1plusCache = true,
96175bcfe9SLinJiawei      )),
97175bcfe9SLinJiawei      useFakeL3Cache = true
9845c767e3SLinJiawei    )
9945c767e3SLinJiawei  })
10045c767e3SLinJiawei)
101