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