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