xref: /XiangShan/src/main/scala/xiangshan/Parameters.scala (revision 4b2c87ba1d7965f6f2b0a396be707a6e2f6fb345)
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,
245b23df8f4Ssfencevma  EnableAccurateLoadError: Boolean = false,
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
357*4b2c87baS梁森 Liang Sen  softPTWDelay: Int = 1,
358*4b2c87baS梁森 Liang Sen  hasMbist:Boolean = false
3592225d46eSJiawei Lin){
3606cd53fdeSTang Haojin  def ISABase = "rv64i"
3616cd53fdeSTang Haojin  def ISAExtensions = Seq(
3626cd53fdeSTang Haojin    // single letter extensions, in canonical order
3636cd53fdeSTang Haojin    "i", "m", "a", "f", "d", "c", /* "b", */ "v", "h",
3646cd53fdeSTang Haojin    // multi-letter extensions, sorted alphanumerically
3652bff79a3STang Haojin    "sdtrig", "sha", "shcounterenw", "shgatpa", "shlcofideleg", "shtvala", "shvsatpa", "shvstvala",
3662bff79a3STang Haojin    "shvstvecd", "smaia", "smcsrind", "smdbltrp", "smmpm", "smnpm", "smrnmi", "smstateen",
3672bff79a3STang Haojin    "ss1p13", "ssaia", "ssccptr", "sscofpmf", "sscounterenw", "sscsrind", "ssdbltrp", "ssnpm",
3682bff79a3STang Haojin    "sspm", "ssstateen", "ssstrict", "sstc", "sstvala", "sstvecd", "ssu64xl", "supm", "sv39",
369b1d76493STang Haojin    "sv48", "svade", "svbare", "svinval", "svnapot", "svpbmt", "za64rs", "zacas", "zawrs", "zba",
370b1d76493STang Haojin    "zbb", "zbc", "zbkb", "zbkc", "zbkx", "zbs", "zcb", "zcmop", "zfa", "zfh", "zfhmin", "zic64b",
371b1d76493STang Haojin    "zicbom", "zicbop", "zicboz", "ziccamoa", "ziccif", "zicclsm", "ziccrse", "zicntr", "zicond",
372b1d76493STang Haojin    "zicsr", "zifencei", "zihintntl", "zihintpause", "zihpm", "zimop", "zkn", "zknd", "zkne", "zknh",
373b1d76493STang Haojin    "zksed", "zksh", "zkt", "zvbb", "zvfh", "zvfhmin", "zvkt", "zvl128b", "zvl32b", "zvl64b"
3746cd53fdeSTang Haojin  )
3756cd53fdeSTang Haojin
376b52d4755SXuan Hu  def vlWidth = log2Up(VLEN) + 1
377b52d4755SXuan Hu
3786dbb4e08SXuan Hu  /**
3796dbb4e08SXuan Hu   * the minimum element length of vector elements
3806dbb4e08SXuan Hu   */
3816dbb4e08SXuan Hu  val minVecElen: Int = 8
3826dbb4e08SXuan Hu
3836dbb4e08SXuan Hu  /**
3846dbb4e08SXuan Hu   * the maximum number of elements in vector register
3856dbb4e08SXuan Hu   */
3866dbb4e08SXuan Hu  val maxElemPerVreg: Int = VLEN / minVecElen
3876dbb4e08SXuan Hu
388c7fabd05SSteve Gou  val allHistLens = SCHistLens ++ ITTageTableInfos.map(_._2) ++ TageTableInfos.map(_._2) :+ UbtbGHRLength
389c7fabd05SSteve Gou  val HistoryLength = allHistLens.max + numBr * FtqSize + 9 // 256 for the predictor configs now
390c7fabd05SSteve Gou
391ae4984bfSsinsanction  val RegCacheSize = IntRegCacheSize + MemRegCacheSize
392ae4984bfSsinsanction  val RegCacheIdxWidth = log2Up(RegCacheSize)
393ae4984bfSsinsanction
39439c59369SXuan Hu  val intSchdParams = {
3953b739f49SXuan Hu    implicit val schdType: SchedulerType = IntScheduler()
3963b739f49SXuan Hu    SchdBlockParams(Seq(
3973b739f49SXuan Hu      IssueBlockParams(Seq(
3987556e9bdSxiaofeibao-xjtu        ExeUnitParams("ALU0", Seq(AluCfg, MulCfg, BkuCfg), Seq(IntWB(port = 0, 0)), Seq(Seq(IntRD(0, 0)), Seq(IntRD(1, 0))), true, 2),
399f803e5e9Ssinsanction        ExeUnitParams("BJU0", Seq(BrhCfg, JmpCfg), Seq(IntWB(port = 0, 1)), Seq(Seq(IntRD(6, 1)), Seq(IntRD(7, 1))), true, 2),
40028607074Ssinsanction      ), numEntries = IssueQueueSize, numEnq = 2, numComp = IssueQueueCompEntrySize),
401cde70b38SzhanglyGit      IssueBlockParams(Seq(
4027556e9bdSxiaofeibao-xjtu        ExeUnitParams("ALU1", Seq(AluCfg, MulCfg, BkuCfg), Seq(IntWB(port = 1, 0)), Seq(Seq(IntRD(2, 0)), Seq(IntRD(3, 0))), true, 2),
403f803e5e9Ssinsanction        ExeUnitParams("BJU1", Seq(BrhCfg, JmpCfg), Seq(IntWB(port = 1, 1)), Seq(Seq(IntRD(4, 1)), Seq(IntRD(5, 1))), true, 2),
40428607074Ssinsanction      ), numEntries = IssueQueueSize, numEnq = 2, numComp = IssueQueueCompEntrySize),
4053b739f49SXuan Hu      IssueBlockParams(Seq(
406ff3fcdf1Sxiaofeibao-xjtu        ExeUnitParams("ALU2", Seq(AluCfg), Seq(IntWB(port = 2, 0)), Seq(Seq(IntRD(4, 0)), Seq(IntRD(5, 0))), true, 2),
4078c6ac5ebSxiaofeibao        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)))),
40828607074Ssinsanction      ), numEntries = IssueQueueSize, numEnq = 2, numComp = IssueQueueCompEntrySize),
4093b739f49SXuan Hu      IssueBlockParams(Seq(
410ff3fcdf1Sxiaofeibao-xjtu        ExeUnitParams("ALU3", Seq(AluCfg), Seq(IntWB(port = 3, 0)), Seq(Seq(IntRD(6, 0)), Seq(IntRD(7, 0))), true, 2),
411f803e5e9Ssinsanction        ExeUnitParams("BJU3", Seq(CsrCfg, FenceCfg, DivCfg), Seq(IntWB(port = 4, 1)), Seq(Seq(IntRD(0, 1)), Seq(IntRD(1, 1)))),
41228607074Ssinsanction      ), numEntries = IssueQueueSize, numEnq = 2, numComp = IssueQueueCompEntrySize),
4133b739f49SXuan Hu    ),
4143b739f49SXuan Hu      numPregs = intPreg.numEntries,
4153b739f49SXuan Hu      numDeqOutside = 0,
4163b739f49SXuan Hu      schdType = schdType,
4173b739f49SXuan Hu      rfDataWidth = intPreg.dataCfg.dataWidth,
4183b739f49SXuan Hu    )
4193b739f49SXuan Hu  }
42060f0c5aeSxiaofeibao
42160f0c5aeSxiaofeibao  val fpSchdParams = {
42260f0c5aeSxiaofeibao    implicit val schdType: SchedulerType = FpScheduler()
42360f0c5aeSxiaofeibao    SchdBlockParams(Seq(
42460f0c5aeSxiaofeibao      IssueBlockParams(Seq(
425f62a71efSxiaofeibao        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)))),
4268c6ac5ebSxiaofeibao        ExeUnitParams("FEX1", Seq(FdivCfg), Seq(FpWB(port = 3, 1)), Seq(Seq(FpRD(2, 1)), Seq(FpRD(5, 1)))),
42749f2b250Sxiaofeibao      ), numEntries = 18, numEnq = 2, numComp = 14),
42860f0c5aeSxiaofeibao      IssueBlockParams(Seq(
4298c6ac5ebSxiaofeibao        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)))),
4308c6ac5ebSxiaofeibao        ExeUnitParams("FEX3", Seq(FdivCfg), Seq(FpWB(port = 4, 1)), Seq(Seq(FpRD(8, 1)), Seq(FpRD(9, 1)))),
43149f2b250Sxiaofeibao      ), numEntries = 18, numEnq = 2, numComp = 14),
43260f0c5aeSxiaofeibao      IssueBlockParams(Seq(
4338c6ac5ebSxiaofeibao        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)))),
43449f2b250Sxiaofeibao      ), numEntries = 18, numEnq = 2, numComp = 14),
43560f0c5aeSxiaofeibao    ),
43660f0c5aeSxiaofeibao      numPregs = fpPreg.numEntries,
43760f0c5aeSxiaofeibao      numDeqOutside = 0,
43860f0c5aeSxiaofeibao      schdType = schdType,
43960f0c5aeSxiaofeibao      rfDataWidth = fpPreg.dataCfg.dataWidth,
44060f0c5aeSxiaofeibao    )
44160f0c5aeSxiaofeibao  }
44260f0c5aeSxiaofeibao
44339c59369SXuan Hu  val vfSchdParams = {
4443b739f49SXuan Hu    implicit val schdType: SchedulerType = VfScheduler()
4453b739f49SXuan Hu    SchdBlockParams(Seq(
4463b739f49SXuan Hu      IssueBlockParams(Seq(
4470d50d631Sxiaofeibao        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)))),
4480d50d631Sxiaofeibao        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)))),
44949f2b250Sxiaofeibao      ), numEntries = 16, numEnq = 2, numComp = 12),
4503b739f49SXuan Hu      IssueBlockParams(Seq(
4510d50d631Sxiaofeibao        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)))),
452c22ffc80Sxiaofeibao        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)))),
45349f2b250Sxiaofeibao      ), numEntries = 16, numEnq = 2, numComp = 12),
4540d50d631Sxiaofeibao      IssueBlockParams(Seq(
4550d50d631Sxiaofeibao        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)))),
45649f2b250Sxiaofeibao      ), numEntries = 10, numEnq = 2, numComp = 6),
4573b739f49SXuan Hu    ),
4583b739f49SXuan Hu      numPregs = vfPreg.numEntries,
4593b739f49SXuan Hu      numDeqOutside = 0,
4603b739f49SXuan Hu      schdType = schdType,
4613b739f49SXuan Hu      rfDataWidth = vfPreg.dataCfg.dataWidth,
4623b739f49SXuan Hu    )
4633b739f49SXuan Hu  }
46439c59369SXuan Hu
46539c59369SXuan Hu  val memSchdParams = {
4663b739f49SXuan Hu    implicit val schdType: SchedulerType = MemScheduler()
4673b739f49SXuan Hu    val rfDataWidth = 64
4682225d46eSJiawei Lin
4693b739f49SXuan Hu    SchdBlockParams(Seq(
4703b739f49SXuan Hu      IssueBlockParams(Seq(
471f803e5e9Ssinsanction        ExeUnitParams("STA0", Seq(StaCfg, MouCfg), Seq(FakeIntWB()), Seq(Seq(IntRD(7, 2)))),
47249f2b250Sxiaofeibao      ), numEntries = 16, numEnq = 2, numComp = 12),
473b133b458SXuan Hu      IssueBlockParams(Seq(
474f803e5e9Ssinsanction        ExeUnitParams("STA1", Seq(StaCfg, MouCfg), Seq(FakeIntWB()), Seq(Seq(IntRD(6, 2)))),
47549f2b250Sxiaofeibao      ), numEntries = 16, numEnq = 2, numComp = 12),
476202674aeSHaojin Tang      IssueBlockParams(Seq(
4778c6ac5ebSxiaofeibao        ExeUnitParams("LDU0", Seq(LduCfg), Seq(IntWB(5, 0), FpWB(3, 0)), Seq(Seq(IntRD(8, 0))), true, 2),
47849f2b250Sxiaofeibao      ), numEntries = 16, numEnq = 2, numComp = 12),
4793b739f49SXuan Hu      IssueBlockParams(Seq(
4808c6ac5ebSxiaofeibao        ExeUnitParams("LDU1", Seq(LduCfg), Seq(IntWB(6, 0), FpWB(4, 0)), Seq(Seq(IntRD(9, 0))), true, 2),
48149f2b250Sxiaofeibao      ), numEntries = 16, numEnq = 2, numComp = 12),
482e77d3114SHaojin Tang      IssueBlockParams(Seq(
4838c6ac5ebSxiaofeibao        ExeUnitParams("LDU2", Seq(LduCfg), Seq(IntWB(7, 0), FpWB(5, 0)), Seq(Seq(IntRD(10, 0))), true, 2),
48449f2b250Sxiaofeibao      ), numEntries = 16, numEnq = 2, numComp = 12),
485a81cda24Ssfencevma      IssueBlockParams(Seq(
486df3b4b92SAnzooooo        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)))),
48749f2b250Sxiaofeibao      ), numEntries = 16, numEnq = 2, numComp = 12),
4883da89fc0Sxiaofeibao      IssueBlockParams(Seq(
489df3b4b92SAnzooooo        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)))),
49049f2b250Sxiaofeibao      ), numEntries = 16, numEnq = 2, numComp = 12),
491ecfc6f16SXuan Hu      IssueBlockParams(Seq(
4928c6ac5ebSxiaofeibao        ExeUnitParams("STD0", Seq(StdCfg, MoudCfg), Seq(), Seq(Seq(IntRD(5, 2), FpRD(9, 0)))),
49349f2b250Sxiaofeibao      ), numEntries = 16, numEnq = 2, numComp = 12),
49427811ea4SXuan Hu      IssueBlockParams(Seq(
4958c6ac5ebSxiaofeibao        ExeUnitParams("STD1", Seq(StdCfg, MoudCfg), Seq(), Seq(Seq(IntRD(3, 2), FpRD(10, 0)))),
49649f2b250Sxiaofeibao      ), numEntries = 16, numEnq = 2, numComp = 12),
4973b739f49SXuan Hu    ),
498141a6449SXuan Hu      numPregs = intPreg.numEntries max vfPreg.numEntries,
4993b739f49SXuan Hu      numDeqOutside = 0,
5003b739f49SXuan Hu      schdType = schdType,
5013b739f49SXuan Hu      rfDataWidth = rfDataWidth,
5023b739f49SXuan Hu    )
5033b739f49SXuan Hu  }
5042225d46eSJiawei Lin
505bf35baadSXuan Hu  def PregIdxWidthMax = intPreg.addrWidth max vfPreg.addrWidth
506bf35baadSXuan Hu
507bf35baadSXuan Hu  def iqWakeUpParams = {
508bf35baadSXuan Hu    Seq(
509c0b91ca1SHaojin Tang      WakeUpConfig(
5102142592bSxiaofeibao-xjtu        Seq("ALU0", "ALU1", "ALU2", "ALU3", "LDU0", "LDU1", "LDU2") ->
5112142592bSxiaofeibao-xjtu        Seq("ALU0", "BJU0", "ALU1", "BJU1", "ALU2", "BJU2", "ALU3", "BJU3", "LDU0", "LDU1", "LDU2", "STA0", "STA1", "STD0", "STD1")
512c0b91ca1SHaojin Tang      ),
5130966699fSxiaofeibao-xjtu      // TODO: add load -> fp slow wakeup
514b67f36d0Sxiaofeibao-xjtu      WakeUpConfig(
5158c6ac5ebSxiaofeibao        Seq("FEX0", "FEX2", "FEX4") ->
5168c6ac5ebSxiaofeibao        Seq("FEX0", "FEX1", "FEX2", "FEX3", "FEX4")
51731c5c732Sxiaofeibao      ),
518c0b91ca1SHaojin Tang    ).flatten
519bf35baadSXuan Hu  }
520bf35baadSXuan Hu
5215edcc45fSHaojin Tang  def fakeIntPreg = FakeIntPregParams(intPreg.numEntries, intPreg.numRead, intPreg.numWrite)
5225edcc45fSHaojin Tang
5230c7ebb58Sxiaofeibao-xjtu  val backendParams: BackendParams = backend.BackendParams(
524bf35baadSXuan Hu    Map(
5253b739f49SXuan Hu      IntScheduler() -> intSchdParams,
52660f0c5aeSxiaofeibao      FpScheduler() -> fpSchdParams,
5273b739f49SXuan Hu      VfScheduler() -> vfSchdParams,
5283b739f49SXuan Hu      MemScheduler() -> memSchdParams,
529bf35baadSXuan Hu    ),
530bf35baadSXuan Hu    Seq(
5313b739f49SXuan Hu      intPreg,
53260f0c5aeSxiaofeibao      fpPreg,
5333b739f49SXuan Hu      vfPreg,
5342aa3a761Ssinsanction      v0Preg,
5352aa3a761Ssinsanction      vlPreg,
5365edcc45fSHaojin Tang      fakeIntPreg
537bf35baadSXuan Hu    ),
538bf35baadSXuan Hu    iqWakeUpParams,
539bf35baadSXuan Hu  )
54049162c9aSGuanghui Cheng
54149162c9aSGuanghui Cheng  // Parameters for trace extension.
54249162c9aSGuanghui Cheng  // Trace parameters is useful for XSTOP.
5434907ec88Schengguanghui  val traceParams: TraceParams = new TraceParams(
544725e8ddcSchengguanghui    TraceGroupNum  = 3,
545551cc696Schengguanghui    IaddrWidth     = GPAddrBitsSv48x4,
546725e8ddcSchengguanghui    PrivWidth      = 3,
547725e8ddcSchengguanghui    ItypeWidth     = 4,
548725e8ddcSchengguanghui    IlastsizeWidth = 1,
5494907ec88Schengguanghui  )
5502225d46eSJiawei Lin}
5512225d46eSJiawei Lin
5522225d46eSJiawei Lincase object DebugOptionsKey extends Field[DebugOptions]
5532225d46eSJiawei Lin
5542225d46eSJiawei Lincase class DebugOptions
5552225d46eSJiawei Lin(
5561545277aSYinan Xu  FPGAPlatform: Boolean = false,
5579eee369fSKamimiao  ResetGen: Boolean = false,
5581545277aSYinan Xu  EnableDifftest: Boolean = false,
559cbe9a847SYinan Xu  AlwaysBasicDiff: Boolean = true,
5601545277aSYinan Xu  EnableDebug: Boolean = false,
5612225d46eSJiawei Lin  EnablePerfDebug: Boolean = true,
5624ba1d457SKunlin You  PerfLevel: String = "VERBOSE",
563eb163ef0SHaojin Tang  UseDRAMSim: Boolean = false,
564047e34f9SMaxpicca-Li  EnableConstantin: Boolean = false,
56562129679Swakafa  EnableChiselDB: Boolean = false,
56662129679Swakafa  AlwaysBasicDB: Boolean = true,
567ec9e6512Swakafa  EnableRollingDB: Boolean = false
5682225d46eSJiawei Lin)
5692225d46eSJiawei Lin
5702225d46eSJiawei Lintrait HasXSParameter {
5712225d46eSJiawei Lin
5722225d46eSJiawei Lin  implicit val p: Parameters
5732225d46eSJiawei Lin
574ff74867bSYangyu Chen  def PAddrBits = p(SoCParamsKey).PAddrBits // PAddrBits is Phyical Memory addr bits
57545def856STang Haojin  def PmemRanges = p(SoCParamsKey).PmemRanges
5768882eb68SXin Tian  def KeyIDBits = p(CVMParamskey).KeyIDBits
5779c0fd28fSXuan Hu  final val PageOffsetWidth = 12
5788537b88aSTang Haojin  def NodeIDWidth = p(SoCParamsKey).NodeIDWidthList(p(CHIIssue)) // NodeID width among NoC
5792f30d658SYinan Xu
580ff74867bSYangyu Chen  def coreParams = p(XSCoreParamsKey)
581ff74867bSYangyu Chen  def env = p(DebugOptionsKey)
5822225d46eSJiawei Lin
5836cd53fdeSTang Haojin  def ISABase = coreParams.ISABase
5846cd53fdeSTang Haojin  def ISAExtensions = coreParams.ISAExtensions
585ff74867bSYangyu Chen  def XLEN = coreParams.XLEN
586ff74867bSYangyu Chen  def VLEN = coreParams.VLEN
587ff74867bSYangyu Chen  def ELEN = coreParams.ELEN
588ff74867bSYangyu Chen  def HSXLEN = coreParams.HSXLEN
5892225d46eSJiawei Lin  val minFLen = 32
5902225d46eSJiawei Lin  val fLen = 64
591ff74867bSYangyu Chen  def hartIdLen = p(MaxHartIdBits)
592ff74867bSYangyu Chen  val xLen = XLEN
5932225d46eSJiawei Lin
5948882eb68SXin Tian  def HasBitmapCheck = coreParams.HasBitmapCheck
5958882eb68SXin Tian  def HasBitmapCheckDefault = coreParams.HasBitmapCheckDefault
596ff74867bSYangyu Chen  def HasMExtension = coreParams.HasMExtension
597ff74867bSYangyu Chen  def HasCExtension = coreParams.HasCExtension
598ff74867bSYangyu Chen  def HasHExtension = coreParams.HasHExtension
5993ea4388cSHaoyuan Feng  def EnableSv48 = coreParams.EnableSv48
600ff74867bSYangyu Chen  def HasDiv = coreParams.HasDiv
601ff74867bSYangyu Chen  def HasIcache = coreParams.HasICache
602ff74867bSYangyu Chen  def HasDcache = coreParams.HasDCache
603ff74867bSYangyu Chen  def AddrBits = coreParams.AddrBits // AddrBits is used in some cases
604dd980d61SXu, Zefan  def PAddrBitsMax = coreParams.PAddrBitsMax
6050b1b8ed1SXiaokun-Pei  def GPAddrBitsSv39x4 = coreParams.GPAddrBitsSv39x4
6060b1b8ed1SXiaokun-Pei  def GPAddrBitsSv48x4 = coreParams.GPAddrBitsSv48x4
60797929664SXiaokun-Pei  def GPAddrBits = {
60897929664SXiaokun-Pei    if (EnableSv48)
60997929664SXiaokun-Pei      coreParams.GPAddrBitsSv48x4
61097929664SXiaokun-Pei    else
61197929664SXiaokun-Pei      coreParams.GPAddrBitsSv39x4
61297929664SXiaokun-Pei  }
613ff74867bSYangyu Chen  def VAddrBits = {
614d0de7e4aSpeixiaokun    if (HasHExtension) {
61597929664SXiaokun-Pei      if (EnableSv48)
61697929664SXiaokun-Pei        coreParams.GPAddrBitsSv48x4
61797929664SXiaokun-Pei      else
61897929664SXiaokun-Pei        coreParams.GPAddrBitsSv39x4
619d0de7e4aSpeixiaokun    } else {
62097929664SXiaokun-Pei      if (EnableSv48)
62197929664SXiaokun-Pei        coreParams.VAddrBitsSv48
62297929664SXiaokun-Pei      else
62397929664SXiaokun-Pei        coreParams.VAddrBitsSv39
624d0de7e4aSpeixiaokun    }
625d0de7e4aSpeixiaokun  } // VAddrBits is Virtual Memory addr bits
626d0de7e4aSpeixiaokun
62797929664SXiaokun-Pei  def VAddrMaxBits = {
62897929664SXiaokun-Pei    if(EnableSv48) {
62997929664SXiaokun-Pei      coreParams.VAddrBitsSv48 max coreParams.GPAddrBitsSv48x4
63097929664SXiaokun-Pei    } else {
63197929664SXiaokun-Pei      coreParams.VAddrBitsSv39 max coreParams.GPAddrBitsSv39x4
63297929664SXiaokun-Pei    }
63397929664SXiaokun-Pei  }
634237d4cfdSXuan Hu
635ff74867bSYangyu Chen  def AsidLength = coreParams.AsidLength
636ff74867bSYangyu Chen  def VmidLength = coreParams.VmidLength
637ff74867bSYangyu Chen  def ReSelectLen = coreParams.ReSelectLen
638ff74867bSYangyu Chen  def AddrBytes = AddrBits / 8 // unused
639ff74867bSYangyu Chen  def DataBits = XLEN
640ff74867bSYangyu Chen  def DataBytes = DataBits / 8
64138c29594Szhanglinjuan  def QuadWordBits = DataBits * 2
64238c29594Szhanglinjuan  def QuadWordBytes = QuadWordBits / 8
643ff74867bSYangyu Chen  def VDataBytes = VLEN / 8
644ff74867bSYangyu Chen  def HasFPU = coreParams.HasFPU
645ff74867bSYangyu Chen  def HasVPU = coreParams.HasVPU
646ff74867bSYangyu Chen  def HasCustomCSRCacheOp = coreParams.HasCustomCSRCacheOp
647ff74867bSYangyu Chen  def FetchWidth = coreParams.FetchWidth
648ff74867bSYangyu Chen  def PredictWidth = FetchWidth * (if (HasCExtension) 2 else 1)
649ff74867bSYangyu Chen  def EnableBPU = coreParams.EnableBPU
650ff74867bSYangyu Chen  def EnableBPD = coreParams.EnableBPD // enable backing predictor(like Tage) in BPUStage3
651ff74867bSYangyu Chen  def EnableRAS = coreParams.EnableRAS
652ff74867bSYangyu Chen  def EnableLB = coreParams.EnableLB
653ff74867bSYangyu Chen  def EnableLoop = coreParams.EnableLoop
654ff74867bSYangyu Chen  def EnableSC = coreParams.EnableSC
655ff74867bSYangyu Chen  def EnbaleTlbDebug = coreParams.EnbaleTlbDebug
656ff74867bSYangyu Chen  def HistoryLength = coreParams.HistoryLength
657ff74867bSYangyu Chen  def EnableGHistDiff = coreParams.EnableGHistDiff
658ff74867bSYangyu Chen  def EnableCommitGHistDiff = coreParams.EnableCommitGHistDiff
659ff74867bSYangyu Chen  def EnableClockGate = coreParams.EnableClockGate
660ff74867bSYangyu Chen  def UbtbGHRLength = coreParams.UbtbGHRLength
661ff74867bSYangyu Chen  def UbtbSize = coreParams.UbtbSize
662ff74867bSYangyu Chen  def EnableFauFTB = coreParams.EnableFauFTB
663ff74867bSYangyu Chen  def FtbSize = coreParams.FtbSize
664ff74867bSYangyu Chen  def FtbWays = coreParams.FtbWays
6655f89ba0bSEaston Man  def FtbTagLength = coreParams.FtbTagLength
666ff74867bSYangyu Chen  def RasSize = coreParams.RasSize
667ff74867bSYangyu Chen  def RasSpecSize = coreParams.RasSpecSize
668ff74867bSYangyu Chen  def RasCtrSize = coreParams.RasCtrSize
66916a1cc4bSzoujr
670bf358e08SLingrui98  def getBPDComponents(resp_in: BranchPredictionResp, p: Parameters) = {
671bf358e08SLingrui98    coreParams.branchPredictor(resp_in, p)
67216a1cc4bSzoujr  }
673ff74867bSYangyu Chen  def numBr = coreParams.numBr
674ff74867bSYangyu Chen  def TageTableInfos = coreParams.TageTableInfos
675ff74867bSYangyu Chen  def TageBanks = coreParams.numBr
676ff74867bSYangyu Chen  def SCNRows = coreParams.SCNRows
677ff74867bSYangyu Chen  def SCCtrBits = coreParams.SCCtrBits
678ff74867bSYangyu Chen  def SCHistLens = coreParams.SCHistLens
679ff74867bSYangyu Chen  def SCNTables = coreParams.SCNTables
680dd6c0695SLingrui98
681ff74867bSYangyu Chen  def SCTableInfos = Seq.fill(SCNTables)((SCNRows, SCCtrBits)) zip SCHistLens map {
68234ed6fbcSLingrui98    case ((n, cb), h) => (n, cb, h)
683dd6c0695SLingrui98  }
684ff74867bSYangyu Chen  def ITTageTableInfos = coreParams.ITTageTableInfos
685dd6c0695SLingrui98  type FoldedHistoryInfo = Tuple2[Int, Int]
686ff74867bSYangyu Chen  def foldedGHistInfos =
6874813e060SLingrui98    (TageTableInfos.map{ case (nRows, h, t) =>
688dd6c0695SLingrui98      if (h > 0)
6894813e060SLingrui98        Set((h, min(log2Ceil(nRows/numBr), h)), (h, min(h, t)), (h, min(h, t-1)))
690dd6c0695SLingrui98      else
691dd6c0695SLingrui98        Set[FoldedHistoryInfo]()
6924813e060SLingrui98    }.reduce(_++_).toSet ++
69334ed6fbcSLingrui98    SCTableInfos.map{ case (nRows, _, h) =>
694dd6c0695SLingrui98      if (h > 0)
695e992912cSLingrui98        Set((h, min(log2Ceil(nRows/TageBanks), h)))
696dd6c0695SLingrui98      else
697dd6c0695SLingrui98        Set[FoldedHistoryInfo]()
69834ed6fbcSLingrui98    }.reduce(_++_).toSet ++
699dd6c0695SLingrui98    ITTageTableInfos.map{ case (nRows, h, t) =>
700dd6c0695SLingrui98      if (h > 0)
701dd6c0695SLingrui98        Set((h, min(log2Ceil(nRows), h)), (h, min(h, t)), (h, min(h, t-1)))
702dd6c0695SLingrui98      else
703dd6c0695SLingrui98        Set[FoldedHistoryInfo]()
704527dc111SLingrui98    }.reduce(_++_) ++
705527dc111SLingrui98      Set[FoldedHistoryInfo]((UbtbGHRLength, log2Ceil(UbtbSize)))
706527dc111SLingrui98    ).toList
70716a1cc4bSzoujr
708c7fabd05SSteve Gou
709c7fabd05SSteve Gou
710ff74867bSYangyu Chen  def CacheLineSize = coreParams.CacheLineSize
711ff74867bSYangyu Chen  def CacheLineHalfWord = CacheLineSize / 16
712ff74867bSYangyu Chen  def ExtHistoryLength = HistoryLength + 64
713b92f8445Sssszwic  def ICacheForceMetaECCError = coreParams.ICacheForceMetaECCError
714b92f8445Sssszwic  def ICacheForceDataECCError = coreParams.ICacheForceDataECCError
715ff74867bSYangyu Chen  def IBufSize = coreParams.IBufSize
716ff74867bSYangyu Chen  def IBufNBank = coreParams.IBufNBank
717ff74867bSYangyu Chen  def backendParams: BackendParams = coreParams.backendParams
718ff74867bSYangyu Chen  def DecodeWidth = coreParams.DecodeWidth
719ff74867bSYangyu Chen  def RenameWidth = coreParams.RenameWidth
720ff74867bSYangyu Chen  def CommitWidth = coreParams.CommitWidth
721ff74867bSYangyu Chen  def RobCommitWidth = coreParams.RobCommitWidth
722ff74867bSYangyu Chen  def RabCommitWidth = coreParams.RabCommitWidth
723ff74867bSYangyu Chen  def MaxUopSize = coreParams.MaxUopSize
724ff74867bSYangyu Chen  def EnableRenameSnapshot = coreParams.EnableRenameSnapshot
725ff74867bSYangyu Chen  def RenameSnapshotNum = coreParams.RenameSnapshotNum
726ff74867bSYangyu Chen  def FtqSize = coreParams.FtqSize
727ff74867bSYangyu Chen  def EnableLoadFastWakeUp = coreParams.EnableLoadFastWakeUp
728ff74867bSYangyu Chen  def IntLogicRegs = coreParams.IntLogicRegs
729ff74867bSYangyu Chen  def FpLogicRegs = coreParams.FpLogicRegs
730ff74867bSYangyu Chen  def VecLogicRegs = coreParams.VecLogicRegs
731435f48a8Sxiaofeibao  def V0LogicRegs = coreParams.V0LogicRegs
732435f48a8Sxiaofeibao  def VlLogicRegs = coreParams.VlLogicRegs
733ad5c9e6eSJunxiong Ji  def MaxLogicRegs = Set(IntLogicRegs, FpLogicRegs, VecLogicRegs, V0LogicRegs, VlLogicRegs).max
734ad5c9e6eSJunxiong Ji  def LogicRegsWidth = log2Ceil(MaxLogicRegs)
7359c5a1080Sxiaofeibao  def V0_IDX = coreParams.V0_IDX
7369c5a1080Sxiaofeibao  def Vl_IDX = coreParams.Vl_IDX
737ff74867bSYangyu Chen  def IntPhyRegs = coreParams.intPreg.numEntries
73860f0c5aeSxiaofeibao  def FpPhyRegs = coreParams.fpPreg.numEntries
739ff74867bSYangyu Chen  def VfPhyRegs = coreParams.vfPreg.numEntries
7402aa3a761Ssinsanction  def V0PhyRegs = coreParams.v0Preg.numEntries
7412aa3a761Ssinsanction  def VlPhyRegs = coreParams.vlPreg.numEntries
742e43bb916SXuan Hu  def MaxPhyRegs = Seq(IntPhyRegs, FpPhyRegs, VfPhyRegs, V0PhyRegs, VlPhyRegs).max
743e43bb916SXuan Hu  def IntPhyRegIdxWidth = log2Up(IntPhyRegs)
744e43bb916SXuan Hu  def FpPhyRegIdxWidth = log2Up(FpPhyRegs)
745e43bb916SXuan Hu  def VfPhyRegIdxWidth = log2Up(VfPhyRegs)
746e43bb916SXuan Hu  def V0PhyRegIdxWidth = log2Up(V0PhyRegs)
747e43bb916SXuan Hu  def VlPhyRegIdxWidth = log2Up(VlPhyRegs)
748e43bb916SXuan Hu  def PhyRegIdxWidth = Seq(IntPhyRegIdxWidth, FpPhyRegIdxWidth, VfPhyRegIdxWidth, V0PhyRegIdxWidth, VlPhyRegIdxWidth).max
749ff74867bSYangyu Chen  def RobSize = coreParams.RobSize
750ff74867bSYangyu Chen  def RabSize = coreParams.RabSize
751ff74867bSYangyu Chen  def VTypeBufferSize = coreParams.VTypeBufferSize
752ae4984bfSsinsanction  def IntRegCacheSize = coreParams.IntRegCacheSize
753ae4984bfSsinsanction  def MemRegCacheSize = coreParams.MemRegCacheSize
754ae4984bfSsinsanction  def RegCacheSize = coreParams.RegCacheSize
755ae4984bfSsinsanction  def RegCacheIdxWidth = coreParams.RegCacheIdxWidth
7566dbb4e08SXuan Hu  /**
7576dbb4e08SXuan Hu   * the minimum element length of vector elements
7586dbb4e08SXuan Hu   */
759a4d1b2d1Sgood-circle  def minVecElen: Int = coreParams.minVecElen
7606dbb4e08SXuan Hu
7616dbb4e08SXuan Hu  /**
7626dbb4e08SXuan Hu   * the maximum number of elements in vector register
7636dbb4e08SXuan Hu   */
764a4d1b2d1Sgood-circle  def maxElemPerVreg: Int = coreParams.maxElemPerVreg
7656dbb4e08SXuan Hu
766ff74867bSYangyu Chen  def IntRefCounterWidth = log2Ceil(RobSize)
767914bbc86Sxiaofeibao-xjtu  def LSQEnqWidth = RenameWidth
768ff74867bSYangyu Chen  def LSQLdEnqWidth = LSQEnqWidth min backendParams.numLoadDp
769ff74867bSYangyu Chen  def LSQStEnqWidth = LSQEnqWidth min backendParams.numStoreDp
770ff74867bSYangyu Chen  def VirtualLoadQueueSize = coreParams.VirtualLoadQueueSize
771ff74867bSYangyu Chen  def LoadQueueRARSize = coreParams.LoadQueueRARSize
772ff74867bSYangyu Chen  def LoadQueueRAWSize = coreParams.LoadQueueRAWSize
773ff74867bSYangyu Chen  def RollbackGroupSize = coreParams.RollbackGroupSize
774ff74867bSYangyu Chen  def LoadQueueReplaySize = coreParams.LoadQueueReplaySize
775ff74867bSYangyu Chen  def LoadUncacheBufferSize = coreParams.LoadUncacheBufferSize
776ff74867bSYangyu Chen  def LoadQueueNWriteBanks = coreParams.LoadQueueNWriteBanks
777ff74867bSYangyu Chen  def StoreQueueSize = coreParams.StoreQueueSize
778a7904e27SAnzo  def StoreQueueForceWriteSbufferUpper = coreParams.StoreQueueSize - 4
779a7904e27SAnzo  def StoreQueueForceWriteSbufferLower = StoreQueueForceWriteSbufferUpper - 5
7807a9ea6c5SAnzooooo  def VirtualLoadQueueMaxStoreQueueSize = VirtualLoadQueueSize max StoreQueueSize
781ff74867bSYangyu Chen  def StoreQueueNWriteBanks = coreParams.StoreQueueNWriteBanks
782ff74867bSYangyu Chen  def StoreQueueForwardWithMask = coreParams.StoreQueueForwardWithMask
783ff74867bSYangyu Chen  def VlsQueueSize = coreParams.VlsQueueSize
7843b739f49SXuan Hu
785351e22f2SXuan Hu  def MemIQSizeMax = backendParams.memSchdParams.get.issueBlockParams.map(_.numEntries).max
786351e22f2SXuan Hu  def IQSizeMax = backendParams.allSchdParams.map(_.issueBlockParams.map(_.numEntries).max).max
787c7d010e5SXuan Hu
788ff74867bSYangyu Chen  def NumRedirect = backendParams.numRedirect
789ff74867bSYangyu Chen  def BackendRedirectNum = NumRedirect + 2 //2: ldReplay + Exception
790ff74867bSYangyu Chen  def FtqRedirectAheadNum = NumRedirect
79195a47398SGao-Zeyu  def IfuRedirectNum = coreParams.IfuRedirectNum
792ff74867bSYangyu Chen  def LoadPipelineWidth = coreParams.LoadPipelineWidth
793ff74867bSYangyu Chen  def StorePipelineWidth = coreParams.StorePipelineWidth
794ff74867bSYangyu Chen  def VecLoadPipelineWidth = coreParams.VecLoadPipelineWidth
795ff74867bSYangyu Chen  def VecStorePipelineWidth = coreParams.VecStorePipelineWidth
796ff74867bSYangyu Chen  def VecMemSrcInWidth = coreParams.VecMemSrcInWidth
797ff74867bSYangyu Chen  def VecMemInstWbWidth = coreParams.VecMemInstWbWidth
798ff74867bSYangyu Chen  def VecMemDispatchWidth = coreParams.VecMemDispatchWidth
799a4d1b2d1Sgood-circle  def VecMemDispatchMaxNumber = coreParams.VecMemDispatchMaxNumber
8009ff64fb6SAnzooooo  def VecMemUnitStrideMaxFlowNum = coreParams.VecMemUnitStrideMaxFlowNum
8019ff64fb6SAnzooooo  def VecMemLSQEnqIteratorNumberSeq = coreParams.VecMemLSQEnqIteratorNumberSeq
802ff74867bSYangyu Chen  def StoreBufferSize = coreParams.StoreBufferSize
803ff74867bSYangyu Chen  def StoreBufferThreshold = coreParams.StoreBufferThreshold
804ff74867bSYangyu Chen  def EnsbufferWidth = coreParams.EnsbufferWidth
805ff74867bSYangyu Chen  def LoadDependencyWidth = coreParams.LoadDependencyWidth
806a4d1b2d1Sgood-circle  def VlMergeBufferSize = coreParams.VlMergeBufferSize
807a4d1b2d1Sgood-circle  def VsMergeBufferSize = coreParams.VsMergeBufferSize
808a4d1b2d1Sgood-circle  def UopWritebackWidth = coreParams.UopWritebackWidth
809a4d1b2d1Sgood-circle  def VLUopWritebackWidth = coreParams.VLUopWritebackWidth
810a4d1b2d1Sgood-circle  def VSUopWritebackWidth = coreParams.VSUopWritebackWidth
811a4d1b2d1Sgood-circle  def VSegmentBufferSize = coreParams.VSegmentBufferSize
812df3b4b92SAnzooooo  def VFOFBufferSize = coreParams.VFOFBufferSize
813ff74867bSYangyu Chen  def UncacheBufferSize = coreParams.UncacheBufferSize
81474050fc0SYanqin Li  def UncacheBufferIndexWidth = log2Up(UncacheBufferSize)
815ff74867bSYangyu Chen  def EnableLoadToLoadForward = coreParams.EnableLoadToLoadForward
816ff74867bSYangyu Chen  def EnableFastForward = coreParams.EnableFastForward
817ff74867bSYangyu Chen  def EnableLdVioCheckAfterReset = coreParams.EnableLdVioCheckAfterReset
818ff74867bSYangyu Chen  def EnableSoftPrefetchAfterReset = coreParams.EnableSoftPrefetchAfterReset
819ff74867bSYangyu Chen  def EnableCacheErrorAfterReset = coreParams.EnableCacheErrorAfterReset
820ff74867bSYangyu Chen  def EnableAccurateLoadError = coreParams.EnableAccurateLoadError
821ff74867bSYangyu Chen  def EnableUncacheWriteOutstanding = coreParams.EnableUncacheWriteOutstanding
82241d8d239Shappy-lx  def EnableHardwareStoreMisalign = coreParams.EnableHardwareStoreMisalign
82341d8d239Shappy-lx  def EnableHardwareLoadMisalign = coreParams.EnableHardwareLoadMisalign
824ff74867bSYangyu Chen  def EnableStorePrefetchAtIssue = coreParams.EnableStorePrefetchAtIssue
825ff74867bSYangyu Chen  def EnableStorePrefetchAtCommit = coreParams.EnableStorePrefetchAtCommit
826ff74867bSYangyu Chen  def EnableAtCommitMissTrigger = coreParams.EnableAtCommitMissTrigger
827ff74867bSYangyu Chen  def EnableStorePrefetchSMS = coreParams.EnableStorePrefetchSMS
828ff74867bSYangyu Chen  def EnableStorePrefetchSPB = coreParams.EnableStorePrefetchSPB
829e3ed843cShappy-lx  def HasCMO = coreParams.HasCMO && p(EnableCHI)
8301d260098SXuan Hu  require(LoadPipelineWidth == backendParams.LdExuCnt, "LoadPipelineWidth must be equal exuParameters.LduCnt!")
8311d260098SXuan Hu  require(StorePipelineWidth == backendParams.StaCnt, "StorePipelineWidth must be equal exuParameters.StuCnt!")
832ff74867bSYangyu Chen  def Enable3Load3Store = (LoadPipelineWidth == 3 && StorePipelineWidth == 3)
833ff74867bSYangyu Chen  def asidLen = coreParams.MMUAsidLen
834ff74867bSYangyu Chen  def vmidLen = coreParams.MMUVmidLen
835ff74867bSYangyu Chen  def BTLBWidth = coreParams.LoadPipelineWidth + coreParams.StorePipelineWidth
836ff74867bSYangyu Chen  def refillBothTlb = coreParams.refillBothTlb
837ff74867bSYangyu Chen  def iwpuParam = coreParams.iwpuParameters
838ff74867bSYangyu Chen  def dwpuParam = coreParams.dwpuParameters
839ff74867bSYangyu Chen  def itlbParams = coreParams.itlbParameters
840ff74867bSYangyu Chen  def ldtlbParams = coreParams.ldtlbParameters
841ff74867bSYangyu Chen  def sttlbParams = coreParams.sttlbParameters
842ff74867bSYangyu Chen  def hytlbParams = coreParams.hytlbParameters
843ff74867bSYangyu Chen  def pftlbParams = coreParams.pftlbParameters
844ff74867bSYangyu Chen  def l2ToL1Params = coreParams.l2ToL1tlbParameters
845ff74867bSYangyu Chen  def btlbParams = coreParams.btlbParameters
846ff74867bSYangyu Chen  def l2tlbParams = coreParams.l2tlbParameters
847ff74867bSYangyu Chen  def NumPerfCounters = coreParams.NumPerfCounters
8482225d46eSJiawei Lin
849ff74867bSYangyu Chen  def instBytes = if (HasCExtension) 2 else 4
850ff74867bSYangyu Chen  def instOffsetBits = log2Ceil(instBytes)
8512225d46eSJiawei Lin
852ff74867bSYangyu Chen  def icacheParameters = coreParams.icacheParameters
853ff74867bSYangyu Chen  def dcacheParameters = coreParams.dcacheParametersOpt.getOrElse(DCacheParameters())
8542225d46eSJiawei Lin
855b899def8SWilliam Wang  // dcache block cacheline when lr for LRSCCycles - LRSCBackOff cycles
856b899def8SWilliam Wang  // for constrained LR/SC loop
857ff74867bSYangyu Chen  def LRSCCycles = 64
858b899def8SWilliam Wang  // for lr storm
859ff74867bSYangyu Chen  def LRSCBackOff = 8
8602225d46eSJiawei Lin
8612225d46eSJiawei Lin  // cache hierarchy configurations
862ff74867bSYangyu Chen  def l1BusDataWidth = 256
8632225d46eSJiawei Lin
864de169c67SWilliam Wang  // load violation predict
865ff74867bSYangyu Chen  def ResetTimeMax2Pow = 20 //1078576
866ff74867bSYangyu Chen  def ResetTimeMin2Pow = 10 //1024
867de169c67SWilliam Wang  // wait table parameters
868ff74867bSYangyu Chen  def WaitTableSize = 1024
869ff74867bSYangyu Chen  def MemPredPCWidth = log2Up(WaitTableSize)
870ff74867bSYangyu Chen  def LWTUse2BitCounter = true
871de169c67SWilliam Wang  // store set parameters
872ff74867bSYangyu Chen  def SSITSize = WaitTableSize
873ff74867bSYangyu Chen  def LFSTSize = 32
874ff74867bSYangyu Chen  def SSIDWidth = log2Up(LFSTSize)
875ff74867bSYangyu Chen  def LFSTWidth = 4
876ff74867bSYangyu Chen  def StoreSetEnable = true // LWT will be disabled if SS is enabled
877ff74867bSYangyu Chen  def LFSTEnable = true
878cc4fb544Ssfencevma
879ff74867bSYangyu Chen  def PCntIncrStep: Int = 6
8808bb30a57SJiru Sun  def numPCntHc: Int = 12
881ff74867bSYangyu Chen  def numPCntPtw: Int = 19
882cd365d4cSrvcoresjw
883ff74867bSYangyu Chen  def numCSRPCntFrontend = 8
884ff74867bSYangyu Chen  def numCSRPCntCtrl     = 8
885ff74867bSYangyu Chen  def numCSRPCntLsu      = 8
886ff74867bSYangyu Chen  def numCSRPCntHc       = 5
887ff74867bSYangyu Chen  def printEventCoding   = true
88885a8d7caSZehao Liu  def printCriticalError = false
88985a8d7caSZehao Liu  def maxCommitStuck = pow(2, 21).toInt
890f7af4c74Schengguanghui
891e43bb916SXuan Hu  // Vector load exception
892e43bb916SXuan Hu  def maxMergeNumPerCycle = 4
893e43bb916SXuan Hu
894f7af4c74Schengguanghui  // Parameters for Sdtrig extension
895ff74867bSYangyu Chen  protected def TriggerNum = 4
896ff74867bSYangyu Chen  protected def TriggerChainMaxLength = 2
89749162c9aSGuanghui Cheng
89849162c9aSGuanghui Cheng  // Parameters for Trace extension
8994907ec88Schengguanghui  def TraceGroupNum          = coreParams.traceParams.TraceGroupNum
9004907ec88Schengguanghui  def CauseWidth             = XLEN
901551cc696Schengguanghui  def TvalWidth              = coreParams.traceParams.IaddrWidth
902725e8ddcSchengguanghui  def PrivWidth              = coreParams.traceParams.PrivWidth
903551cc696Schengguanghui  def IaddrWidth             = coreParams.traceParams.IaddrWidth
904725e8ddcSchengguanghui  def ItypeWidth             = coreParams.traceParams.ItypeWidth
9054907ec88Schengguanghui  def IretireWidthInPipe     = log2Up(RenameWidth * 2)
9064907ec88Schengguanghui  def IretireWidthCompressed = log2Up(RenameWidth * CommitWidth * 2)
907725e8ddcSchengguanghui  def IlastsizeWidth         = coreParams.traceParams.IlastsizeWidth
908*4b2c87baS梁森 Liang Sen
909*4b2c87baS梁森 Liang Sen  def hasMbist               = coreParams.hasMbist
9102225d46eSJiawei Lin}
911