1c6d43980SLemover/*************************************************************************************** 2c6d43980SLemover* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences 3f320e0f0SYinan Xu* Copyright (c) 2020-2021 Peng Cheng Laboratory 4c6d43980SLemover* 5c6d43980SLemover* XiangShan is licensed under Mulan PSL v2. 6c6d43980SLemover* You can use this software according to the terms and conditions of the Mulan PSL v2. 7c6d43980SLemover* You may obtain a copy of Mulan PSL v2 at: 8c6d43980SLemover* http://license.coscl.org.cn/MulanPSL2 9c6d43980SLemover* 10c6d43980SLemover* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, 11c6d43980SLemover* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, 12c6d43980SLemover* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. 13c6d43980SLemover* 14c6d43980SLemover* See the Mulan PSL v2 for more details. 15c6d43980SLemover***************************************************************************************/ 16c6d43980SLemover 172225d46eSJiawei Linpackage xiangshan 182225d46eSJiawei Lin 198891a219SYinan Xuimport org.chipsalliance.cde.config.{Field, Parameters} 202225d46eSJiawei Linimport chisel3._ 212225d46eSJiawei Linimport chisel3.util._ 2298c71602SJiawei Linimport huancun._ 233b739f49SXuan Huimport system.SoCParamsKey 248882eb68SXin Tianimport system.CVMParamskey 25730cfbc0SXuan Huimport xiangshan.backend.datapath.RdConfig._ 26730cfbc0SXuan Huimport xiangshan.backend.datapath.WbConfig._ 27730cfbc0SXuan Huimport xiangshan.backend.exu.ExeUnitParams 28730cfbc0SXuan Huimport xiangshan.backend.fu.FuConfig._ 2960f0c5aeSxiaofeibaoimport xiangshan.backend.issue.{IntScheduler, IssueBlockParams, MemScheduler, SchdBlockParams, SchedulerType, VfScheduler, FpScheduler} 302aa3a761Ssinsanctionimport xiangshan.backend.regfile._ 31730cfbc0SXuan Huimport xiangshan.backend.BackendParams 324907ec88Schengguanghuiimport xiangshan.backend.trace._ 333b739f49SXuan Huimport xiangshan.cache.DCacheParameters 34a1ea7f76SJiawei Linimport xiangshan.frontend.{BasePredictor, BranchPredictionResp, FTB, FakePredictor, RAS, Tage, ITTage, Tage_SC, FauFTB} 3560f966c8SGuokai Chenimport xiangshan.frontend.icache.ICacheParameters 363b739f49SXuan Huimport xiangshan.cache.mmu.{L2TLBParameters, TLBParameters} 373b739f49SXuan Huimport xiangshan.frontend._ 383b739f49SXuan Huimport xiangshan.frontend.icache.ICacheParameters 39d4aca96cSlqreimport freechips.rocketchip.diplomacy.AddressSet 40f57f7f2aSYangyu Chenimport freechips.rocketchip.tile.MaxHartIdBits 412f30d658SYinan Xuimport system.SoCParamsKey 4298c71602SJiawei Linimport huancun._ 4398c71602SJiawei Linimport huancun.debug._ 4404665835SMaxpicca-Liimport xiangshan.cache.wpu.WPUParameters 4515ee59e4Swakafaimport coupledL2._ 468537b88aSTang Haojinimport coupledL2.tl2chi._ 47bf35baadSXuan Huimport xiangshan.backend.datapath.WakeUpConfig 48289fc2f9SLinJiaweiimport xiangshan.mem.prefetch.{PrefetcherParams, SMSParams} 49289fc2f9SLinJiawei 5085a8d7caSZehao Liuimport scala.math.{max, min, pow} 5134ab1ae9SJiawei Lin 5234ab1ae9SJiawei Lincase object XSTileKey extends Field[Seq[XSCoreParameters]] 5334ab1ae9SJiawei Lin 542225d46eSJiawei Lincase object XSCoreParamsKey extends Field[XSCoreParameters] 552225d46eSJiawei Lin 562225d46eSJiawei Lincase class XSCoreParameters 572225d46eSJiawei Lin( 582225d46eSJiawei Lin HasPrefetch: Boolean = false, 592225d46eSJiawei Lin HartId: Int = 0, 602225d46eSJiawei Lin XLEN: Int = 64, 61deb6421eSHaojin Tang VLEN: Int = 128, 62a8db15d8Sfdy ELEN: Int = 64, 63d0de7e4aSpeixiaokun HSXLEN: Int = 64, 648882eb68SXin Tian HasBitmapCheck: Boolean = false, 658882eb68SXin Tian HasBitmapCheckDefault: Boolean = false, 662225d46eSJiawei Lin HasMExtension: Boolean = true, 672225d46eSJiawei Lin HasCExtension: Boolean = true, 68d0de7e4aSpeixiaokun HasHExtension: Boolean = true, 692225d46eSJiawei Lin HasDiv: Boolean = true, 702225d46eSJiawei Lin HasICache: Boolean = true, 712225d46eSJiawei Lin HasDCache: Boolean = true, 722225d46eSJiawei Lin AddrBits: Int = 64, 73dd980d61SXu, Zefan PAddrBitsMax: Int = 56, // The bits of physical address from Sv39/Sv48/Sv57 virtual address translation. 7497929664SXiaokun-Pei VAddrBitsSv39: Int = 39, 7597929664SXiaokun-Pei GPAddrBitsSv39x4: Int = 41, 7697929664SXiaokun-Pei VAddrBitsSv48: Int = 48, 7797929664SXiaokun-Pei GPAddrBitsSv48x4: Int = 50, 782225d46eSJiawei Lin HasFPU: Boolean = true, 7935d1557aSZiyue Zhang HasVPU: Boolean = true, 80ad3ba452Szhanglinjuan HasCustomCSRCacheOp: Boolean = true, 812225d46eSJiawei Lin FetchWidth: Int = 8, 8245f497a4Shappy-lx AsidLength: Int = 16, 83d0de7e4aSpeixiaokun VmidLength: Int = 14, 842225d46eSJiawei Lin EnableBPU: Boolean = true, 852225d46eSJiawei Lin EnableBPD: Boolean = true, 862225d46eSJiawei Lin EnableRAS: Boolean = true, 872225d46eSJiawei Lin EnableLB: Boolean = false, 882225d46eSJiawei Lin EnableLoop: Boolean = true, 89e0f3968cSzoujr EnableSC: Boolean = true, 902225d46eSJiawei Lin EnbaleTlbDebug: Boolean = false, 91918d87f2SsinceforYy EnableClockGate: Boolean = true, 922225d46eSJiawei Lin EnableJal: Boolean = false, 9311d0c81dSLingrui98 EnableFauFTB: Boolean = true, 943ea4388cSHaoyuan Feng EnableSv48: Boolean = true, 95f2aabf0dSLingrui98 UbtbGHRLength: Int = 4, 96c7fabd05SSteve Gou // HistoryLength: Int = 512, 972f7b35ceSLingrui98 EnableGHistDiff: Boolean = true, 98ab0200c8SEaston Man EnableCommitGHistDiff: Boolean = true, 99edc18578SLingrui98 UbtbSize: Int = 256, 100b37e4b45SLingrui98 FtbSize: Int = 2048, 1015f89ba0bSEaston Man FtbWays: Int = 4, 1025f89ba0bSEaston Man FtbTagLength: Int = 20, 1030b8e1fd0SGuokai Chen RasSize: Int = 16, 1040b8e1fd0SGuokai Chen RasSpecSize: Int = 32, 10577bef50aSGuokai Chen RasCtrSize: Int = 3, 1062225d46eSJiawei Lin CacheLineSize: Int = 512, 107dd6c0695SLingrui98 TageTableInfos: Seq[Tuple3[Int,Int,Int]] = 108dd6c0695SLingrui98 // Sets Hist Tag 10951e26c03SLingrui98 Seq(( 4096, 8, 8), 11051e26c03SLingrui98 ( 4096, 13, 8), 11151e26c03SLingrui98 ( 4096, 32, 8), 11251e26c03SLingrui98 ( 4096, 119, 8)), 113dd6c0695SLingrui98 ITTageTableInfos: Seq[Tuple3[Int,Int,Int]] = 114dd6c0695SLingrui98 // Sets Hist Tag 11503c81005SLingrui98 Seq(( 256, 4, 9), 116527dc111SLingrui98 ( 256, 8, 9), 1173581d7d3SLingrui98 ( 512, 13, 9), 118527dc111SLingrui98 ( 512, 16, 9), 119f2aabf0dSLingrui98 ( 512, 32, 9)), 12082dc6ff8SLingrui98 SCNRows: Int = 512, 12182dc6ff8SLingrui98 SCNTables: Int = 4, 122dd6c0695SLingrui98 SCCtrBits: Int = 6, 12382dc6ff8SLingrui98 SCHistLens: Seq[Int] = Seq(0, 4, 10, 16), 124dd6c0695SLingrui98 numBr: Int = 2, 125dc5a9185SEaston Man branchPredictor: (BranchPredictionResp, Parameters) => Tuple2[Seq[BasePredictor], BranchPredictionResp] = 126dc5a9185SEaston Man (resp_in: BranchPredictionResp, p: Parameters) => { 12716a1cc4bSzoujr val ftb = Module(new FTB()(p)) 128dc5a9185SEaston Man val uftb = Module(new FauFTB()(p)) 129bf358e08SLingrui98 val tage = Module(new Tage_SC()(p)) 1304cd08aa8SLingrui98 val ras = Module(new RAS()(p)) 13160f966c8SGuokai Chen val ittage = Module(new ITTage()(p)) 132dc5a9185SEaston Man val preds = Seq(uftb, tage, ftb, ittage, ras) 13316a1cc4bSzoujr preds.map(_.io := DontCare) 13416a1cc4bSzoujr 135fd3aa057SYuandongliang ftb.io.fauftb_entry_in := uftb.io.fauftb_entry_out 136fd3aa057SYuandongliang ftb.io.fauftb_entry_hit_in := uftb.io.fauftb_entry_hit_out 137fd3aa057SYuandongliang 138dc5a9185SEaston Man uftb.io.in.bits.resp_in(0) := resp_in 139dc5a9185SEaston Man tage.io.in.bits.resp_in(0) := uftb.io.out 140c2d1ec7dSLingrui98 ftb.io.in.bits.resp_in(0) := tage.io.out 141c2d1ec7dSLingrui98 ittage.io.in.bits.resp_in(0) := ftb.io.out 142c2d1ec7dSLingrui98 ras.io.in.bits.resp_in(0) := ittage.io.out 14316a1cc4bSzoujr 144c2d1ec7dSLingrui98 (preds, ras.io.out) 145dc5a9185SEaston Man }, 146b92f8445Sssszwic ICacheForceMetaECCError: Boolean = false, 147b92f8445Sssszwic ICacheForceDataECCError: Boolean = false, 1482225d46eSJiawei Lin IBufSize: Int = 48, 14944c9c1deSEaston Man IBufNBank: Int = 6, // IBuffer bank amount, should divide IBufSize 1502225d46eSJiawei Lin DecodeWidth: Int = 6, 1512225d46eSJiawei Lin RenameWidth: Int = 6, 152780712aaSxiaofeibao-xjtu CommitWidth: Int = 8, 153780712aaSxiaofeibao-xjtu RobCommitWidth: Int = 8, 154780712aaSxiaofeibao-xjtu RabCommitWidth: Int = 6, 15565df1368Sczw MaxUopSize: Int = 65, 156fa7f2c26STang Haojin EnableRenameSnapshot: Boolean = true, 157fa7f2c26STang Haojin RenameSnapshotNum: Int = 4, 1585df4db2aSLingrui98 FtqSize: Int = 64, 1592225d46eSJiawei Lin EnableLoadFastWakeUp: Boolean = true, // NOTE: not supported now, make it false 160a8db15d8Sfdy IntLogicRegs: Int = 32, 161f2ea741cSzhanglinjuan FpLogicRegs: Int = 32 + 1 + 1, // 1: I2F, 1: stride 1622cf47c6eSxiaofeibao VecLogicRegs: Int = 32 + 15, // 15: tmp 163435f48a8Sxiaofeibao V0LogicRegs: Int = 1, // V0 164dbe071d2Sxiaofeibao VlLogicRegs: Int = 1, // Vl 1659c5a1080Sxiaofeibao V0_IDX: Int = 0, 1669c5a1080Sxiaofeibao Vl_IDX: Int = 0, 1677154d65eSYinan Xu NRPhyRegs: Int = 192, 1688ff9f385SHaojin Tang VirtualLoadQueueSize: Int = 72, 16917386530SAnzo LoadQueueRARSize: Int = 72, 170452b5843SHuijin Li LoadQueueRAWSize: Int = 32, // NOTE: make sure that LoadQueueRAWSize is power of 2. 171e4f69d78Ssfencevma RollbackGroupSize: Int = 8, 17244cbc983Ssfencevma LoadQueueReplaySize: Int = 72, 173452b5843SHuijin Li LoadUncacheBufferSize: Int = 4, 174e4f69d78Ssfencevma LoadQueueNWriteBanks: Int = 8, // NOTE: make sure that LoadQueueRARSize/LoadQueueRAWSize is divided by LoadQueueNWriteBanks 175452b5843SHuijin Li StoreQueueSize: Int = 56, 176e4f69d78Ssfencevma StoreQueueNWriteBanks: Int = 8, // NOTE: make sure that StoreQueueSize is divided by StoreQueueNWriteBanks 177e4f69d78Ssfencevma StoreQueueForwardWithMask: Boolean = true, 178cea88ff8SWilliam Wang VlsQueueSize: Int = 8, 1791f35da39Sxiaofeibao-xjtu RobSize: Int = 160, 180a8db15d8Sfdy RabSize: Int = 256, 1814c7680e0SXuan Hu VTypeBufferSize: Int = 64, // used to reorder vtype 1821f35da39Sxiaofeibao-xjtu IssueQueueSize: Int = 24, 18328607074Ssinsanction IssueQueueCompEntrySize: Int = 16, 1843b739f49SXuan Hu intPreg: PregParams = IntPregParams( 1856f7be84aSXuan Hu numEntries = 224, 18639c59369SXuan Hu numRead = None, 18739c59369SXuan Hu numWrite = None, 1882225d46eSJiawei Lin ), 18960f0c5aeSxiaofeibao fpPreg: PregParams = FpPregParams( 19039c59369SXuan Hu numEntries = 192, 191fc605fcfSsinsanction numRead = None, 19239c59369SXuan Hu numWrite = None, 1933b739f49SXuan Hu ), 19460f0c5aeSxiaofeibao vfPreg: VfPregParams = VfPregParams( 19560f0c5aeSxiaofeibao numEntries = 128, 19660f0c5aeSxiaofeibao numRead = None, 19760f0c5aeSxiaofeibao numWrite = None, 19860f0c5aeSxiaofeibao ), 1992aa3a761Ssinsanction v0Preg: V0PregParams = V0PregParams( 2002aa3a761Ssinsanction numEntries = 22, 2012aa3a761Ssinsanction numRead = None, 2022aa3a761Ssinsanction numWrite = None, 2032aa3a761Ssinsanction ), 2042aa3a761Ssinsanction vlPreg: VlPregParams = VlPregParams( 2052aa3a761Ssinsanction numEntries = 32, 2062aa3a761Ssinsanction numRead = None, 2072aa3a761Ssinsanction numWrite = None, 2082aa3a761Ssinsanction ), 209ae4984bfSsinsanction IntRegCacheSize: Int = 16, 210ae4984bfSsinsanction MemRegCacheSize: Int = 12, 2114376b525SZiyue Zhang intSchdVlWbPort: Int = 0, 2124376b525SZiyue Zhang vfSchdVlWbPort: Int = 1, 213289fc2f9SLinJiawei prefetcher: Option[PrefetcherParams] = Some(SMSParams()), 21495a47398SGao-Zeyu IfuRedirectNum: Int = 1, 215a81cda24Ssfencevma LoadPipelineWidth: Int = 3, 2162142592bSxiaofeibao-xjtu StorePipelineWidth: Int = 2, 217ef142700Sxiaofeibao VecLoadPipelineWidth: Int = 2, 218ef142700Sxiaofeibao VecStorePipelineWidth: Int = 2, 219cea88ff8SWilliam Wang VecMemSrcInWidth: Int = 2, 220cea88ff8SWilliam Wang VecMemInstWbWidth: Int = 1, 221cea88ff8SWilliam Wang VecMemDispatchWidth: Int = 1, 2223ea758f9SAnzo VecMemDispatchMaxNumber: Int = 16, 2239ff64fb6SAnzooooo VecMemUnitStrideMaxFlowNum: Int = 2, 2244e7f9e52Sxiaofeibao VecMemLSQEnqIteratorNumberSeq: Seq[Int] = Seq(16, 16, 16, 16, 16, 16), 2252225d46eSJiawei Lin StoreBufferSize: Int = 16, 22605f23f57SWilliam Wang StoreBufferThreshold: Int = 7, 22746f74b57SHaojin Tang EnsbufferWidth: Int = 2, 228ec49b127Ssinsanction LoadDependencyWidth: Int = 2, 22920a5248fSzhanglinjuan // ============ VLSU ============ 230b2d6d8e7Sgood-circle VlMergeBufferSize: Int = 16, 231b2d6d8e7Sgood-circle VsMergeBufferSize: Int = 16, 232ef142700Sxiaofeibao UopWritebackWidth: Int = 2, 233ef142700Sxiaofeibao VLUopWritebackWidth: Int = 2, 234627be78bSgood-circle VSUopWritebackWidth: Int = 1, 23588884326Sweiding liu VSegmentBufferSize: Int = 8, 23620a5248fSzhanglinjuan // ============================== 23737225120Ssfencevma UncacheBufferSize: Int = 4, 238cd2ff98bShappy-lx EnableLoadToLoadForward: Boolean = false, 23914a67055Ssfencevma EnableFastForward: Boolean = true, 240beabc72dSWilliam Wang EnableLdVioCheckAfterReset: Boolean = true, 241026615fcSWilliam Wang EnableSoftPrefetchAfterReset: Boolean = true, 242026615fcSWilliam Wang EnableCacheErrorAfterReset: Boolean = true, 243eaf14747Scz4e EnableAccurateLoadError: Boolean = true, 244e32bafbaSbugGenerator EnableUncacheWriteOutstanding: Boolean = false, 24541d8d239Shappy-lx EnableHardwareStoreMisalign: Boolean = true, 24641d8d239Shappy-lx EnableHardwareLoadMisalign: Boolean = true, 2470d32f713Shappy-lx EnableStorePrefetchAtIssue: Boolean = false, 2480d32f713Shappy-lx EnableStorePrefetchAtCommit: Boolean = false, 2490d32f713Shappy-lx EnableAtCommitMissTrigger: Boolean = true, 2500d32f713Shappy-lx EnableStorePrefetchSMS: Boolean = false, 2510d32f713Shappy-lx EnableStorePrefetchSPB: Boolean = false, 252e3ed843cShappy-lx HasCMO: Boolean = true, 25345f497a4Shappy-lx MMUAsidLen: Int = 16, // max is 16, 0 is not supported now 254d0de7e4aSpeixiaokun MMUVmidLen: Int = 14, 25562dfd6c3Shappy-lx ReSelectLen: Int = 7, // load replay queue replay select counter len 25604665835SMaxpicca-Li iwpuParameters: WPUParameters = WPUParameters( 25704665835SMaxpicca-Li enWPU = false, 25804665835SMaxpicca-Li algoName = "mmru", 25904665835SMaxpicca-Li isICache = true, 26004665835SMaxpicca-Li ), 26104665835SMaxpicca-Li dwpuParameters: WPUParameters = WPUParameters( 26204665835SMaxpicca-Li enWPU = false, 26304665835SMaxpicca-Li algoName = "mmru", 26404665835SMaxpicca-Li enCfPred = false, 26504665835SMaxpicca-Li isICache = false, 26604665835SMaxpicca-Li ), 267a0301c0dSLemover itlbParameters: TLBParameters = TLBParameters( 268a0301c0dSLemover name = "itlb", 269a0301c0dSLemover fetchi = true, 270a0301c0dSLemover useDmode = false, 271f9ac118cSHaoyuan Feng NWays = 48, 272a0301c0dSLemover ), 273b92f8445Sssszwic itlbPortNum: Int = ICacheParameters().PortNumber + 1, 274b92f8445Sssszwic ipmpPortNum: Int = 2 * ICacheParameters().PortNumber + 1, 275a0301c0dSLemover ldtlbParameters: TLBParameters = TLBParameters( 276a0301c0dSLemover name = "ldtlb", 277f9ac118cSHaoyuan Feng NWays = 48, 27853b8f1a7SLemover outReplace = false, 2795b7ef044SLemover partialStaticPMP = true, 280f1fe8698SLemover outsideRecvFlush = true, 2813ea4388cSHaoyuan Feng saveLevel = false, 28226af847eSgood-circle lgMaxSize = 4 283a0301c0dSLemover ), 284a0301c0dSLemover sttlbParameters: TLBParameters = TLBParameters( 285a0301c0dSLemover name = "sttlb", 286f9ac118cSHaoyuan Feng NWays = 48, 28753b8f1a7SLemover outReplace = false, 2885b7ef044SLemover partialStaticPMP = true, 289f1fe8698SLemover outsideRecvFlush = true, 2903ea4388cSHaoyuan Feng saveLevel = false, 29126af847eSgood-circle lgMaxSize = 4 292a0301c0dSLemover ), 2938f1fa9b1Ssfencevma hytlbParameters: TLBParameters = TLBParameters( 2948f1fa9b1Ssfencevma name = "hytlb", 295531c40faSsinceforYy NWays = 48, 296531c40faSsinceforYy outReplace = false, 2978f1fa9b1Ssfencevma partialStaticPMP = true, 2988f1fa9b1Ssfencevma outsideRecvFlush = true, 2993ea4388cSHaoyuan Feng saveLevel = false, 30026af847eSgood-circle lgMaxSize = 4 3018f1fa9b1Ssfencevma ), 302c8309e8aSHaoyuan Feng pftlbParameters: TLBParameters = TLBParameters( 303c8309e8aSHaoyuan Feng name = "pftlb", 304f9ac118cSHaoyuan Feng NWays = 48, 305c8309e8aSHaoyuan Feng outReplace = false, 306c8309e8aSHaoyuan Feng partialStaticPMP = true, 307c8309e8aSHaoyuan Feng outsideRecvFlush = true, 3083ea4388cSHaoyuan Feng saveLevel = false, 30926af847eSgood-circle lgMaxSize = 4 310c8309e8aSHaoyuan Feng ), 311aee6a6d1SYanqin Li l2ToL1tlbParameters: TLBParameters = TLBParameters( 312aee6a6d1SYanqin Li name = "l2tlb", 313aee6a6d1SYanqin Li NWays = 48, 314aee6a6d1SYanqin Li outReplace = false, 315aee6a6d1SYanqin Li partialStaticPMP = true, 316aee6a6d1SYanqin Li outsideRecvFlush = true, 3173ea4388cSHaoyuan Feng saveLevel = false 318aee6a6d1SYanqin Li ), 319bf08468cSLemover refillBothTlb: Boolean = false, 320a0301c0dSLemover btlbParameters: TLBParameters = TLBParameters( 321a0301c0dSLemover name = "btlb", 322f9ac118cSHaoyuan Feng NWays = 48, 323a0301c0dSLemover ), 3245854c1edSLemover l2tlbParameters: L2TLBParameters = L2TLBParameters(), 3252225d46eSJiawei Lin NumPerfCounters: Int = 16, 32605f23f57SWilliam Wang icacheParameters: ICacheParameters = ICacheParameters( 32705f23f57SWilliam Wang tagECC = Some("parity"), 32805f23f57SWilliam Wang dataECC = Some("parity"), 32905f23f57SWilliam Wang replacer = Some("setplru"), 3306c106319Sxu_zh cacheCtrlAddressOpt = Some(AddressSet(0x38022080, 0x7f)) 33105f23f57SWilliam Wang ), 3324f94c0c6SJiawei Lin dcacheParametersOpt: Option[DCacheParameters] = Some(DCacheParameters( 33305f23f57SWilliam Wang tagECC = Some("secded"), 33405f23f57SWilliam Wang dataECC = Some("secded"), 33505f23f57SWilliam Wang replacer = Some("setplru"), 33605f23f57SWilliam Wang nMissEntries = 16, 337300ded30SWilliam Wang nProbeEntries = 8, 3380d32f713Shappy-lx nReleaseEntries = 18, 3390d32f713Shappy-lx nMaxPrefetchEntry = 6, 340908b24d8Scz4e enableTagEcc = true, 34172dab974Scz4e enableDataEcc = true, 34272dab974Scz4e cacheCtrlAddressOpt = Some(AddressSet(0x38022000, 0x7f)) 3434f94c0c6SJiawei Lin )), 34415ee59e4Swakafa L2CacheParamsOpt: Option[L2Param] = Some(L2Param( 345a1ea7f76SJiawei Lin name = "l2", 346a1ea7f76SJiawei Lin ways = 8, 347a1ea7f76SJiawei Lin sets = 1024, // default 512KB L2 3481fb367eaSChen Xi prefetch = Seq(coupledL2.prefetch.PrefetchReceiverParams(), coupledL2.prefetch.BOPParameters(), 3491fb367eaSChen Xi coupledL2.prefetch.TPParameters()), 3504f94c0c6SJiawei Lin )), 351d5be5d19SJiawei Lin L2NBanks: Int = 1, 352a1ea7f76SJiawei Lin usePTWRepeater: Boolean = false, 353e0374b1cSHaoyuan Feng softTLB: Boolean = false, // dpi-c l1tlb debug only 354e0374b1cSHaoyuan Feng softPTW: Boolean = false, // dpi-c l2tlb debug only 3554b2c87baS梁森 Liang Sen softPTWDelay: Int = 1, 356602aa9f1Scz4e hasMbist: Boolean = false, 3574c0658aeSTang Haojin wfiResume: Boolean = true, 358602aa9f1Scz4e hasSramCtl: Boolean = false, 3592225d46eSJiawei Lin){ 3606cd53fdeSTang Haojin def ISABase = "rv64i" 3616cd53fdeSTang Haojin def ISAExtensions = Seq( 3626cd53fdeSTang Haojin // single letter extensions, in canonical order 3636cd53fdeSTang Haojin "i", "m", "a", "f", "d", "c", /* "b", */ "v", "h", 3646cd53fdeSTang Haojin // multi-letter extensions, sorted alphanumerically 3652bff79a3STang Haojin "sdtrig", "sha", "shcounterenw", "shgatpa", "shlcofideleg", "shtvala", "shvsatpa", "shvstvala", 3662bff79a3STang Haojin "shvstvecd", "smaia", "smcsrind", "smdbltrp", "smmpm", "smnpm", "smrnmi", "smstateen", 3672bff79a3STang Haojin "ss1p13", "ssaia", "ssccptr", "sscofpmf", "sscounterenw", "sscsrind", "ssdbltrp", "ssnpm", 3682bff79a3STang Haojin "sspm", "ssstateen", "ssstrict", "sstc", "sstvala", "sstvecd", "ssu64xl", "supm", "sv39", 369b1d76493STang Haojin "sv48", "svade", "svbare", "svinval", "svnapot", "svpbmt", "za64rs", "zacas", "zawrs", "zba", 370b1d76493STang Haojin "zbb", "zbc", "zbkb", "zbkc", "zbkx", "zbs", "zcb", "zcmop", "zfa", "zfh", "zfhmin", "zic64b", 371b1d76493STang Haojin "zicbom", "zicbop", "zicboz", "ziccamoa", "ziccif", "zicclsm", "ziccrse", "zicntr", "zicond", 372b1d76493STang Haojin "zicsr", "zifencei", "zihintntl", "zihintpause", "zihpm", "zimop", "zkn", "zknd", "zkne", "zknh", 373b1d76493STang Haojin "zksed", "zksh", "zkt", "zvbb", "zvfh", "zvfhmin", "zvkt", "zvl128b", "zvl32b", "zvl64b" 3746cd53fdeSTang Haojin ) 3756cd53fdeSTang Haojin 376b52d4755SXuan Hu def vlWidth = log2Up(VLEN) + 1 377b52d4755SXuan Hu 3786dbb4e08SXuan Hu /** 3796dbb4e08SXuan Hu * the minimum element length of vector elements 3806dbb4e08SXuan Hu */ 3816dbb4e08SXuan Hu val minVecElen: Int = 8 3826dbb4e08SXuan Hu 3836dbb4e08SXuan Hu /** 3846dbb4e08SXuan Hu * the maximum number of elements in vector register 3856dbb4e08SXuan Hu */ 3866dbb4e08SXuan Hu val maxElemPerVreg: Int = VLEN / minVecElen 3876dbb4e08SXuan Hu 388c7fabd05SSteve Gou val allHistLens = SCHistLens ++ ITTageTableInfos.map(_._2) ++ TageTableInfos.map(_._2) :+ UbtbGHRLength 389c7fabd05SSteve Gou val HistoryLength = allHistLens.max + numBr * FtqSize + 9 // 256 for the predictor configs now 390c7fabd05SSteve Gou 391ae4984bfSsinsanction val RegCacheSize = IntRegCacheSize + MemRegCacheSize 392ae4984bfSsinsanction val RegCacheIdxWidth = log2Up(RegCacheSize) 393ae4984bfSsinsanction 39439c59369SXuan Hu val intSchdParams = { 3953b739f49SXuan Hu implicit val schdType: SchedulerType = IntScheduler() 3963b739f49SXuan Hu SchdBlockParams(Seq( 3973b739f49SXuan Hu IssueBlockParams(Seq( 3987556e9bdSxiaofeibao-xjtu ExeUnitParams("ALU0", Seq(AluCfg, MulCfg, BkuCfg), Seq(IntWB(port = 0, 0)), Seq(Seq(IntRD(0, 0)), Seq(IntRD(1, 0))), true, 2), 399f803e5e9Ssinsanction ExeUnitParams("BJU0", Seq(BrhCfg, JmpCfg), Seq(IntWB(port = 0, 1)), Seq(Seq(IntRD(6, 1)), Seq(IntRD(7, 1))), true, 2), 40028607074Ssinsanction ), numEntries = IssueQueueSize, numEnq = 2, numComp = IssueQueueCompEntrySize), 401cde70b38SzhanglyGit IssueBlockParams(Seq( 4027556e9bdSxiaofeibao-xjtu ExeUnitParams("ALU1", Seq(AluCfg, MulCfg, BkuCfg), Seq(IntWB(port = 1, 0)), Seq(Seq(IntRD(2, 0)), Seq(IntRD(3, 0))), true, 2), 403f803e5e9Ssinsanction ExeUnitParams("BJU1", Seq(BrhCfg, JmpCfg), Seq(IntWB(port = 1, 1)), Seq(Seq(IntRD(4, 1)), Seq(IntRD(5, 1))), true, 2), 40428607074Ssinsanction ), numEntries = IssueQueueSize, numEnq = 2, numComp = IssueQueueCompEntrySize), 4053b739f49SXuan Hu IssueBlockParams(Seq( 406ff3fcdf1Sxiaofeibao-xjtu ExeUnitParams("ALU2", Seq(AluCfg), Seq(IntWB(port = 2, 0)), Seq(Seq(IntRD(4, 0)), Seq(IntRD(5, 0))), true, 2), 4078c6ac5ebSxiaofeibao ExeUnitParams("BJU2", Seq(BrhCfg, JmpCfg, I2fCfg, VSetRiWiCfg, VSetRiWvfCfg, I2vCfg), Seq(IntWB(port = 4, 0), VfWB(2, 0), V0WB(port = 2, 0), VlWB(port = intSchdVlWbPort, 0), FpWB(port = 2, 1)), Seq(Seq(IntRD(2, 1)), Seq(IntRD(3, 1)))), 40828607074Ssinsanction ), numEntries = IssueQueueSize, numEnq = 2, numComp = IssueQueueCompEntrySize), 4093b739f49SXuan Hu IssueBlockParams(Seq( 410ff3fcdf1Sxiaofeibao-xjtu ExeUnitParams("ALU3", Seq(AluCfg), Seq(IntWB(port = 3, 0)), Seq(Seq(IntRD(6, 0)), Seq(IntRD(7, 0))), true, 2), 411f803e5e9Ssinsanction ExeUnitParams("BJU3", Seq(CsrCfg, FenceCfg, DivCfg), Seq(IntWB(port = 4, 1)), Seq(Seq(IntRD(0, 1)), Seq(IntRD(1, 1)))), 41228607074Ssinsanction ), numEntries = IssueQueueSize, numEnq = 2, numComp = IssueQueueCompEntrySize), 4133b739f49SXuan Hu ), 4143b739f49SXuan Hu numPregs = intPreg.numEntries, 4153b739f49SXuan Hu numDeqOutside = 0, 4163b739f49SXuan Hu schdType = schdType, 4173b739f49SXuan Hu rfDataWidth = intPreg.dataCfg.dataWidth, 4183b739f49SXuan Hu ) 4193b739f49SXuan Hu } 42060f0c5aeSxiaofeibao 42160f0c5aeSxiaofeibao val fpSchdParams = { 42260f0c5aeSxiaofeibao implicit val schdType: SchedulerType = FpScheduler() 42360f0c5aeSxiaofeibao SchdBlockParams(Seq( 42460f0c5aeSxiaofeibao IssueBlockParams(Seq( 425f62a71efSxiaofeibao ExeUnitParams("FEX0", Seq(FaluCfg, FcvtCfg, F2vCfg, FmacCfg), Seq(FpWB(port = 0, 0), IntWB(port = 0, 2), VfWB(port = 3, 0), V0WB(port = 3, 0)), Seq(Seq(FpRD(0, 0)), Seq(FpRD(1, 0)), Seq(FpRD(2, 0)))), 4268c6ac5ebSxiaofeibao ExeUnitParams("FEX1", Seq(FdivCfg), Seq(FpWB(port = 3, 1)), Seq(Seq(FpRD(2, 1)), Seq(FpRD(5, 1)))), 42749f2b250Sxiaofeibao ), numEntries = 18, numEnq = 2, numComp = 14), 42860f0c5aeSxiaofeibao IssueBlockParams(Seq( 4298c6ac5ebSxiaofeibao ExeUnitParams("FEX2", Seq(FaluCfg, FmacCfg), Seq(FpWB(port = 1, 0), IntWB(port = 1, 2)), Seq(Seq(FpRD(3, 0)), Seq(FpRD(4, 0)), Seq(FpRD(5, 0)))), 4308c6ac5ebSxiaofeibao ExeUnitParams("FEX3", Seq(FdivCfg), Seq(FpWB(port = 4, 1)), Seq(Seq(FpRD(8, 1)), Seq(FpRD(9, 1)))), 43149f2b250Sxiaofeibao ), numEntries = 18, numEnq = 2, numComp = 14), 43260f0c5aeSxiaofeibao IssueBlockParams(Seq( 4338c6ac5ebSxiaofeibao ExeUnitParams("FEX4", Seq(FaluCfg, FmacCfg), Seq(FpWB(port = 2, 0), IntWB(port = 2, 1)), Seq(Seq(FpRD(6, 0)), Seq(FpRD(7, 0)), Seq(FpRD(8, 0)))), 43449f2b250Sxiaofeibao ), numEntries = 18, numEnq = 2, numComp = 14), 43560f0c5aeSxiaofeibao ), 43660f0c5aeSxiaofeibao numPregs = fpPreg.numEntries, 43760f0c5aeSxiaofeibao numDeqOutside = 0, 43860f0c5aeSxiaofeibao schdType = schdType, 43960f0c5aeSxiaofeibao rfDataWidth = fpPreg.dataCfg.dataWidth, 44060f0c5aeSxiaofeibao ) 44160f0c5aeSxiaofeibao } 44260f0c5aeSxiaofeibao 44339c59369SXuan Hu val vfSchdParams = { 4443b739f49SXuan Hu implicit val schdType: SchedulerType = VfScheduler() 4453b739f49SXuan Hu SchdBlockParams(Seq( 4463b739f49SXuan Hu IssueBlockParams(Seq( 4470d50d631Sxiaofeibao ExeUnitParams("VFEX0", Seq(VfmaCfg, VialuCfg, VimacCfg, VppuCfg), Seq(VfWB(port = 0, 0), V0WB(port = 0, 0)), Seq(Seq(VfRD(0, 0)), Seq(VfRD(1, 0)), Seq(VfRD(2, 0)), Seq(V0RD(0, 0)), Seq(VlRD(0, 0)))), 4480d50d631Sxiaofeibao ExeUnitParams("VFEX1", Seq(VfaluCfg, VfcvtCfg, VipuCfg, VSetRvfWvfCfg), Seq(VfWB(port = 0, 1), V0WB(port = 0, 1), VlWB(port = vfSchdVlWbPort, 0), IntWB(port = 1, 1), FpWB(port = 0, 1)), Seq(Seq(VfRD(0, 1)), Seq(VfRD(1, 1)), Seq(VfRD(2, 1)), Seq(V0RD(0, 1)), Seq(VlRD(0, 1)))), 44949f2b250Sxiaofeibao ), numEntries = 16, numEnq = 2, numComp = 12), 4503b739f49SXuan Hu IssueBlockParams(Seq( 4510d50d631Sxiaofeibao ExeUnitParams("VFEX2", Seq(VfmaCfg, VialuCfg), Seq(VfWB(port = 1, 0), V0WB(port = 1, 0)), Seq(Seq(VfRD(3, 0)), Seq(VfRD(4, 0)), Seq(VfRD(5, 0)), Seq(V0RD(1, 0)), Seq(VlRD(1, 0)))), 452c22ffc80Sxiaofeibao ExeUnitParams("VFEX3", Seq(VfaluCfg), Seq(VfWB(port = 2, 1), V0WB(port = 2, 1), FpWB(port = 1, 1)), Seq(Seq(VfRD(3, 1)), Seq(VfRD(4, 1)), Seq(VfRD(5, 1)), Seq(V0RD(1, 1)), Seq(VlRD(1, 1)))), 45349f2b250Sxiaofeibao ), numEntries = 16, numEnq = 2, numComp = 12), 4540d50d631Sxiaofeibao IssueBlockParams(Seq( 4550d50d631Sxiaofeibao ExeUnitParams("VFEX4", Seq(VfdivCfg, VidivCfg), Seq(VfWB(port = 3, 1), V0WB(port = 3, 1)), Seq(Seq(VfRD(3, 2)), Seq(VfRD(4, 2)), Seq(VfRD(5, 2)), Seq(V0RD(1, 2)), Seq(VlRD(1, 2)))), 45649f2b250Sxiaofeibao ), numEntries = 10, numEnq = 2, numComp = 6), 4573b739f49SXuan Hu ), 4583b739f49SXuan Hu numPregs = vfPreg.numEntries, 4593b739f49SXuan Hu numDeqOutside = 0, 4603b739f49SXuan Hu schdType = schdType, 4613b739f49SXuan Hu rfDataWidth = vfPreg.dataCfg.dataWidth, 4623b739f49SXuan Hu ) 4633b739f49SXuan Hu } 46439c59369SXuan Hu 46539c59369SXuan Hu val memSchdParams = { 4663b739f49SXuan Hu implicit val schdType: SchedulerType = MemScheduler() 4673b739f49SXuan Hu val rfDataWidth = 64 4682225d46eSJiawei Lin 4693b739f49SXuan Hu SchdBlockParams(Seq( 4703b739f49SXuan Hu IssueBlockParams(Seq( 471f803e5e9Ssinsanction ExeUnitParams("STA0", Seq(StaCfg, MouCfg), Seq(FakeIntWB()), Seq(Seq(IntRD(7, 2)))), 47249f2b250Sxiaofeibao ), numEntries = 16, numEnq = 2, numComp = 12), 473b133b458SXuan Hu IssueBlockParams(Seq( 474f803e5e9Ssinsanction ExeUnitParams("STA1", Seq(StaCfg, MouCfg), Seq(FakeIntWB()), Seq(Seq(IntRD(6, 2)))), 47549f2b250Sxiaofeibao ), numEntries = 16, numEnq = 2, numComp = 12), 476202674aeSHaojin Tang IssueBlockParams(Seq( 4778c6ac5ebSxiaofeibao ExeUnitParams("LDU0", Seq(LduCfg), Seq(IntWB(5, 0), FpWB(3, 0)), Seq(Seq(IntRD(8, 0))), true, 2), 47849f2b250Sxiaofeibao ), numEntries = 16, numEnq = 2, numComp = 12), 4793b739f49SXuan Hu IssueBlockParams(Seq( 4808c6ac5ebSxiaofeibao ExeUnitParams("LDU1", Seq(LduCfg), Seq(IntWB(6, 0), FpWB(4, 0)), Seq(Seq(IntRD(9, 0))), true, 2), 48149f2b250Sxiaofeibao ), numEntries = 16, numEnq = 2, numComp = 12), 482e77d3114SHaojin Tang IssueBlockParams(Seq( 4838c6ac5ebSxiaofeibao ExeUnitParams("LDU2", Seq(LduCfg), Seq(IntWB(7, 0), FpWB(5, 0)), Seq(Seq(IntRD(10, 0))), true, 2), 48449f2b250Sxiaofeibao ), numEntries = 16, numEnq = 2, numComp = 12), 485a81cda24Ssfencevma IssueBlockParams(Seq( 486df3b4b92SAnzooooo ExeUnitParams("VLSU0", Seq(VlduCfg, VstuCfg, VseglduSeg, VsegstuCfg), Seq(VfWB(4, 0), V0WB(4, 0), VlWB(port = 2, 0)), Seq(Seq(VfRD(6, 0)), Seq(VfRD(7, 0)), Seq(VfRD(8, 0)), Seq(V0RD(2, 0)), Seq(VlRD(2, 0)))), 48749f2b250Sxiaofeibao ), numEntries = 16, numEnq = 2, numComp = 12), 4883da89fc0Sxiaofeibao IssueBlockParams(Seq( 489df3b4b92SAnzooooo ExeUnitParams("VLSU1", Seq(VlduCfg, VstuCfg), Seq(VfWB(5, 0), V0WB(5, 0), VlWB(port = 3, 0)), Seq(Seq(VfRD(9, 0)), Seq(VfRD(10, 0)), Seq(VfRD(11, 0)), Seq(V0RD(3, 0)), Seq(VlRD(3, 0)))), 49049f2b250Sxiaofeibao ), numEntries = 16, numEnq = 2, numComp = 12), 491ecfc6f16SXuan Hu IssueBlockParams(Seq( 4928c6ac5ebSxiaofeibao ExeUnitParams("STD0", Seq(StdCfg, MoudCfg), Seq(), Seq(Seq(IntRD(5, 2), FpRD(9, 0)))), 49349f2b250Sxiaofeibao ), numEntries = 16, numEnq = 2, numComp = 12), 49427811ea4SXuan Hu IssueBlockParams(Seq( 4958c6ac5ebSxiaofeibao ExeUnitParams("STD1", Seq(StdCfg, MoudCfg), Seq(), Seq(Seq(IntRD(3, 2), FpRD(10, 0)))), 49649f2b250Sxiaofeibao ), numEntries = 16, numEnq = 2, numComp = 12), 4973b739f49SXuan Hu ), 498141a6449SXuan Hu numPregs = intPreg.numEntries max vfPreg.numEntries, 4993b739f49SXuan Hu numDeqOutside = 0, 5003b739f49SXuan Hu schdType = schdType, 5013b739f49SXuan Hu rfDataWidth = rfDataWidth, 5023b739f49SXuan Hu ) 5033b739f49SXuan Hu } 5042225d46eSJiawei Lin 505bf35baadSXuan Hu def PregIdxWidthMax = intPreg.addrWidth max vfPreg.addrWidth 506bf35baadSXuan Hu 507bf35baadSXuan Hu def iqWakeUpParams = { 508bf35baadSXuan Hu Seq( 509c0b91ca1SHaojin Tang WakeUpConfig( 5102142592bSxiaofeibao-xjtu Seq("ALU0", "ALU1", "ALU2", "ALU3", "LDU0", "LDU1", "LDU2") -> 5112142592bSxiaofeibao-xjtu Seq("ALU0", "BJU0", "ALU1", "BJU1", "ALU2", "BJU2", "ALU3", "BJU3", "LDU0", "LDU1", "LDU2", "STA0", "STA1", "STD0", "STD1") 512c0b91ca1SHaojin Tang ), 5130966699fSxiaofeibao-xjtu // TODO: add load -> fp slow wakeup 514b67f36d0Sxiaofeibao-xjtu WakeUpConfig( 5158c6ac5ebSxiaofeibao Seq("FEX0", "FEX2", "FEX4") -> 5168c6ac5ebSxiaofeibao Seq("FEX0", "FEX1", "FEX2", "FEX3", "FEX4") 51731c5c732Sxiaofeibao ), 518c0b91ca1SHaojin Tang ).flatten 519bf35baadSXuan Hu } 520bf35baadSXuan Hu 5215edcc45fSHaojin Tang def fakeIntPreg = FakeIntPregParams(intPreg.numEntries, intPreg.numRead, intPreg.numWrite) 5225edcc45fSHaojin Tang 5230c7ebb58Sxiaofeibao-xjtu val backendParams: BackendParams = backend.BackendParams( 524bf35baadSXuan Hu Map( 5253b739f49SXuan Hu IntScheduler() -> intSchdParams, 52660f0c5aeSxiaofeibao FpScheduler() -> fpSchdParams, 5273b739f49SXuan Hu VfScheduler() -> vfSchdParams, 5283b739f49SXuan Hu MemScheduler() -> memSchdParams, 529bf35baadSXuan Hu ), 530bf35baadSXuan Hu Seq( 5313b739f49SXuan Hu intPreg, 53260f0c5aeSxiaofeibao fpPreg, 5333b739f49SXuan Hu vfPreg, 5342aa3a761Ssinsanction v0Preg, 5352aa3a761Ssinsanction vlPreg, 5365edcc45fSHaojin Tang fakeIntPreg 537bf35baadSXuan Hu ), 538bf35baadSXuan Hu iqWakeUpParams, 539bf35baadSXuan Hu ) 54049162c9aSGuanghui Cheng 54149162c9aSGuanghui Cheng // Parameters for trace extension. 54249162c9aSGuanghui Cheng // Trace parameters is useful for XSTOP. 5434907ec88Schengguanghui val traceParams: TraceParams = new TraceParams( 544725e8ddcSchengguanghui TraceGroupNum = 3, 545551cc696Schengguanghui IaddrWidth = GPAddrBitsSv48x4, 546725e8ddcSchengguanghui PrivWidth = 3, 547725e8ddcSchengguanghui ItypeWidth = 4, 548725e8ddcSchengguanghui IlastsizeWidth = 1, 5494907ec88Schengguanghui ) 5502225d46eSJiawei Lin} 5512225d46eSJiawei Lin 5522225d46eSJiawei Lincase object DebugOptionsKey extends Field[DebugOptions] 5532225d46eSJiawei Lin 5542225d46eSJiawei Lincase class DebugOptions 5552225d46eSJiawei Lin( 5561545277aSYinan Xu FPGAPlatform: Boolean = false, 5579eee369fSKamimiao ResetGen: Boolean = false, 5581545277aSYinan Xu EnableDifftest: Boolean = false, 559cbe9a847SYinan Xu AlwaysBasicDiff: Boolean = true, 5601545277aSYinan Xu EnableDebug: Boolean = false, 5612225d46eSJiawei Lin EnablePerfDebug: Boolean = true, 5624ba1d457SKunlin You PerfLevel: String = "VERBOSE", 563eb163ef0SHaojin Tang UseDRAMSim: Boolean = false, 564047e34f9SMaxpicca-Li EnableConstantin: Boolean = false, 56562129679Swakafa EnableChiselDB: Boolean = false, 56662129679Swakafa AlwaysBasicDB: Boolean = true, 567ec9e6512Swakafa EnableRollingDB: Boolean = false 5682225d46eSJiawei Lin) 5692225d46eSJiawei Lin 5702225d46eSJiawei Lintrait HasXSParameter { 5712225d46eSJiawei Lin 5722225d46eSJiawei Lin implicit val p: Parameters 5732225d46eSJiawei Lin 574ff74867bSYangyu Chen def PAddrBits = p(SoCParamsKey).PAddrBits // PAddrBits is Phyical Memory addr bits 57545def856STang Haojin def PmemRanges = p(SoCParamsKey).PmemRanges 5768882eb68SXin Tian def KeyIDBits = p(CVMParamskey).KeyIDBits 5779c0fd28fSXuan Hu final val PageOffsetWidth = 12 5788537b88aSTang Haojin def NodeIDWidth = p(SoCParamsKey).NodeIDWidthList(p(CHIIssue)) // NodeID width among NoC 5792f30d658SYinan Xu 580ff74867bSYangyu Chen def coreParams = p(XSCoreParamsKey) 581ff74867bSYangyu Chen def env = p(DebugOptionsKey) 5822225d46eSJiawei Lin 5836cd53fdeSTang Haojin def ISABase = coreParams.ISABase 5846cd53fdeSTang Haojin def ISAExtensions = coreParams.ISAExtensions 585ff74867bSYangyu Chen def XLEN = coreParams.XLEN 586ff74867bSYangyu Chen def VLEN = coreParams.VLEN 587ff74867bSYangyu Chen def ELEN = coreParams.ELEN 588ff74867bSYangyu Chen def HSXLEN = coreParams.HSXLEN 5892225d46eSJiawei Lin val minFLen = 32 5902225d46eSJiawei Lin val fLen = 64 591ff74867bSYangyu Chen def hartIdLen = p(MaxHartIdBits) 592ff74867bSYangyu Chen val xLen = XLEN 5932225d46eSJiawei Lin 5948882eb68SXin Tian def HasBitmapCheck = coreParams.HasBitmapCheck 5958882eb68SXin Tian def HasBitmapCheckDefault = coreParams.HasBitmapCheckDefault 596ff74867bSYangyu Chen def HasMExtension = coreParams.HasMExtension 597ff74867bSYangyu Chen def HasCExtension = coreParams.HasCExtension 598ff74867bSYangyu Chen def HasHExtension = coreParams.HasHExtension 5993ea4388cSHaoyuan Feng def EnableSv48 = coreParams.EnableSv48 600ff74867bSYangyu Chen def HasDiv = coreParams.HasDiv 601ff74867bSYangyu Chen def HasIcache = coreParams.HasICache 602ff74867bSYangyu Chen def HasDcache = coreParams.HasDCache 603ff74867bSYangyu Chen def AddrBits = coreParams.AddrBits // AddrBits is used in some cases 604dd980d61SXu, Zefan def PAddrBitsMax = coreParams.PAddrBitsMax 6050b1b8ed1SXiaokun-Pei def GPAddrBitsSv39x4 = coreParams.GPAddrBitsSv39x4 6060b1b8ed1SXiaokun-Pei def GPAddrBitsSv48x4 = coreParams.GPAddrBitsSv48x4 60797929664SXiaokun-Pei def GPAddrBits = { 60897929664SXiaokun-Pei if (EnableSv48) 60997929664SXiaokun-Pei coreParams.GPAddrBitsSv48x4 61097929664SXiaokun-Pei else 61197929664SXiaokun-Pei coreParams.GPAddrBitsSv39x4 61297929664SXiaokun-Pei } 613ff74867bSYangyu Chen def VAddrBits = { 614d0de7e4aSpeixiaokun if (HasHExtension) { 61597929664SXiaokun-Pei if (EnableSv48) 61697929664SXiaokun-Pei coreParams.GPAddrBitsSv48x4 61797929664SXiaokun-Pei else 61897929664SXiaokun-Pei coreParams.GPAddrBitsSv39x4 619d0de7e4aSpeixiaokun } else { 62097929664SXiaokun-Pei if (EnableSv48) 62197929664SXiaokun-Pei coreParams.VAddrBitsSv48 62297929664SXiaokun-Pei else 62397929664SXiaokun-Pei coreParams.VAddrBitsSv39 624d0de7e4aSpeixiaokun } 625d0de7e4aSpeixiaokun } // VAddrBits is Virtual Memory addr bits 626d0de7e4aSpeixiaokun 62797929664SXiaokun-Pei def VAddrMaxBits = { 62897929664SXiaokun-Pei if(EnableSv48) { 62997929664SXiaokun-Pei coreParams.VAddrBitsSv48 max coreParams.GPAddrBitsSv48x4 63097929664SXiaokun-Pei } else { 63197929664SXiaokun-Pei coreParams.VAddrBitsSv39 max coreParams.GPAddrBitsSv39x4 63297929664SXiaokun-Pei } 63397929664SXiaokun-Pei } 634237d4cfdSXuan Hu 635ff74867bSYangyu Chen def AsidLength = coreParams.AsidLength 636ff74867bSYangyu Chen def VmidLength = coreParams.VmidLength 637ff74867bSYangyu Chen def ReSelectLen = coreParams.ReSelectLen 638ff74867bSYangyu Chen def AddrBytes = AddrBits / 8 // unused 639ff74867bSYangyu Chen def DataBits = XLEN 640ff74867bSYangyu Chen def DataBytes = DataBits / 8 64138c29594Szhanglinjuan def QuadWordBits = DataBits * 2 64238c29594Szhanglinjuan def QuadWordBytes = QuadWordBits / 8 643ff74867bSYangyu Chen def VDataBytes = VLEN / 8 644ff74867bSYangyu Chen def HasFPU = coreParams.HasFPU 645ff74867bSYangyu Chen def HasVPU = coreParams.HasVPU 646ff74867bSYangyu Chen def HasCustomCSRCacheOp = coreParams.HasCustomCSRCacheOp 647ff74867bSYangyu Chen def FetchWidth = coreParams.FetchWidth 648ff74867bSYangyu Chen def PredictWidth = FetchWidth * (if (HasCExtension) 2 else 1) 649ff74867bSYangyu Chen def EnableBPU = coreParams.EnableBPU 650ff74867bSYangyu Chen def EnableBPD = coreParams.EnableBPD // enable backing predictor(like Tage) in BPUStage3 651ff74867bSYangyu Chen def EnableRAS = coreParams.EnableRAS 652ff74867bSYangyu Chen def EnableLB = coreParams.EnableLB 653ff74867bSYangyu Chen def EnableLoop = coreParams.EnableLoop 654ff74867bSYangyu Chen def EnableSC = coreParams.EnableSC 655ff74867bSYangyu Chen def EnbaleTlbDebug = coreParams.EnbaleTlbDebug 656ff74867bSYangyu Chen def HistoryLength = coreParams.HistoryLength 657ff74867bSYangyu Chen def EnableGHistDiff = coreParams.EnableGHistDiff 658ff74867bSYangyu Chen def EnableCommitGHistDiff = coreParams.EnableCommitGHistDiff 659ff74867bSYangyu Chen def EnableClockGate = coreParams.EnableClockGate 660ff74867bSYangyu Chen def UbtbGHRLength = coreParams.UbtbGHRLength 661ff74867bSYangyu Chen def UbtbSize = coreParams.UbtbSize 662ff74867bSYangyu Chen def EnableFauFTB = coreParams.EnableFauFTB 663ff74867bSYangyu Chen def FtbSize = coreParams.FtbSize 664ff74867bSYangyu Chen def FtbWays = coreParams.FtbWays 6655f89ba0bSEaston Man def FtbTagLength = coreParams.FtbTagLength 666ff74867bSYangyu Chen def RasSize = coreParams.RasSize 667ff74867bSYangyu Chen def RasSpecSize = coreParams.RasSpecSize 668ff74867bSYangyu Chen def RasCtrSize = coreParams.RasCtrSize 66916a1cc4bSzoujr 670bf358e08SLingrui98 def getBPDComponents(resp_in: BranchPredictionResp, p: Parameters) = { 671bf358e08SLingrui98 coreParams.branchPredictor(resp_in, p) 67216a1cc4bSzoujr } 673ff74867bSYangyu Chen def numBr = coreParams.numBr 674ff74867bSYangyu Chen def TageTableInfos = coreParams.TageTableInfos 675ff74867bSYangyu Chen def TageBanks = coreParams.numBr 676ff74867bSYangyu Chen def SCNRows = coreParams.SCNRows 677ff74867bSYangyu Chen def SCCtrBits = coreParams.SCCtrBits 678ff74867bSYangyu Chen def SCHistLens = coreParams.SCHistLens 679ff74867bSYangyu Chen def SCNTables = coreParams.SCNTables 680dd6c0695SLingrui98 681ff74867bSYangyu Chen def SCTableInfos = Seq.fill(SCNTables)((SCNRows, SCCtrBits)) zip SCHistLens map { 68234ed6fbcSLingrui98 case ((n, cb), h) => (n, cb, h) 683dd6c0695SLingrui98 } 684ff74867bSYangyu Chen def ITTageTableInfos = coreParams.ITTageTableInfos 685dd6c0695SLingrui98 type FoldedHistoryInfo = Tuple2[Int, Int] 686ff74867bSYangyu Chen def foldedGHistInfos = 6874813e060SLingrui98 (TageTableInfos.map{ case (nRows, h, t) => 688dd6c0695SLingrui98 if (h > 0) 6894813e060SLingrui98 Set((h, min(log2Ceil(nRows/numBr), h)), (h, min(h, t)), (h, min(h, t-1))) 690dd6c0695SLingrui98 else 691dd6c0695SLingrui98 Set[FoldedHistoryInfo]() 6924813e060SLingrui98 }.reduce(_++_).toSet ++ 69334ed6fbcSLingrui98 SCTableInfos.map{ case (nRows, _, h) => 694dd6c0695SLingrui98 if (h > 0) 695e992912cSLingrui98 Set((h, min(log2Ceil(nRows/TageBanks), h))) 696dd6c0695SLingrui98 else 697dd6c0695SLingrui98 Set[FoldedHistoryInfo]() 69834ed6fbcSLingrui98 }.reduce(_++_).toSet ++ 699dd6c0695SLingrui98 ITTageTableInfos.map{ case (nRows, h, t) => 700dd6c0695SLingrui98 if (h > 0) 701dd6c0695SLingrui98 Set((h, min(log2Ceil(nRows), h)), (h, min(h, t)), (h, min(h, t-1))) 702dd6c0695SLingrui98 else 703dd6c0695SLingrui98 Set[FoldedHistoryInfo]() 704527dc111SLingrui98 }.reduce(_++_) ++ 705527dc111SLingrui98 Set[FoldedHistoryInfo]((UbtbGHRLength, log2Ceil(UbtbSize))) 706527dc111SLingrui98 ).toList 70716a1cc4bSzoujr 708c7fabd05SSteve Gou 709c7fabd05SSteve Gou 710ff74867bSYangyu Chen def CacheLineSize = coreParams.CacheLineSize 711ff74867bSYangyu Chen def CacheLineHalfWord = CacheLineSize / 16 712ff74867bSYangyu Chen def ExtHistoryLength = HistoryLength + 64 713b92f8445Sssszwic def ICacheForceMetaECCError = coreParams.ICacheForceMetaECCError 714b92f8445Sssszwic def ICacheForceDataECCError = coreParams.ICacheForceDataECCError 715ff74867bSYangyu Chen def IBufSize = coreParams.IBufSize 716ff74867bSYangyu Chen def IBufNBank = coreParams.IBufNBank 717ff74867bSYangyu Chen def backendParams: BackendParams = coreParams.backendParams 718ff74867bSYangyu Chen def DecodeWidth = coreParams.DecodeWidth 719ff74867bSYangyu Chen def RenameWidth = coreParams.RenameWidth 720ff74867bSYangyu Chen def CommitWidth = coreParams.CommitWidth 721ff74867bSYangyu Chen def RobCommitWidth = coreParams.RobCommitWidth 722ff74867bSYangyu Chen def RabCommitWidth = coreParams.RabCommitWidth 723ff74867bSYangyu Chen def MaxUopSize = coreParams.MaxUopSize 724ff74867bSYangyu Chen def EnableRenameSnapshot = coreParams.EnableRenameSnapshot 725ff74867bSYangyu Chen def RenameSnapshotNum = coreParams.RenameSnapshotNum 726ff74867bSYangyu Chen def FtqSize = coreParams.FtqSize 727ff74867bSYangyu Chen def EnableLoadFastWakeUp = coreParams.EnableLoadFastWakeUp 728ff74867bSYangyu Chen def IntLogicRegs = coreParams.IntLogicRegs 729ff74867bSYangyu Chen def FpLogicRegs = coreParams.FpLogicRegs 730ff74867bSYangyu Chen def VecLogicRegs = coreParams.VecLogicRegs 731435f48a8Sxiaofeibao def V0LogicRegs = coreParams.V0LogicRegs 732435f48a8Sxiaofeibao def VlLogicRegs = coreParams.VlLogicRegs 733ad5c9e6eSJunxiong Ji def MaxLogicRegs = Set(IntLogicRegs, FpLogicRegs, VecLogicRegs, V0LogicRegs, VlLogicRegs).max 734ad5c9e6eSJunxiong Ji def LogicRegsWidth = log2Ceil(MaxLogicRegs) 7359c5a1080Sxiaofeibao def V0_IDX = coreParams.V0_IDX 7369c5a1080Sxiaofeibao def Vl_IDX = coreParams.Vl_IDX 737ff74867bSYangyu Chen def IntPhyRegs = coreParams.intPreg.numEntries 73860f0c5aeSxiaofeibao def FpPhyRegs = coreParams.fpPreg.numEntries 739ff74867bSYangyu Chen def VfPhyRegs = coreParams.vfPreg.numEntries 7402aa3a761Ssinsanction def V0PhyRegs = coreParams.v0Preg.numEntries 7412aa3a761Ssinsanction def VlPhyRegs = coreParams.vlPreg.numEntries 742e43bb916SXuan Hu def MaxPhyRegs = Seq(IntPhyRegs, FpPhyRegs, VfPhyRegs, V0PhyRegs, VlPhyRegs).max 743e43bb916SXuan Hu def IntPhyRegIdxWidth = log2Up(IntPhyRegs) 744e43bb916SXuan Hu def FpPhyRegIdxWidth = log2Up(FpPhyRegs) 745e43bb916SXuan Hu def VfPhyRegIdxWidth = log2Up(VfPhyRegs) 746e43bb916SXuan Hu def V0PhyRegIdxWidth = log2Up(V0PhyRegs) 747e43bb916SXuan Hu def VlPhyRegIdxWidth = log2Up(VlPhyRegs) 748e43bb916SXuan Hu def PhyRegIdxWidth = Seq(IntPhyRegIdxWidth, FpPhyRegIdxWidth, VfPhyRegIdxWidth, V0PhyRegIdxWidth, VlPhyRegIdxWidth).max 749ff74867bSYangyu Chen def RobSize = coreParams.RobSize 750ff74867bSYangyu Chen def RabSize = coreParams.RabSize 751ff74867bSYangyu Chen def VTypeBufferSize = coreParams.VTypeBufferSize 752ae4984bfSsinsanction def IntRegCacheSize = coreParams.IntRegCacheSize 753ae4984bfSsinsanction def MemRegCacheSize = coreParams.MemRegCacheSize 754ae4984bfSsinsanction def RegCacheSize = coreParams.RegCacheSize 755ae4984bfSsinsanction def RegCacheIdxWidth = coreParams.RegCacheIdxWidth 7566dbb4e08SXuan Hu /** 7576dbb4e08SXuan Hu * the minimum element length of vector elements 7586dbb4e08SXuan Hu */ 759a4d1b2d1Sgood-circle def minVecElen: Int = coreParams.minVecElen 7606dbb4e08SXuan Hu 7616dbb4e08SXuan Hu /** 7626dbb4e08SXuan Hu * the maximum number of elements in vector register 7636dbb4e08SXuan Hu */ 764a4d1b2d1Sgood-circle def maxElemPerVreg: Int = coreParams.maxElemPerVreg 7656dbb4e08SXuan Hu 766ff74867bSYangyu Chen def IntRefCounterWidth = log2Ceil(RobSize) 767914bbc86Sxiaofeibao-xjtu def LSQEnqWidth = RenameWidth 768ff74867bSYangyu Chen def LSQLdEnqWidth = LSQEnqWidth min backendParams.numLoadDp 769ff74867bSYangyu Chen def LSQStEnqWidth = LSQEnqWidth min backendParams.numStoreDp 770ff74867bSYangyu Chen def VirtualLoadQueueSize = coreParams.VirtualLoadQueueSize 771ff74867bSYangyu Chen def LoadQueueRARSize = coreParams.LoadQueueRARSize 772ff74867bSYangyu Chen def LoadQueueRAWSize = coreParams.LoadQueueRAWSize 773ff74867bSYangyu Chen def RollbackGroupSize = coreParams.RollbackGroupSize 7744a02bbdaSAnzo val RAWlgSelectGroupSize = log2Ceil(RollbackGroupSize) 7754a02bbdaSAnzo val RAWTotalDelayCycles = scala.math.ceil(log2Ceil(LoadQueueRAWSize).toFloat / RAWlgSelectGroupSize).toInt + 1 - 2 776ff74867bSYangyu Chen def LoadQueueReplaySize = coreParams.LoadQueueReplaySize 777ff74867bSYangyu Chen def LoadUncacheBufferSize = coreParams.LoadUncacheBufferSize 778ff74867bSYangyu Chen def LoadQueueNWriteBanks = coreParams.LoadQueueNWriteBanks 779ff74867bSYangyu Chen def StoreQueueSize = coreParams.StoreQueueSize 780a7904e27SAnzo def StoreQueueForceWriteSbufferUpper = coreParams.StoreQueueSize - 4 781a7904e27SAnzo def StoreQueueForceWriteSbufferLower = StoreQueueForceWriteSbufferUpper - 5 7827a9ea6c5SAnzooooo def VirtualLoadQueueMaxStoreQueueSize = VirtualLoadQueueSize max StoreQueueSize 783ff74867bSYangyu Chen def StoreQueueNWriteBanks = coreParams.StoreQueueNWriteBanks 784ff74867bSYangyu Chen def StoreQueueForwardWithMask = coreParams.StoreQueueForwardWithMask 785ff74867bSYangyu Chen def VlsQueueSize = coreParams.VlsQueueSize 7863b739f49SXuan Hu 787351e22f2SXuan Hu def MemIQSizeMax = backendParams.memSchdParams.get.issueBlockParams.map(_.numEntries).max 788351e22f2SXuan Hu def IQSizeMax = backendParams.allSchdParams.map(_.issueBlockParams.map(_.numEntries).max).max 789c7d010e5SXuan Hu 790ff74867bSYangyu Chen def NumRedirect = backendParams.numRedirect 791ff74867bSYangyu Chen def BackendRedirectNum = NumRedirect + 2 //2: ldReplay + Exception 792ff74867bSYangyu Chen def FtqRedirectAheadNum = NumRedirect 79395a47398SGao-Zeyu def IfuRedirectNum = coreParams.IfuRedirectNum 794ff74867bSYangyu Chen def LoadPipelineWidth = coreParams.LoadPipelineWidth 795ff74867bSYangyu Chen def StorePipelineWidth = coreParams.StorePipelineWidth 796ff74867bSYangyu Chen def VecLoadPipelineWidth = coreParams.VecLoadPipelineWidth 797ff74867bSYangyu Chen def VecStorePipelineWidth = coreParams.VecStorePipelineWidth 798ff74867bSYangyu Chen def VecMemSrcInWidth = coreParams.VecMemSrcInWidth 799ff74867bSYangyu Chen def VecMemInstWbWidth = coreParams.VecMemInstWbWidth 800ff74867bSYangyu Chen def VecMemDispatchWidth = coreParams.VecMemDispatchWidth 801a4d1b2d1Sgood-circle def VecMemDispatchMaxNumber = coreParams.VecMemDispatchMaxNumber 8029ff64fb6SAnzooooo def VecMemUnitStrideMaxFlowNum = coreParams.VecMemUnitStrideMaxFlowNum 8039ff64fb6SAnzooooo def VecMemLSQEnqIteratorNumberSeq = coreParams.VecMemLSQEnqIteratorNumberSeq 804ff74867bSYangyu Chen def StoreBufferSize = coreParams.StoreBufferSize 805ff74867bSYangyu Chen def StoreBufferThreshold = coreParams.StoreBufferThreshold 806ff74867bSYangyu Chen def EnsbufferWidth = coreParams.EnsbufferWidth 807ff74867bSYangyu Chen def LoadDependencyWidth = coreParams.LoadDependencyWidth 808a4d1b2d1Sgood-circle def VlMergeBufferSize = coreParams.VlMergeBufferSize 809a4d1b2d1Sgood-circle def VsMergeBufferSize = coreParams.VsMergeBufferSize 810a4d1b2d1Sgood-circle def UopWritebackWidth = coreParams.UopWritebackWidth 811a4d1b2d1Sgood-circle def VLUopWritebackWidth = coreParams.VLUopWritebackWidth 812a4d1b2d1Sgood-circle def VSUopWritebackWidth = coreParams.VSUopWritebackWidth 813a4d1b2d1Sgood-circle def VSegmentBufferSize = coreParams.VSegmentBufferSize 814ff74867bSYangyu Chen def UncacheBufferSize = coreParams.UncacheBufferSize 81574050fc0SYanqin Li def UncacheBufferIndexWidth = log2Up(UncacheBufferSize) 816ff74867bSYangyu Chen def EnableLoadToLoadForward = coreParams.EnableLoadToLoadForward 817ff74867bSYangyu Chen def EnableFastForward = coreParams.EnableFastForward 818ff74867bSYangyu Chen def EnableLdVioCheckAfterReset = coreParams.EnableLdVioCheckAfterReset 819ff74867bSYangyu Chen def EnableSoftPrefetchAfterReset = coreParams.EnableSoftPrefetchAfterReset 820ff74867bSYangyu Chen def EnableCacheErrorAfterReset = coreParams.EnableCacheErrorAfterReset 821ff74867bSYangyu Chen def EnableAccurateLoadError = coreParams.EnableAccurateLoadError 822ff74867bSYangyu Chen def EnableUncacheWriteOutstanding = coreParams.EnableUncacheWriteOutstanding 82341d8d239Shappy-lx def EnableHardwareStoreMisalign = coreParams.EnableHardwareStoreMisalign 82441d8d239Shappy-lx def EnableHardwareLoadMisalign = coreParams.EnableHardwareLoadMisalign 825ff74867bSYangyu Chen def EnableStorePrefetchAtIssue = coreParams.EnableStorePrefetchAtIssue 826ff74867bSYangyu Chen def EnableStorePrefetchAtCommit = coreParams.EnableStorePrefetchAtCommit 827ff74867bSYangyu Chen def EnableAtCommitMissTrigger = coreParams.EnableAtCommitMissTrigger 828ff74867bSYangyu Chen def EnableStorePrefetchSMS = coreParams.EnableStorePrefetchSMS 829ff74867bSYangyu Chen def EnableStorePrefetchSPB = coreParams.EnableStorePrefetchSPB 830e3ed843cShappy-lx def HasCMO = coreParams.HasCMO && p(EnableCHI) 8311d260098SXuan Hu require(LoadPipelineWidth == backendParams.LdExuCnt, "LoadPipelineWidth must be equal exuParameters.LduCnt!") 8321d260098SXuan Hu require(StorePipelineWidth == backendParams.StaCnt, "StorePipelineWidth must be equal exuParameters.StuCnt!") 833ff74867bSYangyu Chen def Enable3Load3Store = (LoadPipelineWidth == 3 && StorePipelineWidth == 3) 834ff74867bSYangyu Chen def asidLen = coreParams.MMUAsidLen 835ff74867bSYangyu Chen def vmidLen = coreParams.MMUVmidLen 836ff74867bSYangyu Chen def BTLBWidth = coreParams.LoadPipelineWidth + coreParams.StorePipelineWidth 837ff74867bSYangyu Chen def refillBothTlb = coreParams.refillBothTlb 838ff74867bSYangyu Chen def iwpuParam = coreParams.iwpuParameters 839ff74867bSYangyu Chen def dwpuParam = coreParams.dwpuParameters 840ff74867bSYangyu Chen def itlbParams = coreParams.itlbParameters 841ff74867bSYangyu Chen def ldtlbParams = coreParams.ldtlbParameters 842ff74867bSYangyu Chen def sttlbParams = coreParams.sttlbParameters 843ff74867bSYangyu Chen def hytlbParams = coreParams.hytlbParameters 844ff74867bSYangyu Chen def pftlbParams = coreParams.pftlbParameters 845ff74867bSYangyu Chen def l2ToL1Params = coreParams.l2ToL1tlbParameters 846ff74867bSYangyu Chen def btlbParams = coreParams.btlbParameters 847ff74867bSYangyu Chen def l2tlbParams = coreParams.l2tlbParameters 848ff74867bSYangyu Chen def NumPerfCounters = coreParams.NumPerfCounters 8492225d46eSJiawei Lin 850ff74867bSYangyu Chen def instBytes = if (HasCExtension) 2 else 4 851ff74867bSYangyu Chen def instOffsetBits = log2Ceil(instBytes) 8522225d46eSJiawei Lin 853ff74867bSYangyu Chen def icacheParameters = coreParams.icacheParameters 854ff74867bSYangyu Chen def dcacheParameters = coreParams.dcacheParametersOpt.getOrElse(DCacheParameters()) 8552225d46eSJiawei Lin 856b899def8SWilliam Wang // dcache block cacheline when lr for LRSCCycles - LRSCBackOff cycles 857b899def8SWilliam Wang // for constrained LR/SC loop 858ff74867bSYangyu Chen def LRSCCycles = 64 859b899def8SWilliam Wang // for lr storm 860ff74867bSYangyu Chen def LRSCBackOff = 8 8612225d46eSJiawei Lin 8622225d46eSJiawei Lin // cache hierarchy configurations 863ff74867bSYangyu Chen def l1BusDataWidth = 256 8642225d46eSJiawei Lin 865de169c67SWilliam Wang // load violation predict 866ff74867bSYangyu Chen def ResetTimeMax2Pow = 20 //1078576 867ff74867bSYangyu Chen def ResetTimeMin2Pow = 10 //1024 868de169c67SWilliam Wang // wait table parameters 869ff74867bSYangyu Chen def WaitTableSize = 1024 870ff74867bSYangyu Chen def MemPredPCWidth = log2Up(WaitTableSize) 871ff74867bSYangyu Chen def LWTUse2BitCounter = true 872de169c67SWilliam Wang // store set parameters 873ff74867bSYangyu Chen def SSITSize = WaitTableSize 874ff74867bSYangyu Chen def LFSTSize = 32 875ff74867bSYangyu Chen def SSIDWidth = log2Up(LFSTSize) 876ff74867bSYangyu Chen def LFSTWidth = 4 877ff74867bSYangyu Chen def StoreSetEnable = true // LWT will be disabled if SS is enabled 878ff74867bSYangyu Chen def LFSTEnable = true 879cc4fb544Ssfencevma 880ff74867bSYangyu Chen def PCntIncrStep: Int = 6 8818bb30a57SJiru Sun def numPCntHc: Int = 12 882ff74867bSYangyu Chen def numPCntPtw: Int = 19 883cd365d4cSrvcoresjw 884ff74867bSYangyu Chen def numCSRPCntFrontend = 8 885ff74867bSYangyu Chen def numCSRPCntCtrl = 8 886ff74867bSYangyu Chen def numCSRPCntLsu = 8 887ff74867bSYangyu Chen def numCSRPCntHc = 5 888ff74867bSYangyu Chen def printEventCoding = true 88985a8d7caSZehao Liu def printCriticalError = false 89085a8d7caSZehao Liu def maxCommitStuck = pow(2, 21).toInt 891f7af4c74Schengguanghui 892e43bb916SXuan Hu // Vector load exception 893e43bb916SXuan Hu def maxMergeNumPerCycle = 4 894e43bb916SXuan Hu 895f7af4c74Schengguanghui // Parameters for Sdtrig extension 896ff74867bSYangyu Chen protected def TriggerNum = 4 897ff74867bSYangyu Chen protected def TriggerChainMaxLength = 2 89849162c9aSGuanghui Cheng 89949162c9aSGuanghui Cheng // Parameters for Trace extension 9004907ec88Schengguanghui def TraceGroupNum = coreParams.traceParams.TraceGroupNum 9014907ec88Schengguanghui def CauseWidth = XLEN 902551cc696Schengguanghui def TvalWidth = coreParams.traceParams.IaddrWidth 903725e8ddcSchengguanghui def PrivWidth = coreParams.traceParams.PrivWidth 904551cc696Schengguanghui def IaddrWidth = coreParams.traceParams.IaddrWidth 905725e8ddcSchengguanghui def ItypeWidth = coreParams.traceParams.ItypeWidth 906*a25f1ac9SGuanghui Cheng def IretireWidthInPipe = log2Up(RenameWidth * 2 + 1) 907*a25f1ac9SGuanghui Cheng def IretireWidthCompressed = log2Up(RenameWidth * CommitWidth * 2 + 1) 908725e8ddcSchengguanghui def IlastsizeWidth = coreParams.traceParams.IlastsizeWidth 9094b2c87baS梁森 Liang Sen 9104b2c87baS梁森 Liang Sen def hasMbist = coreParams.hasMbist 9114c0658aeSTang Haojin 9124c0658aeSTang Haojin def wfiResume = coreParams.wfiResume 913602aa9f1Scz4e def hasSramCtl = coreParams.hasSramCtl 91430f35717Scz4e def hasDFT = hasMbist || hasSramCtl 9152225d46eSJiawei Lin} 916