xref: /XiangShan/src/main/scala/xiangshan/Parameters.scala (revision 72dab9745cef33532f03ca252d63455645aaab8a)
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.cache.prefetch._
35a1ea7f76SJiawei Linimport xiangshan.frontend.{BasePredictor, BranchPredictionResp, FTB, FakePredictor, RAS, Tage, ITTage, Tage_SC, FauFTB}
3660f966c8SGuokai Chenimport xiangshan.frontend.icache.ICacheParameters
373b739f49SXuan Huimport xiangshan.cache.mmu.{L2TLBParameters, TLBParameters}
383b739f49SXuan Huimport xiangshan.frontend._
393b739f49SXuan Huimport xiangshan.frontend.icache.ICacheParameters
40d4aca96cSlqreimport freechips.rocketchip.diplomacy.AddressSet
41f57f7f2aSYangyu Chenimport freechips.rocketchip.tile.MaxHartIdBits
422f30d658SYinan Xuimport system.SoCParamsKey
4398c71602SJiawei Linimport huancun._
4498c71602SJiawei Linimport huancun.debug._
4504665835SMaxpicca-Liimport xiangshan.cache.wpu.WPUParameters
4615ee59e4Swakafaimport coupledL2._
478537b88aSTang Haojinimport coupledL2.tl2chi._
48bf35baadSXuan Huimport xiangshan.backend.datapath.WakeUpConfig
49289fc2f9SLinJiaweiimport xiangshan.mem.prefetch.{PrefetcherParams, SMSParams}
50289fc2f9SLinJiawei
5185a8d7caSZehao Liuimport scala.math.{max, min, pow}
5234ab1ae9SJiawei Lin
5334ab1ae9SJiawei Lincase object XSTileKey extends Field[Seq[XSCoreParameters]]
5434ab1ae9SJiawei Lin
552225d46eSJiawei Lincase object XSCoreParamsKey extends Field[XSCoreParameters]
562225d46eSJiawei Lin
572225d46eSJiawei Lincase class XSCoreParameters
582225d46eSJiawei Lin(
592225d46eSJiawei Lin  HasPrefetch: Boolean = false,
602225d46eSJiawei Lin  HartId: Int = 0,
612225d46eSJiawei Lin  XLEN: Int = 64,
62deb6421eSHaojin Tang  VLEN: Int = 128,
63a8db15d8Sfdy  ELEN: Int = 64,
64d0de7e4aSpeixiaokun  HSXLEN: Int = 64,
652225d46eSJiawei Lin  HasMExtension: Boolean = true,
662225d46eSJiawei Lin  HasCExtension: Boolean = true,
67d0de7e4aSpeixiaokun  HasHExtension: Boolean = true,
682225d46eSJiawei Lin  HasDiv: Boolean = true,
692225d46eSJiawei Lin  HasICache: Boolean = true,
702225d46eSJiawei Lin  HasDCache: Boolean = true,
712225d46eSJiawei Lin  AddrBits: Int = 64,
72dd980d61SXu, Zefan  PAddrBitsMax: Int = 56,   // The bits of physical address from Sv39/Sv48/Sv57 virtual address translation.
7397929664SXiaokun-Pei  VAddrBitsSv39: Int = 39,
7497929664SXiaokun-Pei  GPAddrBitsSv39x4: Int = 41,
7597929664SXiaokun-Pei  VAddrBitsSv48: Int = 48,
7697929664SXiaokun-Pei  GPAddrBitsSv48x4: Int = 50,
772225d46eSJiawei Lin  HasFPU: Boolean = true,
7835d1557aSZiyue Zhang  HasVPU: Boolean = true,
79ad3ba452Szhanglinjuan  HasCustomCSRCacheOp: Boolean = true,
802225d46eSJiawei Lin  FetchWidth: Int = 8,
8145f497a4Shappy-lx  AsidLength: Int = 16,
82d0de7e4aSpeixiaokun  VmidLength: Int = 14,
832225d46eSJiawei Lin  EnableBPU: Boolean = true,
842225d46eSJiawei Lin  EnableBPD: Boolean = true,
852225d46eSJiawei Lin  EnableRAS: Boolean = true,
862225d46eSJiawei Lin  EnableLB: Boolean = false,
872225d46eSJiawei Lin  EnableLoop: Boolean = true,
88e0f3968cSzoujr  EnableSC: Boolean = true,
892225d46eSJiawei Lin  EnbaleTlbDebug: Boolean = false,
90918d87f2SsinceforYy  EnableClockGate: Boolean = true,
912225d46eSJiawei Lin  EnableJal: Boolean = false,
9211d0c81dSLingrui98  EnableFauFTB: Boolean = true,
933ea4388cSHaoyuan Feng  EnableSv48: Boolean = true,
94f2aabf0dSLingrui98  UbtbGHRLength: Int = 4,
95c7fabd05SSteve Gou  // HistoryLength: Int = 512,
962f7b35ceSLingrui98  EnableGHistDiff: Boolean = true,
97ab0200c8SEaston Man  EnableCommitGHistDiff: Boolean = true,
98edc18578SLingrui98  UbtbSize: Int = 256,
99b37e4b45SLingrui98  FtbSize: Int = 2048,
1005f89ba0bSEaston Man  FtbWays: Int = 4,
1015f89ba0bSEaston Man  FtbTagLength: Int = 20,
1020b8e1fd0SGuokai Chen  RasSize: Int = 16,
1030b8e1fd0SGuokai Chen  RasSpecSize: Int = 32,
10477bef50aSGuokai Chen  RasCtrSize: Int = 3,
1052225d46eSJiawei Lin  CacheLineSize: Int = 512,
106dd6c0695SLingrui98  TageTableInfos: Seq[Tuple3[Int,Int,Int]] =
107dd6c0695SLingrui98  //       Sets  Hist   Tag
10851e26c03SLingrui98    Seq(( 4096,    8,    8),
10951e26c03SLingrui98        ( 4096,   13,    8),
11051e26c03SLingrui98        ( 4096,   32,    8),
11151e26c03SLingrui98        ( 4096,  119,    8)),
112dd6c0695SLingrui98  ITTageTableInfos: Seq[Tuple3[Int,Int,Int]] =
113dd6c0695SLingrui98  //      Sets  Hist   Tag
11403c81005SLingrui98    Seq(( 256,    4,    9),
115527dc111SLingrui98        ( 256,    8,    9),
1163581d7d3SLingrui98        ( 512,   13,    9),
117527dc111SLingrui98        ( 512,   16,    9),
118f2aabf0dSLingrui98        ( 512,   32,    9)),
11982dc6ff8SLingrui98  SCNRows: Int = 512,
12082dc6ff8SLingrui98  SCNTables: Int = 4,
121dd6c0695SLingrui98  SCCtrBits: Int = 6,
12282dc6ff8SLingrui98  SCHistLens: Seq[Int] = Seq(0, 4, 10, 16),
123dd6c0695SLingrui98  numBr: Int = 2,
124dc5a9185SEaston Man  branchPredictor: (BranchPredictionResp, Parameters) => Tuple2[Seq[BasePredictor], BranchPredictionResp] =
125dc5a9185SEaston Man  (resp_in: BranchPredictionResp, p: Parameters) => {
12616a1cc4bSzoujr    val ftb = Module(new FTB()(p))
127dc5a9185SEaston Man    val uftb = Module(new FauFTB()(p))
128bf358e08SLingrui98    val tage = Module(new Tage_SC()(p))
1294cd08aa8SLingrui98    val ras = Module(new RAS()(p))
13060f966c8SGuokai Chen    val ittage = Module(new ITTage()(p))
131dc5a9185SEaston Man    val preds = Seq(uftb, tage, ftb, ittage, ras)
13216a1cc4bSzoujr    preds.map(_.io := DontCare)
13316a1cc4bSzoujr
134fd3aa057SYuandongliang    ftb.io.fauftb_entry_in  := uftb.io.fauftb_entry_out
135fd3aa057SYuandongliang    ftb.io.fauftb_entry_hit_in := uftb.io.fauftb_entry_hit_out
136fd3aa057SYuandongliang
137dc5a9185SEaston Man    uftb.io.in.bits.resp_in(0) := resp_in
138dc5a9185SEaston Man    tage.io.in.bits.resp_in(0) := uftb.io.out
139c2d1ec7dSLingrui98    ftb.io.in.bits.resp_in(0) := tage.io.out
140c2d1ec7dSLingrui98    ittage.io.in.bits.resp_in(0) := ftb.io.out
141c2d1ec7dSLingrui98    ras.io.in.bits.resp_in(0) := ittage.io.out
14216a1cc4bSzoujr
143c2d1ec7dSLingrui98    (preds, ras.io.out)
144dc5a9185SEaston Man  },
145b92f8445Sssszwic  ICacheForceMetaECCError: Boolean = false,
146b92f8445Sssszwic  ICacheForceDataECCError: Boolean = false,
1472225d46eSJiawei Lin  IBufSize: Int = 48,
14844c9c1deSEaston Man  IBufNBank: Int = 6, // IBuffer bank amount, should divide IBufSize
1492225d46eSJiawei Lin  DecodeWidth: Int = 6,
1502225d46eSJiawei Lin  RenameWidth: Int = 6,
151780712aaSxiaofeibao-xjtu  CommitWidth: Int = 8,
152780712aaSxiaofeibao-xjtu  RobCommitWidth: Int = 8,
153780712aaSxiaofeibao-xjtu  RabCommitWidth: Int = 6,
15465df1368Sczw  MaxUopSize: Int = 65,
155fa7f2c26STang Haojin  EnableRenameSnapshot: Boolean = true,
156fa7f2c26STang Haojin  RenameSnapshotNum: Int = 4,
1575df4db2aSLingrui98  FtqSize: Int = 64,
1582225d46eSJiawei Lin  EnableLoadFastWakeUp: Boolean = true, // NOTE: not supported now, make it false
159a8db15d8Sfdy  IntLogicRegs: Int = 32,
160f2ea741cSzhanglinjuan  FpLogicRegs: Int = 32 + 1 + 1, // 1: I2F, 1: stride
1612cf47c6eSxiaofeibao  VecLogicRegs: Int = 32 + 15, // 15: tmp
162435f48a8Sxiaofeibao  V0LogicRegs: Int = 1, // V0
163dbe071d2Sxiaofeibao  VlLogicRegs: Int = 1, // Vl
1649c5a1080Sxiaofeibao  V0_IDX: Int = 0,
1659c5a1080Sxiaofeibao  Vl_IDX: Int = 0,
1667154d65eSYinan Xu  NRPhyRegs: Int = 192,
1678ff9f385SHaojin Tang  VirtualLoadQueueSize: Int = 72,
1688ff9f385SHaojin Tang  LoadQueueRARSize: Int = 72,
169e4f69d78Ssfencevma  LoadQueueRAWSize: Int = 64, // NOTE: make sure that LoadQueueRAWSize is power of 2.
170e4f69d78Ssfencevma  RollbackGroupSize: Int = 8,
17144cbc983Ssfencevma  LoadQueueReplaySize: Int = 72,
172e4f69d78Ssfencevma  LoadUncacheBufferSize: Int = 20,
173e4f69d78Ssfencevma  LoadQueueNWriteBanks: Int = 8, // NOTE: make sure that LoadQueueRARSize/LoadQueueRAWSize is divided by LoadQueueNWriteBanks
1742b4e8253SYinan Xu  StoreQueueSize: Int = 64,
175e4f69d78Ssfencevma  StoreQueueNWriteBanks: Int = 8, // NOTE: make sure that StoreQueueSize is divided by StoreQueueNWriteBanks
176e4f69d78Ssfencevma  StoreQueueForwardWithMask: Boolean = true,
177cea88ff8SWilliam Wang  VlsQueueSize: Int = 8,
1781f35da39Sxiaofeibao-xjtu  RobSize: Int = 160,
179a8db15d8Sfdy  RabSize: Int = 256,
1804c7680e0SXuan Hu  VTypeBufferSize: Int = 64, // used to reorder vtype
1811f35da39Sxiaofeibao-xjtu  IssueQueueSize: Int = 24,
18228607074Ssinsanction  IssueQueueCompEntrySize: Int = 16,
1832225d46eSJiawei Lin  dpParams: DispatchParameters = DispatchParameters(
1842225d46eSJiawei Lin    IntDqSize = 16,
1852225d46eSJiawei Lin    FpDqSize = 16,
186b1a9bf2eSXuan Hu    LsDqSize = 18,
187ff3fcdf1Sxiaofeibao-xjtu    IntDqDeqWidth = 8,
1883b739f49SXuan Hu    FpDqDeqWidth = 6,
18960f0c5aeSxiaofeibao    VecDqDeqWidth = 6,
1903b739f49SXuan Hu    LsDqDeqWidth = 6,
1912225d46eSJiawei Lin  ),
1923b739f49SXuan Hu  intPreg: PregParams = IntPregParams(
1936f7be84aSXuan Hu    numEntries = 224,
19439c59369SXuan Hu    numRead = None,
19539c59369SXuan Hu    numWrite = None,
1962225d46eSJiawei Lin  ),
19760f0c5aeSxiaofeibao  fpPreg: PregParams = FpPregParams(
19839c59369SXuan Hu    numEntries = 192,
199fc605fcfSsinsanction    numRead = None,
20039c59369SXuan Hu    numWrite = None,
2013b739f49SXuan Hu  ),
20260f0c5aeSxiaofeibao  vfPreg: VfPregParams = VfPregParams(
20360f0c5aeSxiaofeibao    numEntries = 128,
20460f0c5aeSxiaofeibao    numRead = None,
20560f0c5aeSxiaofeibao    numWrite = None,
20660f0c5aeSxiaofeibao  ),
2072aa3a761Ssinsanction  v0Preg: V0PregParams = V0PregParams(
2082aa3a761Ssinsanction    numEntries = 22,
2092aa3a761Ssinsanction    numRead = None,
2102aa3a761Ssinsanction    numWrite = None,
2112aa3a761Ssinsanction  ),
2122aa3a761Ssinsanction  vlPreg: VlPregParams = VlPregParams(
2132aa3a761Ssinsanction    numEntries = 32,
2142aa3a761Ssinsanction    numRead = None,
2152aa3a761Ssinsanction    numWrite = None,
2162aa3a761Ssinsanction  ),
217ae4984bfSsinsanction  IntRegCacheSize: Int = 16,
218ae4984bfSsinsanction  MemRegCacheSize: Int = 12,
2194376b525SZiyue Zhang  intSchdVlWbPort: Int = 0,
2204376b525SZiyue Zhang  vfSchdVlWbPort: Int = 1,
221289fc2f9SLinJiawei  prefetcher: Option[PrefetcherParams] = Some(SMSParams()),
22295a47398SGao-Zeyu  IfuRedirectNum: Int = 1,
223a81cda24Ssfencevma  LoadPipelineWidth: Int = 3,
2242142592bSxiaofeibao-xjtu  StorePipelineWidth: Int = 2,
225ef142700Sxiaofeibao  VecLoadPipelineWidth: Int = 2,
226ef142700Sxiaofeibao  VecStorePipelineWidth: Int = 2,
227cea88ff8SWilliam Wang  VecMemSrcInWidth: Int = 2,
228cea88ff8SWilliam Wang  VecMemInstWbWidth: Int = 1,
229cea88ff8SWilliam Wang  VecMemDispatchWidth: Int = 1,
2303ea758f9SAnzo  VecMemDispatchMaxNumber: Int = 16,
2319ff64fb6SAnzooooo  VecMemUnitStrideMaxFlowNum: Int = 2,
2329ff64fb6SAnzooooo  VecMemLSQEnqIteratorNumberSeq: Seq[Int] = Seq(16, 2, 2, 2, 2, 2),
2332225d46eSJiawei Lin  StoreBufferSize: Int = 16,
23405f23f57SWilliam Wang  StoreBufferThreshold: Int = 7,
23546f74b57SHaojin Tang  EnsbufferWidth: Int = 2,
236ec49b127Ssinsanction  LoadDependencyWidth: Int = 2,
23720a5248fSzhanglinjuan  // ============ VLSU ============
238b2d6d8e7Sgood-circle  VlMergeBufferSize: Int = 16,
239b2d6d8e7Sgood-circle  VsMergeBufferSize: Int = 16,
240ef142700Sxiaofeibao  UopWritebackWidth: Int = 2,
241ef142700Sxiaofeibao  VLUopWritebackWidth: Int = 2,
242627be78bSgood-circle  VSUopWritebackWidth: Int = 1,
24388884326Sweiding liu  VSegmentBufferSize: Int = 8,
244df3b4b92SAnzooooo  VFOFBufferSize: Int = 8,
245df3b4b92SAnzooooo  VLFOFWritebackWidth: Int = 1,
24620a5248fSzhanglinjuan  // ==============================
24737225120Ssfencevma  UncacheBufferSize: Int = 4,
248cd2ff98bShappy-lx  EnableLoadToLoadForward: Boolean = false,
24914a67055Ssfencevma  EnableFastForward: Boolean = true,
250beabc72dSWilliam Wang  EnableLdVioCheckAfterReset: Boolean = true,
251026615fcSWilliam Wang  EnableSoftPrefetchAfterReset: Boolean = true,
252026615fcSWilliam Wang  EnableCacheErrorAfterReset: Boolean = true,
253b23df8f4Ssfencevma  EnableAccurateLoadError: Boolean = false,
254e32bafbaSbugGenerator  EnableUncacheWriteOutstanding: Boolean = false,
25541d8d239Shappy-lx  EnableHardwareStoreMisalign: Boolean = true,
25641d8d239Shappy-lx  EnableHardwareLoadMisalign: Boolean = true,
2570d32f713Shappy-lx  EnableStorePrefetchAtIssue: Boolean = false,
2580d32f713Shappy-lx  EnableStorePrefetchAtCommit: Boolean = false,
2590d32f713Shappy-lx  EnableAtCommitMissTrigger: Boolean = true,
2600d32f713Shappy-lx  EnableStorePrefetchSMS: Boolean = false,
2610d32f713Shappy-lx  EnableStorePrefetchSPB: Boolean = false,
262e3ed843cShappy-lx  HasCMO: Boolean = true,
26345f497a4Shappy-lx  MMUAsidLen: Int = 16, // max is 16, 0 is not supported now
264d0de7e4aSpeixiaokun  MMUVmidLen: Int = 14,
26562dfd6c3Shappy-lx  ReSelectLen: Int = 7, // load replay queue replay select counter len
26604665835SMaxpicca-Li  iwpuParameters: WPUParameters = WPUParameters(
26704665835SMaxpicca-Li    enWPU = false,
26804665835SMaxpicca-Li    algoName = "mmru",
26904665835SMaxpicca-Li    isICache = true,
27004665835SMaxpicca-Li  ),
27104665835SMaxpicca-Li  dwpuParameters: WPUParameters = WPUParameters(
27204665835SMaxpicca-Li    enWPU = false,
27304665835SMaxpicca-Li    algoName = "mmru",
27404665835SMaxpicca-Li    enCfPred = false,
27504665835SMaxpicca-Li    isICache = false,
27604665835SMaxpicca-Li  ),
277a0301c0dSLemover  itlbParameters: TLBParameters = TLBParameters(
278a0301c0dSLemover    name = "itlb",
279a0301c0dSLemover    fetchi = true,
280a0301c0dSLemover    useDmode = false,
281f9ac118cSHaoyuan Feng    NWays = 48,
282a0301c0dSLemover  ),
283b92f8445Sssszwic  itlbPortNum: Int = ICacheParameters().PortNumber + 1,
284b92f8445Sssszwic  ipmpPortNum: Int = 2 * ICacheParameters().PortNumber + 1,
285a0301c0dSLemover  ldtlbParameters: TLBParameters = TLBParameters(
286a0301c0dSLemover    name = "ldtlb",
287f9ac118cSHaoyuan Feng    NWays = 48,
28853b8f1a7SLemover    outReplace = false,
2895b7ef044SLemover    partialStaticPMP = true,
290f1fe8698SLemover    outsideRecvFlush = true,
2913ea4388cSHaoyuan Feng    saveLevel = false,
29226af847eSgood-circle    lgMaxSize = 4
293a0301c0dSLemover  ),
294a0301c0dSLemover  sttlbParameters: TLBParameters = TLBParameters(
295a0301c0dSLemover    name = "sttlb",
296f9ac118cSHaoyuan Feng    NWays = 48,
29753b8f1a7SLemover    outReplace = false,
2985b7ef044SLemover    partialStaticPMP = true,
299f1fe8698SLemover    outsideRecvFlush = true,
3003ea4388cSHaoyuan Feng    saveLevel = false,
30126af847eSgood-circle    lgMaxSize = 4
302a0301c0dSLemover  ),
3038f1fa9b1Ssfencevma  hytlbParameters: TLBParameters = TLBParameters(
3048f1fa9b1Ssfencevma    name = "hytlb",
305531c40faSsinceforYy    NWays = 48,
306531c40faSsinceforYy    outReplace = false,
3078f1fa9b1Ssfencevma    partialStaticPMP = true,
3088f1fa9b1Ssfencevma    outsideRecvFlush = true,
3093ea4388cSHaoyuan Feng    saveLevel = false,
31026af847eSgood-circle    lgMaxSize = 4
3118f1fa9b1Ssfencevma  ),
312c8309e8aSHaoyuan Feng  pftlbParameters: TLBParameters = TLBParameters(
313c8309e8aSHaoyuan Feng    name = "pftlb",
314f9ac118cSHaoyuan Feng    NWays = 48,
315c8309e8aSHaoyuan Feng    outReplace = false,
316c8309e8aSHaoyuan Feng    partialStaticPMP = true,
317c8309e8aSHaoyuan Feng    outsideRecvFlush = true,
3183ea4388cSHaoyuan Feng    saveLevel = false,
31926af847eSgood-circle    lgMaxSize = 4
320c8309e8aSHaoyuan Feng  ),
321aee6a6d1SYanqin Li  l2ToL1tlbParameters: TLBParameters = TLBParameters(
322aee6a6d1SYanqin Li    name = "l2tlb",
323aee6a6d1SYanqin Li    NWays = 48,
324aee6a6d1SYanqin Li    outReplace = false,
325aee6a6d1SYanqin Li    partialStaticPMP = true,
326aee6a6d1SYanqin Li    outsideRecvFlush = true,
3273ea4388cSHaoyuan Feng    saveLevel = false
328aee6a6d1SYanqin Li  ),
329bf08468cSLemover  refillBothTlb: Boolean = false,
330a0301c0dSLemover  btlbParameters: TLBParameters = TLBParameters(
331a0301c0dSLemover    name = "btlb",
332f9ac118cSHaoyuan Feng    NWays = 48,
333a0301c0dSLemover  ),
3345854c1edSLemover  l2tlbParameters: L2TLBParameters = L2TLBParameters(),
3352225d46eSJiawei Lin  NumPerfCounters: Int = 16,
33605f23f57SWilliam Wang  icacheParameters: ICacheParameters = ICacheParameters(
33705f23f57SWilliam Wang    tagECC = Some("parity"),
33805f23f57SWilliam Wang    dataECC = Some("parity"),
33905f23f57SWilliam Wang    replacer = Some("setplru"),
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,
350*72dab974Scz4e    enableDataEcc = true,
351*72dab974Scz4e    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",
375b867eb9fSTang Haojin    "sv48", "svade", "svbare", "svinval", "svpbmt", "za64rs", "zacas", "zba", "zbb", "zbc", "zbkb",
376b867eb9fSTang Haojin    "zbkc", "zbkx", "zbs", "zcb", "zcmop", "zfa", "zfh", "zfhmin", "zic64b", "zicbom", "zicbop",
377b867eb9fSTang Haojin    "zicboz", "ziccif", "zicclsm", "ziccrse", "zicntr", "zicond", "zicsr", "zifencei",
378b867eb9fSTang Haojin    "zihintpause", "zihpm", "zimop", "zkn", "zknd", "zkne", "zknh", "zksed", "zksh", "zkt", "zvbb",
379b867eb9fSTang Haojin    "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),
4134376b525SZiyue Zhang        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 = 4, 0)), 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)))),
43342b2c769Sxiaofeibao      ), numEntries = 18, numEnq = 2, numComp = 16),
43460f0c5aeSxiaofeibao      IssueBlockParams(Seq(
43542b2c769Sxiaofeibao        ExeUnitParams("FEX1", 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)))),
43642b2c769Sxiaofeibao      ), numEntries = 18, numEnq = 2, numComp = 16),
43760f0c5aeSxiaofeibao      IssueBlockParams(Seq(
43842b2c769Sxiaofeibao        ExeUnitParams("FEX2", Seq(FaluCfg, FmacCfg), Seq(FpWB(port = 2, 0), IntWB(port = 2, 2)), Seq(Seq(FpRD(6, 0)), Seq(FpRD(7, 0)), Seq(FpRD(8, 0)))),
43942b2c769Sxiaofeibao      ), numEntries = 18, numEnq = 2, numComp = 16),
44042b2c769Sxiaofeibao      IssueBlockParams(Seq(
44142b2c769Sxiaofeibao        ExeUnitParams("FEX3", Seq(FaluCfg, FmacCfg), Seq(FpWB(port = 3, 0), IntWB(port = 3, 2)), Seq(Seq(FpRD(9, 0)), Seq(FpRD(10, 0)), Seq(FpRD(11, 0)))),
44242b2c769Sxiaofeibao      ), numEntries = 18, numEnq = 2, numComp = 16),
44342b2c769Sxiaofeibao      IssueBlockParams(Seq(
44442b2c769Sxiaofeibao        ExeUnitParams("FEX4", Seq(FdivCfg), Seq(FpWB(port = 4, 1)), Seq(Seq(FpRD(2, 1)), Seq(FpRD(5, 1)))),
44542b2c769Sxiaofeibao        ExeUnitParams("FEX5", Seq(FdivCfg), Seq(FpWB(port = 3, 1)), Seq(Seq(FpRD(8, 1)), Seq(FpRD(11, 1)))),
446b51ac1c2Sxiaofeibao      ), numEntries = 18, numEnq = 2, numComp = 16),
44760f0c5aeSxiaofeibao    ),
44860f0c5aeSxiaofeibao      numPregs = fpPreg.numEntries,
44960f0c5aeSxiaofeibao      numDeqOutside = 0,
45060f0c5aeSxiaofeibao      schdType = schdType,
45160f0c5aeSxiaofeibao      rfDataWidth = fpPreg.dataCfg.dataWidth,
452cdedeb74SJinHong Zeng      numUopIn = dpParams.FpDqDeqWidth,
45360f0c5aeSxiaofeibao    )
45460f0c5aeSxiaofeibao  }
45560f0c5aeSxiaofeibao
45639c59369SXuan Hu  val vfSchdParams = {
4573b739f49SXuan Hu    implicit val schdType: SchedulerType = VfScheduler()
4583b739f49SXuan Hu    SchdBlockParams(Seq(
4593b739f49SXuan Hu      IssueBlockParams(Seq(
460f62a71efSxiaofeibao        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)))),
4614376b525SZiyue Zhang        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)))),
462b51ac1c2Sxiaofeibao      ), numEntries = 16, numEnq = 2, numComp = 14),
4633b739f49SXuan Hu      IssueBlockParams(Seq(
464f62a71efSxiaofeibao        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)))),
465f62a71efSxiaofeibao        ExeUnitParams("VFEX3", Seq(VfaluCfg, VfcvtCfg), 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)))),
466b51ac1c2Sxiaofeibao      ), numEntries = 16, numEnq = 2, numComp = 14),
46724ff38faSsinsanction      IssueBlockParams(Seq(
468f62a71efSxiaofeibao        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)))),
4693da89fc0Sxiaofeibao      ), numEntries = 10, numEnq = 2, numComp = 8),
4703b739f49SXuan Hu    ),
4713b739f49SXuan Hu      numPregs = vfPreg.numEntries,
4723b739f49SXuan Hu      numDeqOutside = 0,
4733b739f49SXuan Hu      schdType = schdType,
4743b739f49SXuan Hu      rfDataWidth = vfPreg.dataCfg.dataWidth,
47560f0c5aeSxiaofeibao      numUopIn = dpParams.VecDqDeqWidth,
4763b739f49SXuan Hu    )
4773b739f49SXuan Hu  }
47839c59369SXuan Hu
47939c59369SXuan Hu  val memSchdParams = {
4803b739f49SXuan Hu    implicit val schdType: SchedulerType = MemScheduler()
4813b739f49SXuan Hu    val rfDataWidth = 64
4822225d46eSJiawei Lin
4833b739f49SXuan Hu    SchdBlockParams(Seq(
4843b739f49SXuan Hu      IssueBlockParams(Seq(
485f803e5e9Ssinsanction        ExeUnitParams("STA0", Seq(StaCfg, MouCfg), Seq(FakeIntWB()), Seq(Seq(IntRD(7, 2)))),
4864c5fa1b4Sxiaofeibao      ), numEntries = 16, numEnq = 1, numComp = 15),
487b133b458SXuan Hu      IssueBlockParams(Seq(
488f803e5e9Ssinsanction        ExeUnitParams("STA1", Seq(StaCfg, MouCfg), Seq(FakeIntWB()), Seq(Seq(IntRD(6, 2)))),
4894c5fa1b4Sxiaofeibao      ), numEntries = 16, numEnq = 1, numComp = 15),
490202674aeSHaojin Tang      IssueBlockParams(Seq(
491f803e5e9Ssinsanction        ExeUnitParams("LDU0", Seq(LduCfg), Seq(IntWB(5, 0), FpWB(5, 0)), Seq(Seq(IntRD(8, 0))), true, 2),
4924c5fa1b4Sxiaofeibao      ), numEntries = 16, numEnq = 1, numComp = 15),
4933b739f49SXuan Hu      IssueBlockParams(Seq(
494f803e5e9Ssinsanction        ExeUnitParams("LDU1", Seq(LduCfg), Seq(IntWB(6, 0), FpWB(6, 0)), Seq(Seq(IntRD(9, 0))), true, 2),
4954c5fa1b4Sxiaofeibao      ), numEntries = 16, numEnq = 1, numComp = 15),
496e77d3114SHaojin Tang      IssueBlockParams(Seq(
497f803e5e9Ssinsanction        ExeUnitParams("LDU2", Seq(LduCfg), Seq(IntWB(7, 0), FpWB(7, 0)), Seq(Seq(IntRD(10, 0))), true, 2),
4984c5fa1b4Sxiaofeibao      ), numEntries = 16, numEnq = 1, numComp = 15),
499a81cda24Ssfencevma      IssueBlockParams(Seq(
500df3b4b92SAnzooooo        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)))),
5014c5fa1b4Sxiaofeibao      ), numEntries = 16, numEnq = 1, numComp = 15),
5023da89fc0Sxiaofeibao      IssueBlockParams(Seq(
503df3b4b92SAnzooooo        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)))),
5044c5fa1b4Sxiaofeibao      ), numEntries = 16, numEnq = 1, numComp = 15),
505ecfc6f16SXuan Hu      IssueBlockParams(Seq(
506f803e5e9Ssinsanction        ExeUnitParams("STD0", Seq(StdCfg, MoudCfg), Seq(), Seq(Seq(IntRD(5, 2), FpRD(12, 0)))),
5074c5fa1b4Sxiaofeibao      ), numEntries = 16, numEnq = 1, numComp = 15),
50827811ea4SXuan Hu      IssueBlockParams(Seq(
509f803e5e9Ssinsanction        ExeUnitParams("STD1", Seq(StdCfg, MoudCfg), Seq(), Seq(Seq(IntRD(3, 2), FpRD(13, 0)))),
5104c5fa1b4Sxiaofeibao      ), numEntries = 16, numEnq = 1, numComp = 15),
5113b739f49SXuan Hu    ),
512141a6449SXuan Hu      numPregs = intPreg.numEntries max vfPreg.numEntries,
5133b739f49SXuan Hu      numDeqOutside = 0,
5143b739f49SXuan Hu      schdType = schdType,
5153b739f49SXuan Hu      rfDataWidth = rfDataWidth,
5163b739f49SXuan Hu      numUopIn = dpParams.LsDqDeqWidth,
5173b739f49SXuan Hu    )
5183b739f49SXuan Hu  }
5192225d46eSJiawei Lin
520bf35baadSXuan Hu  def PregIdxWidthMax = intPreg.addrWidth max vfPreg.addrWidth
521bf35baadSXuan Hu
522bf35baadSXuan Hu  def iqWakeUpParams = {
523bf35baadSXuan Hu    Seq(
524c0b91ca1SHaojin Tang      WakeUpConfig(
5252142592bSxiaofeibao-xjtu        Seq("ALU0", "ALU1", "ALU2", "ALU3", "LDU0", "LDU1", "LDU2") ->
5262142592bSxiaofeibao-xjtu        Seq("ALU0", "BJU0", "ALU1", "BJU1", "ALU2", "BJU2", "ALU3", "BJU3", "LDU0", "LDU1", "LDU2", "STA0", "STA1", "STD0", "STD1")
527c0b91ca1SHaojin Tang      ),
5280966699fSxiaofeibao-xjtu      // TODO: add load -> fp slow wakeup
529b67f36d0Sxiaofeibao-xjtu      WakeUpConfig(
5300966699fSxiaofeibao-xjtu        Seq("FEX0", "FEX1", "FEX2", "FEX3") ->
53131c5c732Sxiaofeibao        Seq("FEX0", "FEX1", "FEX2", "FEX3", "FEX4", "FEX5")
53231c5c732Sxiaofeibao      ),
53331c5c732Sxiaofeibao      WakeUpConfig(
53431c5c732Sxiaofeibao        Seq("FEX0", "FEX1", "FEX2", "FEX3") ->
53531c5c732Sxiaofeibao        Seq("STD0", "STD1")
536c38df446SzhanglyGit      ),
5379994e74bSxiaofeibao-xjtu//      WakeUpConfig(
5389994e74bSxiaofeibao-xjtu//        Seq("VFEX0", "VFEX1", "VFEX2", "VFEX3") ->
5399994e74bSxiaofeibao-xjtu//        Seq("VFEX0", "VFEX1", "VFEX2", "VFEX3")
5409994e74bSxiaofeibao-xjtu//      ),
541c0b91ca1SHaojin Tang    ).flatten
542bf35baadSXuan Hu  }
543bf35baadSXuan Hu
5445edcc45fSHaojin Tang  def fakeIntPreg = FakeIntPregParams(intPreg.numEntries, intPreg.numRead, intPreg.numWrite)
5455edcc45fSHaojin Tang
5460c7ebb58Sxiaofeibao-xjtu  val backendParams: BackendParams = backend.BackendParams(
547bf35baadSXuan Hu    Map(
5483b739f49SXuan Hu      IntScheduler() -> intSchdParams,
54960f0c5aeSxiaofeibao      FpScheduler() -> fpSchdParams,
5503b739f49SXuan Hu      VfScheduler() -> vfSchdParams,
5513b739f49SXuan Hu      MemScheduler() -> memSchdParams,
552bf35baadSXuan Hu    ),
553bf35baadSXuan Hu    Seq(
5543b739f49SXuan Hu      intPreg,
55560f0c5aeSxiaofeibao      fpPreg,
5563b739f49SXuan Hu      vfPreg,
5572aa3a761Ssinsanction      v0Preg,
5582aa3a761Ssinsanction      vlPreg,
5595edcc45fSHaojin Tang      fakeIntPreg
560bf35baadSXuan Hu    ),
561bf35baadSXuan Hu    iqWakeUpParams,
562bf35baadSXuan Hu  )
56349162c9aSGuanghui Cheng
56449162c9aSGuanghui Cheng  // Parameters for trace extension.
56549162c9aSGuanghui Cheng  // Trace parameters is useful for XSTOP.
5664907ec88Schengguanghui  val traceParams: TraceParams = new TraceParams(
567725e8ddcSchengguanghui    TraceGroupNum  = 3,
568551cc696Schengguanghui    IaddrWidth     = GPAddrBitsSv48x4,
569725e8ddcSchengguanghui    PrivWidth      = 3,
570725e8ddcSchengguanghui    ItypeWidth     = 4,
571725e8ddcSchengguanghui    IlastsizeWidth = 1,
5724907ec88Schengguanghui  )
5732225d46eSJiawei Lin}
5742225d46eSJiawei Lin
5752225d46eSJiawei Lincase object DebugOptionsKey extends Field[DebugOptions]
5762225d46eSJiawei Lin
5772225d46eSJiawei Lincase class DebugOptions
5782225d46eSJiawei Lin(
5791545277aSYinan Xu  FPGAPlatform: Boolean = false,
5809eee369fSKamimiao  ResetGen: Boolean = false,
5811545277aSYinan Xu  EnableDifftest: Boolean = false,
582cbe9a847SYinan Xu  AlwaysBasicDiff: Boolean = true,
5831545277aSYinan Xu  EnableDebug: Boolean = false,
5842225d46eSJiawei Lin  EnablePerfDebug: Boolean = true,
585eb163ef0SHaojin Tang  UseDRAMSim: Boolean = false,
586047e34f9SMaxpicca-Li  EnableConstantin: Boolean = false,
58762129679Swakafa  EnableChiselDB: Boolean = false,
58862129679Swakafa  AlwaysBasicDB: Boolean = true,
589ec9e6512Swakafa  EnableRollingDB: Boolean = false
5902225d46eSJiawei Lin)
5912225d46eSJiawei Lin
5922225d46eSJiawei Lintrait HasXSParameter {
5932225d46eSJiawei Lin
5942225d46eSJiawei Lin  implicit val p: Parameters
5952225d46eSJiawei Lin
596ff74867bSYangyu Chen  def PAddrBits = p(SoCParamsKey).PAddrBits // PAddrBits is Phyical Memory addr bits
59745def856STang Haojin  def PmemRanges = p(SoCParamsKey).PmemRanges
59845def856STang Haojin  def PmemLowBounds = PmemRanges.unzip._1
59945def856STang Haojin  def PmemHighBounds = PmemRanges.unzip._2
6009c0fd28fSXuan Hu  final val PageOffsetWidth = 12
6018537b88aSTang Haojin  def NodeIDWidth = p(SoCParamsKey).NodeIDWidthList(p(CHIIssue)) // NodeID width among NoC
6022f30d658SYinan Xu
603ff74867bSYangyu Chen  def coreParams = p(XSCoreParamsKey)
604ff74867bSYangyu Chen  def env = p(DebugOptionsKey)
6052225d46eSJiawei Lin
6066cd53fdeSTang Haojin  def ISABase = coreParams.ISABase
6076cd53fdeSTang Haojin  def ISAExtensions = coreParams.ISAExtensions
608ff74867bSYangyu Chen  def XLEN = coreParams.XLEN
609ff74867bSYangyu Chen  def VLEN = coreParams.VLEN
610ff74867bSYangyu Chen  def ELEN = coreParams.ELEN
611ff74867bSYangyu Chen  def HSXLEN = coreParams.HSXLEN
6122225d46eSJiawei Lin  val minFLen = 32
6132225d46eSJiawei Lin  val fLen = 64
614ff74867bSYangyu Chen  def hartIdLen = p(MaxHartIdBits)
615ff74867bSYangyu Chen  val xLen = XLEN
6162225d46eSJiawei Lin
617ff74867bSYangyu Chen  def HasMExtension = coreParams.HasMExtension
618ff74867bSYangyu Chen  def HasCExtension = coreParams.HasCExtension
619ff74867bSYangyu Chen  def HasHExtension = coreParams.HasHExtension
6203ea4388cSHaoyuan Feng  def EnableSv48 = coreParams.EnableSv48
621ff74867bSYangyu Chen  def HasDiv = coreParams.HasDiv
622ff74867bSYangyu Chen  def HasIcache = coreParams.HasICache
623ff74867bSYangyu Chen  def HasDcache = coreParams.HasDCache
624ff74867bSYangyu Chen  def AddrBits = coreParams.AddrBits // AddrBits is used in some cases
625dd980d61SXu, Zefan  def PAddrBitsMax = coreParams.PAddrBitsMax
6260b1b8ed1SXiaokun-Pei  def GPAddrBitsSv39x4 = coreParams.GPAddrBitsSv39x4
6270b1b8ed1SXiaokun-Pei  def GPAddrBitsSv48x4 = coreParams.GPAddrBitsSv48x4
62897929664SXiaokun-Pei  def GPAddrBits = {
62997929664SXiaokun-Pei    if (EnableSv48)
63097929664SXiaokun-Pei      coreParams.GPAddrBitsSv48x4
63197929664SXiaokun-Pei    else
63297929664SXiaokun-Pei      coreParams.GPAddrBitsSv39x4
63397929664SXiaokun-Pei  }
634ff74867bSYangyu Chen  def VAddrBits = {
635d0de7e4aSpeixiaokun    if (HasHExtension) {
63697929664SXiaokun-Pei      if (EnableSv48)
63797929664SXiaokun-Pei        coreParams.GPAddrBitsSv48x4
63897929664SXiaokun-Pei      else
63997929664SXiaokun-Pei        coreParams.GPAddrBitsSv39x4
640d0de7e4aSpeixiaokun    } else {
64197929664SXiaokun-Pei      if (EnableSv48)
64297929664SXiaokun-Pei        coreParams.VAddrBitsSv48
64397929664SXiaokun-Pei      else
64497929664SXiaokun-Pei        coreParams.VAddrBitsSv39
645d0de7e4aSpeixiaokun    }
646d0de7e4aSpeixiaokun  } // VAddrBits is Virtual Memory addr bits
647d0de7e4aSpeixiaokun
64897929664SXiaokun-Pei  def VAddrMaxBits = {
64997929664SXiaokun-Pei    if(EnableSv48) {
65097929664SXiaokun-Pei      coreParams.VAddrBitsSv48 max coreParams.GPAddrBitsSv48x4
65197929664SXiaokun-Pei    } else {
65297929664SXiaokun-Pei      coreParams.VAddrBitsSv39 max coreParams.GPAddrBitsSv39x4
65397929664SXiaokun-Pei    }
65497929664SXiaokun-Pei  }
655237d4cfdSXuan Hu
656ff74867bSYangyu Chen  def AsidLength = coreParams.AsidLength
657ff74867bSYangyu Chen  def VmidLength = coreParams.VmidLength
658ff74867bSYangyu Chen  def ReSelectLen = coreParams.ReSelectLen
659ff74867bSYangyu Chen  def AddrBytes = AddrBits / 8 // unused
660ff74867bSYangyu Chen  def DataBits = XLEN
661ff74867bSYangyu Chen  def DataBytes = DataBits / 8
66238c29594Szhanglinjuan  def QuadWordBits = DataBits * 2
66338c29594Szhanglinjuan  def QuadWordBytes = QuadWordBits / 8
664ff74867bSYangyu Chen  def VDataBytes = VLEN / 8
665ff74867bSYangyu Chen  def HasFPU = coreParams.HasFPU
666ff74867bSYangyu Chen  def HasVPU = coreParams.HasVPU
667ff74867bSYangyu Chen  def HasCustomCSRCacheOp = coreParams.HasCustomCSRCacheOp
668ff74867bSYangyu Chen  def FetchWidth = coreParams.FetchWidth
669ff74867bSYangyu Chen  def PredictWidth = FetchWidth * (if (HasCExtension) 2 else 1)
670ff74867bSYangyu Chen  def EnableBPU = coreParams.EnableBPU
671ff74867bSYangyu Chen  def EnableBPD = coreParams.EnableBPD // enable backing predictor(like Tage) in BPUStage3
672ff74867bSYangyu Chen  def EnableRAS = coreParams.EnableRAS
673ff74867bSYangyu Chen  def EnableLB = coreParams.EnableLB
674ff74867bSYangyu Chen  def EnableLoop = coreParams.EnableLoop
675ff74867bSYangyu Chen  def EnableSC = coreParams.EnableSC
676ff74867bSYangyu Chen  def EnbaleTlbDebug = coreParams.EnbaleTlbDebug
677ff74867bSYangyu Chen  def HistoryLength = coreParams.HistoryLength
678ff74867bSYangyu Chen  def EnableGHistDiff = coreParams.EnableGHistDiff
679ff74867bSYangyu Chen  def EnableCommitGHistDiff = coreParams.EnableCommitGHistDiff
680ff74867bSYangyu Chen  def EnableClockGate = coreParams.EnableClockGate
681ff74867bSYangyu Chen  def UbtbGHRLength = coreParams.UbtbGHRLength
682ff74867bSYangyu Chen  def UbtbSize = coreParams.UbtbSize
683ff74867bSYangyu Chen  def EnableFauFTB = coreParams.EnableFauFTB
684ff74867bSYangyu Chen  def FtbSize = coreParams.FtbSize
685ff74867bSYangyu Chen  def FtbWays = coreParams.FtbWays
6865f89ba0bSEaston Man  def FtbTagLength = coreParams.FtbTagLength
687ff74867bSYangyu Chen  def RasSize = coreParams.RasSize
688ff74867bSYangyu Chen  def RasSpecSize = coreParams.RasSpecSize
689ff74867bSYangyu Chen  def RasCtrSize = coreParams.RasCtrSize
69016a1cc4bSzoujr
691bf358e08SLingrui98  def getBPDComponents(resp_in: BranchPredictionResp, p: Parameters) = {
692bf358e08SLingrui98    coreParams.branchPredictor(resp_in, p)
69316a1cc4bSzoujr  }
694ff74867bSYangyu Chen  def numBr = coreParams.numBr
695ff74867bSYangyu Chen  def TageTableInfos = coreParams.TageTableInfos
696ff74867bSYangyu Chen  def TageBanks = coreParams.numBr
697ff74867bSYangyu Chen  def SCNRows = coreParams.SCNRows
698ff74867bSYangyu Chen  def SCCtrBits = coreParams.SCCtrBits
699ff74867bSYangyu Chen  def SCHistLens = coreParams.SCHistLens
700ff74867bSYangyu Chen  def SCNTables = coreParams.SCNTables
701dd6c0695SLingrui98
702ff74867bSYangyu Chen  def SCTableInfos = Seq.fill(SCNTables)((SCNRows, SCCtrBits)) zip SCHistLens map {
70334ed6fbcSLingrui98    case ((n, cb), h) => (n, cb, h)
704dd6c0695SLingrui98  }
705ff74867bSYangyu Chen  def ITTageTableInfos = coreParams.ITTageTableInfos
706dd6c0695SLingrui98  type FoldedHistoryInfo = Tuple2[Int, Int]
707ff74867bSYangyu Chen  def foldedGHistInfos =
7084813e060SLingrui98    (TageTableInfos.map{ case (nRows, h, t) =>
709dd6c0695SLingrui98      if (h > 0)
7104813e060SLingrui98        Set((h, min(log2Ceil(nRows/numBr), h)), (h, min(h, t)), (h, min(h, t-1)))
711dd6c0695SLingrui98      else
712dd6c0695SLingrui98        Set[FoldedHistoryInfo]()
7134813e060SLingrui98    }.reduce(_++_).toSet ++
71434ed6fbcSLingrui98    SCTableInfos.map{ case (nRows, _, h) =>
715dd6c0695SLingrui98      if (h > 0)
716e992912cSLingrui98        Set((h, min(log2Ceil(nRows/TageBanks), h)))
717dd6c0695SLingrui98      else
718dd6c0695SLingrui98        Set[FoldedHistoryInfo]()
71934ed6fbcSLingrui98    }.reduce(_++_).toSet ++
720dd6c0695SLingrui98    ITTageTableInfos.map{ case (nRows, h, t) =>
721dd6c0695SLingrui98      if (h > 0)
722dd6c0695SLingrui98        Set((h, min(log2Ceil(nRows), h)), (h, min(h, t)), (h, min(h, t-1)))
723dd6c0695SLingrui98      else
724dd6c0695SLingrui98        Set[FoldedHistoryInfo]()
725527dc111SLingrui98    }.reduce(_++_) ++
726527dc111SLingrui98      Set[FoldedHistoryInfo]((UbtbGHRLength, log2Ceil(UbtbSize)))
727527dc111SLingrui98    ).toList
72816a1cc4bSzoujr
729c7fabd05SSteve Gou
730c7fabd05SSteve Gou
731ff74867bSYangyu Chen  def CacheLineSize = coreParams.CacheLineSize
732ff74867bSYangyu Chen  def CacheLineHalfWord = CacheLineSize / 16
733ff74867bSYangyu Chen  def ExtHistoryLength = HistoryLength + 64
734b92f8445Sssszwic  def ICacheForceMetaECCError = coreParams.ICacheForceMetaECCError
735b92f8445Sssszwic  def ICacheForceDataECCError = coreParams.ICacheForceDataECCError
736ff74867bSYangyu Chen  def IBufSize = coreParams.IBufSize
737ff74867bSYangyu Chen  def IBufNBank = coreParams.IBufNBank
738ff74867bSYangyu Chen  def backendParams: BackendParams = coreParams.backendParams
739ff74867bSYangyu Chen  def DecodeWidth = coreParams.DecodeWidth
740ff74867bSYangyu Chen  def RenameWidth = coreParams.RenameWidth
741ff74867bSYangyu Chen  def CommitWidth = coreParams.CommitWidth
742ff74867bSYangyu Chen  def RobCommitWidth = coreParams.RobCommitWidth
743ff74867bSYangyu Chen  def RabCommitWidth = coreParams.RabCommitWidth
744ff74867bSYangyu Chen  def MaxUopSize = coreParams.MaxUopSize
745ff74867bSYangyu Chen  def EnableRenameSnapshot = coreParams.EnableRenameSnapshot
746ff74867bSYangyu Chen  def RenameSnapshotNum = coreParams.RenameSnapshotNum
747ff74867bSYangyu Chen  def FtqSize = coreParams.FtqSize
748ff74867bSYangyu Chen  def EnableLoadFastWakeUp = coreParams.EnableLoadFastWakeUp
749ff74867bSYangyu Chen  def IntLogicRegs = coreParams.IntLogicRegs
750ff74867bSYangyu Chen  def FpLogicRegs = coreParams.FpLogicRegs
751ff74867bSYangyu Chen  def VecLogicRegs = coreParams.VecLogicRegs
752435f48a8Sxiaofeibao  def V0LogicRegs = coreParams.V0LogicRegs
753435f48a8Sxiaofeibao  def VlLogicRegs = coreParams.VlLogicRegs
754ad5c9e6eSJunxiong Ji  def MaxLogicRegs = Set(IntLogicRegs, FpLogicRegs, VecLogicRegs, V0LogicRegs, VlLogicRegs).max
755ad5c9e6eSJunxiong Ji  def LogicRegsWidth = log2Ceil(MaxLogicRegs)
7569c5a1080Sxiaofeibao  def V0_IDX = coreParams.V0_IDX
7579c5a1080Sxiaofeibao  def Vl_IDX = coreParams.Vl_IDX
758ff74867bSYangyu Chen  def IntPhyRegs = coreParams.intPreg.numEntries
75960f0c5aeSxiaofeibao  def FpPhyRegs = coreParams.fpPreg.numEntries
760ff74867bSYangyu Chen  def VfPhyRegs = coreParams.vfPreg.numEntries
7612aa3a761Ssinsanction  def V0PhyRegs = coreParams.v0Preg.numEntries
7622aa3a761Ssinsanction  def VlPhyRegs = coreParams.vlPreg.numEntries
763e43bb916SXuan Hu  def MaxPhyRegs = Seq(IntPhyRegs, FpPhyRegs, VfPhyRegs, V0PhyRegs, VlPhyRegs).max
764e43bb916SXuan Hu  def IntPhyRegIdxWidth = log2Up(IntPhyRegs)
765e43bb916SXuan Hu  def FpPhyRegIdxWidth = log2Up(FpPhyRegs)
766e43bb916SXuan Hu  def VfPhyRegIdxWidth = log2Up(VfPhyRegs)
767e43bb916SXuan Hu  def V0PhyRegIdxWidth = log2Up(V0PhyRegs)
768e43bb916SXuan Hu  def VlPhyRegIdxWidth = log2Up(VlPhyRegs)
769e43bb916SXuan Hu  def PhyRegIdxWidth = Seq(IntPhyRegIdxWidth, FpPhyRegIdxWidth, VfPhyRegIdxWidth, V0PhyRegIdxWidth, VlPhyRegIdxWidth).max
770ff74867bSYangyu Chen  def RobSize = coreParams.RobSize
771ff74867bSYangyu Chen  def RabSize = coreParams.RabSize
772ff74867bSYangyu Chen  def VTypeBufferSize = coreParams.VTypeBufferSize
773ae4984bfSsinsanction  def IntRegCacheSize = coreParams.IntRegCacheSize
774ae4984bfSsinsanction  def MemRegCacheSize = coreParams.MemRegCacheSize
775ae4984bfSsinsanction  def RegCacheSize = coreParams.RegCacheSize
776ae4984bfSsinsanction  def RegCacheIdxWidth = coreParams.RegCacheIdxWidth
7776dbb4e08SXuan Hu  /**
7786dbb4e08SXuan Hu   * the minimum element length of vector elements
7796dbb4e08SXuan Hu   */
780a4d1b2d1Sgood-circle  def minVecElen: Int = coreParams.minVecElen
7816dbb4e08SXuan Hu
7826dbb4e08SXuan Hu  /**
7836dbb4e08SXuan Hu   * the maximum number of elements in vector register
7846dbb4e08SXuan Hu   */
785a4d1b2d1Sgood-circle  def maxElemPerVreg: Int = coreParams.maxElemPerVreg
7866dbb4e08SXuan Hu
787ff74867bSYangyu Chen  def IntRefCounterWidth = log2Ceil(RobSize)
788ff74867bSYangyu Chen  def LSQEnqWidth = coreParams.dpParams.LsDqDeqWidth
789ff74867bSYangyu Chen  def LSQLdEnqWidth = LSQEnqWidth min backendParams.numLoadDp
790ff74867bSYangyu Chen  def LSQStEnqWidth = LSQEnqWidth min backendParams.numStoreDp
791ff74867bSYangyu Chen  def VirtualLoadQueueSize = coreParams.VirtualLoadQueueSize
792ff74867bSYangyu Chen  def LoadQueueRARSize = coreParams.LoadQueueRARSize
793ff74867bSYangyu Chen  def LoadQueueRAWSize = coreParams.LoadQueueRAWSize
794ff74867bSYangyu Chen  def RollbackGroupSize = coreParams.RollbackGroupSize
795ff74867bSYangyu Chen  def LoadQueueReplaySize = coreParams.LoadQueueReplaySize
796ff74867bSYangyu Chen  def LoadUncacheBufferSize = coreParams.LoadUncacheBufferSize
797ff74867bSYangyu Chen  def LoadQueueNWriteBanks = coreParams.LoadQueueNWriteBanks
798ff74867bSYangyu Chen  def StoreQueueSize = coreParams.StoreQueueSize
7997a9ea6c5SAnzooooo  def VirtualLoadQueueMaxStoreQueueSize = VirtualLoadQueueSize max StoreQueueSize
800ff74867bSYangyu Chen  def StoreQueueNWriteBanks = coreParams.StoreQueueNWriteBanks
801ff74867bSYangyu Chen  def StoreQueueForwardWithMask = coreParams.StoreQueueForwardWithMask
802ff74867bSYangyu Chen  def VlsQueueSize = coreParams.VlsQueueSize
803ff74867bSYangyu Chen  def dpParams = coreParams.dpParams
8043b739f49SXuan Hu
805351e22f2SXuan Hu  def MemIQSizeMax = backendParams.memSchdParams.get.issueBlockParams.map(_.numEntries).max
806351e22f2SXuan Hu  def IQSizeMax = backendParams.allSchdParams.map(_.issueBlockParams.map(_.numEntries).max).max
807c7d010e5SXuan Hu
808ff74867bSYangyu Chen  def NumRedirect = backendParams.numRedirect
809ff74867bSYangyu Chen  def BackendRedirectNum = NumRedirect + 2 //2: ldReplay + Exception
810ff74867bSYangyu Chen  def FtqRedirectAheadNum = NumRedirect
81195a47398SGao-Zeyu  def IfuRedirectNum = coreParams.IfuRedirectNum
812ff74867bSYangyu Chen  def LoadPipelineWidth = coreParams.LoadPipelineWidth
813ff74867bSYangyu Chen  def StorePipelineWidth = coreParams.StorePipelineWidth
814ff74867bSYangyu Chen  def VecLoadPipelineWidth = coreParams.VecLoadPipelineWidth
815ff74867bSYangyu Chen  def VecStorePipelineWidth = coreParams.VecStorePipelineWidth
816ff74867bSYangyu Chen  def VecMemSrcInWidth = coreParams.VecMemSrcInWidth
817ff74867bSYangyu Chen  def VecMemInstWbWidth = coreParams.VecMemInstWbWidth
818ff74867bSYangyu Chen  def VecMemDispatchWidth = coreParams.VecMemDispatchWidth
819a4d1b2d1Sgood-circle  def VecMemDispatchMaxNumber = coreParams.VecMemDispatchMaxNumber
8209ff64fb6SAnzooooo  def VecMemUnitStrideMaxFlowNum = coreParams.VecMemUnitStrideMaxFlowNum
8219ff64fb6SAnzooooo  def VecMemLSQEnqIteratorNumberSeq = coreParams.VecMemLSQEnqIteratorNumberSeq
822ff74867bSYangyu Chen  def StoreBufferSize = coreParams.StoreBufferSize
823ff74867bSYangyu Chen  def StoreBufferThreshold = coreParams.StoreBufferThreshold
824ff74867bSYangyu Chen  def EnsbufferWidth = coreParams.EnsbufferWidth
825ff74867bSYangyu Chen  def LoadDependencyWidth = coreParams.LoadDependencyWidth
826a4d1b2d1Sgood-circle  def VlMergeBufferSize = coreParams.VlMergeBufferSize
827a4d1b2d1Sgood-circle  def VsMergeBufferSize = coreParams.VsMergeBufferSize
828a4d1b2d1Sgood-circle  def UopWritebackWidth = coreParams.UopWritebackWidth
829a4d1b2d1Sgood-circle  def VLUopWritebackWidth = coreParams.VLUopWritebackWidth
830a4d1b2d1Sgood-circle  def VSUopWritebackWidth = coreParams.VSUopWritebackWidth
831a4d1b2d1Sgood-circle  def VSegmentBufferSize = coreParams.VSegmentBufferSize
832df3b4b92SAnzooooo  def VFOFBufferSize = coreParams.VFOFBufferSize
833ff74867bSYangyu Chen  def UncacheBufferSize = coreParams.UncacheBufferSize
834ff74867bSYangyu Chen  def EnableLoadToLoadForward = coreParams.EnableLoadToLoadForward
835ff74867bSYangyu Chen  def EnableFastForward = coreParams.EnableFastForward
836ff74867bSYangyu Chen  def EnableLdVioCheckAfterReset = coreParams.EnableLdVioCheckAfterReset
837ff74867bSYangyu Chen  def EnableSoftPrefetchAfterReset = coreParams.EnableSoftPrefetchAfterReset
838ff74867bSYangyu Chen  def EnableCacheErrorAfterReset = coreParams.EnableCacheErrorAfterReset
839ff74867bSYangyu Chen  def EnableAccurateLoadError = coreParams.EnableAccurateLoadError
840ff74867bSYangyu Chen  def EnableUncacheWriteOutstanding = coreParams.EnableUncacheWriteOutstanding
84141d8d239Shappy-lx  def EnableHardwareStoreMisalign = coreParams.EnableHardwareStoreMisalign
84241d8d239Shappy-lx  def EnableHardwareLoadMisalign = coreParams.EnableHardwareLoadMisalign
843ff74867bSYangyu Chen  def EnableStorePrefetchAtIssue = coreParams.EnableStorePrefetchAtIssue
844ff74867bSYangyu Chen  def EnableStorePrefetchAtCommit = coreParams.EnableStorePrefetchAtCommit
845ff74867bSYangyu Chen  def EnableAtCommitMissTrigger = coreParams.EnableAtCommitMissTrigger
846ff74867bSYangyu Chen  def EnableStorePrefetchSMS = coreParams.EnableStorePrefetchSMS
847ff74867bSYangyu Chen  def EnableStorePrefetchSPB = coreParams.EnableStorePrefetchSPB
848e3ed843cShappy-lx  def HasCMO = coreParams.HasCMO && p(EnableCHI)
8491d260098SXuan Hu  require(LoadPipelineWidth == backendParams.LdExuCnt, "LoadPipelineWidth must be equal exuParameters.LduCnt!")
8501d260098SXuan Hu  require(StorePipelineWidth == backendParams.StaCnt, "StorePipelineWidth must be equal exuParameters.StuCnt!")
851ff74867bSYangyu Chen  def Enable3Load3Store = (LoadPipelineWidth == 3 && StorePipelineWidth == 3)
852ff74867bSYangyu Chen  def asidLen = coreParams.MMUAsidLen
853ff74867bSYangyu Chen  def vmidLen = coreParams.MMUVmidLen
854ff74867bSYangyu Chen  def BTLBWidth = coreParams.LoadPipelineWidth + coreParams.StorePipelineWidth
855ff74867bSYangyu Chen  def refillBothTlb = coreParams.refillBothTlb
856ff74867bSYangyu Chen  def iwpuParam = coreParams.iwpuParameters
857ff74867bSYangyu Chen  def dwpuParam = coreParams.dwpuParameters
858ff74867bSYangyu Chen  def itlbParams = coreParams.itlbParameters
859ff74867bSYangyu Chen  def ldtlbParams = coreParams.ldtlbParameters
860ff74867bSYangyu Chen  def sttlbParams = coreParams.sttlbParameters
861ff74867bSYangyu Chen  def hytlbParams = coreParams.hytlbParameters
862ff74867bSYangyu Chen  def pftlbParams = coreParams.pftlbParameters
863ff74867bSYangyu Chen  def l2ToL1Params = coreParams.l2ToL1tlbParameters
864ff74867bSYangyu Chen  def btlbParams = coreParams.btlbParameters
865ff74867bSYangyu Chen  def l2tlbParams = coreParams.l2tlbParameters
866ff74867bSYangyu Chen  def NumPerfCounters = coreParams.NumPerfCounters
8672225d46eSJiawei Lin
868ff74867bSYangyu Chen  def instBytes = if (HasCExtension) 2 else 4
869ff74867bSYangyu Chen  def instOffsetBits = log2Ceil(instBytes)
8702225d46eSJiawei Lin
871ff74867bSYangyu Chen  def icacheParameters = coreParams.icacheParameters
872ff74867bSYangyu Chen  def dcacheParameters = coreParams.dcacheParametersOpt.getOrElse(DCacheParameters())
8732225d46eSJiawei Lin
874b899def8SWilliam Wang  // dcache block cacheline when lr for LRSCCycles - LRSCBackOff cycles
875b899def8SWilliam Wang  // for constrained LR/SC loop
876ff74867bSYangyu Chen  def LRSCCycles = 64
877b899def8SWilliam Wang  // for lr storm
878ff74867bSYangyu Chen  def LRSCBackOff = 8
8792225d46eSJiawei Lin
8802225d46eSJiawei Lin  // cache hierarchy configurations
881ff74867bSYangyu Chen  def l1BusDataWidth = 256
8822225d46eSJiawei Lin
883de169c67SWilliam Wang  // load violation predict
884ff74867bSYangyu Chen  def ResetTimeMax2Pow = 20 //1078576
885ff74867bSYangyu Chen  def ResetTimeMin2Pow = 10 //1024
886de169c67SWilliam Wang  // wait table parameters
887ff74867bSYangyu Chen  def WaitTableSize = 1024
888ff74867bSYangyu Chen  def MemPredPCWidth = log2Up(WaitTableSize)
889ff74867bSYangyu Chen  def LWTUse2BitCounter = true
890de169c67SWilliam Wang  // store set parameters
891ff74867bSYangyu Chen  def SSITSize = WaitTableSize
892ff74867bSYangyu Chen  def LFSTSize = 32
893ff74867bSYangyu Chen  def SSIDWidth = log2Up(LFSTSize)
894ff74867bSYangyu Chen  def LFSTWidth = 4
895ff74867bSYangyu Chen  def StoreSetEnable = true // LWT will be disabled if SS is enabled
896ff74867bSYangyu Chen  def LFSTEnable = true
897cc4fb544Ssfencevma
898ff74867bSYangyu Chen  def PCntIncrStep: Int = 6
8998bb30a57SJiru Sun  def numPCntHc: Int = 12
900ff74867bSYangyu Chen  def numPCntPtw: Int = 19
901cd365d4cSrvcoresjw
902ff74867bSYangyu Chen  def numCSRPCntFrontend = 8
903ff74867bSYangyu Chen  def numCSRPCntCtrl     = 8
904ff74867bSYangyu Chen  def numCSRPCntLsu      = 8
905ff74867bSYangyu Chen  def numCSRPCntHc       = 5
906ff74867bSYangyu Chen  def printEventCoding   = true
90785a8d7caSZehao Liu  def printCriticalError = false
90885a8d7caSZehao Liu  def maxCommitStuck = pow(2, 21).toInt
909f7af4c74Schengguanghui
910e43bb916SXuan Hu  // Vector load exception
911e43bb916SXuan Hu  def maxMergeNumPerCycle = 4
912e43bb916SXuan Hu
913f7af4c74Schengguanghui  // Parameters for Sdtrig extension
914ff74867bSYangyu Chen  protected def TriggerNum = 4
915ff74867bSYangyu Chen  protected def TriggerChainMaxLength = 2
91649162c9aSGuanghui Cheng
91749162c9aSGuanghui Cheng  // Parameters for Trace extension
9184907ec88Schengguanghui  def TraceGroupNum          = coreParams.traceParams.TraceGroupNum
9194907ec88Schengguanghui  def CauseWidth             = XLEN
920551cc696Schengguanghui  def TvalWidth              = coreParams.traceParams.IaddrWidth
921725e8ddcSchengguanghui  def PrivWidth              = coreParams.traceParams.PrivWidth
922551cc696Schengguanghui  def IaddrWidth             = coreParams.traceParams.IaddrWidth
923725e8ddcSchengguanghui  def ItypeWidth             = coreParams.traceParams.ItypeWidth
9244907ec88Schengguanghui  def IretireWidthInPipe     = log2Up(RenameWidth * 2)
9254907ec88Schengguanghui  def IretireWidthCompressed = log2Up(RenameWidth * CommitWidth * 2)
926725e8ddcSchengguanghui  def IlastsizeWidth         = coreParams.traceParams.IlastsizeWidth
9272225d46eSJiawei Lin}
928