xref: /XiangShan/src/main/scala/xiangshan/Parameters.scala (revision 4c0658ae9e05c74858bf2155acf55197b8224fcd)
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
198891a219SYinan Xuimport org.chipsalliance.cde.config.{Field, Parameters}
202225d46eSJiawei Linimport chisel3._
212225d46eSJiawei Linimport chisel3.util._
2298c71602SJiawei Linimport huancun._
233b739f49SXuan Huimport system.SoCParamsKey
248882eb68SXin Tianimport system.CVMParamskey
25730cfbc0SXuan Huimport xiangshan.backend.datapath.RdConfig._
26730cfbc0SXuan Huimport xiangshan.backend.datapath.WbConfig._
27730cfbc0SXuan Huimport xiangshan.backend.exu.ExeUnitParams
28730cfbc0SXuan Huimport xiangshan.backend.fu.FuConfig._
2960f0c5aeSxiaofeibaoimport xiangshan.backend.issue.{IntScheduler, IssueBlockParams, MemScheduler, SchdBlockParams, SchedulerType, VfScheduler, FpScheduler}
302aa3a761Ssinsanctionimport xiangshan.backend.regfile._
31730cfbc0SXuan Huimport xiangshan.backend.BackendParams
324907ec88Schengguanghuiimport xiangshan.backend.trace._
333b739f49SXuan Huimport xiangshan.cache.DCacheParameters
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
39d4aca96cSlqreimport freechips.rocketchip.diplomacy.AddressSet
40f57f7f2aSYangyu Chenimport freechips.rocketchip.tile.MaxHartIdBits
412f30d658SYinan Xuimport system.SoCParamsKey
4298c71602SJiawei Linimport huancun._
4398c71602SJiawei Linimport huancun.debug._
4404665835SMaxpicca-Liimport xiangshan.cache.wpu.WPUParameters
4515ee59e4Swakafaimport coupledL2._
468537b88aSTang Haojinimport coupledL2.tl2chi._
47bf35baadSXuan Huimport xiangshan.backend.datapath.WakeUpConfig
48289fc2f9SLinJiaweiimport xiangshan.mem.prefetch.{PrefetcherParams, SMSParams}
49289fc2f9SLinJiawei
5085a8d7caSZehao Liuimport scala.math.{max, min, pow}
5134ab1ae9SJiawei Lin
5234ab1ae9SJiawei Lincase object XSTileKey extends Field[Seq[XSCoreParameters]]
5334ab1ae9SJiawei Lin
542225d46eSJiawei Lincase object XSCoreParamsKey extends Field[XSCoreParameters]
552225d46eSJiawei Lin
562225d46eSJiawei Lincase class XSCoreParameters
572225d46eSJiawei Lin(
582225d46eSJiawei Lin  HasPrefetch: Boolean = false,
592225d46eSJiawei Lin  HartId: Int = 0,
602225d46eSJiawei Lin  XLEN: Int = 64,
61deb6421eSHaojin Tang  VLEN: Int = 128,
62a8db15d8Sfdy  ELEN: Int = 64,
63d0de7e4aSpeixiaokun  HSXLEN: Int = 64,
648882eb68SXin Tian  HasBitmapCheck: Boolean = false,
658882eb68SXin Tian  HasBitmapCheckDefault: Boolean = false,
662225d46eSJiawei Lin  HasMExtension: Boolean = true,
672225d46eSJiawei Lin  HasCExtension: Boolean = true,
68d0de7e4aSpeixiaokun  HasHExtension: Boolean = true,
692225d46eSJiawei Lin  HasDiv: Boolean = true,
702225d46eSJiawei Lin  HasICache: Boolean = true,
712225d46eSJiawei Lin  HasDCache: Boolean = true,
722225d46eSJiawei Lin  AddrBits: Int = 64,
73dd980d61SXu, Zefan  PAddrBitsMax: Int = 56,   // The bits of physical address from Sv39/Sv48/Sv57 virtual address translation.
7497929664SXiaokun-Pei  VAddrBitsSv39: Int = 39,
7597929664SXiaokun-Pei  GPAddrBitsSv39x4: Int = 41,
7697929664SXiaokun-Pei  VAddrBitsSv48: Int = 48,
7797929664SXiaokun-Pei  GPAddrBitsSv48x4: Int = 50,
782225d46eSJiawei Lin  HasFPU: Boolean = true,
7935d1557aSZiyue Zhang  HasVPU: Boolean = true,
80ad3ba452Szhanglinjuan  HasCustomCSRCacheOp: Boolean = true,
812225d46eSJiawei Lin  FetchWidth: Int = 8,
8245f497a4Shappy-lx  AsidLength: Int = 16,
83d0de7e4aSpeixiaokun  VmidLength: Int = 14,
842225d46eSJiawei Lin  EnableBPU: Boolean = true,
852225d46eSJiawei Lin  EnableBPD: Boolean = true,
862225d46eSJiawei Lin  EnableRAS: Boolean = true,
872225d46eSJiawei Lin  EnableLB: Boolean = false,
882225d46eSJiawei Lin  EnableLoop: Boolean = true,
89e0f3968cSzoujr  EnableSC: Boolean = true,
902225d46eSJiawei Lin  EnbaleTlbDebug: Boolean = false,
91918d87f2SsinceforYy  EnableClockGate: Boolean = true,
922225d46eSJiawei Lin  EnableJal: Boolean = false,
9311d0c81dSLingrui98  EnableFauFTB: Boolean = true,
943ea4388cSHaoyuan Feng  EnableSv48: Boolean = true,
95f2aabf0dSLingrui98  UbtbGHRLength: Int = 4,
96c7fabd05SSteve Gou  // HistoryLength: Int = 512,
972f7b35ceSLingrui98  EnableGHistDiff: Boolean = true,
98ab0200c8SEaston Man  EnableCommitGHistDiff: Boolean = true,
99edc18578SLingrui98  UbtbSize: Int = 256,
100b37e4b45SLingrui98  FtbSize: Int = 2048,
1015f89ba0bSEaston Man  FtbWays: Int = 4,
1025f89ba0bSEaston Man  FtbTagLength: Int = 20,
1030b8e1fd0SGuokai Chen  RasSize: Int = 16,
1040b8e1fd0SGuokai Chen  RasSpecSize: Int = 32,
10577bef50aSGuokai Chen  RasCtrSize: Int = 3,
1062225d46eSJiawei Lin  CacheLineSize: Int = 512,
107dd6c0695SLingrui98  TageTableInfos: Seq[Tuple3[Int,Int,Int]] =
108dd6c0695SLingrui98  //       Sets  Hist   Tag
10951e26c03SLingrui98    Seq(( 4096,    8,    8),
11051e26c03SLingrui98        ( 4096,   13,    8),
11151e26c03SLingrui98        ( 4096,   32,    8),
11251e26c03SLingrui98        ( 4096,  119,    8)),
113dd6c0695SLingrui98  ITTageTableInfos: Seq[Tuple3[Int,Int,Int]] =
114dd6c0695SLingrui98  //      Sets  Hist   Tag
11503c81005SLingrui98    Seq(( 256,    4,    9),
116527dc111SLingrui98        ( 256,    8,    9),
1173581d7d3SLingrui98        ( 512,   13,    9),
118527dc111SLingrui98        ( 512,   16,    9),
119f2aabf0dSLingrui98        ( 512,   32,    9)),
12082dc6ff8SLingrui98  SCNRows: Int = 512,
12182dc6ff8SLingrui98  SCNTables: Int = 4,
122dd6c0695SLingrui98  SCCtrBits: Int = 6,
12382dc6ff8SLingrui98  SCHistLens: Seq[Int] = Seq(0, 4, 10, 16),
124dd6c0695SLingrui98  numBr: Int = 2,
125dc5a9185SEaston Man  branchPredictor: (BranchPredictionResp, Parameters) => Tuple2[Seq[BasePredictor], BranchPredictionResp] =
126dc5a9185SEaston Man  (resp_in: BranchPredictionResp, p: Parameters) => {
12716a1cc4bSzoujr    val ftb = Module(new FTB()(p))
128dc5a9185SEaston Man    val uftb = Module(new FauFTB()(p))
129bf358e08SLingrui98    val tage = Module(new Tage_SC()(p))
1304cd08aa8SLingrui98    val ras = Module(new RAS()(p))
13160f966c8SGuokai Chen    val ittage = Module(new ITTage()(p))
132dc5a9185SEaston Man    val preds = Seq(uftb, tage, ftb, ittage, ras)
13316a1cc4bSzoujr    preds.map(_.io := DontCare)
13416a1cc4bSzoujr
135fd3aa057SYuandongliang    ftb.io.fauftb_entry_in  := uftb.io.fauftb_entry_out
136fd3aa057SYuandongliang    ftb.io.fauftb_entry_hit_in := uftb.io.fauftb_entry_hit_out
137fd3aa057SYuandongliang
138dc5a9185SEaston Man    uftb.io.in.bits.resp_in(0) := resp_in
139dc5a9185SEaston Man    tage.io.in.bits.resp_in(0) := uftb.io.out
140c2d1ec7dSLingrui98    ftb.io.in.bits.resp_in(0) := tage.io.out
141c2d1ec7dSLingrui98    ittage.io.in.bits.resp_in(0) := ftb.io.out
142c2d1ec7dSLingrui98    ras.io.in.bits.resp_in(0) := ittage.io.out
14316a1cc4bSzoujr
144c2d1ec7dSLingrui98    (preds, ras.io.out)
145dc5a9185SEaston Man  },
146b92f8445Sssszwic  ICacheForceMetaECCError: Boolean = false,
147b92f8445Sssszwic  ICacheForceDataECCError: Boolean = false,
1482225d46eSJiawei Lin  IBufSize: Int = 48,
14944c9c1deSEaston Man  IBufNBank: Int = 6, // IBuffer bank amount, should divide IBufSize
1502225d46eSJiawei Lin  DecodeWidth: Int = 6,
1512225d46eSJiawei Lin  RenameWidth: Int = 6,
152780712aaSxiaofeibao-xjtu  CommitWidth: Int = 8,
153780712aaSxiaofeibao-xjtu  RobCommitWidth: Int = 8,
154780712aaSxiaofeibao-xjtu  RabCommitWidth: Int = 6,
15565df1368Sczw  MaxUopSize: Int = 65,
156fa7f2c26STang Haojin  EnableRenameSnapshot: Boolean = true,
157fa7f2c26STang Haojin  RenameSnapshotNum: Int = 4,
1585df4db2aSLingrui98  FtqSize: Int = 64,
1592225d46eSJiawei Lin  EnableLoadFastWakeUp: Boolean = true, // NOTE: not supported now, make it false
160a8db15d8Sfdy  IntLogicRegs: Int = 32,
161f2ea741cSzhanglinjuan  FpLogicRegs: Int = 32 + 1 + 1, // 1: I2F, 1: stride
1622cf47c6eSxiaofeibao  VecLogicRegs: Int = 32 + 15, // 15: tmp
163435f48a8Sxiaofeibao  V0LogicRegs: Int = 1, // V0
164dbe071d2Sxiaofeibao  VlLogicRegs: Int = 1, // Vl
1659c5a1080Sxiaofeibao  V0_IDX: Int = 0,
1669c5a1080Sxiaofeibao  Vl_IDX: Int = 0,
1677154d65eSYinan Xu  NRPhyRegs: Int = 192,
1688ff9f385SHaojin Tang  VirtualLoadQueueSize: Int = 72,
16917386530SAnzo  LoadQueueRARSize: Int = 72,
170452b5843SHuijin Li  LoadQueueRAWSize: Int = 32, // NOTE: make sure that LoadQueueRAWSize is power of 2.
171e4f69d78Ssfencevma  RollbackGroupSize: Int = 8,
17244cbc983Ssfencevma  LoadQueueReplaySize: Int = 72,
173452b5843SHuijin Li  LoadUncacheBufferSize: Int = 4,
174e4f69d78Ssfencevma  LoadQueueNWriteBanks: Int = 8, // NOTE: make sure that LoadQueueRARSize/LoadQueueRAWSize is divided by LoadQueueNWriteBanks
175452b5843SHuijin Li  StoreQueueSize: Int = 56,
176e4f69d78Ssfencevma  StoreQueueNWriteBanks: Int = 8, // NOTE: make sure that StoreQueueSize is divided by StoreQueueNWriteBanks
177e4f69d78Ssfencevma  StoreQueueForwardWithMask: Boolean = true,
178cea88ff8SWilliam Wang  VlsQueueSize: Int = 8,
1791f35da39Sxiaofeibao-xjtu  RobSize: Int = 160,
180a8db15d8Sfdy  RabSize: Int = 256,
1814c7680e0SXuan Hu  VTypeBufferSize: Int = 64, // used to reorder vtype
1821f35da39Sxiaofeibao-xjtu  IssueQueueSize: Int = 24,
18328607074Ssinsanction  IssueQueueCompEntrySize: Int = 16,
1843b739f49SXuan Hu  intPreg: PregParams = IntPregParams(
1856f7be84aSXuan Hu    numEntries = 224,
18639c59369SXuan Hu    numRead = None,
18739c59369SXuan Hu    numWrite = None,
1882225d46eSJiawei Lin  ),
18960f0c5aeSxiaofeibao  fpPreg: PregParams = FpPregParams(
19039c59369SXuan Hu    numEntries = 192,
191fc605fcfSsinsanction    numRead = None,
19239c59369SXuan Hu    numWrite = None,
1933b739f49SXuan Hu  ),
19460f0c5aeSxiaofeibao  vfPreg: VfPregParams = VfPregParams(
19560f0c5aeSxiaofeibao    numEntries = 128,
19660f0c5aeSxiaofeibao    numRead = None,
19760f0c5aeSxiaofeibao    numWrite = None,
19860f0c5aeSxiaofeibao  ),
1992aa3a761Ssinsanction  v0Preg: V0PregParams = V0PregParams(
2002aa3a761Ssinsanction    numEntries = 22,
2012aa3a761Ssinsanction    numRead = None,
2022aa3a761Ssinsanction    numWrite = None,
2032aa3a761Ssinsanction  ),
2042aa3a761Ssinsanction  vlPreg: VlPregParams = VlPregParams(
2052aa3a761Ssinsanction    numEntries = 32,
2062aa3a761Ssinsanction    numRead = None,
2072aa3a761Ssinsanction    numWrite = None,
2082aa3a761Ssinsanction  ),
209ae4984bfSsinsanction  IntRegCacheSize: Int = 16,
210ae4984bfSsinsanction  MemRegCacheSize: Int = 12,
2114376b525SZiyue Zhang  intSchdVlWbPort: Int = 0,
2124376b525SZiyue Zhang  vfSchdVlWbPort: Int = 1,
213289fc2f9SLinJiawei  prefetcher: Option[PrefetcherParams] = Some(SMSParams()),
21495a47398SGao-Zeyu  IfuRedirectNum: Int = 1,
215a81cda24Ssfencevma  LoadPipelineWidth: Int = 3,
2162142592bSxiaofeibao-xjtu  StorePipelineWidth: Int = 2,
217ef142700Sxiaofeibao  VecLoadPipelineWidth: Int = 2,
218ef142700Sxiaofeibao  VecStorePipelineWidth: Int = 2,
219cea88ff8SWilliam Wang  VecMemSrcInWidth: Int = 2,
220cea88ff8SWilliam Wang  VecMemInstWbWidth: Int = 1,
221cea88ff8SWilliam Wang  VecMemDispatchWidth: Int = 1,
2223ea758f9SAnzo  VecMemDispatchMaxNumber: Int = 16,
2239ff64fb6SAnzooooo  VecMemUnitStrideMaxFlowNum: Int = 2,
2244e7f9e52Sxiaofeibao  VecMemLSQEnqIteratorNumberSeq: Seq[Int] = Seq(16, 16, 16, 16, 16, 16),
2252225d46eSJiawei Lin  StoreBufferSize: Int = 16,
22605f23f57SWilliam Wang  StoreBufferThreshold: Int = 7,
22746f74b57SHaojin Tang  EnsbufferWidth: Int = 2,
228ec49b127Ssinsanction  LoadDependencyWidth: Int = 2,
22920a5248fSzhanglinjuan  // ============ VLSU ============
230b2d6d8e7Sgood-circle  VlMergeBufferSize: Int = 16,
231b2d6d8e7Sgood-circle  VsMergeBufferSize: Int = 16,
232ef142700Sxiaofeibao  UopWritebackWidth: Int = 2,
233ef142700Sxiaofeibao  VLUopWritebackWidth: Int = 2,
234627be78bSgood-circle  VSUopWritebackWidth: Int = 1,
23588884326Sweiding liu  VSegmentBufferSize: Int = 8,
236df3b4b92SAnzooooo  VFOFBufferSize: Int = 8,
237df3b4b92SAnzooooo  VLFOFWritebackWidth: Int = 1,
23820a5248fSzhanglinjuan  // ==============================
23937225120Ssfencevma  UncacheBufferSize: Int = 4,
240cd2ff98bShappy-lx  EnableLoadToLoadForward: Boolean = false,
24114a67055Ssfencevma  EnableFastForward: Boolean = true,
242beabc72dSWilliam Wang  EnableLdVioCheckAfterReset: Boolean = true,
243026615fcSWilliam Wang  EnableSoftPrefetchAfterReset: Boolean = true,
244026615fcSWilliam Wang  EnableCacheErrorAfterReset: Boolean = true,
245eaf14747Scz4e  EnableAccurateLoadError: Boolean = true,
246e32bafbaSbugGenerator  EnableUncacheWriteOutstanding: Boolean = false,
24741d8d239Shappy-lx  EnableHardwareStoreMisalign: Boolean = true,
24841d8d239Shappy-lx  EnableHardwareLoadMisalign: Boolean = true,
2490d32f713Shappy-lx  EnableStorePrefetchAtIssue: Boolean = false,
2500d32f713Shappy-lx  EnableStorePrefetchAtCommit: Boolean = false,
2510d32f713Shappy-lx  EnableAtCommitMissTrigger: Boolean = true,
2520d32f713Shappy-lx  EnableStorePrefetchSMS: Boolean = false,
2530d32f713Shappy-lx  EnableStorePrefetchSPB: Boolean = false,
254e3ed843cShappy-lx  HasCMO: Boolean = true,
25545f497a4Shappy-lx  MMUAsidLen: Int = 16, // max is 16, 0 is not supported now
256d0de7e4aSpeixiaokun  MMUVmidLen: Int = 14,
25762dfd6c3Shappy-lx  ReSelectLen: Int = 7, // load replay queue replay select counter len
25804665835SMaxpicca-Li  iwpuParameters: WPUParameters = WPUParameters(
25904665835SMaxpicca-Li    enWPU = false,
26004665835SMaxpicca-Li    algoName = "mmru",
26104665835SMaxpicca-Li    isICache = true,
26204665835SMaxpicca-Li  ),
26304665835SMaxpicca-Li  dwpuParameters: WPUParameters = WPUParameters(
26404665835SMaxpicca-Li    enWPU = false,
26504665835SMaxpicca-Li    algoName = "mmru",
26604665835SMaxpicca-Li    enCfPred = false,
26704665835SMaxpicca-Li    isICache = false,
26804665835SMaxpicca-Li  ),
269a0301c0dSLemover  itlbParameters: TLBParameters = TLBParameters(
270a0301c0dSLemover    name = "itlb",
271a0301c0dSLemover    fetchi = true,
272a0301c0dSLemover    useDmode = false,
273f9ac118cSHaoyuan Feng    NWays = 48,
274a0301c0dSLemover  ),
275b92f8445Sssszwic  itlbPortNum: Int = ICacheParameters().PortNumber + 1,
276b92f8445Sssszwic  ipmpPortNum: Int = 2 * ICacheParameters().PortNumber + 1,
277a0301c0dSLemover  ldtlbParameters: TLBParameters = TLBParameters(
278a0301c0dSLemover    name = "ldtlb",
279f9ac118cSHaoyuan Feng    NWays = 48,
28053b8f1a7SLemover    outReplace = false,
2815b7ef044SLemover    partialStaticPMP = true,
282f1fe8698SLemover    outsideRecvFlush = true,
2833ea4388cSHaoyuan Feng    saveLevel = false,
28426af847eSgood-circle    lgMaxSize = 4
285a0301c0dSLemover  ),
286a0301c0dSLemover  sttlbParameters: TLBParameters = TLBParameters(
287a0301c0dSLemover    name = "sttlb",
288f9ac118cSHaoyuan Feng    NWays = 48,
28953b8f1a7SLemover    outReplace = false,
2905b7ef044SLemover    partialStaticPMP = true,
291f1fe8698SLemover    outsideRecvFlush = true,
2923ea4388cSHaoyuan Feng    saveLevel = false,
29326af847eSgood-circle    lgMaxSize = 4
294a0301c0dSLemover  ),
2958f1fa9b1Ssfencevma  hytlbParameters: TLBParameters = TLBParameters(
2968f1fa9b1Ssfencevma    name = "hytlb",
297531c40faSsinceforYy    NWays = 48,
298531c40faSsinceforYy    outReplace = false,
2998f1fa9b1Ssfencevma    partialStaticPMP = true,
3008f1fa9b1Ssfencevma    outsideRecvFlush = true,
3013ea4388cSHaoyuan Feng    saveLevel = false,
30226af847eSgood-circle    lgMaxSize = 4
3038f1fa9b1Ssfencevma  ),
304c8309e8aSHaoyuan Feng  pftlbParameters: TLBParameters = TLBParameters(
305c8309e8aSHaoyuan Feng    name = "pftlb",
306f9ac118cSHaoyuan Feng    NWays = 48,
307c8309e8aSHaoyuan Feng    outReplace = false,
308c8309e8aSHaoyuan Feng    partialStaticPMP = true,
309c8309e8aSHaoyuan Feng    outsideRecvFlush = true,
3103ea4388cSHaoyuan Feng    saveLevel = false,
31126af847eSgood-circle    lgMaxSize = 4
312c8309e8aSHaoyuan Feng  ),
313aee6a6d1SYanqin Li  l2ToL1tlbParameters: TLBParameters = TLBParameters(
314aee6a6d1SYanqin Li    name = "l2tlb",
315aee6a6d1SYanqin Li    NWays = 48,
316aee6a6d1SYanqin Li    outReplace = false,
317aee6a6d1SYanqin Li    partialStaticPMP = true,
318aee6a6d1SYanqin Li    outsideRecvFlush = true,
3193ea4388cSHaoyuan Feng    saveLevel = false
320aee6a6d1SYanqin Li  ),
321bf08468cSLemover  refillBothTlb: Boolean = false,
322a0301c0dSLemover  btlbParameters: TLBParameters = TLBParameters(
323a0301c0dSLemover    name = "btlb",
324f9ac118cSHaoyuan Feng    NWays = 48,
325a0301c0dSLemover  ),
3265854c1edSLemover  l2tlbParameters: L2TLBParameters = L2TLBParameters(),
3272225d46eSJiawei Lin  NumPerfCounters: Int = 16,
32805f23f57SWilliam Wang  icacheParameters: ICacheParameters = ICacheParameters(
32905f23f57SWilliam Wang    tagECC = Some("parity"),
33005f23f57SWilliam Wang    dataECC = Some("parity"),
33105f23f57SWilliam Wang    replacer = Some("setplru"),
3326c106319Sxu_zh    cacheCtrlAddressOpt = Some(AddressSet(0x38022080, 0x7f))
33305f23f57SWilliam Wang  ),
3344f94c0c6SJiawei Lin  dcacheParametersOpt: Option[DCacheParameters] = Some(DCacheParameters(
33505f23f57SWilliam Wang    tagECC = Some("secded"),
33605f23f57SWilliam Wang    dataECC = Some("secded"),
33705f23f57SWilliam Wang    replacer = Some("setplru"),
33805f23f57SWilliam Wang    nMissEntries = 16,
339300ded30SWilliam Wang    nProbeEntries = 8,
3400d32f713Shappy-lx    nReleaseEntries = 18,
3410d32f713Shappy-lx    nMaxPrefetchEntry = 6,
342908b24d8Scz4e    enableTagEcc = true,
34372dab974Scz4e    enableDataEcc = true,
34472dab974Scz4e    cacheCtrlAddressOpt = Some(AddressSet(0x38022000, 0x7f))
3454f94c0c6SJiawei Lin  )),
34615ee59e4Swakafa  L2CacheParamsOpt: Option[L2Param] = Some(L2Param(
347a1ea7f76SJiawei Lin    name = "l2",
348a1ea7f76SJiawei Lin    ways = 8,
349a1ea7f76SJiawei Lin    sets = 1024, // default 512KB L2
3501fb367eaSChen Xi    prefetch = Seq(coupledL2.prefetch.PrefetchReceiverParams(), coupledL2.prefetch.BOPParameters(),
3511fb367eaSChen Xi      coupledL2.prefetch.TPParameters()),
3524f94c0c6SJiawei Lin  )),
353d5be5d19SJiawei Lin  L2NBanks: Int = 1,
354a1ea7f76SJiawei Lin  usePTWRepeater: Boolean = false,
355e0374b1cSHaoyuan Feng  softTLB: Boolean = false, // dpi-c l1tlb debug only
356e0374b1cSHaoyuan Feng  softPTW: Boolean = false, // dpi-c l2tlb debug only
3574b2c87baS梁森 Liang Sen  softPTWDelay: Int = 1,
358602aa9f1Scz4e  hasMbist: Boolean = false,
359*4c0658aeSTang Haojin  wfiResume: Boolean = true,
360602aa9f1Scz4e  hasSramCtl: Boolean = false,
3612225d46eSJiawei Lin){
3626cd53fdeSTang Haojin  def ISABase = "rv64i"
3636cd53fdeSTang Haojin  def ISAExtensions = Seq(
3646cd53fdeSTang Haojin    // single letter extensions, in canonical order
3656cd53fdeSTang Haojin    "i", "m", "a", "f", "d", "c", /* "b", */ "v", "h",
3666cd53fdeSTang Haojin    // multi-letter extensions, sorted alphanumerically
3672bff79a3STang Haojin    "sdtrig", "sha", "shcounterenw", "shgatpa", "shlcofideleg", "shtvala", "shvsatpa", "shvstvala",
3682bff79a3STang Haojin    "shvstvecd", "smaia", "smcsrind", "smdbltrp", "smmpm", "smnpm", "smrnmi", "smstateen",
3692bff79a3STang Haojin    "ss1p13", "ssaia", "ssccptr", "sscofpmf", "sscounterenw", "sscsrind", "ssdbltrp", "ssnpm",
3702bff79a3STang Haojin    "sspm", "ssstateen", "ssstrict", "sstc", "sstvala", "sstvecd", "ssu64xl", "supm", "sv39",
371b1d76493STang Haojin    "sv48", "svade", "svbare", "svinval", "svnapot", "svpbmt", "za64rs", "zacas", "zawrs", "zba",
372b1d76493STang Haojin    "zbb", "zbc", "zbkb", "zbkc", "zbkx", "zbs", "zcb", "zcmop", "zfa", "zfh", "zfhmin", "zic64b",
373b1d76493STang Haojin    "zicbom", "zicbop", "zicboz", "ziccamoa", "ziccif", "zicclsm", "ziccrse", "zicntr", "zicond",
374b1d76493STang Haojin    "zicsr", "zifencei", "zihintntl", "zihintpause", "zihpm", "zimop", "zkn", "zknd", "zkne", "zknh",
375b1d76493STang Haojin    "zksed", "zksh", "zkt", "zvbb", "zvfh", "zvfhmin", "zvkt", "zvl128b", "zvl32b", "zvl64b"
3766cd53fdeSTang Haojin  )
3776cd53fdeSTang Haojin
378b52d4755SXuan Hu  def vlWidth = log2Up(VLEN) + 1
379b52d4755SXuan Hu
3806dbb4e08SXuan Hu  /**
3816dbb4e08SXuan Hu   * the minimum element length of vector elements
3826dbb4e08SXuan Hu   */
3836dbb4e08SXuan Hu  val minVecElen: Int = 8
3846dbb4e08SXuan Hu
3856dbb4e08SXuan Hu  /**
3866dbb4e08SXuan Hu   * the maximum number of elements in vector register
3876dbb4e08SXuan Hu   */
3886dbb4e08SXuan Hu  val maxElemPerVreg: Int = VLEN / minVecElen
3896dbb4e08SXuan Hu
390c7fabd05SSteve Gou  val allHistLens = SCHistLens ++ ITTageTableInfos.map(_._2) ++ TageTableInfos.map(_._2) :+ UbtbGHRLength
391c7fabd05SSteve Gou  val HistoryLength = allHistLens.max + numBr * FtqSize + 9 // 256 for the predictor configs now
392c7fabd05SSteve Gou
393ae4984bfSsinsanction  val RegCacheSize = IntRegCacheSize + MemRegCacheSize
394ae4984bfSsinsanction  val RegCacheIdxWidth = log2Up(RegCacheSize)
395ae4984bfSsinsanction
39639c59369SXuan Hu  val intSchdParams = {
3973b739f49SXuan Hu    implicit val schdType: SchedulerType = IntScheduler()
3983b739f49SXuan Hu    SchdBlockParams(Seq(
3993b739f49SXuan Hu      IssueBlockParams(Seq(
4007556e9bdSxiaofeibao-xjtu        ExeUnitParams("ALU0", Seq(AluCfg, MulCfg, BkuCfg), Seq(IntWB(port = 0, 0)), Seq(Seq(IntRD(0, 0)), Seq(IntRD(1, 0))), true, 2),
401f803e5e9Ssinsanction        ExeUnitParams("BJU0", Seq(BrhCfg, JmpCfg), Seq(IntWB(port = 0, 1)), Seq(Seq(IntRD(6, 1)), Seq(IntRD(7, 1))), true, 2),
40228607074Ssinsanction      ), numEntries = IssueQueueSize, numEnq = 2, numComp = IssueQueueCompEntrySize),
403cde70b38SzhanglyGit      IssueBlockParams(Seq(
4047556e9bdSxiaofeibao-xjtu        ExeUnitParams("ALU1", Seq(AluCfg, MulCfg, BkuCfg), Seq(IntWB(port = 1, 0)), Seq(Seq(IntRD(2, 0)), Seq(IntRD(3, 0))), true, 2),
405f803e5e9Ssinsanction        ExeUnitParams("BJU1", Seq(BrhCfg, JmpCfg), Seq(IntWB(port = 1, 1)), Seq(Seq(IntRD(4, 1)), Seq(IntRD(5, 1))), true, 2),
40628607074Ssinsanction      ), numEntries = IssueQueueSize, numEnq = 2, numComp = IssueQueueCompEntrySize),
4073b739f49SXuan Hu      IssueBlockParams(Seq(
408ff3fcdf1Sxiaofeibao-xjtu        ExeUnitParams("ALU2", Seq(AluCfg), Seq(IntWB(port = 2, 0)), Seq(Seq(IntRD(4, 0)), Seq(IntRD(5, 0))), true, 2),
4098c6ac5ebSxiaofeibao        ExeUnitParams("BJU2", Seq(BrhCfg, JmpCfg, I2fCfg, VSetRiWiCfg, VSetRiWvfCfg, I2vCfg), Seq(IntWB(port = 4, 0), VfWB(2, 0), V0WB(port = 2, 0), VlWB(port = intSchdVlWbPort, 0), FpWB(port = 2, 1)), Seq(Seq(IntRD(2, 1)), Seq(IntRD(3, 1)))),
41028607074Ssinsanction      ), numEntries = IssueQueueSize, numEnq = 2, numComp = IssueQueueCompEntrySize),
4113b739f49SXuan Hu      IssueBlockParams(Seq(
412ff3fcdf1Sxiaofeibao-xjtu        ExeUnitParams("ALU3", Seq(AluCfg), Seq(IntWB(port = 3, 0)), Seq(Seq(IntRD(6, 0)), Seq(IntRD(7, 0))), true, 2),
413f803e5e9Ssinsanction        ExeUnitParams("BJU3", Seq(CsrCfg, FenceCfg, DivCfg), Seq(IntWB(port = 4, 1)), Seq(Seq(IntRD(0, 1)), Seq(IntRD(1, 1)))),
41428607074Ssinsanction      ), numEntries = IssueQueueSize, numEnq = 2, numComp = IssueQueueCompEntrySize),
4153b739f49SXuan Hu    ),
4163b739f49SXuan Hu      numPregs = intPreg.numEntries,
4173b739f49SXuan Hu      numDeqOutside = 0,
4183b739f49SXuan Hu      schdType = schdType,
4193b739f49SXuan Hu      rfDataWidth = intPreg.dataCfg.dataWidth,
4203b739f49SXuan Hu    )
4213b739f49SXuan Hu  }
42260f0c5aeSxiaofeibao
42360f0c5aeSxiaofeibao  val fpSchdParams = {
42460f0c5aeSxiaofeibao    implicit val schdType: SchedulerType = FpScheduler()
42560f0c5aeSxiaofeibao    SchdBlockParams(Seq(
42660f0c5aeSxiaofeibao      IssueBlockParams(Seq(
427f62a71efSxiaofeibao        ExeUnitParams("FEX0", Seq(FaluCfg, FcvtCfg, F2vCfg, FmacCfg), Seq(FpWB(port = 0, 0), IntWB(port = 0, 2), VfWB(port = 3, 0), V0WB(port = 3, 0)), Seq(Seq(FpRD(0, 0)), Seq(FpRD(1, 0)), Seq(FpRD(2, 0)))),
4288c6ac5ebSxiaofeibao        ExeUnitParams("FEX1", Seq(FdivCfg), Seq(FpWB(port = 3, 1)), Seq(Seq(FpRD(2, 1)), Seq(FpRD(5, 1)))),
42949f2b250Sxiaofeibao      ), numEntries = 18, numEnq = 2, numComp = 14),
43060f0c5aeSxiaofeibao      IssueBlockParams(Seq(
4318c6ac5ebSxiaofeibao        ExeUnitParams("FEX2", Seq(FaluCfg, FmacCfg), Seq(FpWB(port = 1, 0), IntWB(port = 1, 2)), Seq(Seq(FpRD(3, 0)), Seq(FpRD(4, 0)), Seq(FpRD(5, 0)))),
4328c6ac5ebSxiaofeibao        ExeUnitParams("FEX3", Seq(FdivCfg), Seq(FpWB(port = 4, 1)), Seq(Seq(FpRD(8, 1)), Seq(FpRD(9, 1)))),
43349f2b250Sxiaofeibao      ), numEntries = 18, numEnq = 2, numComp = 14),
43460f0c5aeSxiaofeibao      IssueBlockParams(Seq(
4358c6ac5ebSxiaofeibao        ExeUnitParams("FEX4", Seq(FaluCfg, FmacCfg), Seq(FpWB(port = 2, 0), IntWB(port = 2, 1)), Seq(Seq(FpRD(6, 0)), Seq(FpRD(7, 0)), Seq(FpRD(8, 0)))),
43649f2b250Sxiaofeibao      ), numEntries = 18, numEnq = 2, numComp = 14),
43760f0c5aeSxiaofeibao    ),
43860f0c5aeSxiaofeibao      numPregs = fpPreg.numEntries,
43960f0c5aeSxiaofeibao      numDeqOutside = 0,
44060f0c5aeSxiaofeibao      schdType = schdType,
44160f0c5aeSxiaofeibao      rfDataWidth = fpPreg.dataCfg.dataWidth,
44260f0c5aeSxiaofeibao    )
44360f0c5aeSxiaofeibao  }
44460f0c5aeSxiaofeibao
44539c59369SXuan Hu  val vfSchdParams = {
4463b739f49SXuan Hu    implicit val schdType: SchedulerType = VfScheduler()
4473b739f49SXuan Hu    SchdBlockParams(Seq(
4483b739f49SXuan Hu      IssueBlockParams(Seq(
4490d50d631Sxiaofeibao        ExeUnitParams("VFEX0", Seq(VfmaCfg, VialuCfg, VimacCfg, VppuCfg), Seq(VfWB(port = 0, 0), V0WB(port = 0, 0)), Seq(Seq(VfRD(0, 0)), Seq(VfRD(1, 0)), Seq(VfRD(2, 0)), Seq(V0RD(0, 0)), Seq(VlRD(0, 0)))),
4500d50d631Sxiaofeibao        ExeUnitParams("VFEX1", Seq(VfaluCfg, VfcvtCfg, VipuCfg, VSetRvfWvfCfg), Seq(VfWB(port = 0, 1), V0WB(port = 0, 1), VlWB(port = vfSchdVlWbPort, 0), IntWB(port = 1, 1), FpWB(port = 0, 1)), Seq(Seq(VfRD(0, 1)), Seq(VfRD(1, 1)), Seq(VfRD(2, 1)), Seq(V0RD(0, 1)), Seq(VlRD(0, 1)))),
45149f2b250Sxiaofeibao      ), numEntries = 16, numEnq = 2, numComp = 12),
4523b739f49SXuan Hu      IssueBlockParams(Seq(
4530d50d631Sxiaofeibao        ExeUnitParams("VFEX2", Seq(VfmaCfg, VialuCfg), Seq(VfWB(port = 1, 0), V0WB(port = 1, 0)), Seq(Seq(VfRD(3, 0)), Seq(VfRD(4, 0)), Seq(VfRD(5, 0)), Seq(V0RD(1, 0)), Seq(VlRD(1, 0)))),
454c22ffc80Sxiaofeibao        ExeUnitParams("VFEX3", Seq(VfaluCfg), Seq(VfWB(port = 2, 1), V0WB(port = 2, 1), FpWB(port = 1, 1)), Seq(Seq(VfRD(3, 1)), Seq(VfRD(4, 1)), Seq(VfRD(5, 1)), Seq(V0RD(1, 1)), Seq(VlRD(1, 1)))),
45549f2b250Sxiaofeibao      ), numEntries = 16, numEnq = 2, numComp = 12),
4560d50d631Sxiaofeibao      IssueBlockParams(Seq(
4570d50d631Sxiaofeibao        ExeUnitParams("VFEX4", Seq(VfdivCfg, VidivCfg), Seq(VfWB(port = 3, 1), V0WB(port = 3, 1)), Seq(Seq(VfRD(3, 2)), Seq(VfRD(4, 2)), Seq(VfRD(5, 2)), Seq(V0RD(1, 2)), Seq(VlRD(1, 2)))),
45849f2b250Sxiaofeibao      ), numEntries = 10, numEnq = 2, numComp = 6),
4593b739f49SXuan Hu    ),
4603b739f49SXuan Hu      numPregs = vfPreg.numEntries,
4613b739f49SXuan Hu      numDeqOutside = 0,
4623b739f49SXuan Hu      schdType = schdType,
4633b739f49SXuan Hu      rfDataWidth = vfPreg.dataCfg.dataWidth,
4643b739f49SXuan Hu    )
4653b739f49SXuan Hu  }
46639c59369SXuan Hu
46739c59369SXuan Hu  val memSchdParams = {
4683b739f49SXuan Hu    implicit val schdType: SchedulerType = MemScheduler()
4693b739f49SXuan Hu    val rfDataWidth = 64
4702225d46eSJiawei Lin
4713b739f49SXuan Hu    SchdBlockParams(Seq(
4723b739f49SXuan Hu      IssueBlockParams(Seq(
473f803e5e9Ssinsanction        ExeUnitParams("STA0", Seq(StaCfg, MouCfg), Seq(FakeIntWB()), Seq(Seq(IntRD(7, 2)))),
47449f2b250Sxiaofeibao      ), numEntries = 16, numEnq = 2, numComp = 12),
475b133b458SXuan Hu      IssueBlockParams(Seq(
476f803e5e9Ssinsanction        ExeUnitParams("STA1", Seq(StaCfg, MouCfg), Seq(FakeIntWB()), Seq(Seq(IntRD(6, 2)))),
47749f2b250Sxiaofeibao      ), numEntries = 16, numEnq = 2, numComp = 12),
478202674aeSHaojin Tang      IssueBlockParams(Seq(
4798c6ac5ebSxiaofeibao        ExeUnitParams("LDU0", Seq(LduCfg), Seq(IntWB(5, 0), FpWB(3, 0)), Seq(Seq(IntRD(8, 0))), true, 2),
48049f2b250Sxiaofeibao      ), numEntries = 16, numEnq = 2, numComp = 12),
4813b739f49SXuan Hu      IssueBlockParams(Seq(
4828c6ac5ebSxiaofeibao        ExeUnitParams("LDU1", Seq(LduCfg), Seq(IntWB(6, 0), FpWB(4, 0)), Seq(Seq(IntRD(9, 0))), true, 2),
48349f2b250Sxiaofeibao      ), numEntries = 16, numEnq = 2, numComp = 12),
484e77d3114SHaojin Tang      IssueBlockParams(Seq(
4858c6ac5ebSxiaofeibao        ExeUnitParams("LDU2", Seq(LduCfg), Seq(IntWB(7, 0), FpWB(5, 0)), Seq(Seq(IntRD(10, 0))), true, 2),
48649f2b250Sxiaofeibao      ), numEntries = 16, numEnq = 2, numComp = 12),
487a81cda24Ssfencevma      IssueBlockParams(Seq(
488df3b4b92SAnzooooo        ExeUnitParams("VLSU0", Seq(VlduCfg, VstuCfg, VseglduSeg, VsegstuCfg), Seq(VfWB(4, 0), V0WB(4, 0), VlWB(port = 2, 0)), Seq(Seq(VfRD(6, 0)), Seq(VfRD(7, 0)), Seq(VfRD(8, 0)), Seq(V0RD(2, 0)), Seq(VlRD(2, 0)))),
48949f2b250Sxiaofeibao      ), numEntries = 16, numEnq = 2, numComp = 12),
4903da89fc0Sxiaofeibao      IssueBlockParams(Seq(
491df3b4b92SAnzooooo        ExeUnitParams("VLSU1", Seq(VlduCfg, VstuCfg), Seq(VfWB(5, 0), V0WB(5, 0), VlWB(port = 3, 0)), Seq(Seq(VfRD(9, 0)), Seq(VfRD(10, 0)), Seq(VfRD(11, 0)), Seq(V0RD(3, 0)), Seq(VlRD(3, 0)))),
49249f2b250Sxiaofeibao      ), numEntries = 16, numEnq = 2, numComp = 12),
493ecfc6f16SXuan Hu      IssueBlockParams(Seq(
4948c6ac5ebSxiaofeibao        ExeUnitParams("STD0", Seq(StdCfg, MoudCfg), Seq(), Seq(Seq(IntRD(5, 2), FpRD(9, 0)))),
49549f2b250Sxiaofeibao      ), numEntries = 16, numEnq = 2, numComp = 12),
49627811ea4SXuan Hu      IssueBlockParams(Seq(
4978c6ac5ebSxiaofeibao        ExeUnitParams("STD1", Seq(StdCfg, MoudCfg), Seq(), Seq(Seq(IntRD(3, 2), FpRD(10, 0)))),
49849f2b250Sxiaofeibao      ), numEntries = 16, numEnq = 2, numComp = 12),
4993b739f49SXuan Hu    ),
500141a6449SXuan Hu      numPregs = intPreg.numEntries max vfPreg.numEntries,
5013b739f49SXuan Hu      numDeqOutside = 0,
5023b739f49SXuan Hu      schdType = schdType,
5033b739f49SXuan Hu      rfDataWidth = rfDataWidth,
5043b739f49SXuan Hu    )
5053b739f49SXuan Hu  }
5062225d46eSJiawei Lin
507bf35baadSXuan Hu  def PregIdxWidthMax = intPreg.addrWidth max vfPreg.addrWidth
508bf35baadSXuan Hu
509bf35baadSXuan Hu  def iqWakeUpParams = {
510bf35baadSXuan Hu    Seq(
511c0b91ca1SHaojin Tang      WakeUpConfig(
5122142592bSxiaofeibao-xjtu        Seq("ALU0", "ALU1", "ALU2", "ALU3", "LDU0", "LDU1", "LDU2") ->
5132142592bSxiaofeibao-xjtu        Seq("ALU0", "BJU0", "ALU1", "BJU1", "ALU2", "BJU2", "ALU3", "BJU3", "LDU0", "LDU1", "LDU2", "STA0", "STA1", "STD0", "STD1")
514c0b91ca1SHaojin Tang      ),
5150966699fSxiaofeibao-xjtu      // TODO: add load -> fp slow wakeup
516b67f36d0Sxiaofeibao-xjtu      WakeUpConfig(
5178c6ac5ebSxiaofeibao        Seq("FEX0", "FEX2", "FEX4") ->
5188c6ac5ebSxiaofeibao        Seq("FEX0", "FEX1", "FEX2", "FEX3", "FEX4")
51931c5c732Sxiaofeibao      ),
520c0b91ca1SHaojin Tang    ).flatten
521bf35baadSXuan Hu  }
522bf35baadSXuan Hu
5235edcc45fSHaojin Tang  def fakeIntPreg = FakeIntPregParams(intPreg.numEntries, intPreg.numRead, intPreg.numWrite)
5245edcc45fSHaojin Tang
5250c7ebb58Sxiaofeibao-xjtu  val backendParams: BackendParams = backend.BackendParams(
526bf35baadSXuan Hu    Map(
5273b739f49SXuan Hu      IntScheduler() -> intSchdParams,
52860f0c5aeSxiaofeibao      FpScheduler() -> fpSchdParams,
5293b739f49SXuan Hu      VfScheduler() -> vfSchdParams,
5303b739f49SXuan Hu      MemScheduler() -> memSchdParams,
531bf35baadSXuan Hu    ),
532bf35baadSXuan Hu    Seq(
5333b739f49SXuan Hu      intPreg,
53460f0c5aeSxiaofeibao      fpPreg,
5353b739f49SXuan Hu      vfPreg,
5362aa3a761Ssinsanction      v0Preg,
5372aa3a761Ssinsanction      vlPreg,
5385edcc45fSHaojin Tang      fakeIntPreg
539bf35baadSXuan Hu    ),
540bf35baadSXuan Hu    iqWakeUpParams,
541bf35baadSXuan Hu  )
54249162c9aSGuanghui Cheng
54349162c9aSGuanghui Cheng  // Parameters for trace extension.
54449162c9aSGuanghui Cheng  // Trace parameters is useful for XSTOP.
5454907ec88Schengguanghui  val traceParams: TraceParams = new TraceParams(
546725e8ddcSchengguanghui    TraceGroupNum  = 3,
547551cc696Schengguanghui    IaddrWidth     = GPAddrBitsSv48x4,
548725e8ddcSchengguanghui    PrivWidth      = 3,
549725e8ddcSchengguanghui    ItypeWidth     = 4,
550725e8ddcSchengguanghui    IlastsizeWidth = 1,
5514907ec88Schengguanghui  )
5522225d46eSJiawei Lin}
5532225d46eSJiawei Lin
5542225d46eSJiawei Lincase object DebugOptionsKey extends Field[DebugOptions]
5552225d46eSJiawei Lin
5562225d46eSJiawei Lincase class DebugOptions
5572225d46eSJiawei Lin(
5581545277aSYinan Xu  FPGAPlatform: Boolean = false,
5599eee369fSKamimiao  ResetGen: Boolean = false,
5601545277aSYinan Xu  EnableDifftest: Boolean = false,
561cbe9a847SYinan Xu  AlwaysBasicDiff: Boolean = true,
5621545277aSYinan Xu  EnableDebug: Boolean = false,
5632225d46eSJiawei Lin  EnablePerfDebug: Boolean = true,
5644ba1d457SKunlin You  PerfLevel: String = "VERBOSE",
565eb163ef0SHaojin Tang  UseDRAMSim: Boolean = false,
566047e34f9SMaxpicca-Li  EnableConstantin: Boolean = false,
56762129679Swakafa  EnableChiselDB: Boolean = false,
56862129679Swakafa  AlwaysBasicDB: Boolean = true,
569ec9e6512Swakafa  EnableRollingDB: Boolean = false
5702225d46eSJiawei Lin)
5712225d46eSJiawei Lin
5722225d46eSJiawei Lintrait HasXSParameter {
5732225d46eSJiawei Lin
5742225d46eSJiawei Lin  implicit val p: Parameters
5752225d46eSJiawei Lin
576ff74867bSYangyu Chen  def PAddrBits = p(SoCParamsKey).PAddrBits // PAddrBits is Phyical Memory addr bits
57745def856STang Haojin  def PmemRanges = p(SoCParamsKey).PmemRanges
5788882eb68SXin Tian  def KeyIDBits = p(CVMParamskey).KeyIDBits
5799c0fd28fSXuan Hu  final val PageOffsetWidth = 12
5808537b88aSTang Haojin  def NodeIDWidth = p(SoCParamsKey).NodeIDWidthList(p(CHIIssue)) // NodeID width among NoC
5812f30d658SYinan Xu
582ff74867bSYangyu Chen  def coreParams = p(XSCoreParamsKey)
583ff74867bSYangyu Chen  def env = p(DebugOptionsKey)
5842225d46eSJiawei Lin
5856cd53fdeSTang Haojin  def ISABase = coreParams.ISABase
5866cd53fdeSTang Haojin  def ISAExtensions = coreParams.ISAExtensions
587ff74867bSYangyu Chen  def XLEN = coreParams.XLEN
588ff74867bSYangyu Chen  def VLEN = coreParams.VLEN
589ff74867bSYangyu Chen  def ELEN = coreParams.ELEN
590ff74867bSYangyu Chen  def HSXLEN = coreParams.HSXLEN
5912225d46eSJiawei Lin  val minFLen = 32
5922225d46eSJiawei Lin  val fLen = 64
593ff74867bSYangyu Chen  def hartIdLen = p(MaxHartIdBits)
594ff74867bSYangyu Chen  val xLen = XLEN
5952225d46eSJiawei Lin
5968882eb68SXin Tian  def HasBitmapCheck = coreParams.HasBitmapCheck
5978882eb68SXin Tian  def HasBitmapCheckDefault = coreParams.HasBitmapCheckDefault
598ff74867bSYangyu Chen  def HasMExtension = coreParams.HasMExtension
599ff74867bSYangyu Chen  def HasCExtension = coreParams.HasCExtension
600ff74867bSYangyu Chen  def HasHExtension = coreParams.HasHExtension
6013ea4388cSHaoyuan Feng  def EnableSv48 = coreParams.EnableSv48
602ff74867bSYangyu Chen  def HasDiv = coreParams.HasDiv
603ff74867bSYangyu Chen  def HasIcache = coreParams.HasICache
604ff74867bSYangyu Chen  def HasDcache = coreParams.HasDCache
605ff74867bSYangyu Chen  def AddrBits = coreParams.AddrBits // AddrBits is used in some cases
606dd980d61SXu, Zefan  def PAddrBitsMax = coreParams.PAddrBitsMax
6070b1b8ed1SXiaokun-Pei  def GPAddrBitsSv39x4 = coreParams.GPAddrBitsSv39x4
6080b1b8ed1SXiaokun-Pei  def GPAddrBitsSv48x4 = coreParams.GPAddrBitsSv48x4
60997929664SXiaokun-Pei  def GPAddrBits = {
61097929664SXiaokun-Pei    if (EnableSv48)
61197929664SXiaokun-Pei      coreParams.GPAddrBitsSv48x4
61297929664SXiaokun-Pei    else
61397929664SXiaokun-Pei      coreParams.GPAddrBitsSv39x4
61497929664SXiaokun-Pei  }
615ff74867bSYangyu Chen  def VAddrBits = {
616d0de7e4aSpeixiaokun    if (HasHExtension) {
61797929664SXiaokun-Pei      if (EnableSv48)
61897929664SXiaokun-Pei        coreParams.GPAddrBitsSv48x4
61997929664SXiaokun-Pei      else
62097929664SXiaokun-Pei        coreParams.GPAddrBitsSv39x4
621d0de7e4aSpeixiaokun    } else {
62297929664SXiaokun-Pei      if (EnableSv48)
62397929664SXiaokun-Pei        coreParams.VAddrBitsSv48
62497929664SXiaokun-Pei      else
62597929664SXiaokun-Pei        coreParams.VAddrBitsSv39
626d0de7e4aSpeixiaokun    }
627d0de7e4aSpeixiaokun  } // VAddrBits is Virtual Memory addr bits
628d0de7e4aSpeixiaokun
62997929664SXiaokun-Pei  def VAddrMaxBits = {
63097929664SXiaokun-Pei    if(EnableSv48) {
63197929664SXiaokun-Pei      coreParams.VAddrBitsSv48 max coreParams.GPAddrBitsSv48x4
63297929664SXiaokun-Pei    } else {
63397929664SXiaokun-Pei      coreParams.VAddrBitsSv39 max coreParams.GPAddrBitsSv39x4
63497929664SXiaokun-Pei    }
63597929664SXiaokun-Pei  }
636237d4cfdSXuan Hu
637ff74867bSYangyu Chen  def AsidLength = coreParams.AsidLength
638ff74867bSYangyu Chen  def VmidLength = coreParams.VmidLength
639ff74867bSYangyu Chen  def ReSelectLen = coreParams.ReSelectLen
640ff74867bSYangyu Chen  def AddrBytes = AddrBits / 8 // unused
641ff74867bSYangyu Chen  def DataBits = XLEN
642ff74867bSYangyu Chen  def DataBytes = DataBits / 8
64338c29594Szhanglinjuan  def QuadWordBits = DataBits * 2
64438c29594Szhanglinjuan  def QuadWordBytes = QuadWordBits / 8
645ff74867bSYangyu Chen  def VDataBytes = VLEN / 8
646ff74867bSYangyu Chen  def HasFPU = coreParams.HasFPU
647ff74867bSYangyu Chen  def HasVPU = coreParams.HasVPU
648ff74867bSYangyu Chen  def HasCustomCSRCacheOp = coreParams.HasCustomCSRCacheOp
649ff74867bSYangyu Chen  def FetchWidth = coreParams.FetchWidth
650ff74867bSYangyu Chen  def PredictWidth = FetchWidth * (if (HasCExtension) 2 else 1)
651ff74867bSYangyu Chen  def EnableBPU = coreParams.EnableBPU
652ff74867bSYangyu Chen  def EnableBPD = coreParams.EnableBPD // enable backing predictor(like Tage) in BPUStage3
653ff74867bSYangyu Chen  def EnableRAS = coreParams.EnableRAS
654ff74867bSYangyu Chen  def EnableLB = coreParams.EnableLB
655ff74867bSYangyu Chen  def EnableLoop = coreParams.EnableLoop
656ff74867bSYangyu Chen  def EnableSC = coreParams.EnableSC
657ff74867bSYangyu Chen  def EnbaleTlbDebug = coreParams.EnbaleTlbDebug
658ff74867bSYangyu Chen  def HistoryLength = coreParams.HistoryLength
659ff74867bSYangyu Chen  def EnableGHistDiff = coreParams.EnableGHistDiff
660ff74867bSYangyu Chen  def EnableCommitGHistDiff = coreParams.EnableCommitGHistDiff
661ff74867bSYangyu Chen  def EnableClockGate = coreParams.EnableClockGate
662ff74867bSYangyu Chen  def UbtbGHRLength = coreParams.UbtbGHRLength
663ff74867bSYangyu Chen  def UbtbSize = coreParams.UbtbSize
664ff74867bSYangyu Chen  def EnableFauFTB = coreParams.EnableFauFTB
665ff74867bSYangyu Chen  def FtbSize = coreParams.FtbSize
666ff74867bSYangyu Chen  def FtbWays = coreParams.FtbWays
6675f89ba0bSEaston Man  def FtbTagLength = coreParams.FtbTagLength
668ff74867bSYangyu Chen  def RasSize = coreParams.RasSize
669ff74867bSYangyu Chen  def RasSpecSize = coreParams.RasSpecSize
670ff74867bSYangyu Chen  def RasCtrSize = coreParams.RasCtrSize
67116a1cc4bSzoujr
672bf358e08SLingrui98  def getBPDComponents(resp_in: BranchPredictionResp, p: Parameters) = {
673bf358e08SLingrui98    coreParams.branchPredictor(resp_in, p)
67416a1cc4bSzoujr  }
675ff74867bSYangyu Chen  def numBr = coreParams.numBr
676ff74867bSYangyu Chen  def TageTableInfos = coreParams.TageTableInfos
677ff74867bSYangyu Chen  def TageBanks = coreParams.numBr
678ff74867bSYangyu Chen  def SCNRows = coreParams.SCNRows
679ff74867bSYangyu Chen  def SCCtrBits = coreParams.SCCtrBits
680ff74867bSYangyu Chen  def SCHistLens = coreParams.SCHistLens
681ff74867bSYangyu Chen  def SCNTables = coreParams.SCNTables
682dd6c0695SLingrui98
683ff74867bSYangyu Chen  def SCTableInfos = Seq.fill(SCNTables)((SCNRows, SCCtrBits)) zip SCHistLens map {
68434ed6fbcSLingrui98    case ((n, cb), h) => (n, cb, h)
685dd6c0695SLingrui98  }
686ff74867bSYangyu Chen  def ITTageTableInfos = coreParams.ITTageTableInfos
687dd6c0695SLingrui98  type FoldedHistoryInfo = Tuple2[Int, Int]
688ff74867bSYangyu Chen  def foldedGHistInfos =
6894813e060SLingrui98    (TageTableInfos.map{ case (nRows, h, t) =>
690dd6c0695SLingrui98      if (h > 0)
6914813e060SLingrui98        Set((h, min(log2Ceil(nRows/numBr), h)), (h, min(h, t)), (h, min(h, t-1)))
692dd6c0695SLingrui98      else
693dd6c0695SLingrui98        Set[FoldedHistoryInfo]()
6944813e060SLingrui98    }.reduce(_++_).toSet ++
69534ed6fbcSLingrui98    SCTableInfos.map{ case (nRows, _, h) =>
696dd6c0695SLingrui98      if (h > 0)
697e992912cSLingrui98        Set((h, min(log2Ceil(nRows/TageBanks), h)))
698dd6c0695SLingrui98      else
699dd6c0695SLingrui98        Set[FoldedHistoryInfo]()
70034ed6fbcSLingrui98    }.reduce(_++_).toSet ++
701dd6c0695SLingrui98    ITTageTableInfos.map{ case (nRows, h, t) =>
702dd6c0695SLingrui98      if (h > 0)
703dd6c0695SLingrui98        Set((h, min(log2Ceil(nRows), h)), (h, min(h, t)), (h, min(h, t-1)))
704dd6c0695SLingrui98      else
705dd6c0695SLingrui98        Set[FoldedHistoryInfo]()
706527dc111SLingrui98    }.reduce(_++_) ++
707527dc111SLingrui98      Set[FoldedHistoryInfo]((UbtbGHRLength, log2Ceil(UbtbSize)))
708527dc111SLingrui98    ).toList
70916a1cc4bSzoujr
710c7fabd05SSteve Gou
711c7fabd05SSteve Gou
712ff74867bSYangyu Chen  def CacheLineSize = coreParams.CacheLineSize
713ff74867bSYangyu Chen  def CacheLineHalfWord = CacheLineSize / 16
714ff74867bSYangyu Chen  def ExtHistoryLength = HistoryLength + 64
715b92f8445Sssszwic  def ICacheForceMetaECCError = coreParams.ICacheForceMetaECCError
716b92f8445Sssszwic  def ICacheForceDataECCError = coreParams.ICacheForceDataECCError
717ff74867bSYangyu Chen  def IBufSize = coreParams.IBufSize
718ff74867bSYangyu Chen  def IBufNBank = coreParams.IBufNBank
719ff74867bSYangyu Chen  def backendParams: BackendParams = coreParams.backendParams
720ff74867bSYangyu Chen  def DecodeWidth = coreParams.DecodeWidth
721ff74867bSYangyu Chen  def RenameWidth = coreParams.RenameWidth
722ff74867bSYangyu Chen  def CommitWidth = coreParams.CommitWidth
723ff74867bSYangyu Chen  def RobCommitWidth = coreParams.RobCommitWidth
724ff74867bSYangyu Chen  def RabCommitWidth = coreParams.RabCommitWidth
725ff74867bSYangyu Chen  def MaxUopSize = coreParams.MaxUopSize
726ff74867bSYangyu Chen  def EnableRenameSnapshot = coreParams.EnableRenameSnapshot
727ff74867bSYangyu Chen  def RenameSnapshotNum = coreParams.RenameSnapshotNum
728ff74867bSYangyu Chen  def FtqSize = coreParams.FtqSize
729ff74867bSYangyu Chen  def EnableLoadFastWakeUp = coreParams.EnableLoadFastWakeUp
730ff74867bSYangyu Chen  def IntLogicRegs = coreParams.IntLogicRegs
731ff74867bSYangyu Chen  def FpLogicRegs = coreParams.FpLogicRegs
732ff74867bSYangyu Chen  def VecLogicRegs = coreParams.VecLogicRegs
733435f48a8Sxiaofeibao  def V0LogicRegs = coreParams.V0LogicRegs
734435f48a8Sxiaofeibao  def VlLogicRegs = coreParams.VlLogicRegs
735ad5c9e6eSJunxiong Ji  def MaxLogicRegs = Set(IntLogicRegs, FpLogicRegs, VecLogicRegs, V0LogicRegs, VlLogicRegs).max
736ad5c9e6eSJunxiong Ji  def LogicRegsWidth = log2Ceil(MaxLogicRegs)
7379c5a1080Sxiaofeibao  def V0_IDX = coreParams.V0_IDX
7389c5a1080Sxiaofeibao  def Vl_IDX = coreParams.Vl_IDX
739ff74867bSYangyu Chen  def IntPhyRegs = coreParams.intPreg.numEntries
74060f0c5aeSxiaofeibao  def FpPhyRegs = coreParams.fpPreg.numEntries
741ff74867bSYangyu Chen  def VfPhyRegs = coreParams.vfPreg.numEntries
7422aa3a761Ssinsanction  def V0PhyRegs = coreParams.v0Preg.numEntries
7432aa3a761Ssinsanction  def VlPhyRegs = coreParams.vlPreg.numEntries
744e43bb916SXuan Hu  def MaxPhyRegs = Seq(IntPhyRegs, FpPhyRegs, VfPhyRegs, V0PhyRegs, VlPhyRegs).max
745e43bb916SXuan Hu  def IntPhyRegIdxWidth = log2Up(IntPhyRegs)
746e43bb916SXuan Hu  def FpPhyRegIdxWidth = log2Up(FpPhyRegs)
747e43bb916SXuan Hu  def VfPhyRegIdxWidth = log2Up(VfPhyRegs)
748e43bb916SXuan Hu  def V0PhyRegIdxWidth = log2Up(V0PhyRegs)
749e43bb916SXuan Hu  def VlPhyRegIdxWidth = log2Up(VlPhyRegs)
750e43bb916SXuan Hu  def PhyRegIdxWidth = Seq(IntPhyRegIdxWidth, FpPhyRegIdxWidth, VfPhyRegIdxWidth, V0PhyRegIdxWidth, VlPhyRegIdxWidth).max
751ff74867bSYangyu Chen  def RobSize = coreParams.RobSize
752ff74867bSYangyu Chen  def RabSize = coreParams.RabSize
753ff74867bSYangyu Chen  def VTypeBufferSize = coreParams.VTypeBufferSize
754ae4984bfSsinsanction  def IntRegCacheSize = coreParams.IntRegCacheSize
755ae4984bfSsinsanction  def MemRegCacheSize = coreParams.MemRegCacheSize
756ae4984bfSsinsanction  def RegCacheSize = coreParams.RegCacheSize
757ae4984bfSsinsanction  def RegCacheIdxWidth = coreParams.RegCacheIdxWidth
7586dbb4e08SXuan Hu  /**
7596dbb4e08SXuan Hu   * the minimum element length of vector elements
7606dbb4e08SXuan Hu   */
761a4d1b2d1Sgood-circle  def minVecElen: Int = coreParams.minVecElen
7626dbb4e08SXuan Hu
7636dbb4e08SXuan Hu  /**
7646dbb4e08SXuan Hu   * the maximum number of elements in vector register
7656dbb4e08SXuan Hu   */
766a4d1b2d1Sgood-circle  def maxElemPerVreg: Int = coreParams.maxElemPerVreg
7676dbb4e08SXuan Hu
768ff74867bSYangyu Chen  def IntRefCounterWidth = log2Ceil(RobSize)
769914bbc86Sxiaofeibao-xjtu  def LSQEnqWidth = RenameWidth
770ff74867bSYangyu Chen  def LSQLdEnqWidth = LSQEnqWidth min backendParams.numLoadDp
771ff74867bSYangyu Chen  def LSQStEnqWidth = LSQEnqWidth min backendParams.numStoreDp
772ff74867bSYangyu Chen  def VirtualLoadQueueSize = coreParams.VirtualLoadQueueSize
773ff74867bSYangyu Chen  def LoadQueueRARSize = coreParams.LoadQueueRARSize
774ff74867bSYangyu Chen  def LoadQueueRAWSize = coreParams.LoadQueueRAWSize
775ff74867bSYangyu Chen  def RollbackGroupSize = coreParams.RollbackGroupSize
776ff74867bSYangyu Chen  def LoadQueueReplaySize = coreParams.LoadQueueReplaySize
777ff74867bSYangyu Chen  def LoadUncacheBufferSize = coreParams.LoadUncacheBufferSize
778ff74867bSYangyu Chen  def LoadQueueNWriteBanks = coreParams.LoadQueueNWriteBanks
779ff74867bSYangyu Chen  def StoreQueueSize = coreParams.StoreQueueSize
780a7904e27SAnzo  def StoreQueueForceWriteSbufferUpper = coreParams.StoreQueueSize - 4
781a7904e27SAnzo  def StoreQueueForceWriteSbufferLower = StoreQueueForceWriteSbufferUpper - 5
7827a9ea6c5SAnzooooo  def VirtualLoadQueueMaxStoreQueueSize = VirtualLoadQueueSize max StoreQueueSize
783ff74867bSYangyu Chen  def StoreQueueNWriteBanks = coreParams.StoreQueueNWriteBanks
784ff74867bSYangyu Chen  def StoreQueueForwardWithMask = coreParams.StoreQueueForwardWithMask
785ff74867bSYangyu Chen  def VlsQueueSize = coreParams.VlsQueueSize
7863b739f49SXuan Hu
787351e22f2SXuan Hu  def MemIQSizeMax = backendParams.memSchdParams.get.issueBlockParams.map(_.numEntries).max
788351e22f2SXuan Hu  def IQSizeMax = backendParams.allSchdParams.map(_.issueBlockParams.map(_.numEntries).max).max
789c7d010e5SXuan Hu
790ff74867bSYangyu Chen  def NumRedirect = backendParams.numRedirect
791ff74867bSYangyu Chen  def BackendRedirectNum = NumRedirect + 2 //2: ldReplay + Exception
792ff74867bSYangyu Chen  def FtqRedirectAheadNum = NumRedirect
79395a47398SGao-Zeyu  def IfuRedirectNum = coreParams.IfuRedirectNum
794ff74867bSYangyu Chen  def LoadPipelineWidth = coreParams.LoadPipelineWidth
795ff74867bSYangyu Chen  def StorePipelineWidth = coreParams.StorePipelineWidth
796ff74867bSYangyu Chen  def VecLoadPipelineWidth = coreParams.VecLoadPipelineWidth
797ff74867bSYangyu Chen  def VecStorePipelineWidth = coreParams.VecStorePipelineWidth
798ff74867bSYangyu Chen  def VecMemSrcInWidth = coreParams.VecMemSrcInWidth
799ff74867bSYangyu Chen  def VecMemInstWbWidth = coreParams.VecMemInstWbWidth
800ff74867bSYangyu Chen  def VecMemDispatchWidth = coreParams.VecMemDispatchWidth
801a4d1b2d1Sgood-circle  def VecMemDispatchMaxNumber = coreParams.VecMemDispatchMaxNumber
8029ff64fb6SAnzooooo  def VecMemUnitStrideMaxFlowNum = coreParams.VecMemUnitStrideMaxFlowNum
8039ff64fb6SAnzooooo  def VecMemLSQEnqIteratorNumberSeq = coreParams.VecMemLSQEnqIteratorNumberSeq
804ff74867bSYangyu Chen  def StoreBufferSize = coreParams.StoreBufferSize
805ff74867bSYangyu Chen  def StoreBufferThreshold = coreParams.StoreBufferThreshold
806ff74867bSYangyu Chen  def EnsbufferWidth = coreParams.EnsbufferWidth
807ff74867bSYangyu Chen  def LoadDependencyWidth = coreParams.LoadDependencyWidth
808a4d1b2d1Sgood-circle  def VlMergeBufferSize = coreParams.VlMergeBufferSize
809a4d1b2d1Sgood-circle  def VsMergeBufferSize = coreParams.VsMergeBufferSize
810a4d1b2d1Sgood-circle  def UopWritebackWidth = coreParams.UopWritebackWidth
811a4d1b2d1Sgood-circle  def VLUopWritebackWidth = coreParams.VLUopWritebackWidth
812a4d1b2d1Sgood-circle  def VSUopWritebackWidth = coreParams.VSUopWritebackWidth
813a4d1b2d1Sgood-circle  def VSegmentBufferSize = coreParams.VSegmentBufferSize
814df3b4b92SAnzooooo  def VFOFBufferSize = coreParams.VFOFBufferSize
815ff74867bSYangyu Chen  def UncacheBufferSize = coreParams.UncacheBufferSize
81674050fc0SYanqin Li  def UncacheBufferIndexWidth = log2Up(UncacheBufferSize)
817ff74867bSYangyu Chen  def EnableLoadToLoadForward = coreParams.EnableLoadToLoadForward
818ff74867bSYangyu Chen  def EnableFastForward = coreParams.EnableFastForward
819ff74867bSYangyu Chen  def EnableLdVioCheckAfterReset = coreParams.EnableLdVioCheckAfterReset
820ff74867bSYangyu Chen  def EnableSoftPrefetchAfterReset = coreParams.EnableSoftPrefetchAfterReset
821ff74867bSYangyu Chen  def EnableCacheErrorAfterReset = coreParams.EnableCacheErrorAfterReset
822ff74867bSYangyu Chen  def EnableAccurateLoadError = coreParams.EnableAccurateLoadError
823ff74867bSYangyu Chen  def EnableUncacheWriteOutstanding = coreParams.EnableUncacheWriteOutstanding
82441d8d239Shappy-lx  def EnableHardwareStoreMisalign = coreParams.EnableHardwareStoreMisalign
82541d8d239Shappy-lx  def EnableHardwareLoadMisalign = coreParams.EnableHardwareLoadMisalign
826ff74867bSYangyu Chen  def EnableStorePrefetchAtIssue = coreParams.EnableStorePrefetchAtIssue
827ff74867bSYangyu Chen  def EnableStorePrefetchAtCommit = coreParams.EnableStorePrefetchAtCommit
828ff74867bSYangyu Chen  def EnableAtCommitMissTrigger = coreParams.EnableAtCommitMissTrigger
829ff74867bSYangyu Chen  def EnableStorePrefetchSMS = coreParams.EnableStorePrefetchSMS
830ff74867bSYangyu Chen  def EnableStorePrefetchSPB = coreParams.EnableStorePrefetchSPB
831e3ed843cShappy-lx  def HasCMO = coreParams.HasCMO && p(EnableCHI)
8321d260098SXuan Hu  require(LoadPipelineWidth == backendParams.LdExuCnt, "LoadPipelineWidth must be equal exuParameters.LduCnt!")
8331d260098SXuan Hu  require(StorePipelineWidth == backendParams.StaCnt, "StorePipelineWidth must be equal exuParameters.StuCnt!")
834ff74867bSYangyu Chen  def Enable3Load3Store = (LoadPipelineWidth == 3 && StorePipelineWidth == 3)
835ff74867bSYangyu Chen  def asidLen = coreParams.MMUAsidLen
836ff74867bSYangyu Chen  def vmidLen = coreParams.MMUVmidLen
837ff74867bSYangyu Chen  def BTLBWidth = coreParams.LoadPipelineWidth + coreParams.StorePipelineWidth
838ff74867bSYangyu Chen  def refillBothTlb = coreParams.refillBothTlb
839ff74867bSYangyu Chen  def iwpuParam = coreParams.iwpuParameters
840ff74867bSYangyu Chen  def dwpuParam = coreParams.dwpuParameters
841ff74867bSYangyu Chen  def itlbParams = coreParams.itlbParameters
842ff74867bSYangyu Chen  def ldtlbParams = coreParams.ldtlbParameters
843ff74867bSYangyu Chen  def sttlbParams = coreParams.sttlbParameters
844ff74867bSYangyu Chen  def hytlbParams = coreParams.hytlbParameters
845ff74867bSYangyu Chen  def pftlbParams = coreParams.pftlbParameters
846ff74867bSYangyu Chen  def l2ToL1Params = coreParams.l2ToL1tlbParameters
847ff74867bSYangyu Chen  def btlbParams = coreParams.btlbParameters
848ff74867bSYangyu Chen  def l2tlbParams = coreParams.l2tlbParameters
849ff74867bSYangyu Chen  def NumPerfCounters = coreParams.NumPerfCounters
8502225d46eSJiawei Lin
851ff74867bSYangyu Chen  def instBytes = if (HasCExtension) 2 else 4
852ff74867bSYangyu Chen  def instOffsetBits = log2Ceil(instBytes)
8532225d46eSJiawei Lin
854ff74867bSYangyu Chen  def icacheParameters = coreParams.icacheParameters
855ff74867bSYangyu Chen  def dcacheParameters = coreParams.dcacheParametersOpt.getOrElse(DCacheParameters())
8562225d46eSJiawei Lin
857b899def8SWilliam Wang  // dcache block cacheline when lr for LRSCCycles - LRSCBackOff cycles
858b899def8SWilliam Wang  // for constrained LR/SC loop
859ff74867bSYangyu Chen  def LRSCCycles = 64
860b899def8SWilliam Wang  // for lr storm
861ff74867bSYangyu Chen  def LRSCBackOff = 8
8622225d46eSJiawei Lin
8632225d46eSJiawei Lin  // cache hierarchy configurations
864ff74867bSYangyu Chen  def l1BusDataWidth = 256
8652225d46eSJiawei Lin
866de169c67SWilliam Wang  // load violation predict
867ff74867bSYangyu Chen  def ResetTimeMax2Pow = 20 //1078576
868ff74867bSYangyu Chen  def ResetTimeMin2Pow = 10 //1024
869de169c67SWilliam Wang  // wait table parameters
870ff74867bSYangyu Chen  def WaitTableSize = 1024
871ff74867bSYangyu Chen  def MemPredPCWidth = log2Up(WaitTableSize)
872ff74867bSYangyu Chen  def LWTUse2BitCounter = true
873de169c67SWilliam Wang  // store set parameters
874ff74867bSYangyu Chen  def SSITSize = WaitTableSize
875ff74867bSYangyu Chen  def LFSTSize = 32
876ff74867bSYangyu Chen  def SSIDWidth = log2Up(LFSTSize)
877ff74867bSYangyu Chen  def LFSTWidth = 4
878ff74867bSYangyu Chen  def StoreSetEnable = true // LWT will be disabled if SS is enabled
879ff74867bSYangyu Chen  def LFSTEnable = true
880cc4fb544Ssfencevma
881ff74867bSYangyu Chen  def PCntIncrStep: Int = 6
8828bb30a57SJiru Sun  def numPCntHc: Int = 12
883ff74867bSYangyu Chen  def numPCntPtw: Int = 19
884cd365d4cSrvcoresjw
885ff74867bSYangyu Chen  def numCSRPCntFrontend = 8
886ff74867bSYangyu Chen  def numCSRPCntCtrl     = 8
887ff74867bSYangyu Chen  def numCSRPCntLsu      = 8
888ff74867bSYangyu Chen  def numCSRPCntHc       = 5
889ff74867bSYangyu Chen  def printEventCoding   = true
89085a8d7caSZehao Liu  def printCriticalError = false
89185a8d7caSZehao Liu  def maxCommitStuck = pow(2, 21).toInt
892f7af4c74Schengguanghui
893e43bb916SXuan Hu  // Vector load exception
894e43bb916SXuan Hu  def maxMergeNumPerCycle = 4
895e43bb916SXuan Hu
896f7af4c74Schengguanghui  // Parameters for Sdtrig extension
897ff74867bSYangyu Chen  protected def TriggerNum = 4
898ff74867bSYangyu Chen  protected def TriggerChainMaxLength = 2
89949162c9aSGuanghui Cheng
90049162c9aSGuanghui Cheng  // Parameters for Trace extension
9014907ec88Schengguanghui  def TraceGroupNum          = coreParams.traceParams.TraceGroupNum
9024907ec88Schengguanghui  def CauseWidth             = XLEN
903551cc696Schengguanghui  def TvalWidth              = coreParams.traceParams.IaddrWidth
904725e8ddcSchengguanghui  def PrivWidth              = coreParams.traceParams.PrivWidth
905551cc696Schengguanghui  def IaddrWidth             = coreParams.traceParams.IaddrWidth
906725e8ddcSchengguanghui  def ItypeWidth             = coreParams.traceParams.ItypeWidth
9074907ec88Schengguanghui  def IretireWidthInPipe     = log2Up(RenameWidth * 2)
9084907ec88Schengguanghui  def IretireWidthCompressed = log2Up(RenameWidth * CommitWidth * 2)
909725e8ddcSchengguanghui  def IlastsizeWidth         = coreParams.traceParams.IlastsizeWidth
9104b2c87baS梁森 Liang Sen
9114b2c87baS梁森 Liang Sen  def hasMbist               = coreParams.hasMbist
912*4c0658aeSTang Haojin
913*4c0658aeSTang Haojin  def wfiResume              = coreParams.wfiResume
914602aa9f1Scz4e  def hasSramCtl             = coreParams.hasSramCtl
915602aa9f1Scz4e  def hasSramTest            = hasMbist || hasSramCtl
9162225d46eSJiawei Lin}
917