xref: /XiangShan/src/main/scala/xiangshan/Parameters.scala (revision acb0b98e11f7dfbb33fcd9353ba6a3a068c376a2)
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
172225d46eSJiawei Linpackage xiangshan
182225d46eSJiawei Lin
192225d46eSJiawei Linimport chipsalliance.rocketchip.config.{Field, Parameters}
202225d46eSJiawei Linimport chisel3._
212225d46eSJiawei Linimport chisel3.util._
2298c71602SJiawei Linimport huancun._
233b739f49SXuan Huimport system.SoCParamsKey
24730cfbc0SXuan Huimport xiangshan.backend.datapath.RdConfig._
25730cfbc0SXuan Huimport xiangshan.backend.datapath.WbConfig._
263b739f49SXuan Huimport xiangshan.backend.dispatch.DispatchParameters
27730cfbc0SXuan Huimport xiangshan.backend.exu.ExeUnitParams
28730cfbc0SXuan Huimport xiangshan.backend.fu.FuConfig._
29730cfbc0SXuan Huimport xiangshan.backend.issue.{IntScheduler, IssueBlockParams, MemScheduler, SchdBlockParams, SchedulerType, VfScheduler}
30730cfbc0SXuan Huimport xiangshan.backend.regfile.{IntPregParams, PregParams, VfPregParams}
31730cfbc0SXuan Huimport xiangshan.backend.BackendParams
323b739f49SXuan Huimport xiangshan.cache.DCacheParameters
33a1ea7f76SJiawei Linimport xiangshan.cache.prefetch._
34a1ea7f76SJiawei Linimport xiangshan.frontend.{BasePredictor, BranchPredictionResp, FTB, FakePredictor, RAS, Tage, ITTage, Tage_SC, FauFTB}
3560f966c8SGuokai Chenimport xiangshan.frontend.icache.ICacheParameters
363b739f49SXuan Huimport xiangshan.cache.mmu.{L2TLBParameters, TLBParameters}
373b739f49SXuan Huimport xiangshan.frontend._
383b739f49SXuan Huimport xiangshan.frontend.icache.ICacheParameters
393b739f49SXuan Hu
40d4aca96cSlqreimport freechips.rocketchip.diplomacy.AddressSet
412f30d658SYinan Xuimport system.SoCParamsKey
4298c71602SJiawei Linimport huancun._
4398c71602SJiawei Linimport huancun.debug._
4415ee59e4Swakafaimport coupledL2._
45bf35baadSXuan Huimport xiangshan.backend.datapath.WakeUpConfig
46289fc2f9SLinJiaweiimport xiangshan.mem.prefetch.{PrefetcherParams, SMSParams}
47289fc2f9SLinJiawei
48dd6c0695SLingrui98import scala.math.min
4934ab1ae9SJiawei Lin
5034ab1ae9SJiawei Lincase object XSTileKey extends Field[Seq[XSCoreParameters]]
5134ab1ae9SJiawei Lin
522225d46eSJiawei Lincase object XSCoreParamsKey extends Field[XSCoreParameters]
532225d46eSJiawei Lin
542225d46eSJiawei Lincase class XSCoreParameters
552225d46eSJiawei Lin(
562225d46eSJiawei Lin  HasPrefetch: Boolean = false,
572225d46eSJiawei Lin  HartId: Int = 0,
582225d46eSJiawei Lin  XLEN: Int = 64,
59deb6421eSHaojin Tang  VLEN: Int = 128,
60a8db15d8Sfdy  ELEN: Int = 64,
612225d46eSJiawei Lin  HasMExtension: Boolean = true,
622225d46eSJiawei Lin  HasCExtension: Boolean = true,
632225d46eSJiawei Lin  HasDiv: Boolean = true,
642225d46eSJiawei Lin  HasICache: Boolean = true,
652225d46eSJiawei Lin  HasDCache: Boolean = true,
662225d46eSJiawei Lin  AddrBits: Int = 64,
672225d46eSJiawei Lin  VAddrBits: Int = 39,
682225d46eSJiawei Lin  HasFPU: Boolean = true,
6935d1557aSZiyue Zhang  HasVPU: Boolean = true,
70ad3ba452Szhanglinjuan  HasCustomCSRCacheOp: Boolean = true,
712225d46eSJiawei Lin  FetchWidth: Int = 8,
7245f497a4Shappy-lx  AsidLength: Int = 16,
732225d46eSJiawei Lin  EnableBPU: Boolean = true,
742225d46eSJiawei Lin  EnableBPD: Boolean = true,
752225d46eSJiawei Lin  EnableRAS: Boolean = true,
762225d46eSJiawei Lin  EnableLB: Boolean = false,
772225d46eSJiawei Lin  EnableLoop: Boolean = true,
78e0f3968cSzoujr  EnableSC: Boolean = true,
792225d46eSJiawei Lin  EnbaleTlbDebug: Boolean = false,
802225d46eSJiawei Lin  EnableJal: Boolean = false,
8111d0c81dSLingrui98  EnableFauFTB: Boolean = true,
82f2aabf0dSLingrui98  UbtbGHRLength: Int = 4,
83c7fabd05SSteve Gou  // HistoryLength: Int = 512,
842f7b35ceSLingrui98  EnableGHistDiff: Boolean = true,
85ab0200c8SEaston Man  EnableCommitGHistDiff: Boolean = true,
86edc18578SLingrui98  UbtbSize: Int = 256,
87b37e4b45SLingrui98  FtbSize: Int = 2048,
88ba4cf515SLingrui98  RasSize: Int = 32,
892225d46eSJiawei Lin  CacheLineSize: Int = 512,
90b37e4b45SLingrui98  FtbWays: Int = 4,
91dd6c0695SLingrui98  TageTableInfos: Seq[Tuple3[Int,Int,Int]] =
92dd6c0695SLingrui98  //       Sets  Hist   Tag
9351e26c03SLingrui98    // Seq(( 2048,    2,    8),
9451e26c03SLingrui98    //     ( 2048,    9,    8),
9551e26c03SLingrui98    //     ( 2048,   13,    8),
9651e26c03SLingrui98    //     ( 2048,   20,    8),
9751e26c03SLingrui98    //     ( 2048,   26,    8),
9851e26c03SLingrui98    //     ( 2048,   44,    8),
9951e26c03SLingrui98    //     ( 2048,   73,    8),
10051e26c03SLingrui98    //     ( 2048,  256,    8)),
10151e26c03SLingrui98    Seq(( 4096,    8,    8),
10251e26c03SLingrui98        ( 4096,   13,    8),
10351e26c03SLingrui98        ( 4096,   32,    8),
10451e26c03SLingrui98        ( 4096,  119,    8)),
105dd6c0695SLingrui98  ITTageTableInfos: Seq[Tuple3[Int,Int,Int]] =
106dd6c0695SLingrui98  //      Sets  Hist   Tag
10703c81005SLingrui98    Seq(( 256,    4,    9),
108527dc111SLingrui98        ( 256,    8,    9),
1093581d7d3SLingrui98        ( 512,   13,    9),
110527dc111SLingrui98        ( 512,   16,    9),
111f2aabf0dSLingrui98        ( 512,   32,    9)),
11282dc6ff8SLingrui98  SCNRows: Int = 512,
11382dc6ff8SLingrui98  SCNTables: Int = 4,
114dd6c0695SLingrui98  SCCtrBits: Int = 6,
11582dc6ff8SLingrui98  SCHistLens: Seq[Int] = Seq(0, 4, 10, 16),
116dd6c0695SLingrui98  numBr: Int = 2,
117bf358e08SLingrui98  branchPredictor: Function2[BranchPredictionResp, Parameters, Tuple2[Seq[BasePredictor], BranchPredictionResp]] =
118bf358e08SLingrui98    ((resp_in: BranchPredictionResp, p: Parameters) => {
11916a1cc4bSzoujr      val ftb = Module(new FTB()(p))
120c5e28a9aSLingrui98      val ubtb =Module(new FauFTB()(p))
1214813e060SLingrui98      // val bim = Module(new BIM()(p))
122bf358e08SLingrui98      val tage = Module(new Tage_SC()(p))
1234cd08aa8SLingrui98      val ras = Module(new RAS()(p))
12460f966c8SGuokai Chen      val ittage = Module(new ITTage()(p))
1254813e060SLingrui98      val preds = Seq(ubtb, tage, ftb, ittage, ras)
12616a1cc4bSzoujr      preds.map(_.io := DontCare)
12716a1cc4bSzoujr
12816a1cc4bSzoujr      // ubtb.io.resp_in(0)  := resp_in
12916a1cc4bSzoujr      // bim.io.resp_in(0)   := ubtb.io.resp
13016a1cc4bSzoujr      // btb.io.resp_in(0)   := bim.io.resp
13116a1cc4bSzoujr      // tage.io.resp_in(0)  := btb.io.resp
13216a1cc4bSzoujr      // loop.io.resp_in(0)  := tage.io.resp
1334813e060SLingrui98      ubtb.io.in.bits.resp_in(0) := resp_in
134c2d1ec7dSLingrui98      tage.io.in.bits.resp_in(0) := ubtb.io.out
135c2d1ec7dSLingrui98      ftb.io.in.bits.resp_in(0)  := tage.io.out
136c2d1ec7dSLingrui98      ittage.io.in.bits.resp_in(0)  := ftb.io.out
137c2d1ec7dSLingrui98      ras.io.in.bits.resp_in(0) := ittage.io.out
13816a1cc4bSzoujr
139c2d1ec7dSLingrui98      (preds, ras.io.out)
14016a1cc4bSzoujr    }),
1412225d46eSJiawei Lin  IBufSize: Int = 48,
1422225d46eSJiawei Lin  DecodeWidth: Int = 6,
1432225d46eSJiawei Lin  RenameWidth: Int = 6,
1442225d46eSJiawei Lin  CommitWidth: Int = 6,
14565df1368Sczw  MaxUopSize: Int = 65,
1465df4db2aSLingrui98  FtqSize: Int = 64,
1472225d46eSJiawei Lin  EnableLoadFastWakeUp: Boolean = true, // NOTE: not supported now, make it false
148a8db15d8Sfdy  IntLogicRegs: Int = 32,
149d91483a6Sfdy  FpLogicRegs: Int = 33,
150189ec863SzhanglyGit  VecLogicRegs: Int = 32 + 1 + 15, // 15: tmp, 1: vconfig
151189ec863SzhanglyGit  VCONFIG_IDX: Int = 32,
1527154d65eSYinan Xu  NRPhyRegs: Int = 192,
15373faecdcSXuan Hu  IntPhyRegs: Int = 192,
15473faecdcSXuan Hu  VfPhyRegs: Int = 192,
155e4f69d78Ssfencevma  VirtualLoadQueueSize: Int = 80,
156e4f69d78Ssfencevma  LoadQueueRARSize: Int = 80,
157e4f69d78Ssfencevma  LoadQueueRAWSize: Int = 64, // NOTE: make sure that LoadQueueRAWSize is power of 2.
158e4f69d78Ssfencevma  RollbackGroupSize: Int = 8,
159e4f69d78Ssfencevma  LoadQueueReplaySize: Int = 80,
160e4f69d78Ssfencevma  LoadUncacheBufferSize: Int = 20,
161e4f69d78Ssfencevma  LoadQueueNWriteBanks: Int = 8, // NOTE: make sure that LoadQueueRARSize/LoadQueueRAWSize is divided by LoadQueueNWriteBanks
1622b4e8253SYinan Xu  StoreQueueSize: Int = 64,
163e4f69d78Ssfencevma  StoreQueueNWriteBanks: Int = 8, // NOTE: make sure that StoreQueueSize is divided by StoreQueueNWriteBanks
164e4f69d78Ssfencevma  StoreQueueForwardWithMask: Boolean = true,
165cea88ff8SWilliam Wang  VlsQueueSize: Int = 8,
1667154d65eSYinan Xu  RobSize: Int = 256,
167a8db15d8Sfdy  RabSize: Int = 256,
1682225d46eSJiawei Lin  dpParams: DispatchParameters = DispatchParameters(
1692225d46eSJiawei Lin    IntDqSize = 16,
1702225d46eSJiawei Lin    FpDqSize = 16,
1712225d46eSJiawei Lin    LsDqSize = 16,
1723b739f49SXuan Hu    IntDqDeqWidth = 6,
1733b739f49SXuan Hu    FpDqDeqWidth = 6,
1743b739f49SXuan Hu    LsDqDeqWidth = 6,
1752225d46eSJiawei Lin  ),
1763b739f49SXuan Hu  intPreg: PregParams = IntPregParams(
177fa35b2ceSzhanglyGit    numEntries = 256,
1783b739f49SXuan Hu    numRead = 14,
1793b739f49SXuan Hu    numWrite = 8,
1802225d46eSJiawei Lin  ),
1813b739f49SXuan Hu  vfPreg: VfPregParams = VfPregParams(
182fa35b2ceSzhanglyGit    numEntries = 256,
1833b739f49SXuan Hu    numRead = 14,
1843b739f49SXuan Hu    numWrite = 8,
1853b739f49SXuan Hu  ),
186289fc2f9SLinJiawei  prefetcher: Option[PrefetcherParams] = Some(SMSParams()),
1872225d46eSJiawei Lin  LoadPipelineWidth: Int = 2,
1882225d46eSJiawei Lin  StorePipelineWidth: Int = 2,
189cea88ff8SWilliam Wang  VecMemSrcInWidth: Int = 2,
190cea88ff8SWilliam Wang  VecMemInstWbWidth: Int = 1,
191cea88ff8SWilliam Wang  VecMemDispatchWidth: Int = 1,
1922225d46eSJiawei Lin  StoreBufferSize: Int = 16,
19305f23f57SWilliam Wang  StoreBufferThreshold: Int = 7,
19446f74b57SHaojin Tang  EnsbufferWidth: Int = 2,
19537225120Ssfencevma  UncacheBufferSize: Int = 4,
196c837faaaSWilliam Wang  EnableLoadToLoadForward: Boolean = true,
197a98b054bSWilliam Wang  EnableFastForward: Boolean = false,
198beabc72dSWilliam Wang  EnableLdVioCheckAfterReset: Boolean = true,
199026615fcSWilliam Wang  EnableSoftPrefetchAfterReset: Boolean = true,
200026615fcSWilliam Wang  EnableCacheErrorAfterReset: Boolean = true,
201144422dcSMaxpicca-Li  EnableDCacheWPU: Boolean = false,
2026786cfb7SWilliam Wang  EnableAccurateLoadError: Boolean = true,
203e32bafbaSbugGenerator  EnableUncacheWriteOutstanding: Boolean = false,
20445f497a4Shappy-lx  MMUAsidLen: Int = 16, // max is 16, 0 is not supported now
20562dfd6c3Shappy-lx  ReSelectLen: Int = 7, // load replay queue replay select counter len
206a0301c0dSLemover  itlbParameters: TLBParameters = TLBParameters(
207a0301c0dSLemover    name = "itlb",
208a0301c0dSLemover    fetchi = true,
209a0301c0dSLemover    useDmode = false,
210fa086d5eSLemover    normalNWays = 32,
211a0301c0dSLemover    normalReplacer = Some("plru"),
212fa086d5eSLemover    superNWays = 4,
213f1fe8698SLemover    superReplacer = Some("plru")
214a0301c0dSLemover  ),
21534f9624dSguohongyu  itlbPortNum: Int = 2 + ICacheParameters().prefetchPipeNum + 1,
21634f9624dSguohongyu  ipmpPortNum: Int = 2 + ICacheParameters().prefetchPipeNum + 1,
217a0301c0dSLemover  ldtlbParameters: TLBParameters = TLBParameters(
218a0301c0dSLemover    name = "ldtlb",
21906082082SLemover    normalNSets = 64,
220a0301c0dSLemover    normalNWays = 1,
221a0301c0dSLemover    normalAssociative = "sa",
222a0301c0dSLemover    normalReplacer = Some("setplru"),
22306082082SLemover    superNWays = 16,
224a0301c0dSLemover    normalAsVictim = true,
22553b8f1a7SLemover    outReplace = false,
2265b7ef044SLemover    partialStaticPMP = true,
227f1fe8698SLemover    outsideRecvFlush = true,
2285cf62c1aSLemover    saveLevel = true
229a0301c0dSLemover  ),
230a0301c0dSLemover  sttlbParameters: TLBParameters = TLBParameters(
231a0301c0dSLemover    name = "sttlb",
23206082082SLemover    normalNSets = 64,
233a0301c0dSLemover    normalNWays = 1,
234a0301c0dSLemover    normalAssociative = "sa",
235a0301c0dSLemover    normalReplacer = Some("setplru"),
23606082082SLemover    superNWays = 16,
237a0301c0dSLemover    normalAsVictim = true,
23853b8f1a7SLemover    outReplace = false,
2395b7ef044SLemover    partialStaticPMP = true,
240f1fe8698SLemover    outsideRecvFlush = true,
2415cf62c1aSLemover    saveLevel = true
242a0301c0dSLemover  ),
243c8309e8aSHaoyuan Feng  pftlbParameters: TLBParameters = TLBParameters(
244c8309e8aSHaoyuan Feng    name = "pftlb",
245c8309e8aSHaoyuan Feng    normalNSets = 64,
246c8309e8aSHaoyuan Feng    normalNWays = 1,
247c8309e8aSHaoyuan Feng    normalAssociative = "sa",
248c8309e8aSHaoyuan Feng    normalReplacer = Some("setplru"),
249c8309e8aSHaoyuan Feng    superNWays = 16,
250c8309e8aSHaoyuan Feng    normalAsVictim = true,
251c8309e8aSHaoyuan Feng    outReplace = false,
252c8309e8aSHaoyuan Feng    partialStaticPMP = true,
253c8309e8aSHaoyuan Feng    outsideRecvFlush = true,
254c8309e8aSHaoyuan Feng    saveLevel = true
255c8309e8aSHaoyuan Feng  ),
256bf08468cSLemover  refillBothTlb: Boolean = false,
257a0301c0dSLemover  btlbParameters: TLBParameters = TLBParameters(
258a0301c0dSLemover    name = "btlb",
259a0301c0dSLemover    normalNSets = 1,
260a0301c0dSLemover    normalNWays = 64,
261a0301c0dSLemover    superNWays = 4,
262a0301c0dSLemover  ),
2635854c1edSLemover  l2tlbParameters: L2TLBParameters = L2TLBParameters(),
2642225d46eSJiawei Lin  NumPerfCounters: Int = 16,
26505f23f57SWilliam Wang  icacheParameters: ICacheParameters = ICacheParameters(
26605f23f57SWilliam Wang    tagECC = Some("parity"),
26705f23f57SWilliam Wang    dataECC = Some("parity"),
26805f23f57SWilliam Wang    replacer = Some("setplru"),
2691d8f4dcbSJay    nMissEntries = 2,
2707052722fSJay    nProbeEntries = 2,
271cb93f2f2Sguohongyu    nPrefetchEntries = 12,
272b1ded4e8Sguohongyu    nPrefBufferEntries = 64,
273a108d429SJay    hasPrefetch = true,
27405f23f57SWilliam Wang  ),
2754f94c0c6SJiawei Lin  dcacheParametersOpt: Option[DCacheParameters] = Some(DCacheParameters(
27605f23f57SWilliam Wang    tagECC = Some("secded"),
27705f23f57SWilliam Wang    dataECC = Some("secded"),
27805f23f57SWilliam Wang    replacer = Some("setplru"),
27905f23f57SWilliam Wang    nMissEntries = 16,
280300ded30SWilliam Wang    nProbeEntries = 8,
281300ded30SWilliam Wang    nReleaseEntries = 18
2824f94c0c6SJiawei Lin  )),
28315ee59e4Swakafa  L2CacheParamsOpt: Option[L2Param] = Some(L2Param(
284a1ea7f76SJiawei Lin    name = "l2",
285a1ea7f76SJiawei Lin    ways = 8,
286a1ea7f76SJiawei Lin    sets = 1024, // default 512KB L2
28715ee59e4Swakafa    prefetch = Some(coupledL2.prefetch.PrefetchReceiverParams())
2884f94c0c6SJiawei Lin  )),
289d5be5d19SJiawei Lin  L2NBanks: Int = 1,
290a1ea7f76SJiawei Lin  usePTWRepeater: Boolean = false,
291e0374b1cSHaoyuan Feng  softTLB: Boolean = false, // dpi-c l1tlb debug only
292e0374b1cSHaoyuan Feng  softPTW: Boolean = false, // dpi-c l2tlb debug only
2935afdf73cSHaoyuan Feng  softPTWDelay: Int = 1
2942225d46eSJiawei Lin){
295b52d4755SXuan Hu  def vlWidth = log2Up(VLEN) + 1
296b52d4755SXuan Hu
297c7fabd05SSteve Gou  val allHistLens = SCHistLens ++ ITTageTableInfos.map(_._2) ++ TageTableInfos.map(_._2) :+ UbtbGHRLength
298c7fabd05SSteve Gou  val HistoryLength = allHistLens.max + numBr * FtqSize + 9 // 256 for the predictor configs now
299c7fabd05SSteve Gou
3003b739f49SXuan Hu  def intSchdParams = {
3013b739f49SXuan Hu    implicit val schdType: SchedulerType = IntScheduler()
3023b739f49SXuan Hu    val pregBits = intPreg.addrWidth
3033b739f49SXuan Hu    val numRfRead = intPreg.numRead
3043b739f49SXuan Hu    val numRfWrite = intPreg.numWrite
3053b739f49SXuan Hu    SchdBlockParams(Seq(
3063b739f49SXuan Hu      IssueBlockParams(Seq(
307*acb0b98eSXuan Hu        ExeUnitParams("IEX0", Seq(AluCfg), Seq(IntWB(port = 0, 0)), Seq(Seq(IntRD(0, 0)), Seq(IntRD(1, 0)))),
308*acb0b98eSXuan Hu        ExeUnitParams("IEX1", Seq(AluCfg), Seq(IntWB(port = 1, 0)), Seq(Seq(IntRD(2, 0)), Seq(IntRD(3, 0)))),
309cde70b38SzhanglyGit      ), numEntries = 8, pregBits = pregBits, numWakeupFromWB = numRfWrite, numEnq = 2),
310cde70b38SzhanglyGit      IssueBlockParams(Seq(
311*acb0b98eSXuan Hu        ExeUnitParams("IEX2", Seq(AluCfg, MulCfg, BkuCfg), Seq(IntWB(port = 2, 0)), Seq(Seq(IntRD(4, 0)), Seq(IntRD(5, 0)))),
312*acb0b98eSXuan Hu        ExeUnitParams("IEX3", Seq(AluCfg, MulCfg, BkuCfg), Seq(IntWB(port = 3, 0)), Seq(Seq(IntRD(6, 0)), Seq(IntRD(7, 0)))),
3133b739f49SXuan Hu      ), numEntries = 8, pregBits = pregBits, numWakeupFromWB = numRfWrite, numEnq = 2),
3143b739f49SXuan Hu      IssueBlockParams(Seq(
315*acb0b98eSXuan Hu        ExeUnitParams("BJU0", Seq(BrhCfg, JmpCfg, CsrCfg, FenceCfg), Seq(IntWB(port = 4, 0)), Seq(Seq(IntRD(8, 0)), Seq(IntRD(9, 0)))),
316*acb0b98eSXuan Hu        ExeUnitParams("BJU1", Seq(BrhCfg), Seq(), Seq(Seq(IntRD(2, 1)), Seq(IntRD(3, 1)))),
3173b739f49SXuan Hu      ), numEntries = 8, pregBits = pregBits, numWakeupFromWB = numRfWrite, numEnq = 2),
3183b739f49SXuan Hu      IssueBlockParams(Seq(
319*acb0b98eSXuan Hu        ExeUnitParams("IMISC0", Seq(VSetRiWiCfg, I2fCfg, VSetRiWvfCfg), Seq(IntWB(port = 4, 1), VfWB(4, 0)), Seq(Seq(IntRD(8, 1)), Seq(IntRD(9, 1)))),
3203b739f49SXuan Hu      ), numEntries = 8, pregBits = pregBits, numWakeupFromWB = numRfWrite, numEnq = 2),
3213b739f49SXuan Hu      IssueBlockParams(Seq(
322*acb0b98eSXuan Hu        ExeUnitParams("IDIV0", Seq(DivCfg), Seq(IntWB(port = 5, 1)), Seq(Seq(IntRD(6, Int.MaxValue)), Seq(IntRD(7, Int.MaxValue)))),
3232372d0fbSfdy      ), numEntries = 8, pregBits = pregBits, numWakeupFromWB = numRfWrite, numEnq = 2),
3243b739f49SXuan Hu    ),
3253b739f49SXuan Hu      numPregs = intPreg.numEntries,
3263b739f49SXuan Hu      numRfReadWrite = Some((numRfRead, numRfWrite)),
3273b739f49SXuan Hu      numDeqOutside = 0,
3283b739f49SXuan Hu      schdType = schdType,
3293b739f49SXuan Hu      rfDataWidth = intPreg.dataCfg.dataWidth,
3303b739f49SXuan Hu      numUopIn = dpParams.IntDqDeqWidth,
3313b739f49SXuan Hu    )
3323b739f49SXuan Hu  }
3333b739f49SXuan Hu  def vfSchdParams = {
3343b739f49SXuan Hu    implicit val schdType: SchedulerType = VfScheduler()
3353b739f49SXuan Hu    val pregBits = vfPreg.addrWidth
3363b739f49SXuan Hu    val numRfRead = vfPreg.numRead
3373b739f49SXuan Hu    val numRfWrite = vfPreg.numWrite
3383b739f49SXuan Hu    SchdBlockParams(Seq(
3393b739f49SXuan Hu      IssueBlockParams(Seq(
340344c8465Sxiaofeibao-xjtu        ExeUnitParams("VEX0", Seq(VialuCfg), Seq(VfWB(port = 0, 0)), Seq(Seq(VfRD(1, 0)), Seq(VfRD(2, 0)), Seq(VfRD(3, 0)), Seq(VfRD(4, 0)), Seq(VfRD(5, 0)))),
341344c8465Sxiaofeibao-xjtu        ExeUnitParams("VEX1", Seq(VimacCfg), Seq(VfWB(port = 0, 0)), Seq(Seq(VfRD(1, 0)), Seq(VfRD(2, 0)), Seq(VfRD(3, 0)), Seq(VfRD(4, 0)), Seq(VfRD(5, 0)))),
342344c8465Sxiaofeibao-xjtu      ), numEntries = 8, pregBits = pregBits, numWakeupFromWB = numRfWrite, numEnq = 2),
343344c8465Sxiaofeibao-xjtu      IssueBlockParams(Seq(
344344c8465Sxiaofeibao-xjtu        ExeUnitParams("FEX0", Seq(FmacCfg), Seq(VfWB(port = 1, 0)), Seq(Seq(VfRD(1, 0)), Seq(VfRD(2, 0)), Seq(VfRD(3, 0)))),
345cfbf6f34SXuan Hu        ExeUnitParams("FEX1", Seq(FmacCfg), Seq(VfWB(port = 1, 0)), Seq(Seq(VfRD(4, 0)), Seq(VfRD(5, 0)), Seq(VfRD(6, 0)))),
34635d005dfSXuan Hu      ), numEntries = 8, pregBits = pregBits, numWakeupFromWB = numRfWrite, numEnq = 2),
3473b739f49SXuan Hu      IssueBlockParams(Seq(
348cfbf6f34SXuan Hu        ExeUnitParams("FEX2", Seq(FDivSqrtCfg), Seq(VfWB(port = 2, 0)), Seq(Seq(VfRD(11, 0)), Seq(VfRD(12, 0)))),
349344c8465Sxiaofeibao-xjtu        ExeUnitParams("FEX3", Seq(F2fCfg, F2iCfg, VSetRvfWvfCfg), Seq(VfWB(port = 2, 0), IntWB(port = 5, 0)), Seq(Seq(VfRD(7, 0)), Seq(VfRD(8, 0)))),
350efdf5c1cSxiaofeibao-xjtu      ), numEntries = 8, pregBits = pregBits, numWakeupFromWB = numRfWrite, numEnq = 2),
35175841254Sxiaofeibao-xjtu      IssueBlockParams(Seq(
352344c8465Sxiaofeibao-xjtu        ExeUnitParams("VEX2", Seq(VppuCfg), Seq(VfWB(port = 3, 0)), Seq(Seq(VfRD(1, 0)), Seq(VfRD(2, 0)), Seq(VfRD(3, 0)), Seq(VfRD(4, 0)), Seq(VfRD(5, 0)))),
353344c8465Sxiaofeibao-xjtu        ExeUnitParams("VEX3", Seq(VipuCfg), Seq(VfWB(port = 3, 0)), Seq(Seq(VfRD(1, 0)), Seq(VfRD(2, 0)), Seq(VfRD(3, 0)), Seq(VfRD(4, 0)), Seq(VfRD(5, 0)))),
354344c8465Sxiaofeibao-xjtu      ), numEntries = 8, pregBits = pregBits, numWakeupFromWB = numRfWrite, numEnq = 2),
355344c8465Sxiaofeibao-xjtu      IssueBlockParams(Seq(
356344c8465Sxiaofeibao-xjtu        ExeUnitParams("VEX2", Seq(VfaluCfg), Seq(VfWB(port = 4, 0)), Seq(Seq(VfRD(1, 0)), Seq(VfRD(2, 0)), Seq(VfRD(3, 0)), Seq(VfRD(4, 0)), Seq(VfRD(5, 0)))),
357344c8465Sxiaofeibao-xjtu        ExeUnitParams("VEX3", Seq(VfmaCfg), Seq(VfWB(port = 4, 0)), Seq(Seq(VfRD(1, 0)), Seq(VfRD(2, 0)), Seq(VfRD(3, 0)), Seq(VfRD(4, 0)), Seq(VfRD(5, 0)))),
358344c8465Sxiaofeibao-xjtu      ), numEntries = 8, pregBits = pregBits, numWakeupFromWB = numRfWrite, numEnq = 2),
359344c8465Sxiaofeibao-xjtu      IssueBlockParams(Seq(
360344c8465Sxiaofeibao-xjtu        ExeUnitParams("VEX4", Seq(VfdivCfg), Seq(VfWB(port = 5, 0)), Seq(Seq(VfRD(1, 0)), Seq(VfRD(2, 0)), Seq(VfRD(3, 0)), Seq(VfRD(4, 0)), Seq(VfRD(5, 0)))),
36175841254Sxiaofeibao-xjtu      ), numEntries = 8, pregBits = pregBits, numWakeupFromWB = numRfWrite, numEnq = 2),
3623b739f49SXuan Hu    ),
3633b739f49SXuan Hu      numPregs = vfPreg.numEntries,
3643b739f49SXuan Hu      numRfReadWrite = Some((numRfRead, numRfWrite)),
3653b739f49SXuan Hu      numDeqOutside = 0,
3663b739f49SXuan Hu      schdType = schdType,
3673b739f49SXuan Hu      rfDataWidth = vfPreg.dataCfg.dataWidth,
3683b739f49SXuan Hu      numUopIn = dpParams.FpDqDeqWidth,
3693b739f49SXuan Hu    )
3703b739f49SXuan Hu  }
3713b739f49SXuan Hu  def memSchdParams = {
3723b739f49SXuan Hu    implicit val schdType: SchedulerType = MemScheduler()
3733b739f49SXuan Hu    val pregBits = vfPreg.addrWidth max intPreg.addrWidth
3743b739f49SXuan Hu    val rfDataWidth = 64
3752225d46eSJiawei Lin
3763b739f49SXuan Hu    SchdBlockParams(Seq(
3773b739f49SXuan Hu      IssueBlockParams(Seq(
378cfbf6f34SXuan Hu        ExeUnitParams("LDU0", Seq(LduCfg), Seq(IntWB(6, 0), VfWB(6, 0)), Seq(Seq(IntRD(10, 0)))),
379cfbf6f34SXuan Hu        ExeUnitParams("LDU1", Seq(LduCfg), Seq(IntWB(7, 0), VfWB(7, 0)), Seq(Seq(IntRD(11, 0)))),
380141a6449SXuan Hu      ), numEntries = 8, pregBits = pregBits, numWakeupFromWB = 16, numEnq = 2),
3813b739f49SXuan Hu      IssueBlockParams(Seq(
382cfbf6f34SXuan Hu        ExeUnitParams("STA0", Seq(StaCfg, MouCfg), Seq(IntWB(6, 1)), Seq(Seq(IntRD(12, 0)))),
383cfbf6f34SXuan Hu        ExeUnitParams("STA1", Seq(StaCfg, MouCfg), Seq(IntWB(7, 1)), Seq(Seq(IntRD(13, 0)))),
384141a6449SXuan Hu      ), numEntries = 8, pregBits = pregBits, numWakeupFromWB = 16, numEnq = 2),
3853b739f49SXuan Hu      IssueBlockParams(Seq(
386cfbf6f34SXuan Hu        ExeUnitParams("STD0", Seq(StdCfg, MoudCfg), Seq(), Seq(Seq(IntRD(8, Int.MaxValue), VfRD(12, Int.MaxValue)))),
387cfbf6f34SXuan Hu        ExeUnitParams("STD1", Seq(StdCfg, MoudCfg), Seq(), Seq(Seq(IntRD(9, Int.MaxValue), VfRD(13, Int.MaxValue)))),
388141a6449SXuan Hu      ), numEntries = 8, pregBits = pregBits, numWakeupFromWB = 16, numEnq = 2),
3894ee69032SzhanglyGit      IssueBlockParams(Seq(
390344c8465Sxiaofeibao-xjtu        ExeUnitParams("VLDU0", Seq(VlduCfg), Seq(VfWB(6, 1)), Seq(Seq(VfRD(0, 0)), Seq(VfRD(1, 0)), Seq(VfRD(2, 0)), Seq(VfRD(3, 0)), Seq(VfRD(4, 0)))),
391344c8465Sxiaofeibao-xjtu        ExeUnitParams("VLDU1", Seq(VlduCfg), Seq(VfWB(7, 1)), Seq(Seq(VfRD(5, 0)), Seq(VfRD(6, 0)), Seq(VfRD(7, 0)), Seq(VfRD(8, 0)), Seq(VfRD(9, 0)))),
3924ee69032SzhanglyGit      ), numEntries = 8, pregBits = pregBits, numWakeupFromWB = 16, numEnq = 2),
3933b739f49SXuan Hu    ),
394141a6449SXuan Hu      numPregs = intPreg.numEntries max vfPreg.numEntries,
3953b739f49SXuan Hu      numRfReadWrite = None,
3963b739f49SXuan Hu      numDeqOutside = 0,
3973b739f49SXuan Hu      schdType = schdType,
3983b739f49SXuan Hu      rfDataWidth = rfDataWidth,
3993b739f49SXuan Hu      numUopIn = dpParams.LsDqDeqWidth,
4003b739f49SXuan Hu    )
4013b739f49SXuan Hu  }
4022225d46eSJiawei Lin
403bf35baadSXuan Hu  def PregIdxWidthMax = intPreg.addrWidth max vfPreg.addrWidth
404bf35baadSXuan Hu
405bf35baadSXuan Hu  def iqWakeUpParams = {
406bf35baadSXuan Hu    Seq(
407bf35baadSXuan Hu      WakeUpConfig("IEX0" -> "IEX0"),
408bf35baadSXuan Hu      WakeUpConfig("IEX0" -> "IEX1"),
409bf35baadSXuan Hu      WakeUpConfig("IEX1" -> "IEX0"),
410bf35baadSXuan Hu      WakeUpConfig("IEX1" -> "IEX1"),
411bf35baadSXuan Hu      WakeUpConfig("IEX0" -> "BJU0"),
412bf35baadSXuan Hu      WakeUpConfig("IEX0" -> "BJU1"),
413bf35baadSXuan Hu      WakeUpConfig("IEX1" -> "BJU0"),
414bf35baadSXuan Hu      WakeUpConfig("IEX1" -> "BJU1"),
415bf35baadSXuan Hu      WakeUpConfig("IEX0" -> "LDU0"),
416bf35baadSXuan Hu      WakeUpConfig("IEX0" -> "LDU1"),
417bf35baadSXuan Hu      WakeUpConfig("IEX1" -> "LDU0"),
418bf35baadSXuan Hu      WakeUpConfig("IEX1" -> "LDU1"),
419bf35baadSXuan Hu      WakeUpConfig("IEX0" -> "STA0"),
420bf35baadSXuan Hu      WakeUpConfig("IEX0" -> "STA1"),
421bf35baadSXuan Hu      WakeUpConfig("IEX1" -> "STA0"),
422bf35baadSXuan Hu      WakeUpConfig("IEX1" -> "STA1"),
423*acb0b98eSXuan Hu      WakeUpConfig("IMISC0" -> "FEX0"),
424*acb0b98eSXuan Hu      WakeUpConfig("IMISC0" -> "FEX1"),
425*acb0b98eSXuan Hu      WakeUpConfig("IMISC0" -> "FEX2"),
426*acb0b98eSXuan Hu      WakeUpConfig("IMISC0" -> "FEX3"),
427*acb0b98eSXuan Hu      WakeUpConfig("IMISC0" -> "FEX4"),
428cfbf6f34SXuan Hu      WakeUpConfig("FEX3" -> "FEX0"),
429cfbf6f34SXuan Hu      WakeUpConfig("FEX3" -> "FEX1"),
430cfbf6f34SXuan Hu      WakeUpConfig("FEX3" -> "FEX2"),
431cfbf6f34SXuan Hu      WakeUpConfig("FEX3" -> "FEX3"),
432bf35baadSXuan Hu    )
433bf35baadSXuan Hu  }
434bf35baadSXuan Hu
435bf35baadSXuan Hu  def backendParams: BackendParams = backend.BackendParams(
436bf35baadSXuan Hu    Map(
4373b739f49SXuan Hu      IntScheduler() -> intSchdParams,
4383b739f49SXuan Hu      VfScheduler() -> vfSchdParams,
4393b739f49SXuan Hu      MemScheduler() -> memSchdParams,
440bf35baadSXuan Hu    ),
441bf35baadSXuan Hu    Seq(
4423b739f49SXuan Hu      intPreg,
4433b739f49SXuan Hu      vfPreg,
444bf35baadSXuan Hu    ),
445bf35baadSXuan Hu    iqWakeUpParams,
446bf35baadSXuan Hu  )
4472225d46eSJiawei Lin}
4482225d46eSJiawei Lin
4492225d46eSJiawei Lincase object DebugOptionsKey extends Field[DebugOptions]
4502225d46eSJiawei Lin
4512225d46eSJiawei Lincase class DebugOptions
4522225d46eSJiawei Lin(
4531545277aSYinan Xu  FPGAPlatform: Boolean = false,
4541545277aSYinan Xu  EnableDifftest: Boolean = false,
455cbe9a847SYinan Xu  AlwaysBasicDiff: Boolean = true,
4561545277aSYinan Xu  EnableDebug: Boolean = false,
4572225d46eSJiawei Lin  EnablePerfDebug: Boolean = true,
458eb163ef0SHaojin Tang  UseDRAMSim: Boolean = false,
459047e34f9SMaxpicca-Li  EnableConstantin: Boolean = false,
460eb163ef0SHaojin Tang  EnableTopDown: Boolean = false
4612225d46eSJiawei Lin)
4622225d46eSJiawei Lin
4632225d46eSJiawei Lintrait HasXSParameter {
4642225d46eSJiawei Lin
4652225d46eSJiawei Lin  implicit val p: Parameters
4662225d46eSJiawei Lin
4672f30d658SYinan Xu  val PAddrBits = p(SoCParamsKey).PAddrBits // PAddrBits is Phyical Memory addr bits
4682f30d658SYinan Xu
4692225d46eSJiawei Lin  val coreParams = p(XSCoreParamsKey)
4702225d46eSJiawei Lin  val env = p(DebugOptionsKey)
4712225d46eSJiawei Lin
4722225d46eSJiawei Lin  val XLEN = coreParams.XLEN
473deb6421eSHaojin Tang  val VLEN = coreParams.VLEN
474a8db15d8Sfdy  val ELEN = coreParams.ELEN
4752225d46eSJiawei Lin  val minFLen = 32
4762225d46eSJiawei Lin  val fLen = 64
4772225d46eSJiawei Lin  def xLen = XLEN
4782225d46eSJiawei Lin
4792225d46eSJiawei Lin  val HasMExtension = coreParams.HasMExtension
4802225d46eSJiawei Lin  val HasCExtension = coreParams.HasCExtension
4812225d46eSJiawei Lin  val HasDiv = coreParams.HasDiv
4822225d46eSJiawei Lin  val HasIcache = coreParams.HasICache
4832225d46eSJiawei Lin  val HasDcache = coreParams.HasDCache
4842225d46eSJiawei Lin  val AddrBits = coreParams.AddrBits // AddrBits is used in some cases
4852225d46eSJiawei Lin  val VAddrBits = coreParams.VAddrBits // VAddrBits is Virtual Memory addr bits
48645f497a4Shappy-lx  val AsidLength = coreParams.AsidLength
487a760aeb0Shappy-lx  val ReSelectLen = coreParams.ReSelectLen
4882225d46eSJiawei Lin  val AddrBytes = AddrBits / 8 // unused
4892225d46eSJiawei Lin  val DataBits = XLEN
4902225d46eSJiawei Lin  val DataBytes = DataBits / 8
4912225d46eSJiawei Lin  val HasFPU = coreParams.HasFPU
4920ba52110SZiyue Zhang  val HasVPU = coreParams.HasVPU
493ad3ba452Szhanglinjuan  val HasCustomCSRCacheOp = coreParams.HasCustomCSRCacheOp
4942225d46eSJiawei Lin  val FetchWidth = coreParams.FetchWidth
4952225d46eSJiawei Lin  val PredictWidth = FetchWidth * (if (HasCExtension) 2 else 1)
4962225d46eSJiawei Lin  val EnableBPU = coreParams.EnableBPU
4972225d46eSJiawei Lin  val EnableBPD = coreParams.EnableBPD // enable backing predictor(like Tage) in BPUStage3
4982225d46eSJiawei Lin  val EnableRAS = coreParams.EnableRAS
4992225d46eSJiawei Lin  val EnableLB = coreParams.EnableLB
5002225d46eSJiawei Lin  val EnableLoop = coreParams.EnableLoop
5012225d46eSJiawei Lin  val EnableSC = coreParams.EnableSC
5022225d46eSJiawei Lin  val EnbaleTlbDebug = coreParams.EnbaleTlbDebug
5032225d46eSJiawei Lin  val HistoryLength = coreParams.HistoryLength
50486d9c530SLingrui98  val EnableGHistDiff = coreParams.EnableGHistDiff
505ab0200c8SEaston Man  val EnableCommitGHistDiff = coreParams.EnableCommitGHistDiff
506f2aabf0dSLingrui98  val UbtbGHRLength = coreParams.UbtbGHRLength
507b37e4b45SLingrui98  val UbtbSize = coreParams.UbtbSize
50811d0c81dSLingrui98  val EnableFauFTB = coreParams.EnableFauFTB
509b37e4b45SLingrui98  val FtbSize = coreParams.FtbSize
510b37e4b45SLingrui98  val FtbWays = coreParams.FtbWays
5112225d46eSJiawei Lin  val RasSize = coreParams.RasSize
51216a1cc4bSzoujr
513bf358e08SLingrui98  def getBPDComponents(resp_in: BranchPredictionResp, p: Parameters) = {
514bf358e08SLingrui98    coreParams.branchPredictor(resp_in, p)
51516a1cc4bSzoujr  }
516dd6c0695SLingrui98  val numBr = coreParams.numBr
517dd6c0695SLingrui98  val TageTableInfos = coreParams.TageTableInfos
518cb4f77ceSLingrui98  val TageBanks = coreParams.numBr
519dd6c0695SLingrui98  val SCNRows = coreParams.SCNRows
520dd6c0695SLingrui98  val SCCtrBits = coreParams.SCCtrBits
52134ed6fbcSLingrui98  val SCHistLens = coreParams.SCHistLens
52234ed6fbcSLingrui98  val SCNTables = coreParams.SCNTables
523dd6c0695SLingrui98
52434ed6fbcSLingrui98  val SCTableInfos = Seq.fill(SCNTables)((SCNRows, SCCtrBits)) zip SCHistLens map {
52534ed6fbcSLingrui98    case ((n, cb), h) => (n, cb, h)
526dd6c0695SLingrui98  }
527dd6c0695SLingrui98  val ITTageTableInfos = coreParams.ITTageTableInfos
528dd6c0695SLingrui98  type FoldedHistoryInfo = Tuple2[Int, Int]
529dd6c0695SLingrui98  val foldedGHistInfos =
5304813e060SLingrui98    (TageTableInfos.map{ case (nRows, h, t) =>
531dd6c0695SLingrui98      if (h > 0)
5324813e060SLingrui98        Set((h, min(log2Ceil(nRows/numBr), h)), (h, min(h, t)), (h, min(h, t-1)))
533dd6c0695SLingrui98      else
534dd6c0695SLingrui98        Set[FoldedHistoryInfo]()
5354813e060SLingrui98    }.reduce(_++_).toSet ++
53634ed6fbcSLingrui98    SCTableInfos.map{ case (nRows, _, h) =>
537dd6c0695SLingrui98      if (h > 0)
538e992912cSLingrui98        Set((h, min(log2Ceil(nRows/TageBanks), h)))
539dd6c0695SLingrui98      else
540dd6c0695SLingrui98        Set[FoldedHistoryInfo]()
54134ed6fbcSLingrui98    }.reduce(_++_).toSet ++
542dd6c0695SLingrui98    ITTageTableInfos.map{ case (nRows, h, t) =>
543dd6c0695SLingrui98      if (h > 0)
544dd6c0695SLingrui98        Set((h, min(log2Ceil(nRows), h)), (h, min(h, t)), (h, min(h, t-1)))
545dd6c0695SLingrui98      else
546dd6c0695SLingrui98        Set[FoldedHistoryInfo]()
547527dc111SLingrui98    }.reduce(_++_) ++
548527dc111SLingrui98      Set[FoldedHistoryInfo]((UbtbGHRLength, log2Ceil(UbtbSize)))
549527dc111SLingrui98    ).toList
55016a1cc4bSzoujr
551c7fabd05SSteve Gou
552c7fabd05SSteve Gou
5532225d46eSJiawei Lin  val CacheLineSize = coreParams.CacheLineSize
5542225d46eSJiawei Lin  val CacheLineHalfWord = CacheLineSize / 16
5552225d46eSJiawei Lin  val ExtHistoryLength = HistoryLength + 64
5562225d46eSJiawei Lin  val IBufSize = coreParams.IBufSize
5572225d46eSJiawei Lin  val DecodeWidth = coreParams.DecodeWidth
5582225d46eSJiawei Lin  val RenameWidth = coreParams.RenameWidth
5592225d46eSJiawei Lin  val CommitWidth = coreParams.CommitWidth
560d91483a6Sfdy  val MaxUopSize = coreParams.MaxUopSize
5612225d46eSJiawei Lin  val FtqSize = coreParams.FtqSize
5622225d46eSJiawei Lin  val EnableLoadFastWakeUp = coreParams.EnableLoadFastWakeUp
563d91483a6Sfdy  val IntLogicRegs = coreParams.IntLogicRegs
564d91483a6Sfdy  val FpLogicRegs = coreParams.FpLogicRegs
565d91483a6Sfdy  val VecLogicRegs = coreParams.VecLogicRegs
566fe60541bSXuan Hu  val VCONFIG_IDX = coreParams.VCONFIG_IDX
5672225d46eSJiawei Lin  val NRPhyRegs = coreParams.NRPhyRegs
5682225d46eSJiawei Lin  val PhyRegIdxWidth = log2Up(NRPhyRegs)
56973faecdcSXuan Hu  val IntPhyRegs = coreParams.IntPhyRegs
57073faecdcSXuan Hu  val VfPhyRegs = coreParams.VfPhyRegs
57173faecdcSXuan Hu  val IntPregIdxWidth = log2Up(IntPhyRegs)
57273faecdcSXuan Hu  val VfPregIdxWidth = log2Up(VfPhyRegs)
5739aca92b9SYinan Xu  val RobSize = coreParams.RobSize
574a8db15d8Sfdy  val RabSize = coreParams.RabSize
57570224bf6SYinan Xu  val IntRefCounterWidth = log2Ceil(RobSize)
576e4f69d78Ssfencevma  val VirtualLoadQueueSize = coreParams.VirtualLoadQueueSize
577e4f69d78Ssfencevma  val LoadQueueRARSize = coreParams.LoadQueueRARSize
578e4f69d78Ssfencevma  val LoadQueueRAWSize = coreParams.LoadQueueRAWSize
579e4f69d78Ssfencevma  val RollbackGroupSize = coreParams.RollbackGroupSize
580e4f69d78Ssfencevma  val LoadQueueReplaySize = coreParams.LoadQueueReplaySize
581e4f69d78Ssfencevma  val LoadUncacheBufferSize = coreParams.LoadUncacheBufferSize
5820a992150SWilliam Wang  val LoadQueueNWriteBanks = coreParams.LoadQueueNWriteBanks
5832225d46eSJiawei Lin  val StoreQueueSize = coreParams.StoreQueueSize
5840a992150SWilliam Wang  val StoreQueueNWriteBanks = coreParams.StoreQueueNWriteBanks
585e4f69d78Ssfencevma  val StoreQueueForwardWithMask = coreParams.StoreQueueForwardWithMask
586cea88ff8SWilliam Wang  val VlsQueueSize = coreParams.VlsQueueSize
5872225d46eSJiawei Lin  val dpParams = coreParams.dpParams
5883b739f49SXuan Hu
5893b739f49SXuan Hu  def backendParams: BackendParams = coreParams.backendParams
590351e22f2SXuan Hu  def MemIQSizeMax = backendParams.memSchdParams.get.issueBlockParams.map(_.numEntries).max
591351e22f2SXuan Hu  def IQSizeMax = backendParams.allSchdParams.map(_.issueBlockParams.map(_.numEntries).max).max
5922225d46eSJiawei Lin  val LoadPipelineWidth = coreParams.LoadPipelineWidth
5932225d46eSJiawei Lin  val StorePipelineWidth = coreParams.StorePipelineWidth
594cea88ff8SWilliam Wang  val VecMemSrcInWidth = coreParams.VecMemSrcInWidth
595cea88ff8SWilliam Wang  val VecMemInstWbWidth = coreParams.VecMemInstWbWidth
596cea88ff8SWilliam Wang  val VecMemDispatchWidth = coreParams.VecMemDispatchWidth
5972225d46eSJiawei Lin  val StoreBufferSize = coreParams.StoreBufferSize
59805f23f57SWilliam Wang  val StoreBufferThreshold = coreParams.StoreBufferThreshold
59946f74b57SHaojin Tang  val EnsbufferWidth = coreParams.EnsbufferWidth
60037225120Ssfencevma  val UncacheBufferSize = coreParams.UncacheBufferSize
60164886eefSWilliam Wang  val EnableLoadToLoadForward = coreParams.EnableLoadToLoadForward
6023db2cf75SWilliam Wang  val EnableFastForward = coreParams.EnableFastForward
60367682d05SWilliam Wang  val EnableLdVioCheckAfterReset = coreParams.EnableLdVioCheckAfterReset
604026615fcSWilliam Wang  val EnableSoftPrefetchAfterReset = coreParams.EnableSoftPrefetchAfterReset
605026615fcSWilliam Wang  val EnableCacheErrorAfterReset = coreParams.EnableCacheErrorAfterReset
606144422dcSMaxpicca-Li  val EnableDCacheWPU = coreParams.EnableDCacheWPU
6076786cfb7SWilliam Wang  val EnableAccurateLoadError = coreParams.EnableAccurateLoadError
60837225120Ssfencevma  val EnableUncacheWriteOutstanding = coreParams.EnableUncacheWriteOutstanding
60945f497a4Shappy-lx  val asidLen = coreParams.MMUAsidLen
610a0301c0dSLemover  val BTLBWidth = coreParams.LoadPipelineWidth + coreParams.StorePipelineWidth
611bf08468cSLemover  val refillBothTlb = coreParams.refillBothTlb
612a0301c0dSLemover  val itlbParams = coreParams.itlbParameters
613a0301c0dSLemover  val ldtlbParams = coreParams.ldtlbParameters
614a0301c0dSLemover  val sttlbParams = coreParams.sttlbParameters
615c8309e8aSHaoyuan Feng  val pftlbParams = coreParams.pftlbParameters
616a0301c0dSLemover  val btlbParams = coreParams.btlbParameters
6175854c1edSLemover  val l2tlbParams = coreParams.l2tlbParameters
6182225d46eSJiawei Lin  val NumPerfCounters = coreParams.NumPerfCounters
6192225d46eSJiawei Lin
6202225d46eSJiawei Lin  val instBytes = if (HasCExtension) 2 else 4
6212225d46eSJiawei Lin  val instOffsetBits = log2Ceil(instBytes)
6222225d46eSJiawei Lin
62305f23f57SWilliam Wang  val icacheParameters = coreParams.icacheParameters
6244f94c0c6SJiawei Lin  val dcacheParameters = coreParams.dcacheParametersOpt.getOrElse(DCacheParameters())
6252225d46eSJiawei Lin
626b899def8SWilliam Wang  // dcache block cacheline when lr for LRSCCycles - LRSCBackOff cycles
627b899def8SWilliam Wang  // for constrained LR/SC loop
628b899def8SWilliam Wang  val LRSCCycles = 64
629b899def8SWilliam Wang  // for lr storm
630b899def8SWilliam Wang  val LRSCBackOff = 8
6312225d46eSJiawei Lin
6322225d46eSJiawei Lin  // cache hierarchy configurations
6332225d46eSJiawei Lin  val l1BusDataWidth = 256
6342225d46eSJiawei Lin
635de169c67SWilliam Wang  // load violation predict
636de169c67SWilliam Wang  val ResetTimeMax2Pow = 20 //1078576
637de169c67SWilliam Wang  val ResetTimeMin2Pow = 10 //1024
638de169c67SWilliam Wang  // wait table parameters
639de169c67SWilliam Wang  val WaitTableSize = 1024
640de169c67SWilliam Wang  val MemPredPCWidth = log2Up(WaitTableSize)
641de169c67SWilliam Wang  val LWTUse2BitCounter = true
642de169c67SWilliam Wang  // store set parameters
643de169c67SWilliam Wang  val SSITSize = WaitTableSize
644de169c67SWilliam Wang  val LFSTSize = 32
645de169c67SWilliam Wang  val SSIDWidth = log2Up(LFSTSize)
646de169c67SWilliam Wang  val LFSTWidth = 4
647de169c67SWilliam Wang  val StoreSetEnable = true // LWT will be disabled if SS is enabled
648cc4fb544Ssfencevma  val LFSTEnable = false
649cc4fb544Ssfencevma
650cd365d4cSrvcoresjw  val PCntIncrStep: Int = 6
651cd365d4cSrvcoresjw  val numPCntHc: Int = 25
652cd365d4cSrvcoresjw  val numPCntPtw: Int = 19
653cd365d4cSrvcoresjw
654cd365d4cSrvcoresjw  val numCSRPCntFrontend = 8
655cd365d4cSrvcoresjw  val numCSRPCntCtrl     = 8
656cd365d4cSrvcoresjw  val numCSRPCntLsu      = 8
657cd365d4cSrvcoresjw  val numCSRPCntHc       = 5
658c0be7f33SXuan Hu
659c0be7f33SXuan Hu  // source stages of cancel signal to issue queues
660c0be7f33SXuan Hu  val cancelStages = Seq("IS", "OG0", "OG1")
6612225d46eSJiawei Lin}
662