xref: /XiangShan/src/main/scala/xiangshan/Parameters.scala (revision 1e7e38e2498daaff4a2534de61a8b52f72d039be)
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,
23620a5248fSzhanglinjuan  // ==============================
23737225120Ssfencevma  UncacheBufferSize: Int = 4,
238cd2ff98bShappy-lx  EnableLoadToLoadForward: Boolean = false,
23914a67055Ssfencevma  EnableFastForward: Boolean = true,
240beabc72dSWilliam Wang  EnableLdVioCheckAfterReset: Boolean = true,
241026615fcSWilliam Wang  EnableSoftPrefetchAfterReset: Boolean = true,
242026615fcSWilliam Wang  EnableCacheErrorAfterReset: Boolean = true,
243eaf14747Scz4e  EnableAccurateLoadError: Boolean = true,
244e32bafbaSbugGenerator  EnableUncacheWriteOutstanding: Boolean = false,
24541d8d239Shappy-lx  EnableHardwareStoreMisalign: Boolean = true,
24641d8d239Shappy-lx  EnableHardwareLoadMisalign: Boolean = true,
2470d32f713Shappy-lx  EnableStorePrefetchAtIssue: Boolean = false,
2480d32f713Shappy-lx  EnableStorePrefetchAtCommit: Boolean = false,
2490d32f713Shappy-lx  EnableAtCommitMissTrigger: Boolean = true,
2500d32f713Shappy-lx  EnableStorePrefetchSMS: Boolean = false,
2510d32f713Shappy-lx  EnableStorePrefetchSPB: Boolean = false,
252e3ed843cShappy-lx  HasCMO: Boolean = true,
25345f497a4Shappy-lx  MMUAsidLen: Int = 16, // max is 16, 0 is not supported now
254d0de7e4aSpeixiaokun  MMUVmidLen: Int = 14,
25562dfd6c3Shappy-lx  ReSelectLen: Int = 7, // load replay queue replay select counter len
25604665835SMaxpicca-Li  iwpuParameters: WPUParameters = WPUParameters(
25704665835SMaxpicca-Li    enWPU = false,
25804665835SMaxpicca-Li    algoName = "mmru",
25904665835SMaxpicca-Li    isICache = true,
26004665835SMaxpicca-Li  ),
26104665835SMaxpicca-Li  dwpuParameters: WPUParameters = WPUParameters(
26204665835SMaxpicca-Li    enWPU = false,
26304665835SMaxpicca-Li    algoName = "mmru",
26404665835SMaxpicca-Li    enCfPred = false,
26504665835SMaxpicca-Li    isICache = false,
26604665835SMaxpicca-Li  ),
267a0301c0dSLemover  itlbParameters: TLBParameters = TLBParameters(
268a0301c0dSLemover    name = "itlb",
269a0301c0dSLemover    fetchi = true,
270a0301c0dSLemover    useDmode = false,
271f9ac118cSHaoyuan Feng    NWays = 48,
272a0301c0dSLemover  ),
273b92f8445Sssszwic  itlbPortNum: Int = ICacheParameters().PortNumber + 1,
274b92f8445Sssszwic  ipmpPortNum: Int = 2 * ICacheParameters().PortNumber + 1,
275a0301c0dSLemover  ldtlbParameters: TLBParameters = TLBParameters(
276a0301c0dSLemover    name = "ldtlb",
277f9ac118cSHaoyuan Feng    NWays = 48,
27853b8f1a7SLemover    outReplace = false,
2795b7ef044SLemover    partialStaticPMP = true,
280f1fe8698SLemover    outsideRecvFlush = true,
2813ea4388cSHaoyuan Feng    saveLevel = false,
28226af847eSgood-circle    lgMaxSize = 4
283a0301c0dSLemover  ),
284a0301c0dSLemover  sttlbParameters: TLBParameters = TLBParameters(
285a0301c0dSLemover    name = "sttlb",
286f9ac118cSHaoyuan Feng    NWays = 48,
28753b8f1a7SLemover    outReplace = false,
2885b7ef044SLemover    partialStaticPMP = true,
289f1fe8698SLemover    outsideRecvFlush = true,
2903ea4388cSHaoyuan Feng    saveLevel = false,
29126af847eSgood-circle    lgMaxSize = 4
292a0301c0dSLemover  ),
2938f1fa9b1Ssfencevma  hytlbParameters: TLBParameters = TLBParameters(
2948f1fa9b1Ssfencevma    name = "hytlb",
295531c40faSsinceforYy    NWays = 48,
296531c40faSsinceforYy    outReplace = false,
2978f1fa9b1Ssfencevma    partialStaticPMP = true,
2988f1fa9b1Ssfencevma    outsideRecvFlush = true,
2993ea4388cSHaoyuan Feng    saveLevel = false,
30026af847eSgood-circle    lgMaxSize = 4
3018f1fa9b1Ssfencevma  ),
302c8309e8aSHaoyuan Feng  pftlbParameters: TLBParameters = TLBParameters(
303c8309e8aSHaoyuan Feng    name = "pftlb",
304f9ac118cSHaoyuan Feng    NWays = 48,
305c8309e8aSHaoyuan Feng    outReplace = false,
306c8309e8aSHaoyuan Feng    partialStaticPMP = true,
307c8309e8aSHaoyuan Feng    outsideRecvFlush = true,
3083ea4388cSHaoyuan Feng    saveLevel = false,
30926af847eSgood-circle    lgMaxSize = 4
310c8309e8aSHaoyuan Feng  ),
311aee6a6d1SYanqin Li  l2ToL1tlbParameters: TLBParameters = TLBParameters(
312aee6a6d1SYanqin Li    name = "l2tlb",
313aee6a6d1SYanqin Li    NWays = 48,
314aee6a6d1SYanqin Li    outReplace = false,
315aee6a6d1SYanqin Li    partialStaticPMP = true,
316aee6a6d1SYanqin Li    outsideRecvFlush = true,
3173ea4388cSHaoyuan Feng    saveLevel = false
318aee6a6d1SYanqin Li  ),
319bf08468cSLemover  refillBothTlb: Boolean = false,
320a0301c0dSLemover  btlbParameters: TLBParameters = TLBParameters(
321a0301c0dSLemover    name = "btlb",
322f9ac118cSHaoyuan Feng    NWays = 48,
323a0301c0dSLemover  ),
3245854c1edSLemover  l2tlbParameters: L2TLBParameters = L2TLBParameters(),
3252225d46eSJiawei Lin  NumPerfCounters: Int = 16,
32605f23f57SWilliam Wang  icacheParameters: ICacheParameters = ICacheParameters(
32705f23f57SWilliam Wang    tagECC = Some("parity"),
32805f23f57SWilliam Wang    dataECC = Some("parity"),
32905f23f57SWilliam Wang    replacer = Some("setplru"),
3306c106319Sxu_zh    cacheCtrlAddressOpt = Some(AddressSet(0x38022080, 0x7f))
33105f23f57SWilliam Wang  ),
3324f94c0c6SJiawei Lin  dcacheParametersOpt: Option[DCacheParameters] = Some(DCacheParameters(
33305f23f57SWilliam Wang    tagECC = Some("secded"),
33405f23f57SWilliam Wang    dataECC = Some("secded"),
33505f23f57SWilliam Wang    replacer = Some("setplru"),
33605f23f57SWilliam Wang    nMissEntries = 16,
337300ded30SWilliam Wang    nProbeEntries = 8,
3380d32f713Shappy-lx    nReleaseEntries = 18,
3390d32f713Shappy-lx    nMaxPrefetchEntry = 6,
340908b24d8Scz4e    enableTagEcc = true,
34172dab974Scz4e    enableDataEcc = true,
34272dab974Scz4e    cacheCtrlAddressOpt = Some(AddressSet(0x38022000, 0x7f))
3434f94c0c6SJiawei Lin  )),
34415ee59e4Swakafa  L2CacheParamsOpt: Option[L2Param] = Some(L2Param(
345a1ea7f76SJiawei Lin    name = "l2",
346a1ea7f76SJiawei Lin    ways = 8,
347a1ea7f76SJiawei Lin    sets = 1024, // default 512KB L2
3481fb367eaSChen Xi    prefetch = Seq(coupledL2.prefetch.PrefetchReceiverParams(), coupledL2.prefetch.BOPParameters(),
3491fb367eaSChen Xi      coupledL2.prefetch.TPParameters()),
3504f94c0c6SJiawei Lin  )),
351d5be5d19SJiawei Lin  L2NBanks: Int = 1,
352a1ea7f76SJiawei Lin  usePTWRepeater: Boolean = false,
353e0374b1cSHaoyuan Feng  softTLB: Boolean = false, // dpi-c l1tlb debug only
354e0374b1cSHaoyuan Feng  softPTW: Boolean = false, // dpi-c l2tlb debug only
3554b2c87baS梁森 Liang Sen  softPTWDelay: Int = 1,
356602aa9f1Scz4e  hasMbist: Boolean = false,
3574c0658aeSTang Haojin  wfiResume: Boolean = true,
358602aa9f1Scz4e  hasSramCtl: 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
7744a02bbdaSAnzo  val RAWlgSelectGroupSize = log2Ceil(RollbackGroupSize)
7754a02bbdaSAnzo  val RAWTotalDelayCycles = scala.math.ceil(log2Ceil(LoadQueueRAWSize).toFloat / RAWlgSelectGroupSize).toInt + 1 - 2
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
814ff74867bSYangyu Chen  def UncacheBufferSize = coreParams.UncacheBufferSize
81574050fc0SYanqin Li  def UncacheBufferIndexWidth = log2Up(UncacheBufferSize)
816ff74867bSYangyu Chen  def EnableLoadToLoadForward = coreParams.EnableLoadToLoadForward
817ff74867bSYangyu Chen  def EnableFastForward = coreParams.EnableFastForward
818ff74867bSYangyu Chen  def EnableLdVioCheckAfterReset = coreParams.EnableLdVioCheckAfterReset
819ff74867bSYangyu Chen  def EnableSoftPrefetchAfterReset = coreParams.EnableSoftPrefetchAfterReset
820ff74867bSYangyu Chen  def EnableCacheErrorAfterReset = coreParams.EnableCacheErrorAfterReset
821ff74867bSYangyu Chen  def EnableAccurateLoadError = coreParams.EnableAccurateLoadError
822ff74867bSYangyu Chen  def EnableUncacheWriteOutstanding = coreParams.EnableUncacheWriteOutstanding
82341d8d239Shappy-lx  def EnableHardwareStoreMisalign = coreParams.EnableHardwareStoreMisalign
82441d8d239Shappy-lx  def EnableHardwareLoadMisalign = coreParams.EnableHardwareLoadMisalign
825ff74867bSYangyu Chen  def EnableStorePrefetchAtIssue = coreParams.EnableStorePrefetchAtIssue
826ff74867bSYangyu Chen  def EnableStorePrefetchAtCommit = coreParams.EnableStorePrefetchAtCommit
827ff74867bSYangyu Chen  def EnableAtCommitMissTrigger = coreParams.EnableAtCommitMissTrigger
828ff74867bSYangyu Chen  def EnableStorePrefetchSMS = coreParams.EnableStorePrefetchSMS
829ff74867bSYangyu Chen  def EnableStorePrefetchSPB = coreParams.EnableStorePrefetchSPB
830e3ed843cShappy-lx  def HasCMO = coreParams.HasCMO && p(EnableCHI)
8311d260098SXuan Hu  require(LoadPipelineWidth == backendParams.LdExuCnt, "LoadPipelineWidth must be equal exuParameters.LduCnt!")
8321d260098SXuan Hu  require(StorePipelineWidth == backendParams.StaCnt, "StorePipelineWidth must be equal exuParameters.StuCnt!")
833ff74867bSYangyu Chen  def Enable3Load3Store = (LoadPipelineWidth == 3 && StorePipelineWidth == 3)
834ff74867bSYangyu Chen  def asidLen = coreParams.MMUAsidLen
835ff74867bSYangyu Chen  def vmidLen = coreParams.MMUVmidLen
836ff74867bSYangyu Chen  def BTLBWidth = coreParams.LoadPipelineWidth + coreParams.StorePipelineWidth
837ff74867bSYangyu Chen  def refillBothTlb = coreParams.refillBothTlb
838ff74867bSYangyu Chen  def iwpuParam = coreParams.iwpuParameters
839ff74867bSYangyu Chen  def dwpuParam = coreParams.dwpuParameters
840ff74867bSYangyu Chen  def itlbParams = coreParams.itlbParameters
841ff74867bSYangyu Chen  def ldtlbParams = coreParams.ldtlbParameters
842ff74867bSYangyu Chen  def sttlbParams = coreParams.sttlbParameters
843ff74867bSYangyu Chen  def hytlbParams = coreParams.hytlbParameters
844ff74867bSYangyu Chen  def pftlbParams = coreParams.pftlbParameters
845ff74867bSYangyu Chen  def l2ToL1Params = coreParams.l2ToL1tlbParameters
846ff74867bSYangyu Chen  def btlbParams = coreParams.btlbParameters
847ff74867bSYangyu Chen  def l2tlbParams = coreParams.l2tlbParameters
848ff74867bSYangyu Chen  def NumPerfCounters = coreParams.NumPerfCounters
8492225d46eSJiawei Lin
850ff74867bSYangyu Chen  def instBytes = if (HasCExtension) 2 else 4
851ff74867bSYangyu Chen  def instOffsetBits = log2Ceil(instBytes)
8522225d46eSJiawei Lin
853ff74867bSYangyu Chen  def icacheParameters = coreParams.icacheParameters
854ff74867bSYangyu Chen  def dcacheParameters = coreParams.dcacheParametersOpt.getOrElse(DCacheParameters())
8552225d46eSJiawei Lin
856b899def8SWilliam Wang  // dcache block cacheline when lr for LRSCCycles - LRSCBackOff cycles
857b899def8SWilliam Wang  // for constrained LR/SC loop
858ff74867bSYangyu Chen  def LRSCCycles = 64
859b899def8SWilliam Wang  // for lr storm
860ff74867bSYangyu Chen  def LRSCBackOff = 8
8612225d46eSJiawei Lin
8622225d46eSJiawei Lin  // cache hierarchy configurations
863ff74867bSYangyu Chen  def l1BusDataWidth = 256
8642225d46eSJiawei Lin
865de169c67SWilliam Wang  // load violation predict
866ff74867bSYangyu Chen  def ResetTimeMax2Pow = 20 //1078576
867ff74867bSYangyu Chen  def ResetTimeMin2Pow = 10 //1024
868de169c67SWilliam Wang  // wait table parameters
869ff74867bSYangyu Chen  def WaitTableSize = 1024
870ff74867bSYangyu Chen  def MemPredPCWidth = log2Up(WaitTableSize)
871ff74867bSYangyu Chen  def LWTUse2BitCounter = true
872de169c67SWilliam Wang  // store set parameters
873ff74867bSYangyu Chen  def SSITSize = WaitTableSize
874ff74867bSYangyu Chen  def LFSTSize = 32
875ff74867bSYangyu Chen  def SSIDWidth = log2Up(LFSTSize)
876ff74867bSYangyu Chen  def LFSTWidth = 4
877ff74867bSYangyu Chen  def StoreSetEnable = true // LWT will be disabled if SS is enabled
878ff74867bSYangyu Chen  def LFSTEnable = true
879cc4fb544Ssfencevma
880ff74867bSYangyu Chen  def PCntIncrStep: Int = 6
8818bb30a57SJiru Sun  def numPCntHc: Int = 12
882ff74867bSYangyu Chen  def numPCntPtw: Int = 19
883cd365d4cSrvcoresjw
884ff74867bSYangyu Chen  def numCSRPCntFrontend = 8
885ff74867bSYangyu Chen  def numCSRPCntCtrl     = 8
886ff74867bSYangyu Chen  def numCSRPCntLsu      = 8
887ff74867bSYangyu Chen  def numCSRPCntHc       = 5
888ff74867bSYangyu Chen  def printEventCoding   = true
88985a8d7caSZehao Liu  def printCriticalError = false
89085a8d7caSZehao Liu  def maxCommitStuck = pow(2, 21).toInt
891f7af4c74Schengguanghui
892e43bb916SXuan Hu  // Vector load exception
893e43bb916SXuan Hu  def maxMergeNumPerCycle = 4
894e43bb916SXuan Hu
895f7af4c74Schengguanghui  // Parameters for Sdtrig extension
896ff74867bSYangyu Chen  protected def TriggerNum = 4
897ff74867bSYangyu Chen  protected def TriggerChainMaxLength = 2
89849162c9aSGuanghui Cheng
89949162c9aSGuanghui Cheng  // Parameters for Trace extension
9004907ec88Schengguanghui  def TraceGroupNum          = coreParams.traceParams.TraceGroupNum
9014907ec88Schengguanghui  def CauseWidth             = XLEN
902551cc696Schengguanghui  def TvalWidth              = coreParams.traceParams.IaddrWidth
903725e8ddcSchengguanghui  def PrivWidth              = coreParams.traceParams.PrivWidth
904551cc696Schengguanghui  def IaddrWidth             = coreParams.traceParams.IaddrWidth
905725e8ddcSchengguanghui  def ItypeWidth             = coreParams.traceParams.ItypeWidth
906*a25f1ac9SGuanghui Cheng  def IretireWidthInPipe     = log2Up(RenameWidth * 2 + 1)
907*a25f1ac9SGuanghui Cheng  def IretireWidthCompressed = log2Up(RenameWidth * CommitWidth * 2 + 1)
908725e8ddcSchengguanghui  def IlastsizeWidth         = coreParams.traceParams.IlastsizeWidth
9094b2c87baS梁森 Liang Sen
9104b2c87baS梁森 Liang Sen  def hasMbist               = coreParams.hasMbist
9114c0658aeSTang Haojin
9124c0658aeSTang Haojin  def wfiResume              = coreParams.wfiResume
913602aa9f1Scz4e  def hasSramCtl             = coreParams.hasSramCtl
91430f35717Scz4e  def hasDFT            = hasMbist || hasSramCtl
9152225d46eSJiawei Lin}
916