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 192225d46eSJiawei Linimport chipsalliance.rocketchip.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._ 29730cfbc0SXuan Huimport xiangshan.backend.issue.{IntScheduler, IssueBlockParams, MemScheduler, SchdBlockParams, SchedulerType, VfScheduler} 30730cfbc0SXuan Huimport xiangshan.backend.regfile.{IntPregParams, PregParams, VfPregParams} 31730cfbc0SXuan Huimport xiangshan.backend.BackendParams 323b739f49SXuan Huimport xiangshan.cache.DCacheParameters 33a1ea7f76SJiawei Linimport xiangshan.cache.prefetch._ 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 393b739f49SXuan Hu 40d4aca96cSlqreimport freechips.rocketchip.diplomacy.AddressSet 412f30d658SYinan Xuimport system.SoCParamsKey 4298c71602SJiawei Linimport huancun._ 4398c71602SJiawei Linimport huancun.debug._ 4415ee59e4Swakafaimport coupledL2._ 45bf35baadSXuan Huimport xiangshan.backend.datapath.WakeUpConfig 46289fc2f9SLinJiaweiimport xiangshan.mem.prefetch.{PrefetcherParams, SMSParams} 47289fc2f9SLinJiawei 48dd6c0695SLingrui98import scala.math.min 4934ab1ae9SJiawei Lin 5034ab1ae9SJiawei Lincase object XSTileKey extends Field[Seq[XSCoreParameters]] 5134ab1ae9SJiawei Lin 522225d46eSJiawei Lincase object XSCoreParamsKey extends Field[XSCoreParameters] 532225d46eSJiawei Lin 542225d46eSJiawei Lincase class XSCoreParameters 552225d46eSJiawei Lin( 562225d46eSJiawei Lin HasPrefetch: Boolean = false, 572225d46eSJiawei Lin HartId: Int = 0, 582225d46eSJiawei Lin XLEN: Int = 64, 59deb6421eSHaojin Tang VLEN: Int = 128, 60a8db15d8Sfdy ELEN: Int = 64, 612225d46eSJiawei Lin HasMExtension: Boolean = true, 622225d46eSJiawei Lin HasCExtension: Boolean = true, 632225d46eSJiawei Lin HasDiv: Boolean = true, 642225d46eSJiawei Lin HasICache: Boolean = true, 652225d46eSJiawei Lin HasDCache: Boolean = true, 662225d46eSJiawei Lin AddrBits: Int = 64, 672225d46eSJiawei Lin VAddrBits: Int = 39, 682225d46eSJiawei Lin HasFPU: Boolean = true, 6935d1557aSZiyue Zhang HasVPU: Boolean = true, 70ad3ba452Szhanglinjuan HasCustomCSRCacheOp: Boolean = true, 712225d46eSJiawei Lin FetchWidth: Int = 8, 7245f497a4Shappy-lx AsidLength: Int = 16, 732225d46eSJiawei Lin EnableBPU: Boolean = true, 742225d46eSJiawei Lin EnableBPD: Boolean = true, 752225d46eSJiawei Lin EnableRAS: Boolean = true, 762225d46eSJiawei Lin EnableLB: Boolean = false, 772225d46eSJiawei Lin EnableLoop: Boolean = true, 78e0f3968cSzoujr EnableSC: Boolean = true, 792225d46eSJiawei Lin EnbaleTlbDebug: Boolean = false, 802225d46eSJiawei Lin EnableJal: Boolean = false, 8111d0c81dSLingrui98 EnableFauFTB: Boolean = true, 82f2aabf0dSLingrui98 UbtbGHRLength: Int = 4, 83c7fabd05SSteve Gou // HistoryLength: Int = 512, 842f7b35ceSLingrui98 EnableGHistDiff: Boolean = true, 85ab0200c8SEaston Man EnableCommitGHistDiff: Boolean = true, 86edc18578SLingrui98 UbtbSize: Int = 256, 87b37e4b45SLingrui98 FtbSize: Int = 2048, 88ba4cf515SLingrui98 RasSize: Int = 32, 892225d46eSJiawei Lin CacheLineSize: Int = 512, 90b37e4b45SLingrui98 FtbWays: Int = 4, 91dd6c0695SLingrui98 TageTableInfos: Seq[Tuple3[Int,Int,Int]] = 92dd6c0695SLingrui98 // Sets Hist Tag 9351e26c03SLingrui98 // Seq(( 2048, 2, 8), 9451e26c03SLingrui98 // ( 2048, 9, 8), 9551e26c03SLingrui98 // ( 2048, 13, 8), 9651e26c03SLingrui98 // ( 2048, 20, 8), 9751e26c03SLingrui98 // ( 2048, 26, 8), 9851e26c03SLingrui98 // ( 2048, 44, 8), 9951e26c03SLingrui98 // ( 2048, 73, 8), 10051e26c03SLingrui98 // ( 2048, 256, 8)), 10151e26c03SLingrui98 Seq(( 4096, 8, 8), 10251e26c03SLingrui98 ( 4096, 13, 8), 10351e26c03SLingrui98 ( 4096, 32, 8), 10451e26c03SLingrui98 ( 4096, 119, 8)), 105dd6c0695SLingrui98 ITTageTableInfos: Seq[Tuple3[Int,Int,Int]] = 106dd6c0695SLingrui98 // Sets Hist Tag 10703c81005SLingrui98 Seq(( 256, 4, 9), 108527dc111SLingrui98 ( 256, 8, 9), 1093581d7d3SLingrui98 ( 512, 13, 9), 110527dc111SLingrui98 ( 512, 16, 9), 111f2aabf0dSLingrui98 ( 512, 32, 9)), 11282dc6ff8SLingrui98 SCNRows: Int = 512, 11382dc6ff8SLingrui98 SCNTables: Int = 4, 114dd6c0695SLingrui98 SCCtrBits: Int = 6, 11582dc6ff8SLingrui98 SCHistLens: Seq[Int] = Seq(0, 4, 10, 16), 116dd6c0695SLingrui98 numBr: Int = 2, 117bf358e08SLingrui98 branchPredictor: Function2[BranchPredictionResp, Parameters, Tuple2[Seq[BasePredictor], BranchPredictionResp]] = 118bf358e08SLingrui98 ((resp_in: BranchPredictionResp, p: Parameters) => { 11916a1cc4bSzoujr val ftb = Module(new FTB()(p)) 120c5e28a9aSLingrui98 val ubtb =Module(new FauFTB()(p)) 1214813e060SLingrui98 // val bim = Module(new BIM()(p)) 122bf358e08SLingrui98 val tage = Module(new Tage_SC()(p)) 1234cd08aa8SLingrui98 val ras = Module(new RAS()(p)) 12460f966c8SGuokai Chen val ittage = Module(new ITTage()(p)) 1254813e060SLingrui98 val preds = Seq(ubtb, tage, ftb, ittage, ras) 12616a1cc4bSzoujr preds.map(_.io := DontCare) 12716a1cc4bSzoujr 12816a1cc4bSzoujr // ubtb.io.resp_in(0) := resp_in 12916a1cc4bSzoujr // bim.io.resp_in(0) := ubtb.io.resp 13016a1cc4bSzoujr // btb.io.resp_in(0) := bim.io.resp 13116a1cc4bSzoujr // tage.io.resp_in(0) := btb.io.resp 13216a1cc4bSzoujr // loop.io.resp_in(0) := tage.io.resp 1334813e060SLingrui98 ubtb.io.in.bits.resp_in(0) := resp_in 134c2d1ec7dSLingrui98 tage.io.in.bits.resp_in(0) := ubtb.io.out 135c2d1ec7dSLingrui98 ftb.io.in.bits.resp_in(0) := tage.io.out 136c2d1ec7dSLingrui98 ittage.io.in.bits.resp_in(0) := ftb.io.out 137c2d1ec7dSLingrui98 ras.io.in.bits.resp_in(0) := ittage.io.out 13816a1cc4bSzoujr 139c2d1ec7dSLingrui98 (preds, ras.io.out) 14016a1cc4bSzoujr }), 1412225d46eSJiawei Lin IBufSize: Int = 48, 1422225d46eSJiawei Lin DecodeWidth: Int = 6, 1432225d46eSJiawei Lin RenameWidth: Int = 6, 1442225d46eSJiawei Lin CommitWidth: Int = 6, 14565df1368Sczw MaxUopSize: Int = 65, 1465df4db2aSLingrui98 FtqSize: Int = 64, 1472225d46eSJiawei Lin EnableLoadFastWakeUp: Boolean = true, // NOTE: not supported now, make it false 148a8db15d8Sfdy IntLogicRegs: Int = 32, 149d91483a6Sfdy FpLogicRegs: Int = 33, 150189ec863SzhanglyGit VecLogicRegs: Int = 32 + 1 + 15, // 15: tmp, 1: vconfig 151189ec863SzhanglyGit VCONFIG_IDX: Int = 32, 1527154d65eSYinan Xu NRPhyRegs: Int = 192, 153e4f69d78Ssfencevma VirtualLoadQueueSize: Int = 80, 154e4f69d78Ssfencevma LoadQueueRARSize: Int = 80, 155e4f69d78Ssfencevma LoadQueueRAWSize: Int = 64, // NOTE: make sure that LoadQueueRAWSize is power of 2. 156e4f69d78Ssfencevma RollbackGroupSize: Int = 8, 157e4f69d78Ssfencevma LoadQueueReplaySize: Int = 80, 158e4f69d78Ssfencevma LoadUncacheBufferSize: Int = 20, 159e4f69d78Ssfencevma LoadQueueNWriteBanks: Int = 8, // NOTE: make sure that LoadQueueRARSize/LoadQueueRAWSize is divided by LoadQueueNWriteBanks 1602b4e8253SYinan Xu StoreQueueSize: Int = 64, 161e4f69d78Ssfencevma StoreQueueNWriteBanks: Int = 8, // NOTE: make sure that StoreQueueSize is divided by StoreQueueNWriteBanks 162e4f69d78Ssfencevma StoreQueueForwardWithMask: Boolean = true, 163cea88ff8SWilliam Wang VlsQueueSize: Int = 8, 1647154d65eSYinan Xu RobSize: Int = 256, 165a8db15d8Sfdy RabSize: Int = 256, 1662225d46eSJiawei Lin dpParams: DispatchParameters = DispatchParameters( 1672225d46eSJiawei Lin IntDqSize = 16, 1682225d46eSJiawei Lin FpDqSize = 16, 1692225d46eSJiawei Lin LsDqSize = 16, 1703b739f49SXuan Hu IntDqDeqWidth = 6, 1713b739f49SXuan Hu FpDqDeqWidth = 6, 1723b739f49SXuan Hu LsDqDeqWidth = 6, 1732225d46eSJiawei Lin ), 1743b739f49SXuan Hu intPreg: PregParams = IntPregParams( 175*39c59369SXuan Hu numEntries = 192, 176*39c59369SXuan Hu numRead = None, 177*39c59369SXuan Hu numWrite = None, 1782225d46eSJiawei Lin ), 1793b739f49SXuan Hu vfPreg: VfPregParams = VfPregParams( 180*39c59369SXuan Hu numEntries = 192, 181*39c59369SXuan Hu numRead = None, 182*39c59369SXuan Hu numWrite = None, 1833b739f49SXuan Hu ), 184289fc2f9SLinJiawei prefetcher: Option[PrefetcherParams] = Some(SMSParams()), 1852225d46eSJiawei Lin LoadPipelineWidth: Int = 2, 1862225d46eSJiawei Lin StorePipelineWidth: Int = 2, 187cea88ff8SWilliam Wang VecMemSrcInWidth: Int = 2, 188cea88ff8SWilliam Wang VecMemInstWbWidth: Int = 1, 189cea88ff8SWilliam Wang VecMemDispatchWidth: Int = 1, 1902225d46eSJiawei Lin StoreBufferSize: Int = 16, 19105f23f57SWilliam Wang StoreBufferThreshold: Int = 7, 19246f74b57SHaojin Tang EnsbufferWidth: Int = 2, 19337225120Ssfencevma UncacheBufferSize: Int = 4, 194c837faaaSWilliam Wang EnableLoadToLoadForward: Boolean = true, 195a98b054bSWilliam Wang EnableFastForward: Boolean = false, 196beabc72dSWilliam Wang EnableLdVioCheckAfterReset: Boolean = true, 197026615fcSWilliam Wang EnableSoftPrefetchAfterReset: Boolean = true, 198026615fcSWilliam Wang EnableCacheErrorAfterReset: Boolean = true, 199144422dcSMaxpicca-Li EnableDCacheWPU: Boolean = false, 2006786cfb7SWilliam Wang EnableAccurateLoadError: Boolean = true, 201e32bafbaSbugGenerator EnableUncacheWriteOutstanding: Boolean = false, 20245f497a4Shappy-lx MMUAsidLen: Int = 16, // max is 16, 0 is not supported now 20362dfd6c3Shappy-lx ReSelectLen: Int = 7, // load replay queue replay select counter len 204a0301c0dSLemover itlbParameters: TLBParameters = TLBParameters( 205a0301c0dSLemover name = "itlb", 206a0301c0dSLemover fetchi = true, 207a0301c0dSLemover useDmode = false, 208fa086d5eSLemover normalNWays = 32, 209a0301c0dSLemover normalReplacer = Some("plru"), 210fa086d5eSLemover superNWays = 4, 211f1fe8698SLemover superReplacer = Some("plru") 212a0301c0dSLemover ), 21334f9624dSguohongyu itlbPortNum: Int = 2 + ICacheParameters().prefetchPipeNum + 1, 21434f9624dSguohongyu ipmpPortNum: Int = 2 + ICacheParameters().prefetchPipeNum + 1, 215a0301c0dSLemover ldtlbParameters: TLBParameters = TLBParameters( 216a0301c0dSLemover name = "ldtlb", 21706082082SLemover normalNSets = 64, 218a0301c0dSLemover normalNWays = 1, 219a0301c0dSLemover normalAssociative = "sa", 220a0301c0dSLemover normalReplacer = Some("setplru"), 22106082082SLemover superNWays = 16, 222a0301c0dSLemover normalAsVictim = true, 22353b8f1a7SLemover outReplace = false, 2245b7ef044SLemover partialStaticPMP = true, 225f1fe8698SLemover outsideRecvFlush = true, 2265cf62c1aSLemover saveLevel = true 227a0301c0dSLemover ), 228a0301c0dSLemover sttlbParameters: TLBParameters = TLBParameters( 229a0301c0dSLemover name = "sttlb", 23006082082SLemover normalNSets = 64, 231a0301c0dSLemover normalNWays = 1, 232a0301c0dSLemover normalAssociative = "sa", 233a0301c0dSLemover normalReplacer = Some("setplru"), 23406082082SLemover superNWays = 16, 235a0301c0dSLemover normalAsVictim = true, 23653b8f1a7SLemover outReplace = false, 2375b7ef044SLemover partialStaticPMP = true, 238f1fe8698SLemover outsideRecvFlush = true, 2395cf62c1aSLemover saveLevel = true 240a0301c0dSLemover ), 241c8309e8aSHaoyuan Feng pftlbParameters: TLBParameters = TLBParameters( 242c8309e8aSHaoyuan Feng name = "pftlb", 243c8309e8aSHaoyuan Feng normalNSets = 64, 244c8309e8aSHaoyuan Feng normalNWays = 1, 245c8309e8aSHaoyuan Feng normalAssociative = "sa", 246c8309e8aSHaoyuan Feng normalReplacer = Some("setplru"), 247c8309e8aSHaoyuan Feng superNWays = 16, 248c8309e8aSHaoyuan Feng normalAsVictim = true, 249c8309e8aSHaoyuan Feng outReplace = false, 250c8309e8aSHaoyuan Feng partialStaticPMP = true, 251c8309e8aSHaoyuan Feng outsideRecvFlush = true, 252c8309e8aSHaoyuan Feng saveLevel = true 253c8309e8aSHaoyuan Feng ), 254bf08468cSLemover refillBothTlb: Boolean = false, 255a0301c0dSLemover btlbParameters: TLBParameters = TLBParameters( 256a0301c0dSLemover name = "btlb", 257a0301c0dSLemover normalNSets = 1, 258a0301c0dSLemover normalNWays = 64, 259a0301c0dSLemover superNWays = 4, 260a0301c0dSLemover ), 2615854c1edSLemover l2tlbParameters: L2TLBParameters = L2TLBParameters(), 2622225d46eSJiawei Lin NumPerfCounters: Int = 16, 26305f23f57SWilliam Wang icacheParameters: ICacheParameters = ICacheParameters( 26405f23f57SWilliam Wang tagECC = Some("parity"), 26505f23f57SWilliam Wang dataECC = Some("parity"), 26605f23f57SWilliam Wang replacer = Some("setplru"), 2671d8f4dcbSJay nMissEntries = 2, 2687052722fSJay nProbeEntries = 2, 269cb93f2f2Sguohongyu nPrefetchEntries = 12, 270b1ded4e8Sguohongyu nPrefBufferEntries = 64, 271a108d429SJay hasPrefetch = true, 27205f23f57SWilliam Wang ), 2734f94c0c6SJiawei Lin dcacheParametersOpt: Option[DCacheParameters] = Some(DCacheParameters( 27405f23f57SWilliam Wang tagECC = Some("secded"), 27505f23f57SWilliam Wang dataECC = Some("secded"), 27605f23f57SWilliam Wang replacer = Some("setplru"), 27705f23f57SWilliam Wang nMissEntries = 16, 278300ded30SWilliam Wang nProbeEntries = 8, 279300ded30SWilliam Wang nReleaseEntries = 18 2804f94c0c6SJiawei Lin )), 28115ee59e4Swakafa L2CacheParamsOpt: Option[L2Param] = Some(L2Param( 282a1ea7f76SJiawei Lin name = "l2", 283a1ea7f76SJiawei Lin ways = 8, 284a1ea7f76SJiawei Lin sets = 1024, // default 512KB L2 28515ee59e4Swakafa prefetch = Some(coupledL2.prefetch.PrefetchReceiverParams()) 2864f94c0c6SJiawei Lin )), 287d5be5d19SJiawei Lin L2NBanks: Int = 1, 288a1ea7f76SJiawei Lin usePTWRepeater: Boolean = false, 289e0374b1cSHaoyuan Feng softTLB: Boolean = false, // dpi-c l1tlb debug only 290e0374b1cSHaoyuan Feng softPTW: Boolean = false, // dpi-c l2tlb debug only 2915afdf73cSHaoyuan Feng softPTWDelay: Int = 1 2922225d46eSJiawei Lin){ 293b52d4755SXuan Hu def vlWidth = log2Up(VLEN) + 1 294b52d4755SXuan Hu 295c7fabd05SSteve Gou val allHistLens = SCHistLens ++ ITTageTableInfos.map(_._2) ++ TageTableInfos.map(_._2) :+ UbtbGHRLength 296c7fabd05SSteve Gou val HistoryLength = allHistLens.max + numBr * FtqSize + 9 // 256 for the predictor configs now 297c7fabd05SSteve Gou 298*39c59369SXuan Hu val intSchdParams = { 2993b739f49SXuan Hu implicit val schdType: SchedulerType = IntScheduler() 3003b739f49SXuan Hu SchdBlockParams(Seq( 3013b739f49SXuan Hu IssueBlockParams(Seq( 302acb0b98eSXuan Hu ExeUnitParams("IEX0", Seq(AluCfg), Seq(IntWB(port = 0, 0)), Seq(Seq(IntRD(0, 0)), Seq(IntRD(1, 0)))), 303acb0b98eSXuan Hu ExeUnitParams("IEX1", Seq(AluCfg), Seq(IntWB(port = 1, 0)), Seq(Seq(IntRD(2, 0)), Seq(IntRD(3, 0)))), 304*39c59369SXuan Hu ), numEntries = 8, numEnq = 2), 305cde70b38SzhanglyGit IssueBlockParams(Seq( 306acb0b98eSXuan Hu ExeUnitParams("IEX2", Seq(AluCfg, MulCfg, BkuCfg), Seq(IntWB(port = 2, 0)), Seq(Seq(IntRD(4, 0)), Seq(IntRD(5, 0)))), 307acb0b98eSXuan Hu ExeUnitParams("IEX3", Seq(AluCfg, MulCfg, BkuCfg), Seq(IntWB(port = 3, 0)), Seq(Seq(IntRD(6, 0)), Seq(IntRD(7, 0)))), 308*39c59369SXuan Hu ), numEntries = 8, numEnq = 2), 3093b739f49SXuan Hu IssueBlockParams(Seq( 310acb0b98eSXuan Hu ExeUnitParams("BJU0", Seq(BrhCfg, JmpCfg, CsrCfg, FenceCfg), Seq(IntWB(port = 4, 0)), Seq(Seq(IntRD(8, 0)), Seq(IntRD(9, 0)))), 311acb0b98eSXuan Hu ExeUnitParams("BJU1", Seq(BrhCfg), Seq(), Seq(Seq(IntRD(2, 1)), Seq(IntRD(3, 1)))), 312*39c59369SXuan Hu ), numEntries = 8, numEnq = 2), 3133b739f49SXuan Hu IssueBlockParams(Seq( 314acb0b98eSXuan Hu ExeUnitParams("IMISC0", Seq(VSetRiWiCfg, I2fCfg, VSetRiWvfCfg), Seq(IntWB(port = 4, 1), VfWB(4, 0)), Seq(Seq(IntRD(8, 1)), Seq(IntRD(9, 1)))), 315*39c59369SXuan Hu ), numEntries = 8, numEnq = 2), 3163b739f49SXuan Hu IssueBlockParams(Seq( 317acb0b98eSXuan Hu ExeUnitParams("IDIV0", Seq(DivCfg), Seq(IntWB(port = 5, 1)), Seq(Seq(IntRD(6, Int.MaxValue)), Seq(IntRD(7, Int.MaxValue)))), 318*39c59369SXuan Hu ), numEntries = 8, numEnq = 2), 3193b739f49SXuan Hu ), 3203b739f49SXuan Hu numPregs = intPreg.numEntries, 3213b739f49SXuan Hu numDeqOutside = 0, 3223b739f49SXuan Hu schdType = schdType, 3233b739f49SXuan Hu rfDataWidth = intPreg.dataCfg.dataWidth, 3243b739f49SXuan Hu numUopIn = dpParams.IntDqDeqWidth, 3253b739f49SXuan Hu ) 3263b739f49SXuan Hu } 327*39c59369SXuan Hu val vfSchdParams = { 3283b739f49SXuan Hu implicit val schdType: SchedulerType = VfScheduler() 3293b739f49SXuan Hu SchdBlockParams(Seq( 3303b739f49SXuan Hu IssueBlockParams(Seq( 331344c8465Sxiaofeibao-xjtu ExeUnitParams("VEX0", Seq(VialuCfg), Seq(VfWB(port = 0, 0)), Seq(Seq(VfRD(1, 0)), Seq(VfRD(2, 0)), Seq(VfRD(3, 0)), Seq(VfRD(4, 0)), Seq(VfRD(5, 0)))), 332344c8465Sxiaofeibao-xjtu ExeUnitParams("VEX1", Seq(VimacCfg), Seq(VfWB(port = 0, 0)), Seq(Seq(VfRD(1, 0)), Seq(VfRD(2, 0)), Seq(VfRD(3, 0)), Seq(VfRD(4, 0)), Seq(VfRD(5, 0)))), 333*39c59369SXuan Hu ), numEntries = 8, numEnq = 2), 334344c8465Sxiaofeibao-xjtu IssueBlockParams(Seq( 335*39c59369SXuan Hu ExeUnitParams("FEX0", Seq(FmacCfg), Seq(VfWB(port = 0, 0)), Seq(Seq(VfRD(1, 0)), Seq(VfRD(2, 0)), Seq(VfRD(3, 0)))), 336cfbf6f34SXuan Hu ExeUnitParams("FEX1", Seq(FmacCfg), Seq(VfWB(port = 1, 0)), Seq(Seq(VfRD(4, 0)), Seq(VfRD(5, 0)), Seq(VfRD(6, 0)))), 337*39c59369SXuan Hu ), numEntries = 8, numEnq = 2), 3383b739f49SXuan Hu IssueBlockParams(Seq( 339cfbf6f34SXuan Hu ExeUnitParams("FEX2", Seq(FDivSqrtCfg), Seq(VfWB(port = 2, 0)), Seq(Seq(VfRD(11, 0)), Seq(VfRD(12, 0)))), 340344c8465Sxiaofeibao-xjtu ExeUnitParams("FEX3", Seq(F2fCfg, F2iCfg, VSetRvfWvfCfg), Seq(VfWB(port = 2, 0), IntWB(port = 5, 0)), Seq(Seq(VfRD(7, 0)), Seq(VfRD(8, 0)))), 341*39c59369SXuan Hu ), numEntries = 8, numEnq = 2), 34275841254Sxiaofeibao-xjtu IssueBlockParams(Seq( 343344c8465Sxiaofeibao-xjtu ExeUnitParams("VEX2", Seq(VppuCfg), Seq(VfWB(port = 3, 0)), Seq(Seq(VfRD(1, 0)), Seq(VfRD(2, 0)), Seq(VfRD(3, 0)), Seq(VfRD(4, 0)), Seq(VfRD(5, 0)))), 344344c8465Sxiaofeibao-xjtu ExeUnitParams("VEX3", Seq(VipuCfg), Seq(VfWB(port = 3, 0)), Seq(Seq(VfRD(1, 0)), Seq(VfRD(2, 0)), Seq(VfRD(3, 0)), Seq(VfRD(4, 0)), Seq(VfRD(5, 0)))), 345*39c59369SXuan Hu ), numEntries = 8, numEnq = 2), 346344c8465Sxiaofeibao-xjtu IssueBlockParams(Seq( 347344c8465Sxiaofeibao-xjtu ExeUnitParams("VEX2", Seq(VfaluCfg), Seq(VfWB(port = 4, 0)), Seq(Seq(VfRD(1, 0)), Seq(VfRD(2, 0)), Seq(VfRD(3, 0)), Seq(VfRD(4, 0)), Seq(VfRD(5, 0)))), 348344c8465Sxiaofeibao-xjtu ExeUnitParams("VEX3", Seq(VfmaCfg), Seq(VfWB(port = 4, 0)), Seq(Seq(VfRD(1, 0)), Seq(VfRD(2, 0)), Seq(VfRD(3, 0)), Seq(VfRD(4, 0)), Seq(VfRD(5, 0)))), 349*39c59369SXuan Hu ), numEntries = 8, numEnq = 2), 350344c8465Sxiaofeibao-xjtu IssueBlockParams(Seq( 351344c8465Sxiaofeibao-xjtu ExeUnitParams("VEX4", Seq(VfdivCfg), Seq(VfWB(port = 5, 0)), Seq(Seq(VfRD(1, 0)), Seq(VfRD(2, 0)), Seq(VfRD(3, 0)), Seq(VfRD(4, 0)), Seq(VfRD(5, 0)))), 352*39c59369SXuan Hu ), numEntries = 8, numEnq = 2), 3533b739f49SXuan Hu ), 3543b739f49SXuan Hu numPregs = vfPreg.numEntries, 3553b739f49SXuan Hu numDeqOutside = 0, 3563b739f49SXuan Hu schdType = schdType, 3573b739f49SXuan Hu rfDataWidth = vfPreg.dataCfg.dataWidth, 3583b739f49SXuan Hu numUopIn = dpParams.FpDqDeqWidth, 3593b739f49SXuan Hu ) 3603b739f49SXuan Hu } 361*39c59369SXuan Hu 362*39c59369SXuan Hu val memSchdParams = { 3633b739f49SXuan Hu implicit val schdType: SchedulerType = MemScheduler() 3643b739f49SXuan Hu val rfDataWidth = 64 3652225d46eSJiawei Lin 3663b739f49SXuan Hu SchdBlockParams(Seq( 3673b739f49SXuan Hu IssueBlockParams(Seq( 368cfbf6f34SXuan Hu ExeUnitParams("LDU0", Seq(LduCfg), Seq(IntWB(6, 0), VfWB(6, 0)), Seq(Seq(IntRD(10, 0)))), 369cfbf6f34SXuan Hu ExeUnitParams("LDU1", Seq(LduCfg), Seq(IntWB(7, 0), VfWB(7, 0)), Seq(Seq(IntRD(11, 0)))), 370*39c59369SXuan Hu ), numEntries = 8, numEnq = 2), 3713b739f49SXuan Hu IssueBlockParams(Seq( 372cfbf6f34SXuan Hu ExeUnitParams("STA0", Seq(StaCfg, MouCfg), Seq(IntWB(6, 1)), Seq(Seq(IntRD(12, 0)))), 373cfbf6f34SXuan Hu ExeUnitParams("STA1", Seq(StaCfg, MouCfg), Seq(IntWB(7, 1)), Seq(Seq(IntRD(13, 0)))), 374*39c59369SXuan Hu ), numEntries = 8, numEnq = 2), 3753b739f49SXuan Hu IssueBlockParams(Seq( 376cfbf6f34SXuan Hu ExeUnitParams("STD0", Seq(StdCfg, MoudCfg), Seq(), Seq(Seq(IntRD(8, Int.MaxValue), VfRD(12, Int.MaxValue)))), 377*39c59369SXuan Hu ExeUnitParams("STD1", Seq(StdCfg, MoudCfg), Seq(), Seq(Seq(IntRD(9, Int.MaxValue), VfRD(10, Int.MaxValue)))), 378*39c59369SXuan Hu ), numEntries = 8, numEnq = 2), 3794ee69032SzhanglyGit IssueBlockParams(Seq( 380344c8465Sxiaofeibao-xjtu ExeUnitParams("VLDU0", Seq(VlduCfg), Seq(VfWB(6, 1)), Seq(Seq(VfRD(0, 0)), Seq(VfRD(1, 0)), Seq(VfRD(2, 0)), Seq(VfRD(3, 0)), Seq(VfRD(4, 0)))), 381344c8465Sxiaofeibao-xjtu ExeUnitParams("VLDU1", Seq(VlduCfg), Seq(VfWB(7, 1)), Seq(Seq(VfRD(5, 0)), Seq(VfRD(6, 0)), Seq(VfRD(7, 0)), Seq(VfRD(8, 0)), Seq(VfRD(9, 0)))), 382*39c59369SXuan Hu ), numEntries = 8, numEnq = 2), 3833b739f49SXuan Hu ), 384141a6449SXuan Hu numPregs = intPreg.numEntries max vfPreg.numEntries, 3853b739f49SXuan Hu numDeqOutside = 0, 3863b739f49SXuan Hu schdType = schdType, 3873b739f49SXuan Hu rfDataWidth = rfDataWidth, 3883b739f49SXuan Hu numUopIn = dpParams.LsDqDeqWidth, 3893b739f49SXuan Hu ) 3903b739f49SXuan Hu } 3912225d46eSJiawei Lin 392bf35baadSXuan Hu def PregIdxWidthMax = intPreg.addrWidth max vfPreg.addrWidth 393bf35baadSXuan Hu 394bf35baadSXuan Hu def iqWakeUpParams = { 395bf35baadSXuan Hu Seq( 396bf35baadSXuan Hu WakeUpConfig("IEX0" -> "IEX0"), 397bf35baadSXuan Hu WakeUpConfig("IEX0" -> "IEX1"), 398bf35baadSXuan Hu WakeUpConfig("IEX1" -> "IEX0"), 399bf35baadSXuan Hu WakeUpConfig("IEX1" -> "IEX1"), 400bf35baadSXuan Hu WakeUpConfig("IEX0" -> "BJU0"), 401bf35baadSXuan Hu WakeUpConfig("IEX0" -> "BJU1"), 402bf35baadSXuan Hu WakeUpConfig("IEX1" -> "BJU0"), 403bf35baadSXuan Hu WakeUpConfig("IEX1" -> "BJU1"), 404bf35baadSXuan Hu WakeUpConfig("IEX0" -> "LDU0"), 405bf35baadSXuan Hu WakeUpConfig("IEX0" -> "LDU1"), 406bf35baadSXuan Hu WakeUpConfig("IEX1" -> "LDU0"), 407bf35baadSXuan Hu WakeUpConfig("IEX1" -> "LDU1"), 408bf35baadSXuan Hu WakeUpConfig("IEX0" -> "STA0"), 409bf35baadSXuan Hu WakeUpConfig("IEX0" -> "STA1"), 410bf35baadSXuan Hu WakeUpConfig("IEX1" -> "STA0"), 411bf35baadSXuan Hu WakeUpConfig("IEX1" -> "STA1"), 412acb0b98eSXuan Hu WakeUpConfig("IMISC0" -> "FEX0"), 413acb0b98eSXuan Hu WakeUpConfig("IMISC0" -> "FEX1"), 414acb0b98eSXuan Hu WakeUpConfig("IMISC0" -> "FEX2"), 415acb0b98eSXuan Hu WakeUpConfig("IMISC0" -> "FEX3"), 416acb0b98eSXuan Hu WakeUpConfig("IMISC0" -> "FEX4"), 417cfbf6f34SXuan Hu WakeUpConfig("FEX3" -> "FEX0"), 418cfbf6f34SXuan Hu WakeUpConfig("FEX3" -> "FEX1"), 419cfbf6f34SXuan Hu WakeUpConfig("FEX3" -> "FEX2"), 420cfbf6f34SXuan Hu WakeUpConfig("FEX3" -> "FEX3"), 421bf35baadSXuan Hu ) 422bf35baadSXuan Hu } 423bf35baadSXuan Hu 424bf35baadSXuan Hu def backendParams: BackendParams = backend.BackendParams( 425bf35baadSXuan Hu Map( 4263b739f49SXuan Hu IntScheduler() -> intSchdParams, 4273b739f49SXuan Hu VfScheduler() -> vfSchdParams, 4283b739f49SXuan Hu MemScheduler() -> memSchdParams, 429bf35baadSXuan Hu ), 430bf35baadSXuan Hu Seq( 4313b739f49SXuan Hu intPreg, 4323b739f49SXuan Hu vfPreg, 433bf35baadSXuan Hu ), 434bf35baadSXuan Hu iqWakeUpParams, 435bf35baadSXuan Hu ) 4362225d46eSJiawei Lin} 4372225d46eSJiawei Lin 4382225d46eSJiawei Lincase object DebugOptionsKey extends Field[DebugOptions] 4392225d46eSJiawei Lin 4402225d46eSJiawei Lincase class DebugOptions 4412225d46eSJiawei Lin( 4421545277aSYinan Xu FPGAPlatform: Boolean = false, 4431545277aSYinan Xu EnableDifftest: Boolean = false, 444cbe9a847SYinan Xu AlwaysBasicDiff: Boolean = true, 4451545277aSYinan Xu EnableDebug: Boolean = false, 4462225d46eSJiawei Lin EnablePerfDebug: Boolean = true, 447eb163ef0SHaojin Tang UseDRAMSim: Boolean = false, 448047e34f9SMaxpicca-Li EnableConstantin: Boolean = false, 449eb163ef0SHaojin Tang EnableTopDown: Boolean = false 4502225d46eSJiawei Lin) 4512225d46eSJiawei Lin 4522225d46eSJiawei Lintrait HasXSParameter { 4532225d46eSJiawei Lin 4542225d46eSJiawei Lin implicit val p: Parameters 4552225d46eSJiawei Lin 4562f30d658SYinan Xu val PAddrBits = p(SoCParamsKey).PAddrBits // PAddrBits is Phyical Memory addr bits 4572f30d658SYinan Xu 4582225d46eSJiawei Lin val coreParams = p(XSCoreParamsKey) 4592225d46eSJiawei Lin val env = p(DebugOptionsKey) 4602225d46eSJiawei Lin 4612225d46eSJiawei Lin val XLEN = coreParams.XLEN 462deb6421eSHaojin Tang val VLEN = coreParams.VLEN 463a8db15d8Sfdy val ELEN = coreParams.ELEN 4642225d46eSJiawei Lin val minFLen = 32 4652225d46eSJiawei Lin val fLen = 64 4662225d46eSJiawei Lin def xLen = XLEN 4672225d46eSJiawei Lin 4682225d46eSJiawei Lin val HasMExtension = coreParams.HasMExtension 4692225d46eSJiawei Lin val HasCExtension = coreParams.HasCExtension 4702225d46eSJiawei Lin val HasDiv = coreParams.HasDiv 4712225d46eSJiawei Lin val HasIcache = coreParams.HasICache 4722225d46eSJiawei Lin val HasDcache = coreParams.HasDCache 4732225d46eSJiawei Lin val AddrBits = coreParams.AddrBits // AddrBits is used in some cases 4742225d46eSJiawei Lin val VAddrBits = coreParams.VAddrBits // VAddrBits is Virtual Memory addr bits 47545f497a4Shappy-lx val AsidLength = coreParams.AsidLength 476a760aeb0Shappy-lx val ReSelectLen = coreParams.ReSelectLen 4772225d46eSJiawei Lin val AddrBytes = AddrBits / 8 // unused 4782225d46eSJiawei Lin val DataBits = XLEN 4792225d46eSJiawei Lin val DataBytes = DataBits / 8 4802225d46eSJiawei Lin val HasFPU = coreParams.HasFPU 4810ba52110SZiyue Zhang val HasVPU = coreParams.HasVPU 482ad3ba452Szhanglinjuan val HasCustomCSRCacheOp = coreParams.HasCustomCSRCacheOp 4832225d46eSJiawei Lin val FetchWidth = coreParams.FetchWidth 4842225d46eSJiawei Lin val PredictWidth = FetchWidth * (if (HasCExtension) 2 else 1) 4852225d46eSJiawei Lin val EnableBPU = coreParams.EnableBPU 4862225d46eSJiawei Lin val EnableBPD = coreParams.EnableBPD // enable backing predictor(like Tage) in BPUStage3 4872225d46eSJiawei Lin val EnableRAS = coreParams.EnableRAS 4882225d46eSJiawei Lin val EnableLB = coreParams.EnableLB 4892225d46eSJiawei Lin val EnableLoop = coreParams.EnableLoop 4902225d46eSJiawei Lin val EnableSC = coreParams.EnableSC 4912225d46eSJiawei Lin val EnbaleTlbDebug = coreParams.EnbaleTlbDebug 4922225d46eSJiawei Lin val HistoryLength = coreParams.HistoryLength 49386d9c530SLingrui98 val EnableGHistDiff = coreParams.EnableGHistDiff 494ab0200c8SEaston Man val EnableCommitGHistDiff = coreParams.EnableCommitGHistDiff 495f2aabf0dSLingrui98 val UbtbGHRLength = coreParams.UbtbGHRLength 496b37e4b45SLingrui98 val UbtbSize = coreParams.UbtbSize 49711d0c81dSLingrui98 val EnableFauFTB = coreParams.EnableFauFTB 498b37e4b45SLingrui98 val FtbSize = coreParams.FtbSize 499b37e4b45SLingrui98 val FtbWays = coreParams.FtbWays 5002225d46eSJiawei Lin val RasSize = coreParams.RasSize 50116a1cc4bSzoujr 502bf358e08SLingrui98 def getBPDComponents(resp_in: BranchPredictionResp, p: Parameters) = { 503bf358e08SLingrui98 coreParams.branchPredictor(resp_in, p) 50416a1cc4bSzoujr } 505dd6c0695SLingrui98 val numBr = coreParams.numBr 506dd6c0695SLingrui98 val TageTableInfos = coreParams.TageTableInfos 507cb4f77ceSLingrui98 val TageBanks = coreParams.numBr 508dd6c0695SLingrui98 val SCNRows = coreParams.SCNRows 509dd6c0695SLingrui98 val SCCtrBits = coreParams.SCCtrBits 51034ed6fbcSLingrui98 val SCHistLens = coreParams.SCHistLens 51134ed6fbcSLingrui98 val SCNTables = coreParams.SCNTables 512dd6c0695SLingrui98 51334ed6fbcSLingrui98 val SCTableInfos = Seq.fill(SCNTables)((SCNRows, SCCtrBits)) zip SCHistLens map { 51434ed6fbcSLingrui98 case ((n, cb), h) => (n, cb, h) 515dd6c0695SLingrui98 } 516dd6c0695SLingrui98 val ITTageTableInfos = coreParams.ITTageTableInfos 517dd6c0695SLingrui98 type FoldedHistoryInfo = Tuple2[Int, Int] 518dd6c0695SLingrui98 val foldedGHistInfos = 5194813e060SLingrui98 (TageTableInfos.map{ case (nRows, h, t) => 520dd6c0695SLingrui98 if (h > 0) 5214813e060SLingrui98 Set((h, min(log2Ceil(nRows/numBr), h)), (h, min(h, t)), (h, min(h, t-1))) 522dd6c0695SLingrui98 else 523dd6c0695SLingrui98 Set[FoldedHistoryInfo]() 5244813e060SLingrui98 }.reduce(_++_).toSet ++ 52534ed6fbcSLingrui98 SCTableInfos.map{ case (nRows, _, h) => 526dd6c0695SLingrui98 if (h > 0) 527e992912cSLingrui98 Set((h, min(log2Ceil(nRows/TageBanks), h))) 528dd6c0695SLingrui98 else 529dd6c0695SLingrui98 Set[FoldedHistoryInfo]() 53034ed6fbcSLingrui98 }.reduce(_++_).toSet ++ 531dd6c0695SLingrui98 ITTageTableInfos.map{ case (nRows, h, t) => 532dd6c0695SLingrui98 if (h > 0) 533dd6c0695SLingrui98 Set((h, min(log2Ceil(nRows), h)), (h, min(h, t)), (h, min(h, t-1))) 534dd6c0695SLingrui98 else 535dd6c0695SLingrui98 Set[FoldedHistoryInfo]() 536527dc111SLingrui98 }.reduce(_++_) ++ 537527dc111SLingrui98 Set[FoldedHistoryInfo]((UbtbGHRLength, log2Ceil(UbtbSize))) 538527dc111SLingrui98 ).toList 53916a1cc4bSzoujr 540c7fabd05SSteve Gou 541c7fabd05SSteve Gou 5422225d46eSJiawei Lin val CacheLineSize = coreParams.CacheLineSize 5432225d46eSJiawei Lin val CacheLineHalfWord = CacheLineSize / 16 5442225d46eSJiawei Lin val ExtHistoryLength = HistoryLength + 64 5452225d46eSJiawei Lin val IBufSize = coreParams.IBufSize 5462225d46eSJiawei Lin val DecodeWidth = coreParams.DecodeWidth 5472225d46eSJiawei Lin val RenameWidth = coreParams.RenameWidth 5482225d46eSJiawei Lin val CommitWidth = coreParams.CommitWidth 549d91483a6Sfdy val MaxUopSize = coreParams.MaxUopSize 5502225d46eSJiawei Lin val FtqSize = coreParams.FtqSize 5512225d46eSJiawei Lin val EnableLoadFastWakeUp = coreParams.EnableLoadFastWakeUp 552d91483a6Sfdy val IntLogicRegs = coreParams.IntLogicRegs 553d91483a6Sfdy val FpLogicRegs = coreParams.FpLogicRegs 554d91483a6Sfdy val VecLogicRegs = coreParams.VecLogicRegs 555fe60541bSXuan Hu val VCONFIG_IDX = coreParams.VCONFIG_IDX 556*39c59369SXuan Hu val IntPhyRegs = coreParams.intPreg.numEntries 557*39c59369SXuan Hu val VfPhyRegs = coreParams.vfPreg.numEntries 558*39c59369SXuan Hu val PhyRegIdxWidth = log2Up(IntPhyRegs) max log2Up(VfPhyRegs) 5599aca92b9SYinan Xu val RobSize = coreParams.RobSize 560a8db15d8Sfdy val RabSize = coreParams.RabSize 56170224bf6SYinan Xu val IntRefCounterWidth = log2Ceil(RobSize) 562e4f69d78Ssfencevma val VirtualLoadQueueSize = coreParams.VirtualLoadQueueSize 563e4f69d78Ssfencevma val LoadQueueRARSize = coreParams.LoadQueueRARSize 564e4f69d78Ssfencevma val LoadQueueRAWSize = coreParams.LoadQueueRAWSize 565e4f69d78Ssfencevma val RollbackGroupSize = coreParams.RollbackGroupSize 566e4f69d78Ssfencevma val LoadQueueReplaySize = coreParams.LoadQueueReplaySize 567e4f69d78Ssfencevma val LoadUncacheBufferSize = coreParams.LoadUncacheBufferSize 5680a992150SWilliam Wang val LoadQueueNWriteBanks = coreParams.LoadQueueNWriteBanks 5692225d46eSJiawei Lin val StoreQueueSize = coreParams.StoreQueueSize 5700a992150SWilliam Wang val StoreQueueNWriteBanks = coreParams.StoreQueueNWriteBanks 571e4f69d78Ssfencevma val StoreQueueForwardWithMask = coreParams.StoreQueueForwardWithMask 572cea88ff8SWilliam Wang val VlsQueueSize = coreParams.VlsQueueSize 5732225d46eSJiawei Lin val dpParams = coreParams.dpParams 5743b739f49SXuan Hu 5753b739f49SXuan Hu def backendParams: BackendParams = coreParams.backendParams 576351e22f2SXuan Hu def MemIQSizeMax = backendParams.memSchdParams.get.issueBlockParams.map(_.numEntries).max 577351e22f2SXuan Hu def IQSizeMax = backendParams.allSchdParams.map(_.issueBlockParams.map(_.numEntries).max).max 5782225d46eSJiawei Lin val LoadPipelineWidth = coreParams.LoadPipelineWidth 5792225d46eSJiawei Lin val StorePipelineWidth = coreParams.StorePipelineWidth 580cea88ff8SWilliam Wang val VecMemSrcInWidth = coreParams.VecMemSrcInWidth 581cea88ff8SWilliam Wang val VecMemInstWbWidth = coreParams.VecMemInstWbWidth 582cea88ff8SWilliam Wang val VecMemDispatchWidth = coreParams.VecMemDispatchWidth 5832225d46eSJiawei Lin val StoreBufferSize = coreParams.StoreBufferSize 58405f23f57SWilliam Wang val StoreBufferThreshold = coreParams.StoreBufferThreshold 58546f74b57SHaojin Tang val EnsbufferWidth = coreParams.EnsbufferWidth 58637225120Ssfencevma val UncacheBufferSize = coreParams.UncacheBufferSize 58764886eefSWilliam Wang val EnableLoadToLoadForward = coreParams.EnableLoadToLoadForward 5883db2cf75SWilliam Wang val EnableFastForward = coreParams.EnableFastForward 58967682d05SWilliam Wang val EnableLdVioCheckAfterReset = coreParams.EnableLdVioCheckAfterReset 590026615fcSWilliam Wang val EnableSoftPrefetchAfterReset = coreParams.EnableSoftPrefetchAfterReset 591026615fcSWilliam Wang val EnableCacheErrorAfterReset = coreParams.EnableCacheErrorAfterReset 592144422dcSMaxpicca-Li val EnableDCacheWPU = coreParams.EnableDCacheWPU 5936786cfb7SWilliam Wang val EnableAccurateLoadError = coreParams.EnableAccurateLoadError 59437225120Ssfencevma val EnableUncacheWriteOutstanding = coreParams.EnableUncacheWriteOutstanding 59545f497a4Shappy-lx val asidLen = coreParams.MMUAsidLen 596a0301c0dSLemover val BTLBWidth = coreParams.LoadPipelineWidth + coreParams.StorePipelineWidth 597bf08468cSLemover val refillBothTlb = coreParams.refillBothTlb 598a0301c0dSLemover val itlbParams = coreParams.itlbParameters 599a0301c0dSLemover val ldtlbParams = coreParams.ldtlbParameters 600a0301c0dSLemover val sttlbParams = coreParams.sttlbParameters 601c8309e8aSHaoyuan Feng val pftlbParams = coreParams.pftlbParameters 602a0301c0dSLemover val btlbParams = coreParams.btlbParameters 6035854c1edSLemover val l2tlbParams = coreParams.l2tlbParameters 6042225d46eSJiawei Lin val NumPerfCounters = coreParams.NumPerfCounters 6052225d46eSJiawei Lin 6062225d46eSJiawei Lin val instBytes = if (HasCExtension) 2 else 4 6072225d46eSJiawei Lin val instOffsetBits = log2Ceil(instBytes) 6082225d46eSJiawei Lin 60905f23f57SWilliam Wang val icacheParameters = coreParams.icacheParameters 6104f94c0c6SJiawei Lin val dcacheParameters = coreParams.dcacheParametersOpt.getOrElse(DCacheParameters()) 6112225d46eSJiawei Lin 612b899def8SWilliam Wang // dcache block cacheline when lr for LRSCCycles - LRSCBackOff cycles 613b899def8SWilliam Wang // for constrained LR/SC loop 614b899def8SWilliam Wang val LRSCCycles = 64 615b899def8SWilliam Wang // for lr storm 616b899def8SWilliam Wang val LRSCBackOff = 8 6172225d46eSJiawei Lin 6182225d46eSJiawei Lin // cache hierarchy configurations 6192225d46eSJiawei Lin val l1BusDataWidth = 256 6202225d46eSJiawei Lin 621de169c67SWilliam Wang // load violation predict 622de169c67SWilliam Wang val ResetTimeMax2Pow = 20 //1078576 623de169c67SWilliam Wang val ResetTimeMin2Pow = 10 //1024 624de169c67SWilliam Wang // wait table parameters 625de169c67SWilliam Wang val WaitTableSize = 1024 626de169c67SWilliam Wang val MemPredPCWidth = log2Up(WaitTableSize) 627de169c67SWilliam Wang val LWTUse2BitCounter = true 628de169c67SWilliam Wang // store set parameters 629de169c67SWilliam Wang val SSITSize = WaitTableSize 630de169c67SWilliam Wang val LFSTSize = 32 631de169c67SWilliam Wang val SSIDWidth = log2Up(LFSTSize) 632de169c67SWilliam Wang val LFSTWidth = 4 633de169c67SWilliam Wang val StoreSetEnable = true // LWT will be disabled if SS is enabled 634cc4fb544Ssfencevma val LFSTEnable = false 635cc4fb544Ssfencevma 636cd365d4cSrvcoresjw val PCntIncrStep: Int = 6 637cd365d4cSrvcoresjw val numPCntHc: Int = 25 638cd365d4cSrvcoresjw val numPCntPtw: Int = 19 639cd365d4cSrvcoresjw 640cd365d4cSrvcoresjw val numCSRPCntFrontend = 8 641cd365d4cSrvcoresjw val numCSRPCntCtrl = 8 642cd365d4cSrvcoresjw val numCSRPCntLsu = 8 643cd365d4cSrvcoresjw val numCSRPCntHc = 5 644c0be7f33SXuan Hu 645c0be7f33SXuan Hu // source stages of cancel signal to issue queues 646c0be7f33SXuan Hu val cancelStages = Seq("IS", "OG0", "OG1") 6472225d46eSJiawei Lin} 648