xref: /XiangShan/src/main/scala/xiangshan/Parameters.scala (revision b1d76493aed704cb1fa24f01f29fdd12cca821b0)
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
24730cfbc0SXuan Huimport xiangshan.backend.datapath.RdConfig._
25730cfbc0SXuan Huimport xiangshan.backend.datapath.WbConfig._
263b739f49SXuan Huimport xiangshan.backend.dispatch.DispatchParameters
27730cfbc0SXuan Huimport xiangshan.backend.exu.ExeUnitParams
28730cfbc0SXuan Huimport xiangshan.backend.fu.FuConfig._
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,
642225d46eSJiawei Lin  HasMExtension: Boolean = true,
652225d46eSJiawei Lin  HasCExtension: Boolean = true,
66d0de7e4aSpeixiaokun  HasHExtension: Boolean = true,
672225d46eSJiawei Lin  HasDiv: Boolean = true,
682225d46eSJiawei Lin  HasICache: Boolean = true,
692225d46eSJiawei Lin  HasDCache: Boolean = true,
702225d46eSJiawei Lin  AddrBits: Int = 64,
71dd980d61SXu, Zefan  PAddrBitsMax: Int = 56,   // The bits of physical address from Sv39/Sv48/Sv57 virtual address translation.
7297929664SXiaokun-Pei  VAddrBitsSv39: Int = 39,
7397929664SXiaokun-Pei  GPAddrBitsSv39x4: Int = 41,
7497929664SXiaokun-Pei  VAddrBitsSv48: Int = 48,
7597929664SXiaokun-Pei  GPAddrBitsSv48x4: Int = 50,
762225d46eSJiawei Lin  HasFPU: Boolean = true,
7735d1557aSZiyue Zhang  HasVPU: Boolean = true,
78ad3ba452Szhanglinjuan  HasCustomCSRCacheOp: Boolean = true,
792225d46eSJiawei Lin  FetchWidth: Int = 8,
8045f497a4Shappy-lx  AsidLength: Int = 16,
81d0de7e4aSpeixiaokun  VmidLength: Int = 14,
822225d46eSJiawei Lin  EnableBPU: Boolean = true,
832225d46eSJiawei Lin  EnableBPD: Boolean = true,
842225d46eSJiawei Lin  EnableRAS: Boolean = true,
852225d46eSJiawei Lin  EnableLB: Boolean = false,
862225d46eSJiawei Lin  EnableLoop: Boolean = true,
87e0f3968cSzoujr  EnableSC: Boolean = true,
882225d46eSJiawei Lin  EnbaleTlbDebug: Boolean = false,
89918d87f2SsinceforYy  EnableClockGate: Boolean = true,
902225d46eSJiawei Lin  EnableJal: Boolean = false,
9111d0c81dSLingrui98  EnableFauFTB: Boolean = true,
923ea4388cSHaoyuan Feng  EnableSv48: Boolean = true,
93f2aabf0dSLingrui98  UbtbGHRLength: Int = 4,
94c7fabd05SSteve Gou  // HistoryLength: Int = 512,
952f7b35ceSLingrui98  EnableGHistDiff: Boolean = true,
96ab0200c8SEaston Man  EnableCommitGHistDiff: Boolean = true,
97edc18578SLingrui98  UbtbSize: Int = 256,
98b37e4b45SLingrui98  FtbSize: Int = 2048,
995f89ba0bSEaston Man  FtbWays: Int = 4,
1005f89ba0bSEaston Man  FtbTagLength: Int = 20,
1010b8e1fd0SGuokai Chen  RasSize: Int = 16,
1020b8e1fd0SGuokai Chen  RasSpecSize: Int = 32,
10377bef50aSGuokai Chen  RasCtrSize: Int = 3,
1042225d46eSJiawei Lin  CacheLineSize: Int = 512,
105dd6c0695SLingrui98  TageTableInfos: Seq[Tuple3[Int,Int,Int]] =
106dd6c0695SLingrui98  //       Sets  Hist   Tag
10751e26c03SLingrui98    Seq(( 4096,    8,    8),
10851e26c03SLingrui98        ( 4096,   13,    8),
10951e26c03SLingrui98        ( 4096,   32,    8),
11051e26c03SLingrui98        ( 4096,  119,    8)),
111dd6c0695SLingrui98  ITTageTableInfos: Seq[Tuple3[Int,Int,Int]] =
112dd6c0695SLingrui98  //      Sets  Hist   Tag
11303c81005SLingrui98    Seq(( 256,    4,    9),
114527dc111SLingrui98        ( 256,    8,    9),
1153581d7d3SLingrui98        ( 512,   13,    9),
116527dc111SLingrui98        ( 512,   16,    9),
117f2aabf0dSLingrui98        ( 512,   32,    9)),
11882dc6ff8SLingrui98  SCNRows: Int = 512,
11982dc6ff8SLingrui98  SCNTables: Int = 4,
120dd6c0695SLingrui98  SCCtrBits: Int = 6,
12182dc6ff8SLingrui98  SCHistLens: Seq[Int] = Seq(0, 4, 10, 16),
122dd6c0695SLingrui98  numBr: Int = 2,
123dc5a9185SEaston Man  branchPredictor: (BranchPredictionResp, Parameters) => Tuple2[Seq[BasePredictor], BranchPredictionResp] =
124dc5a9185SEaston Man  (resp_in: BranchPredictionResp, p: Parameters) => {
12516a1cc4bSzoujr    val ftb = Module(new FTB()(p))
126dc5a9185SEaston Man    val uftb = Module(new FauFTB()(p))
127bf358e08SLingrui98    val tage = Module(new Tage_SC()(p))
1284cd08aa8SLingrui98    val ras = Module(new RAS()(p))
12960f966c8SGuokai Chen    val ittage = Module(new ITTage()(p))
130dc5a9185SEaston Man    val preds = Seq(uftb, tage, ftb, ittage, ras)
13116a1cc4bSzoujr    preds.map(_.io := DontCare)
13216a1cc4bSzoujr
133fd3aa057SYuandongliang    ftb.io.fauftb_entry_in  := uftb.io.fauftb_entry_out
134fd3aa057SYuandongliang    ftb.io.fauftb_entry_hit_in := uftb.io.fauftb_entry_hit_out
135fd3aa057SYuandongliang
136dc5a9185SEaston Man    uftb.io.in.bits.resp_in(0) := resp_in
137dc5a9185SEaston Man    tage.io.in.bits.resp_in(0) := uftb.io.out
138c2d1ec7dSLingrui98    ftb.io.in.bits.resp_in(0) := tage.io.out
139c2d1ec7dSLingrui98    ittage.io.in.bits.resp_in(0) := ftb.io.out
140c2d1ec7dSLingrui98    ras.io.in.bits.resp_in(0) := ittage.io.out
14116a1cc4bSzoujr
142c2d1ec7dSLingrui98    (preds, ras.io.out)
143dc5a9185SEaston Man  },
144b92f8445Sssszwic  ICacheForceMetaECCError: Boolean = false,
145b92f8445Sssszwic  ICacheForceDataECCError: Boolean = false,
1462225d46eSJiawei Lin  IBufSize: Int = 48,
14744c9c1deSEaston Man  IBufNBank: Int = 6, // IBuffer bank amount, should divide IBufSize
1482225d46eSJiawei Lin  DecodeWidth: Int = 6,
1492225d46eSJiawei Lin  RenameWidth: Int = 6,
150780712aaSxiaofeibao-xjtu  CommitWidth: Int = 8,
151780712aaSxiaofeibao-xjtu  RobCommitWidth: Int = 8,
152780712aaSxiaofeibao-xjtu  RabCommitWidth: Int = 6,
15365df1368Sczw  MaxUopSize: Int = 65,
154fa7f2c26STang Haojin  EnableRenameSnapshot: Boolean = true,
155fa7f2c26STang Haojin  RenameSnapshotNum: Int = 4,
1565df4db2aSLingrui98  FtqSize: Int = 64,
1572225d46eSJiawei Lin  EnableLoadFastWakeUp: Boolean = true, // NOTE: not supported now, make it false
158a8db15d8Sfdy  IntLogicRegs: Int = 32,
159f2ea741cSzhanglinjuan  FpLogicRegs: Int = 32 + 1 + 1, // 1: I2F, 1: stride
1602cf47c6eSxiaofeibao  VecLogicRegs: Int = 32 + 15, // 15: tmp
161435f48a8Sxiaofeibao  V0LogicRegs: Int = 1, // V0
162dbe071d2Sxiaofeibao  VlLogicRegs: Int = 1, // Vl
1639c5a1080Sxiaofeibao  V0_IDX: Int = 0,
1649c5a1080Sxiaofeibao  Vl_IDX: Int = 0,
1657154d65eSYinan Xu  NRPhyRegs: Int = 192,
1668ff9f385SHaojin Tang  VirtualLoadQueueSize: Int = 72,
16717386530SAnzo  LoadQueueRARSize: Int = 72,
168452b5843SHuijin Li  LoadQueueRAWSize: Int = 32, // NOTE: make sure that LoadQueueRAWSize is power of 2.
169e4f69d78Ssfencevma  RollbackGroupSize: Int = 8,
17044cbc983Ssfencevma  LoadQueueReplaySize: Int = 72,
171452b5843SHuijin Li  LoadUncacheBufferSize: Int = 4,
172e4f69d78Ssfencevma  LoadQueueNWriteBanks: Int = 8, // NOTE: make sure that LoadQueueRARSize/LoadQueueRAWSize is divided by LoadQueueNWriteBanks
173452b5843SHuijin Li  StoreQueueSize: Int = 56,
174e4f69d78Ssfencevma  StoreQueueNWriteBanks: Int = 8, // NOTE: make sure that StoreQueueSize is divided by StoreQueueNWriteBanks
175e4f69d78Ssfencevma  StoreQueueForwardWithMask: Boolean = true,
176cea88ff8SWilliam Wang  VlsQueueSize: Int = 8,
1771f35da39Sxiaofeibao-xjtu  RobSize: Int = 160,
178a8db15d8Sfdy  RabSize: Int = 256,
1794c7680e0SXuan Hu  VTypeBufferSize: Int = 64, // used to reorder vtype
1801f35da39Sxiaofeibao-xjtu  IssueQueueSize: Int = 24,
18128607074Ssinsanction  IssueQueueCompEntrySize: Int = 16,
1822225d46eSJiawei Lin  dpParams: DispatchParameters = DispatchParameters(
1832225d46eSJiawei Lin    IntDqSize = 16,
1842225d46eSJiawei Lin    FpDqSize = 16,
185b1a9bf2eSXuan Hu    LsDqSize = 18,
186ff3fcdf1Sxiaofeibao-xjtu    IntDqDeqWidth = 8,
1873b739f49SXuan Hu    FpDqDeqWidth = 6,
18860f0c5aeSxiaofeibao    VecDqDeqWidth = 6,
1893b739f49SXuan Hu    LsDqDeqWidth = 6,
1902225d46eSJiawei Lin  ),
1913b739f49SXuan Hu  intPreg: PregParams = IntPregParams(
1926f7be84aSXuan Hu    numEntries = 224,
19339c59369SXuan Hu    numRead = None,
19439c59369SXuan Hu    numWrite = None,
1952225d46eSJiawei Lin  ),
19660f0c5aeSxiaofeibao  fpPreg: PregParams = FpPregParams(
19739c59369SXuan Hu    numEntries = 192,
198fc605fcfSsinsanction    numRead = None,
19939c59369SXuan Hu    numWrite = None,
2003b739f49SXuan Hu  ),
20160f0c5aeSxiaofeibao  vfPreg: VfPregParams = VfPregParams(
20260f0c5aeSxiaofeibao    numEntries = 128,
20360f0c5aeSxiaofeibao    numRead = None,
20460f0c5aeSxiaofeibao    numWrite = None,
20560f0c5aeSxiaofeibao  ),
2062aa3a761Ssinsanction  v0Preg: V0PregParams = V0PregParams(
2072aa3a761Ssinsanction    numEntries = 22,
2082aa3a761Ssinsanction    numRead = None,
2092aa3a761Ssinsanction    numWrite = None,
2102aa3a761Ssinsanction  ),
2112aa3a761Ssinsanction  vlPreg: VlPregParams = VlPregParams(
2122aa3a761Ssinsanction    numEntries = 32,
2132aa3a761Ssinsanction    numRead = None,
2142aa3a761Ssinsanction    numWrite = None,
2152aa3a761Ssinsanction  ),
216ae4984bfSsinsanction  IntRegCacheSize: Int = 16,
217ae4984bfSsinsanction  MemRegCacheSize: Int = 12,
2184376b525SZiyue Zhang  intSchdVlWbPort: Int = 0,
2194376b525SZiyue Zhang  vfSchdVlWbPort: Int = 1,
220289fc2f9SLinJiawei  prefetcher: Option[PrefetcherParams] = Some(SMSParams()),
22195a47398SGao-Zeyu  IfuRedirectNum: Int = 1,
222a81cda24Ssfencevma  LoadPipelineWidth: Int = 3,
2232142592bSxiaofeibao-xjtu  StorePipelineWidth: Int = 2,
224ef142700Sxiaofeibao  VecLoadPipelineWidth: Int = 2,
225ef142700Sxiaofeibao  VecStorePipelineWidth: Int = 2,
226cea88ff8SWilliam Wang  VecMemSrcInWidth: Int = 2,
227cea88ff8SWilliam Wang  VecMemInstWbWidth: Int = 1,
228cea88ff8SWilliam Wang  VecMemDispatchWidth: Int = 1,
2293ea758f9SAnzo  VecMemDispatchMaxNumber: Int = 16,
2309ff64fb6SAnzooooo  VecMemUnitStrideMaxFlowNum: Int = 2,
2314e7f9e52Sxiaofeibao  VecMemLSQEnqIteratorNumberSeq: Seq[Int] = Seq(16, 16, 16, 16, 16, 16),
2322225d46eSJiawei Lin  StoreBufferSize: Int = 16,
23305f23f57SWilliam Wang  StoreBufferThreshold: Int = 7,
23446f74b57SHaojin Tang  EnsbufferWidth: Int = 2,
235ec49b127Ssinsanction  LoadDependencyWidth: Int = 2,
23620a5248fSzhanglinjuan  // ============ VLSU ============
237b2d6d8e7Sgood-circle  VlMergeBufferSize: Int = 16,
238b2d6d8e7Sgood-circle  VsMergeBufferSize: Int = 16,
239ef142700Sxiaofeibao  UopWritebackWidth: Int = 2,
240ef142700Sxiaofeibao  VLUopWritebackWidth: Int = 2,
241627be78bSgood-circle  VSUopWritebackWidth: Int = 1,
24288884326Sweiding liu  VSegmentBufferSize: Int = 8,
243df3b4b92SAnzooooo  VFOFBufferSize: Int = 8,
244df3b4b92SAnzooooo  VLFOFWritebackWidth: Int = 1,
24520a5248fSzhanglinjuan  // ==============================
24637225120Ssfencevma  UncacheBufferSize: Int = 4,
247cd2ff98bShappy-lx  EnableLoadToLoadForward: Boolean = false,
24814a67055Ssfencevma  EnableFastForward: Boolean = true,
249beabc72dSWilliam Wang  EnableLdVioCheckAfterReset: Boolean = true,
250026615fcSWilliam Wang  EnableSoftPrefetchAfterReset: Boolean = true,
251026615fcSWilliam Wang  EnableCacheErrorAfterReset: Boolean = true,
252b23df8f4Ssfencevma  EnableAccurateLoadError: Boolean = false,
253e32bafbaSbugGenerator  EnableUncacheWriteOutstanding: Boolean = false,
25441d8d239Shappy-lx  EnableHardwareStoreMisalign: Boolean = true,
25541d8d239Shappy-lx  EnableHardwareLoadMisalign: Boolean = true,
2560d32f713Shappy-lx  EnableStorePrefetchAtIssue: Boolean = false,
2570d32f713Shappy-lx  EnableStorePrefetchAtCommit: Boolean = false,
2580d32f713Shappy-lx  EnableAtCommitMissTrigger: Boolean = true,
2590d32f713Shappy-lx  EnableStorePrefetchSMS: Boolean = false,
2600d32f713Shappy-lx  EnableStorePrefetchSPB: Boolean = false,
261e3ed843cShappy-lx  HasCMO: Boolean = true,
26245f497a4Shappy-lx  MMUAsidLen: Int = 16, // max is 16, 0 is not supported now
263d0de7e4aSpeixiaokun  MMUVmidLen: Int = 14,
26462dfd6c3Shappy-lx  ReSelectLen: Int = 7, // load replay queue replay select counter len
26504665835SMaxpicca-Li  iwpuParameters: WPUParameters = WPUParameters(
26604665835SMaxpicca-Li    enWPU = false,
26704665835SMaxpicca-Li    algoName = "mmru",
26804665835SMaxpicca-Li    isICache = true,
26904665835SMaxpicca-Li  ),
27004665835SMaxpicca-Li  dwpuParameters: WPUParameters = WPUParameters(
27104665835SMaxpicca-Li    enWPU = false,
27204665835SMaxpicca-Li    algoName = "mmru",
27304665835SMaxpicca-Li    enCfPred = false,
27404665835SMaxpicca-Li    isICache = false,
27504665835SMaxpicca-Li  ),
276a0301c0dSLemover  itlbParameters: TLBParameters = TLBParameters(
277a0301c0dSLemover    name = "itlb",
278a0301c0dSLemover    fetchi = true,
279a0301c0dSLemover    useDmode = false,
280f9ac118cSHaoyuan Feng    NWays = 48,
281a0301c0dSLemover  ),
282b92f8445Sssszwic  itlbPortNum: Int = ICacheParameters().PortNumber + 1,
283b92f8445Sssszwic  ipmpPortNum: Int = 2 * ICacheParameters().PortNumber + 1,
284a0301c0dSLemover  ldtlbParameters: TLBParameters = TLBParameters(
285a0301c0dSLemover    name = "ldtlb",
286f9ac118cSHaoyuan Feng    NWays = 48,
28753b8f1a7SLemover    outReplace = false,
2885b7ef044SLemover    partialStaticPMP = true,
289f1fe8698SLemover    outsideRecvFlush = true,
2903ea4388cSHaoyuan Feng    saveLevel = false,
29126af847eSgood-circle    lgMaxSize = 4
292a0301c0dSLemover  ),
293a0301c0dSLemover  sttlbParameters: TLBParameters = TLBParameters(
294a0301c0dSLemover    name = "sttlb",
295f9ac118cSHaoyuan Feng    NWays = 48,
29653b8f1a7SLemover    outReplace = false,
2975b7ef044SLemover    partialStaticPMP = true,
298f1fe8698SLemover    outsideRecvFlush = true,
2993ea4388cSHaoyuan Feng    saveLevel = false,
30026af847eSgood-circle    lgMaxSize = 4
301a0301c0dSLemover  ),
3028f1fa9b1Ssfencevma  hytlbParameters: TLBParameters = TLBParameters(
3038f1fa9b1Ssfencevma    name = "hytlb",
304531c40faSsinceforYy    NWays = 48,
305531c40faSsinceforYy    outReplace = false,
3068f1fa9b1Ssfencevma    partialStaticPMP = true,
3078f1fa9b1Ssfencevma    outsideRecvFlush = true,
3083ea4388cSHaoyuan Feng    saveLevel = false,
30926af847eSgood-circle    lgMaxSize = 4
3108f1fa9b1Ssfencevma  ),
311c8309e8aSHaoyuan Feng  pftlbParameters: TLBParameters = TLBParameters(
312c8309e8aSHaoyuan Feng    name = "pftlb",
313f9ac118cSHaoyuan Feng    NWays = 48,
314c8309e8aSHaoyuan Feng    outReplace = false,
315c8309e8aSHaoyuan Feng    partialStaticPMP = true,
316c8309e8aSHaoyuan Feng    outsideRecvFlush = true,
3173ea4388cSHaoyuan Feng    saveLevel = false,
31826af847eSgood-circle    lgMaxSize = 4
319c8309e8aSHaoyuan Feng  ),
320aee6a6d1SYanqin Li  l2ToL1tlbParameters: TLBParameters = TLBParameters(
321aee6a6d1SYanqin Li    name = "l2tlb",
322aee6a6d1SYanqin Li    NWays = 48,
323aee6a6d1SYanqin Li    outReplace = false,
324aee6a6d1SYanqin Li    partialStaticPMP = true,
325aee6a6d1SYanqin Li    outsideRecvFlush = true,
3263ea4388cSHaoyuan Feng    saveLevel = false
327aee6a6d1SYanqin Li  ),
328bf08468cSLemover  refillBothTlb: Boolean = false,
329a0301c0dSLemover  btlbParameters: TLBParameters = TLBParameters(
330a0301c0dSLemover    name = "btlb",
331f9ac118cSHaoyuan Feng    NWays = 48,
332a0301c0dSLemover  ),
3335854c1edSLemover  l2tlbParameters: L2TLBParameters = L2TLBParameters(),
3342225d46eSJiawei Lin  NumPerfCounters: Int = 16,
33505f23f57SWilliam Wang  icacheParameters: ICacheParameters = ICacheParameters(
33605f23f57SWilliam Wang    tagECC = Some("parity"),
33705f23f57SWilliam Wang    dataECC = Some("parity"),
33805f23f57SWilliam Wang    replacer = Some("setplru"),
3396c106319Sxu_zh    cacheCtrlAddressOpt = Some(AddressSet(0x38022080, 0x7f))
34005f23f57SWilliam Wang  ),
3414f94c0c6SJiawei Lin  dcacheParametersOpt: Option[DCacheParameters] = Some(DCacheParameters(
34205f23f57SWilliam Wang    tagECC = Some("secded"),
34305f23f57SWilliam Wang    dataECC = Some("secded"),
34405f23f57SWilliam Wang    replacer = Some("setplru"),
34505f23f57SWilliam Wang    nMissEntries = 16,
346300ded30SWilliam Wang    nProbeEntries = 8,
3470d32f713Shappy-lx    nReleaseEntries = 18,
3480d32f713Shappy-lx    nMaxPrefetchEntry = 6,
349908b24d8Scz4e    enableTagEcc = true,
35072dab974Scz4e    enableDataEcc = true,
35172dab974Scz4e    cacheCtrlAddressOpt = Some(AddressSet(0x38022000, 0x7f))
3524f94c0c6SJiawei Lin  )),
35315ee59e4Swakafa  L2CacheParamsOpt: Option[L2Param] = Some(L2Param(
354a1ea7f76SJiawei Lin    name = "l2",
355a1ea7f76SJiawei Lin    ways = 8,
356a1ea7f76SJiawei Lin    sets = 1024, // default 512KB L2
3571fb367eaSChen Xi    prefetch = Seq(coupledL2.prefetch.PrefetchReceiverParams(), coupledL2.prefetch.BOPParameters(),
3581fb367eaSChen Xi      coupledL2.prefetch.TPParameters()),
3594f94c0c6SJiawei Lin  )),
360d5be5d19SJiawei Lin  L2NBanks: Int = 1,
361a1ea7f76SJiawei Lin  usePTWRepeater: Boolean = false,
362e0374b1cSHaoyuan Feng  softTLB: Boolean = false, // dpi-c l1tlb debug only
363e0374b1cSHaoyuan Feng  softPTW: Boolean = false, // dpi-c l2tlb debug only
3645afdf73cSHaoyuan Feng  softPTWDelay: Int = 1
3652225d46eSJiawei Lin){
3666cd53fdeSTang Haojin  def ISABase = "rv64i"
3676cd53fdeSTang Haojin  def ISAExtensions = Seq(
3686cd53fdeSTang Haojin    // single letter extensions, in canonical order
3696cd53fdeSTang Haojin    "i", "m", "a", "f", "d", "c", /* "b", */ "v", "h",
3706cd53fdeSTang Haojin    // multi-letter extensions, sorted alphanumerically
3712bff79a3STang Haojin    "sdtrig", "sha", "shcounterenw", "shgatpa", "shlcofideleg", "shtvala", "shvsatpa", "shvstvala",
3722bff79a3STang Haojin    "shvstvecd", "smaia", "smcsrind", "smdbltrp", "smmpm", "smnpm", "smrnmi", "smstateen",
3732bff79a3STang Haojin    "ss1p13", "ssaia", "ssccptr", "sscofpmf", "sscounterenw", "sscsrind", "ssdbltrp", "ssnpm",
3742bff79a3STang Haojin    "sspm", "ssstateen", "ssstrict", "sstc", "sstvala", "sstvecd", "ssu64xl", "supm", "sv39",
375*b1d76493STang Haojin    "sv48", "svade", "svbare", "svinval", "svnapot", "svpbmt", "za64rs", "zacas", "zawrs", "zba",
376*b1d76493STang Haojin    "zbb", "zbc", "zbkb", "zbkc", "zbkx", "zbs", "zcb", "zcmop", "zfa", "zfh", "zfhmin", "zic64b",
377*b1d76493STang Haojin    "zicbom", "zicbop", "zicboz", "ziccamoa", "ziccif", "zicclsm", "ziccrse", "zicntr", "zicond",
378*b1d76493STang Haojin    "zicsr", "zifencei", "zihintntl", "zihintpause", "zihpm", "zimop", "zkn", "zknd", "zkne", "zknh",
379*b1d76493STang Haojin    "zksed", "zksh", "zkt", "zvbb", "zvfh", "zvfhmin", "zvkt", "zvl128b", "zvl32b", "zvl64b"
3806cd53fdeSTang Haojin  )
3816cd53fdeSTang Haojin
382b52d4755SXuan Hu  def vlWidth = log2Up(VLEN) + 1
383b52d4755SXuan Hu
3846dbb4e08SXuan Hu  /**
3856dbb4e08SXuan Hu   * the minimum element length of vector elements
3866dbb4e08SXuan Hu   */
3876dbb4e08SXuan Hu  val minVecElen: Int = 8
3886dbb4e08SXuan Hu
3896dbb4e08SXuan Hu  /**
3906dbb4e08SXuan Hu   * the maximum number of elements in vector register
3916dbb4e08SXuan Hu   */
3926dbb4e08SXuan Hu  val maxElemPerVreg: Int = VLEN / minVecElen
3936dbb4e08SXuan Hu
394c7fabd05SSteve Gou  val allHistLens = SCHistLens ++ ITTageTableInfos.map(_._2) ++ TageTableInfos.map(_._2) :+ UbtbGHRLength
395c7fabd05SSteve Gou  val HistoryLength = allHistLens.max + numBr * FtqSize + 9 // 256 for the predictor configs now
396c7fabd05SSteve Gou
397ae4984bfSsinsanction  val RegCacheSize = IntRegCacheSize + MemRegCacheSize
398ae4984bfSsinsanction  val RegCacheIdxWidth = log2Up(RegCacheSize)
399ae4984bfSsinsanction
40039c59369SXuan Hu  val intSchdParams = {
4013b739f49SXuan Hu    implicit val schdType: SchedulerType = IntScheduler()
4023b739f49SXuan Hu    SchdBlockParams(Seq(
4033b739f49SXuan Hu      IssueBlockParams(Seq(
4047556e9bdSxiaofeibao-xjtu        ExeUnitParams("ALU0", Seq(AluCfg, MulCfg, BkuCfg), Seq(IntWB(port = 0, 0)), Seq(Seq(IntRD(0, 0)), Seq(IntRD(1, 0))), true, 2),
405f803e5e9Ssinsanction        ExeUnitParams("BJU0", Seq(BrhCfg, JmpCfg), Seq(IntWB(port = 0, 1)), Seq(Seq(IntRD(6, 1)), Seq(IntRD(7, 1))), true, 2),
40628607074Ssinsanction      ), numEntries = IssueQueueSize, numEnq = 2, numComp = IssueQueueCompEntrySize),
407cde70b38SzhanglyGit      IssueBlockParams(Seq(
4087556e9bdSxiaofeibao-xjtu        ExeUnitParams("ALU1", Seq(AluCfg, MulCfg, BkuCfg), Seq(IntWB(port = 1, 0)), Seq(Seq(IntRD(2, 0)), Seq(IntRD(3, 0))), true, 2),
409f803e5e9Ssinsanction        ExeUnitParams("BJU1", Seq(BrhCfg, JmpCfg), Seq(IntWB(port = 1, 1)), Seq(Seq(IntRD(4, 1)), Seq(IntRD(5, 1))), true, 2),
41028607074Ssinsanction      ), numEntries = IssueQueueSize, numEnq = 2, numComp = IssueQueueCompEntrySize),
4113b739f49SXuan Hu      IssueBlockParams(Seq(
412ff3fcdf1Sxiaofeibao-xjtu        ExeUnitParams("ALU2", Seq(AluCfg), Seq(IntWB(port = 2, 0)), Seq(Seq(IntRD(4, 0)), Seq(IntRD(5, 0))), true, 2),
4138c6ac5ebSxiaofeibao        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)))),
41428607074Ssinsanction      ), numEntries = IssueQueueSize, numEnq = 2, numComp = IssueQueueCompEntrySize),
4153b739f49SXuan Hu      IssueBlockParams(Seq(
416ff3fcdf1Sxiaofeibao-xjtu        ExeUnitParams("ALU3", Seq(AluCfg), Seq(IntWB(port = 3, 0)), Seq(Seq(IntRD(6, 0)), Seq(IntRD(7, 0))), true, 2),
417f803e5e9Ssinsanction        ExeUnitParams("BJU3", Seq(CsrCfg, FenceCfg, DivCfg), Seq(IntWB(port = 4, 1)), Seq(Seq(IntRD(0, 1)), Seq(IntRD(1, 1)))),
41828607074Ssinsanction      ), numEntries = IssueQueueSize, numEnq = 2, numComp = IssueQueueCompEntrySize),
4193b739f49SXuan Hu    ),
4203b739f49SXuan Hu      numPregs = intPreg.numEntries,
4213b739f49SXuan Hu      numDeqOutside = 0,
4223b739f49SXuan Hu      schdType = schdType,
4233b739f49SXuan Hu      rfDataWidth = intPreg.dataCfg.dataWidth,
4243b739f49SXuan Hu      numUopIn = dpParams.IntDqDeqWidth,
4253b739f49SXuan Hu    )
4263b739f49SXuan Hu  }
42760f0c5aeSxiaofeibao
42860f0c5aeSxiaofeibao  val fpSchdParams = {
42960f0c5aeSxiaofeibao    implicit val schdType: SchedulerType = FpScheduler()
43060f0c5aeSxiaofeibao    SchdBlockParams(Seq(
43160f0c5aeSxiaofeibao      IssueBlockParams(Seq(
432f62a71efSxiaofeibao        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)))),
4338c6ac5ebSxiaofeibao        ExeUnitParams("FEX1", Seq(FdivCfg), Seq(FpWB(port = 3, 1)), Seq(Seq(FpRD(2, 1)), Seq(FpRD(5, 1)))),
43449f2b250Sxiaofeibao      ), numEntries = 18, numEnq = 2, numComp = 14),
43560f0c5aeSxiaofeibao      IssueBlockParams(Seq(
4368c6ac5ebSxiaofeibao        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)))),
4378c6ac5ebSxiaofeibao        ExeUnitParams("FEX3", Seq(FdivCfg), Seq(FpWB(port = 4, 1)), Seq(Seq(FpRD(8, 1)), Seq(FpRD(9, 1)))),
43849f2b250Sxiaofeibao      ), numEntries = 18, numEnq = 2, numComp = 14),
43960f0c5aeSxiaofeibao      IssueBlockParams(Seq(
4408c6ac5ebSxiaofeibao        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)))),
44149f2b250Sxiaofeibao      ), numEntries = 18, numEnq = 2, numComp = 14),
44260f0c5aeSxiaofeibao    ),
44360f0c5aeSxiaofeibao      numPregs = fpPreg.numEntries,
44460f0c5aeSxiaofeibao      numDeqOutside = 0,
44560f0c5aeSxiaofeibao      schdType = schdType,
44660f0c5aeSxiaofeibao      rfDataWidth = fpPreg.dataCfg.dataWidth,
447cdedeb74SJinHong Zeng      numUopIn = dpParams.FpDqDeqWidth,
44860f0c5aeSxiaofeibao    )
44960f0c5aeSxiaofeibao  }
45060f0c5aeSxiaofeibao
45139c59369SXuan Hu  val vfSchdParams = {
4523b739f49SXuan Hu    implicit val schdType: SchedulerType = VfScheduler()
4533b739f49SXuan Hu    SchdBlockParams(Seq(
4543b739f49SXuan Hu      IssueBlockParams(Seq(
4550d50d631Sxiaofeibao        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)))),
4560d50d631Sxiaofeibao        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)))),
45749f2b250Sxiaofeibao      ), numEntries = 16, numEnq = 2, numComp = 12),
4583b739f49SXuan Hu      IssueBlockParams(Seq(
4590d50d631Sxiaofeibao        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)))),
460c22ffc80Sxiaofeibao        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)))),
46149f2b250Sxiaofeibao      ), numEntries = 16, numEnq = 2, numComp = 12),
4620d50d631Sxiaofeibao      IssueBlockParams(Seq(
4630d50d631Sxiaofeibao        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)))),
46449f2b250Sxiaofeibao      ), numEntries = 10, numEnq = 2, numComp = 6),
4653b739f49SXuan Hu    ),
4663b739f49SXuan Hu      numPregs = vfPreg.numEntries,
4673b739f49SXuan Hu      numDeqOutside = 0,
4683b739f49SXuan Hu      schdType = schdType,
4693b739f49SXuan Hu      rfDataWidth = vfPreg.dataCfg.dataWidth,
47060f0c5aeSxiaofeibao      numUopIn = dpParams.VecDqDeqWidth,
4713b739f49SXuan Hu    )
4723b739f49SXuan Hu  }
47339c59369SXuan Hu
47439c59369SXuan Hu  val memSchdParams = {
4753b739f49SXuan Hu    implicit val schdType: SchedulerType = MemScheduler()
4763b739f49SXuan Hu    val rfDataWidth = 64
4772225d46eSJiawei Lin
4783b739f49SXuan Hu    SchdBlockParams(Seq(
4793b739f49SXuan Hu      IssueBlockParams(Seq(
480f803e5e9Ssinsanction        ExeUnitParams("STA0", Seq(StaCfg, MouCfg), Seq(FakeIntWB()), Seq(Seq(IntRD(7, 2)))),
48149f2b250Sxiaofeibao      ), numEntries = 16, numEnq = 2, numComp = 12),
482b133b458SXuan Hu      IssueBlockParams(Seq(
483f803e5e9Ssinsanction        ExeUnitParams("STA1", Seq(StaCfg, MouCfg), Seq(FakeIntWB()), Seq(Seq(IntRD(6, 2)))),
48449f2b250Sxiaofeibao      ), numEntries = 16, numEnq = 2, numComp = 12),
485202674aeSHaojin Tang      IssueBlockParams(Seq(
4868c6ac5ebSxiaofeibao        ExeUnitParams("LDU0", Seq(LduCfg), Seq(IntWB(5, 0), FpWB(3, 0)), Seq(Seq(IntRD(8, 0))), true, 2),
48749f2b250Sxiaofeibao      ), numEntries = 16, numEnq = 2, numComp = 12),
4883b739f49SXuan Hu      IssueBlockParams(Seq(
4898c6ac5ebSxiaofeibao        ExeUnitParams("LDU1", Seq(LduCfg), Seq(IntWB(6, 0), FpWB(4, 0)), Seq(Seq(IntRD(9, 0))), true, 2),
49049f2b250Sxiaofeibao      ), numEntries = 16, numEnq = 2, numComp = 12),
491e77d3114SHaojin Tang      IssueBlockParams(Seq(
4928c6ac5ebSxiaofeibao        ExeUnitParams("LDU2", Seq(LduCfg), Seq(IntWB(7, 0), FpWB(5, 0)), Seq(Seq(IntRD(10, 0))), true, 2),
49349f2b250Sxiaofeibao      ), numEntries = 16, numEnq = 2, numComp = 12),
494a81cda24Ssfencevma      IssueBlockParams(Seq(
495df3b4b92SAnzooooo        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)))),
49649f2b250Sxiaofeibao      ), numEntries = 16, numEnq = 2, numComp = 12),
4973da89fc0Sxiaofeibao      IssueBlockParams(Seq(
498df3b4b92SAnzooooo        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)))),
49949f2b250Sxiaofeibao      ), numEntries = 16, numEnq = 2, numComp = 12),
500ecfc6f16SXuan Hu      IssueBlockParams(Seq(
5018c6ac5ebSxiaofeibao        ExeUnitParams("STD0", Seq(StdCfg, MoudCfg), Seq(), Seq(Seq(IntRD(5, 2), FpRD(9, 0)))),
50249f2b250Sxiaofeibao      ), numEntries = 16, numEnq = 2, numComp = 12),
50327811ea4SXuan Hu      IssueBlockParams(Seq(
5048c6ac5ebSxiaofeibao        ExeUnitParams("STD1", Seq(StdCfg, MoudCfg), Seq(), Seq(Seq(IntRD(3, 2), FpRD(10, 0)))),
50549f2b250Sxiaofeibao      ), numEntries = 16, numEnq = 2, numComp = 12),
5063b739f49SXuan Hu    ),
507141a6449SXuan Hu      numPregs = intPreg.numEntries max vfPreg.numEntries,
5083b739f49SXuan Hu      numDeqOutside = 0,
5093b739f49SXuan Hu      schdType = schdType,
5103b739f49SXuan Hu      rfDataWidth = rfDataWidth,
5113b739f49SXuan Hu      numUopIn = dpParams.LsDqDeqWidth,
5123b739f49SXuan Hu    )
5133b739f49SXuan Hu  }
5142225d46eSJiawei Lin
515bf35baadSXuan Hu  def PregIdxWidthMax = intPreg.addrWidth max vfPreg.addrWidth
516bf35baadSXuan Hu
517bf35baadSXuan Hu  def iqWakeUpParams = {
518bf35baadSXuan Hu    Seq(
519c0b91ca1SHaojin Tang      WakeUpConfig(
5202142592bSxiaofeibao-xjtu        Seq("ALU0", "ALU1", "ALU2", "ALU3", "LDU0", "LDU1", "LDU2") ->
5212142592bSxiaofeibao-xjtu        Seq("ALU0", "BJU0", "ALU1", "BJU1", "ALU2", "BJU2", "ALU3", "BJU3", "LDU0", "LDU1", "LDU2", "STA0", "STA1", "STD0", "STD1")
522c0b91ca1SHaojin Tang      ),
5230966699fSxiaofeibao-xjtu      // TODO: add load -> fp slow wakeup
524b67f36d0Sxiaofeibao-xjtu      WakeUpConfig(
5258c6ac5ebSxiaofeibao        Seq("FEX0", "FEX2", "FEX4") ->
5268c6ac5ebSxiaofeibao        Seq("FEX0", "FEX1", "FEX2", "FEX3", "FEX4")
52731c5c732Sxiaofeibao      ),
528c0b91ca1SHaojin Tang    ).flatten
529bf35baadSXuan Hu  }
530bf35baadSXuan Hu
5315edcc45fSHaojin Tang  def fakeIntPreg = FakeIntPregParams(intPreg.numEntries, intPreg.numRead, intPreg.numWrite)
5325edcc45fSHaojin Tang
5330c7ebb58Sxiaofeibao-xjtu  val backendParams: BackendParams = backend.BackendParams(
534bf35baadSXuan Hu    Map(
5353b739f49SXuan Hu      IntScheduler() -> intSchdParams,
53660f0c5aeSxiaofeibao      FpScheduler() -> fpSchdParams,
5373b739f49SXuan Hu      VfScheduler() -> vfSchdParams,
5383b739f49SXuan Hu      MemScheduler() -> memSchdParams,
539bf35baadSXuan Hu    ),
540bf35baadSXuan Hu    Seq(
5413b739f49SXuan Hu      intPreg,
54260f0c5aeSxiaofeibao      fpPreg,
5433b739f49SXuan Hu      vfPreg,
5442aa3a761Ssinsanction      v0Preg,
5452aa3a761Ssinsanction      vlPreg,
5465edcc45fSHaojin Tang      fakeIntPreg
547bf35baadSXuan Hu    ),
548bf35baadSXuan Hu    iqWakeUpParams,
549bf35baadSXuan Hu  )
55049162c9aSGuanghui Cheng
55149162c9aSGuanghui Cheng  // Parameters for trace extension.
55249162c9aSGuanghui Cheng  // Trace parameters is useful for XSTOP.
5534907ec88Schengguanghui  val traceParams: TraceParams = new TraceParams(
554725e8ddcSchengguanghui    TraceGroupNum  = 3,
555551cc696Schengguanghui    IaddrWidth     = GPAddrBitsSv48x4,
556725e8ddcSchengguanghui    PrivWidth      = 3,
557725e8ddcSchengguanghui    ItypeWidth     = 4,
558725e8ddcSchengguanghui    IlastsizeWidth = 1,
5594907ec88Schengguanghui  )
5602225d46eSJiawei Lin}
5612225d46eSJiawei Lin
5622225d46eSJiawei Lincase object DebugOptionsKey extends Field[DebugOptions]
5632225d46eSJiawei Lin
5642225d46eSJiawei Lincase class DebugOptions
5652225d46eSJiawei Lin(
5661545277aSYinan Xu  FPGAPlatform: Boolean = false,
5679eee369fSKamimiao  ResetGen: Boolean = false,
5681545277aSYinan Xu  EnableDifftest: Boolean = false,
569cbe9a847SYinan Xu  AlwaysBasicDiff: Boolean = true,
5701545277aSYinan Xu  EnableDebug: Boolean = false,
5712225d46eSJiawei Lin  EnablePerfDebug: Boolean = true,
5724ba1d457SKunlin You  PerfLevel: String = "VERBOSE",
573eb163ef0SHaojin Tang  UseDRAMSim: Boolean = false,
574047e34f9SMaxpicca-Li  EnableConstantin: Boolean = false,
57562129679Swakafa  EnableChiselDB: Boolean = false,
57662129679Swakafa  AlwaysBasicDB: Boolean = true,
577ec9e6512Swakafa  EnableRollingDB: Boolean = false
5782225d46eSJiawei Lin)
5792225d46eSJiawei Lin
5802225d46eSJiawei Lintrait HasXSParameter {
5812225d46eSJiawei Lin
5822225d46eSJiawei Lin  implicit val p: Parameters
5832225d46eSJiawei Lin
584ff74867bSYangyu Chen  def PAddrBits = p(SoCParamsKey).PAddrBits // PAddrBits is Phyical Memory addr bits
58545def856STang Haojin  def PmemRanges = p(SoCParamsKey).PmemRanges
5869c0fd28fSXuan Hu  final val PageOffsetWidth = 12
5878537b88aSTang Haojin  def NodeIDWidth = p(SoCParamsKey).NodeIDWidthList(p(CHIIssue)) // NodeID width among NoC
5882f30d658SYinan Xu
589ff74867bSYangyu Chen  def coreParams = p(XSCoreParamsKey)
590ff74867bSYangyu Chen  def env = p(DebugOptionsKey)
5912225d46eSJiawei Lin
5926cd53fdeSTang Haojin  def ISABase = coreParams.ISABase
5936cd53fdeSTang Haojin  def ISAExtensions = coreParams.ISAExtensions
594ff74867bSYangyu Chen  def XLEN = coreParams.XLEN
595ff74867bSYangyu Chen  def VLEN = coreParams.VLEN
596ff74867bSYangyu Chen  def ELEN = coreParams.ELEN
597ff74867bSYangyu Chen  def HSXLEN = coreParams.HSXLEN
5982225d46eSJiawei Lin  val minFLen = 32
5992225d46eSJiawei Lin  val fLen = 64
600ff74867bSYangyu Chen  def hartIdLen = p(MaxHartIdBits)
601ff74867bSYangyu Chen  val xLen = XLEN
6022225d46eSJiawei Lin
603ff74867bSYangyu Chen  def HasMExtension = coreParams.HasMExtension
604ff74867bSYangyu Chen  def HasCExtension = coreParams.HasCExtension
605ff74867bSYangyu Chen  def HasHExtension = coreParams.HasHExtension
6063ea4388cSHaoyuan Feng  def EnableSv48 = coreParams.EnableSv48
607ff74867bSYangyu Chen  def HasDiv = coreParams.HasDiv
608ff74867bSYangyu Chen  def HasIcache = coreParams.HasICache
609ff74867bSYangyu Chen  def HasDcache = coreParams.HasDCache
610ff74867bSYangyu Chen  def AddrBits = coreParams.AddrBits // AddrBits is used in some cases
611dd980d61SXu, Zefan  def PAddrBitsMax = coreParams.PAddrBitsMax
6120b1b8ed1SXiaokun-Pei  def GPAddrBitsSv39x4 = coreParams.GPAddrBitsSv39x4
6130b1b8ed1SXiaokun-Pei  def GPAddrBitsSv48x4 = coreParams.GPAddrBitsSv48x4
61497929664SXiaokun-Pei  def GPAddrBits = {
61597929664SXiaokun-Pei    if (EnableSv48)
61697929664SXiaokun-Pei      coreParams.GPAddrBitsSv48x4
61797929664SXiaokun-Pei    else
61897929664SXiaokun-Pei      coreParams.GPAddrBitsSv39x4
61997929664SXiaokun-Pei  }
620ff74867bSYangyu Chen  def VAddrBits = {
621d0de7e4aSpeixiaokun    if (HasHExtension) {
62297929664SXiaokun-Pei      if (EnableSv48)
62397929664SXiaokun-Pei        coreParams.GPAddrBitsSv48x4
62497929664SXiaokun-Pei      else
62597929664SXiaokun-Pei        coreParams.GPAddrBitsSv39x4
626d0de7e4aSpeixiaokun    } else {
62797929664SXiaokun-Pei      if (EnableSv48)
62897929664SXiaokun-Pei        coreParams.VAddrBitsSv48
62997929664SXiaokun-Pei      else
63097929664SXiaokun-Pei        coreParams.VAddrBitsSv39
631d0de7e4aSpeixiaokun    }
632d0de7e4aSpeixiaokun  } // VAddrBits is Virtual Memory addr bits
633d0de7e4aSpeixiaokun
63497929664SXiaokun-Pei  def VAddrMaxBits = {
63597929664SXiaokun-Pei    if(EnableSv48) {
63697929664SXiaokun-Pei      coreParams.VAddrBitsSv48 max coreParams.GPAddrBitsSv48x4
63797929664SXiaokun-Pei    } else {
63897929664SXiaokun-Pei      coreParams.VAddrBitsSv39 max coreParams.GPAddrBitsSv39x4
63997929664SXiaokun-Pei    }
64097929664SXiaokun-Pei  }
641237d4cfdSXuan Hu
642ff74867bSYangyu Chen  def AsidLength = coreParams.AsidLength
643ff74867bSYangyu Chen  def VmidLength = coreParams.VmidLength
644ff74867bSYangyu Chen  def ReSelectLen = coreParams.ReSelectLen
645ff74867bSYangyu Chen  def AddrBytes = AddrBits / 8 // unused
646ff74867bSYangyu Chen  def DataBits = XLEN
647ff74867bSYangyu Chen  def DataBytes = DataBits / 8
64838c29594Szhanglinjuan  def QuadWordBits = DataBits * 2
64938c29594Szhanglinjuan  def QuadWordBytes = QuadWordBits / 8
650ff74867bSYangyu Chen  def VDataBytes = VLEN / 8
651ff74867bSYangyu Chen  def HasFPU = coreParams.HasFPU
652ff74867bSYangyu Chen  def HasVPU = coreParams.HasVPU
653ff74867bSYangyu Chen  def HasCustomCSRCacheOp = coreParams.HasCustomCSRCacheOp
654ff74867bSYangyu Chen  def FetchWidth = coreParams.FetchWidth
655ff74867bSYangyu Chen  def PredictWidth = FetchWidth * (if (HasCExtension) 2 else 1)
656ff74867bSYangyu Chen  def EnableBPU = coreParams.EnableBPU
657ff74867bSYangyu Chen  def EnableBPD = coreParams.EnableBPD // enable backing predictor(like Tage) in BPUStage3
658ff74867bSYangyu Chen  def EnableRAS = coreParams.EnableRAS
659ff74867bSYangyu Chen  def EnableLB = coreParams.EnableLB
660ff74867bSYangyu Chen  def EnableLoop = coreParams.EnableLoop
661ff74867bSYangyu Chen  def EnableSC = coreParams.EnableSC
662ff74867bSYangyu Chen  def EnbaleTlbDebug = coreParams.EnbaleTlbDebug
663ff74867bSYangyu Chen  def HistoryLength = coreParams.HistoryLength
664ff74867bSYangyu Chen  def EnableGHistDiff = coreParams.EnableGHistDiff
665ff74867bSYangyu Chen  def EnableCommitGHistDiff = coreParams.EnableCommitGHistDiff
666ff74867bSYangyu Chen  def EnableClockGate = coreParams.EnableClockGate
667ff74867bSYangyu Chen  def UbtbGHRLength = coreParams.UbtbGHRLength
668ff74867bSYangyu Chen  def UbtbSize = coreParams.UbtbSize
669ff74867bSYangyu Chen  def EnableFauFTB = coreParams.EnableFauFTB
670ff74867bSYangyu Chen  def FtbSize = coreParams.FtbSize
671ff74867bSYangyu Chen  def FtbWays = coreParams.FtbWays
6725f89ba0bSEaston Man  def FtbTagLength = coreParams.FtbTagLength
673ff74867bSYangyu Chen  def RasSize = coreParams.RasSize
674ff74867bSYangyu Chen  def RasSpecSize = coreParams.RasSpecSize
675ff74867bSYangyu Chen  def RasCtrSize = coreParams.RasCtrSize
67616a1cc4bSzoujr
677bf358e08SLingrui98  def getBPDComponents(resp_in: BranchPredictionResp, p: Parameters) = {
678bf358e08SLingrui98    coreParams.branchPredictor(resp_in, p)
67916a1cc4bSzoujr  }
680ff74867bSYangyu Chen  def numBr = coreParams.numBr
681ff74867bSYangyu Chen  def TageTableInfos = coreParams.TageTableInfos
682ff74867bSYangyu Chen  def TageBanks = coreParams.numBr
683ff74867bSYangyu Chen  def SCNRows = coreParams.SCNRows
684ff74867bSYangyu Chen  def SCCtrBits = coreParams.SCCtrBits
685ff74867bSYangyu Chen  def SCHistLens = coreParams.SCHistLens
686ff74867bSYangyu Chen  def SCNTables = coreParams.SCNTables
687dd6c0695SLingrui98
688ff74867bSYangyu Chen  def SCTableInfos = Seq.fill(SCNTables)((SCNRows, SCCtrBits)) zip SCHistLens map {
68934ed6fbcSLingrui98    case ((n, cb), h) => (n, cb, h)
690dd6c0695SLingrui98  }
691ff74867bSYangyu Chen  def ITTageTableInfos = coreParams.ITTageTableInfos
692dd6c0695SLingrui98  type FoldedHistoryInfo = Tuple2[Int, Int]
693ff74867bSYangyu Chen  def foldedGHistInfos =
6944813e060SLingrui98    (TageTableInfos.map{ case (nRows, h, t) =>
695dd6c0695SLingrui98      if (h > 0)
6964813e060SLingrui98        Set((h, min(log2Ceil(nRows/numBr), h)), (h, min(h, t)), (h, min(h, t-1)))
697dd6c0695SLingrui98      else
698dd6c0695SLingrui98        Set[FoldedHistoryInfo]()
6994813e060SLingrui98    }.reduce(_++_).toSet ++
70034ed6fbcSLingrui98    SCTableInfos.map{ case (nRows, _, h) =>
701dd6c0695SLingrui98      if (h > 0)
702e992912cSLingrui98        Set((h, min(log2Ceil(nRows/TageBanks), h)))
703dd6c0695SLingrui98      else
704dd6c0695SLingrui98        Set[FoldedHistoryInfo]()
70534ed6fbcSLingrui98    }.reduce(_++_).toSet ++
706dd6c0695SLingrui98    ITTageTableInfos.map{ case (nRows, h, t) =>
707dd6c0695SLingrui98      if (h > 0)
708dd6c0695SLingrui98        Set((h, min(log2Ceil(nRows), h)), (h, min(h, t)), (h, min(h, t-1)))
709dd6c0695SLingrui98      else
710dd6c0695SLingrui98        Set[FoldedHistoryInfo]()
711527dc111SLingrui98    }.reduce(_++_) ++
712527dc111SLingrui98      Set[FoldedHistoryInfo]((UbtbGHRLength, log2Ceil(UbtbSize)))
713527dc111SLingrui98    ).toList
71416a1cc4bSzoujr
715c7fabd05SSteve Gou
716c7fabd05SSteve Gou
717ff74867bSYangyu Chen  def CacheLineSize = coreParams.CacheLineSize
718ff74867bSYangyu Chen  def CacheLineHalfWord = CacheLineSize / 16
719ff74867bSYangyu Chen  def ExtHistoryLength = HistoryLength + 64
720b92f8445Sssszwic  def ICacheForceMetaECCError = coreParams.ICacheForceMetaECCError
721b92f8445Sssszwic  def ICacheForceDataECCError = coreParams.ICacheForceDataECCError
722ff74867bSYangyu Chen  def IBufSize = coreParams.IBufSize
723ff74867bSYangyu Chen  def IBufNBank = coreParams.IBufNBank
724ff74867bSYangyu Chen  def backendParams: BackendParams = coreParams.backendParams
725ff74867bSYangyu Chen  def DecodeWidth = coreParams.DecodeWidth
726ff74867bSYangyu Chen  def RenameWidth = coreParams.RenameWidth
727ff74867bSYangyu Chen  def CommitWidth = coreParams.CommitWidth
728ff74867bSYangyu Chen  def RobCommitWidth = coreParams.RobCommitWidth
729ff74867bSYangyu Chen  def RabCommitWidth = coreParams.RabCommitWidth
730ff74867bSYangyu Chen  def MaxUopSize = coreParams.MaxUopSize
731ff74867bSYangyu Chen  def EnableRenameSnapshot = coreParams.EnableRenameSnapshot
732ff74867bSYangyu Chen  def RenameSnapshotNum = coreParams.RenameSnapshotNum
733ff74867bSYangyu Chen  def FtqSize = coreParams.FtqSize
734ff74867bSYangyu Chen  def EnableLoadFastWakeUp = coreParams.EnableLoadFastWakeUp
735ff74867bSYangyu Chen  def IntLogicRegs = coreParams.IntLogicRegs
736ff74867bSYangyu Chen  def FpLogicRegs = coreParams.FpLogicRegs
737ff74867bSYangyu Chen  def VecLogicRegs = coreParams.VecLogicRegs
738435f48a8Sxiaofeibao  def V0LogicRegs = coreParams.V0LogicRegs
739435f48a8Sxiaofeibao  def VlLogicRegs = coreParams.VlLogicRegs
740ad5c9e6eSJunxiong Ji  def MaxLogicRegs = Set(IntLogicRegs, FpLogicRegs, VecLogicRegs, V0LogicRegs, VlLogicRegs).max
741ad5c9e6eSJunxiong Ji  def LogicRegsWidth = log2Ceil(MaxLogicRegs)
7429c5a1080Sxiaofeibao  def V0_IDX = coreParams.V0_IDX
7439c5a1080Sxiaofeibao  def Vl_IDX = coreParams.Vl_IDX
744ff74867bSYangyu Chen  def IntPhyRegs = coreParams.intPreg.numEntries
74560f0c5aeSxiaofeibao  def FpPhyRegs = coreParams.fpPreg.numEntries
746ff74867bSYangyu Chen  def VfPhyRegs = coreParams.vfPreg.numEntries
7472aa3a761Ssinsanction  def V0PhyRegs = coreParams.v0Preg.numEntries
7482aa3a761Ssinsanction  def VlPhyRegs = coreParams.vlPreg.numEntries
749e43bb916SXuan Hu  def MaxPhyRegs = Seq(IntPhyRegs, FpPhyRegs, VfPhyRegs, V0PhyRegs, VlPhyRegs).max
750e43bb916SXuan Hu  def IntPhyRegIdxWidth = log2Up(IntPhyRegs)
751e43bb916SXuan Hu  def FpPhyRegIdxWidth = log2Up(FpPhyRegs)
752e43bb916SXuan Hu  def VfPhyRegIdxWidth = log2Up(VfPhyRegs)
753e43bb916SXuan Hu  def V0PhyRegIdxWidth = log2Up(V0PhyRegs)
754e43bb916SXuan Hu  def VlPhyRegIdxWidth = log2Up(VlPhyRegs)
755e43bb916SXuan Hu  def PhyRegIdxWidth = Seq(IntPhyRegIdxWidth, FpPhyRegIdxWidth, VfPhyRegIdxWidth, V0PhyRegIdxWidth, VlPhyRegIdxWidth).max
756ff74867bSYangyu Chen  def RobSize = coreParams.RobSize
757ff74867bSYangyu Chen  def RabSize = coreParams.RabSize
758ff74867bSYangyu Chen  def VTypeBufferSize = coreParams.VTypeBufferSize
759ae4984bfSsinsanction  def IntRegCacheSize = coreParams.IntRegCacheSize
760ae4984bfSsinsanction  def MemRegCacheSize = coreParams.MemRegCacheSize
761ae4984bfSsinsanction  def RegCacheSize = coreParams.RegCacheSize
762ae4984bfSsinsanction  def RegCacheIdxWidth = coreParams.RegCacheIdxWidth
7636dbb4e08SXuan Hu  /**
7646dbb4e08SXuan Hu   * the minimum element length of vector elements
7656dbb4e08SXuan Hu   */
766a4d1b2d1Sgood-circle  def minVecElen: Int = coreParams.minVecElen
7676dbb4e08SXuan Hu
7686dbb4e08SXuan Hu  /**
7696dbb4e08SXuan Hu   * the maximum number of elements in vector register
7706dbb4e08SXuan Hu   */
771a4d1b2d1Sgood-circle  def maxElemPerVreg: Int = coreParams.maxElemPerVreg
7726dbb4e08SXuan Hu
773ff74867bSYangyu Chen  def IntRefCounterWidth = log2Ceil(RobSize)
774ff74867bSYangyu Chen  def LSQEnqWidth = coreParams.dpParams.LsDqDeqWidth
775ff74867bSYangyu Chen  def LSQLdEnqWidth = LSQEnqWidth min backendParams.numLoadDp
776ff74867bSYangyu Chen  def LSQStEnqWidth = LSQEnqWidth min backendParams.numStoreDp
777ff74867bSYangyu Chen  def VirtualLoadQueueSize = coreParams.VirtualLoadQueueSize
778ff74867bSYangyu Chen  def LoadQueueRARSize = coreParams.LoadQueueRARSize
779ff74867bSYangyu Chen  def LoadQueueRAWSize = coreParams.LoadQueueRAWSize
780ff74867bSYangyu Chen  def RollbackGroupSize = coreParams.RollbackGroupSize
781ff74867bSYangyu Chen  def LoadQueueReplaySize = coreParams.LoadQueueReplaySize
782ff74867bSYangyu Chen  def LoadUncacheBufferSize = coreParams.LoadUncacheBufferSize
783ff74867bSYangyu Chen  def LoadQueueNWriteBanks = coreParams.LoadQueueNWriteBanks
784ff74867bSYangyu Chen  def StoreQueueSize = coreParams.StoreQueueSize
7857a9ea6c5SAnzooooo  def VirtualLoadQueueMaxStoreQueueSize = VirtualLoadQueueSize max StoreQueueSize
786ff74867bSYangyu Chen  def StoreQueueNWriteBanks = coreParams.StoreQueueNWriteBanks
787ff74867bSYangyu Chen  def StoreQueueForwardWithMask = coreParams.StoreQueueForwardWithMask
788ff74867bSYangyu Chen  def VlsQueueSize = coreParams.VlsQueueSize
789ff74867bSYangyu Chen  def dpParams = coreParams.dpParams
7903b739f49SXuan Hu
791351e22f2SXuan Hu  def MemIQSizeMax = backendParams.memSchdParams.get.issueBlockParams.map(_.numEntries).max
792351e22f2SXuan Hu  def IQSizeMax = backendParams.allSchdParams.map(_.issueBlockParams.map(_.numEntries).max).max
793c7d010e5SXuan Hu
794ff74867bSYangyu Chen  def NumRedirect = backendParams.numRedirect
795ff74867bSYangyu Chen  def BackendRedirectNum = NumRedirect + 2 //2: ldReplay + Exception
796ff74867bSYangyu Chen  def FtqRedirectAheadNum = NumRedirect
79795a47398SGao-Zeyu  def IfuRedirectNum = coreParams.IfuRedirectNum
798ff74867bSYangyu Chen  def LoadPipelineWidth = coreParams.LoadPipelineWidth
799ff74867bSYangyu Chen  def StorePipelineWidth = coreParams.StorePipelineWidth
800ff74867bSYangyu Chen  def VecLoadPipelineWidth = coreParams.VecLoadPipelineWidth
801ff74867bSYangyu Chen  def VecStorePipelineWidth = coreParams.VecStorePipelineWidth
802ff74867bSYangyu Chen  def VecMemSrcInWidth = coreParams.VecMemSrcInWidth
803ff74867bSYangyu Chen  def VecMemInstWbWidth = coreParams.VecMemInstWbWidth
804ff74867bSYangyu Chen  def VecMemDispatchWidth = coreParams.VecMemDispatchWidth
805a4d1b2d1Sgood-circle  def VecMemDispatchMaxNumber = coreParams.VecMemDispatchMaxNumber
8069ff64fb6SAnzooooo  def VecMemUnitStrideMaxFlowNum = coreParams.VecMemUnitStrideMaxFlowNum
8079ff64fb6SAnzooooo  def VecMemLSQEnqIteratorNumberSeq = coreParams.VecMemLSQEnqIteratorNumberSeq
808ff74867bSYangyu Chen  def StoreBufferSize = coreParams.StoreBufferSize
809ff74867bSYangyu Chen  def StoreBufferThreshold = coreParams.StoreBufferThreshold
810ff74867bSYangyu Chen  def EnsbufferWidth = coreParams.EnsbufferWidth
811ff74867bSYangyu Chen  def LoadDependencyWidth = coreParams.LoadDependencyWidth
812a4d1b2d1Sgood-circle  def VlMergeBufferSize = coreParams.VlMergeBufferSize
813a4d1b2d1Sgood-circle  def VsMergeBufferSize = coreParams.VsMergeBufferSize
814a4d1b2d1Sgood-circle  def UopWritebackWidth = coreParams.UopWritebackWidth
815a4d1b2d1Sgood-circle  def VLUopWritebackWidth = coreParams.VLUopWritebackWidth
816a4d1b2d1Sgood-circle  def VSUopWritebackWidth = coreParams.VSUopWritebackWidth
817a4d1b2d1Sgood-circle  def VSegmentBufferSize = coreParams.VSegmentBufferSize
818df3b4b92SAnzooooo  def VFOFBufferSize = coreParams.VFOFBufferSize
819ff74867bSYangyu Chen  def UncacheBufferSize = coreParams.UncacheBufferSize
82074050fc0SYanqin Li  def UncacheBufferIndexWidth = log2Up(UncacheBufferSize)
821ff74867bSYangyu Chen  def EnableLoadToLoadForward = coreParams.EnableLoadToLoadForward
822ff74867bSYangyu Chen  def EnableFastForward = coreParams.EnableFastForward
823ff74867bSYangyu Chen  def EnableLdVioCheckAfterReset = coreParams.EnableLdVioCheckAfterReset
824ff74867bSYangyu Chen  def EnableSoftPrefetchAfterReset = coreParams.EnableSoftPrefetchAfterReset
825ff74867bSYangyu Chen  def EnableCacheErrorAfterReset = coreParams.EnableCacheErrorAfterReset
826ff74867bSYangyu Chen  def EnableAccurateLoadError = coreParams.EnableAccurateLoadError
827ff74867bSYangyu Chen  def EnableUncacheWriteOutstanding = coreParams.EnableUncacheWriteOutstanding
82841d8d239Shappy-lx  def EnableHardwareStoreMisalign = coreParams.EnableHardwareStoreMisalign
82941d8d239Shappy-lx  def EnableHardwareLoadMisalign = coreParams.EnableHardwareLoadMisalign
830ff74867bSYangyu Chen  def EnableStorePrefetchAtIssue = coreParams.EnableStorePrefetchAtIssue
831ff74867bSYangyu Chen  def EnableStorePrefetchAtCommit = coreParams.EnableStorePrefetchAtCommit
832ff74867bSYangyu Chen  def EnableAtCommitMissTrigger = coreParams.EnableAtCommitMissTrigger
833ff74867bSYangyu Chen  def EnableStorePrefetchSMS = coreParams.EnableStorePrefetchSMS
834ff74867bSYangyu Chen  def EnableStorePrefetchSPB = coreParams.EnableStorePrefetchSPB
835e3ed843cShappy-lx  def HasCMO = coreParams.HasCMO && p(EnableCHI)
8361d260098SXuan Hu  require(LoadPipelineWidth == backendParams.LdExuCnt, "LoadPipelineWidth must be equal exuParameters.LduCnt!")
8371d260098SXuan Hu  require(StorePipelineWidth == backendParams.StaCnt, "StorePipelineWidth must be equal exuParameters.StuCnt!")
838ff74867bSYangyu Chen  def Enable3Load3Store = (LoadPipelineWidth == 3 && StorePipelineWidth == 3)
839ff74867bSYangyu Chen  def asidLen = coreParams.MMUAsidLen
840ff74867bSYangyu Chen  def vmidLen = coreParams.MMUVmidLen
841ff74867bSYangyu Chen  def BTLBWidth = coreParams.LoadPipelineWidth + coreParams.StorePipelineWidth
842ff74867bSYangyu Chen  def refillBothTlb = coreParams.refillBothTlb
843ff74867bSYangyu Chen  def iwpuParam = coreParams.iwpuParameters
844ff74867bSYangyu Chen  def dwpuParam = coreParams.dwpuParameters
845ff74867bSYangyu Chen  def itlbParams = coreParams.itlbParameters
846ff74867bSYangyu Chen  def ldtlbParams = coreParams.ldtlbParameters
847ff74867bSYangyu Chen  def sttlbParams = coreParams.sttlbParameters
848ff74867bSYangyu Chen  def hytlbParams = coreParams.hytlbParameters
849ff74867bSYangyu Chen  def pftlbParams = coreParams.pftlbParameters
850ff74867bSYangyu Chen  def l2ToL1Params = coreParams.l2ToL1tlbParameters
851ff74867bSYangyu Chen  def btlbParams = coreParams.btlbParameters
852ff74867bSYangyu Chen  def l2tlbParams = coreParams.l2tlbParameters
853ff74867bSYangyu Chen  def NumPerfCounters = coreParams.NumPerfCounters
8542225d46eSJiawei Lin
855ff74867bSYangyu Chen  def instBytes = if (HasCExtension) 2 else 4
856ff74867bSYangyu Chen  def instOffsetBits = log2Ceil(instBytes)
8572225d46eSJiawei Lin
858ff74867bSYangyu Chen  def icacheParameters = coreParams.icacheParameters
859ff74867bSYangyu Chen  def dcacheParameters = coreParams.dcacheParametersOpt.getOrElse(DCacheParameters())
8602225d46eSJiawei Lin
861b899def8SWilliam Wang  // dcache block cacheline when lr for LRSCCycles - LRSCBackOff cycles
862b899def8SWilliam Wang  // for constrained LR/SC loop
863ff74867bSYangyu Chen  def LRSCCycles = 64
864b899def8SWilliam Wang  // for lr storm
865ff74867bSYangyu Chen  def LRSCBackOff = 8
8662225d46eSJiawei Lin
8672225d46eSJiawei Lin  // cache hierarchy configurations
868ff74867bSYangyu Chen  def l1BusDataWidth = 256
8692225d46eSJiawei Lin
870de169c67SWilliam Wang  // load violation predict
871ff74867bSYangyu Chen  def ResetTimeMax2Pow = 20 //1078576
872ff74867bSYangyu Chen  def ResetTimeMin2Pow = 10 //1024
873de169c67SWilliam Wang  // wait table parameters
874ff74867bSYangyu Chen  def WaitTableSize = 1024
875ff74867bSYangyu Chen  def MemPredPCWidth = log2Up(WaitTableSize)
876ff74867bSYangyu Chen  def LWTUse2BitCounter = true
877de169c67SWilliam Wang  // store set parameters
878ff74867bSYangyu Chen  def SSITSize = WaitTableSize
879ff74867bSYangyu Chen  def LFSTSize = 32
880ff74867bSYangyu Chen  def SSIDWidth = log2Up(LFSTSize)
881ff74867bSYangyu Chen  def LFSTWidth = 4
882ff74867bSYangyu Chen  def StoreSetEnable = true // LWT will be disabled if SS is enabled
883ff74867bSYangyu Chen  def LFSTEnable = true
884cc4fb544Ssfencevma
885ff74867bSYangyu Chen  def PCntIncrStep: Int = 6
8868bb30a57SJiru Sun  def numPCntHc: Int = 12
887ff74867bSYangyu Chen  def numPCntPtw: Int = 19
888cd365d4cSrvcoresjw
889ff74867bSYangyu Chen  def numCSRPCntFrontend = 8
890ff74867bSYangyu Chen  def numCSRPCntCtrl     = 8
891ff74867bSYangyu Chen  def numCSRPCntLsu      = 8
892ff74867bSYangyu Chen  def numCSRPCntHc       = 5
893ff74867bSYangyu Chen  def printEventCoding   = true
89485a8d7caSZehao Liu  def printCriticalError = false
89585a8d7caSZehao Liu  def maxCommitStuck = pow(2, 21).toInt
896f7af4c74Schengguanghui
897e43bb916SXuan Hu  // Vector load exception
898e43bb916SXuan Hu  def maxMergeNumPerCycle = 4
899e43bb916SXuan Hu
900f7af4c74Schengguanghui  // Parameters for Sdtrig extension
901ff74867bSYangyu Chen  protected def TriggerNum = 4
902ff74867bSYangyu Chen  protected def TriggerChainMaxLength = 2
90349162c9aSGuanghui Cheng
90449162c9aSGuanghui Cheng  // Parameters for Trace extension
9054907ec88Schengguanghui  def TraceGroupNum          = coreParams.traceParams.TraceGroupNum
9064907ec88Schengguanghui  def CauseWidth             = XLEN
907551cc696Schengguanghui  def TvalWidth              = coreParams.traceParams.IaddrWidth
908725e8ddcSchengguanghui  def PrivWidth              = coreParams.traceParams.PrivWidth
909551cc696Schengguanghui  def IaddrWidth             = coreParams.traceParams.IaddrWidth
910725e8ddcSchengguanghui  def ItypeWidth             = coreParams.traceParams.ItypeWidth
9114907ec88Schengguanghui  def IretireWidthInPipe     = log2Up(RenameWidth * 2)
9124907ec88Schengguanghui  def IretireWidthCompressed = log2Up(RenameWidth * CommitWidth * 2)
913725e8ddcSchengguanghui  def IlastsizeWidth         = coreParams.traceParams.IlastsizeWidth
9142225d46eSJiawei Lin}
915