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