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, 15373faecdcSXuan Hu IntPhyRegs: Int = 192, 15473faecdcSXuan Hu VfPhyRegs: Int = 192, 155e4f69d78Ssfencevma VirtualLoadQueueSize: Int = 80, 156e4f69d78Ssfencevma LoadQueueRARSize: Int = 80, 157e4f69d78Ssfencevma LoadQueueRAWSize: Int = 64, // NOTE: make sure that LoadQueueRAWSize is power of 2. 158e4f69d78Ssfencevma RollbackGroupSize: Int = 8, 159e4f69d78Ssfencevma LoadQueueReplaySize: Int = 80, 160e4f69d78Ssfencevma LoadUncacheBufferSize: Int = 20, 161e4f69d78Ssfencevma LoadQueueNWriteBanks: Int = 8, // NOTE: make sure that LoadQueueRARSize/LoadQueueRAWSize is divided by LoadQueueNWriteBanks 1622b4e8253SYinan Xu StoreQueueSize: Int = 64, 163e4f69d78Ssfencevma StoreQueueNWriteBanks: Int = 8, // NOTE: make sure that StoreQueueSize is divided by StoreQueueNWriteBanks 164e4f69d78Ssfencevma StoreQueueForwardWithMask: Boolean = true, 165cea88ff8SWilliam Wang VlsQueueSize: Int = 8, 1667154d65eSYinan Xu RobSize: Int = 256, 167a8db15d8Sfdy RabSize: Int = 256, 1682225d46eSJiawei Lin dpParams: DispatchParameters = DispatchParameters( 1692225d46eSJiawei Lin IntDqSize = 16, 1702225d46eSJiawei Lin FpDqSize = 16, 1712225d46eSJiawei Lin LsDqSize = 16, 1723b739f49SXuan Hu IntDqDeqWidth = 6, 1733b739f49SXuan Hu FpDqDeqWidth = 6, 1743b739f49SXuan Hu LsDqDeqWidth = 6, 1752225d46eSJiawei Lin ), 1763b739f49SXuan Hu intPreg: PregParams = IntPregParams( 177fa35b2ceSzhanglyGit numEntries = 256, 1783b739f49SXuan Hu numRead = 14, 1793b739f49SXuan Hu numWrite = 8, 1802225d46eSJiawei Lin ), 1813b739f49SXuan Hu vfPreg: VfPregParams = VfPregParams( 182fa35b2ceSzhanglyGit numEntries = 256, 1833b739f49SXuan Hu numRead = 14, 1843b739f49SXuan Hu numWrite = 8, 1853b739f49SXuan Hu ), 186289fc2f9SLinJiawei prefetcher: Option[PrefetcherParams] = Some(SMSParams()), 1872225d46eSJiawei Lin LoadPipelineWidth: Int = 2, 1882225d46eSJiawei Lin StorePipelineWidth: Int = 2, 189cea88ff8SWilliam Wang VecMemSrcInWidth: Int = 2, 190cea88ff8SWilliam Wang VecMemInstWbWidth: Int = 1, 191cea88ff8SWilliam Wang VecMemDispatchWidth: Int = 1, 1922225d46eSJiawei Lin StoreBufferSize: Int = 16, 19305f23f57SWilliam Wang StoreBufferThreshold: Int = 7, 19446f74b57SHaojin Tang EnsbufferWidth: Int = 2, 19537225120Ssfencevma UncacheBufferSize: Int = 4, 196c837faaaSWilliam Wang EnableLoadToLoadForward: Boolean = true, 197a98b054bSWilliam Wang EnableFastForward: Boolean = false, 198beabc72dSWilliam Wang EnableLdVioCheckAfterReset: Boolean = true, 199026615fcSWilliam Wang EnableSoftPrefetchAfterReset: Boolean = true, 200026615fcSWilliam Wang EnableCacheErrorAfterReset: Boolean = true, 201144422dcSMaxpicca-Li EnableDCacheWPU: Boolean = false, 2026786cfb7SWilliam Wang EnableAccurateLoadError: Boolean = true, 203e32bafbaSbugGenerator EnableUncacheWriteOutstanding: Boolean = false, 20445f497a4Shappy-lx MMUAsidLen: Int = 16, // max is 16, 0 is not supported now 20562dfd6c3Shappy-lx ReSelectLen: Int = 7, // load replay queue replay select counter len 206a0301c0dSLemover itlbParameters: TLBParameters = TLBParameters( 207a0301c0dSLemover name = "itlb", 208a0301c0dSLemover fetchi = true, 209a0301c0dSLemover useDmode = false, 210fa086d5eSLemover normalNWays = 32, 211a0301c0dSLemover normalReplacer = Some("plru"), 212fa086d5eSLemover superNWays = 4, 213f1fe8698SLemover superReplacer = Some("plru") 214a0301c0dSLemover ), 21534f9624dSguohongyu itlbPortNum: Int = 2 + ICacheParameters().prefetchPipeNum + 1, 21634f9624dSguohongyu ipmpPortNum: Int = 2 + ICacheParameters().prefetchPipeNum + 1, 217a0301c0dSLemover ldtlbParameters: TLBParameters = TLBParameters( 218a0301c0dSLemover name = "ldtlb", 21906082082SLemover normalNSets = 64, 220a0301c0dSLemover normalNWays = 1, 221a0301c0dSLemover normalAssociative = "sa", 222a0301c0dSLemover normalReplacer = Some("setplru"), 22306082082SLemover superNWays = 16, 224a0301c0dSLemover normalAsVictim = true, 22553b8f1a7SLemover outReplace = false, 2265b7ef044SLemover partialStaticPMP = true, 227f1fe8698SLemover outsideRecvFlush = true, 2285cf62c1aSLemover saveLevel = true 229a0301c0dSLemover ), 230a0301c0dSLemover sttlbParameters: TLBParameters = TLBParameters( 231a0301c0dSLemover name = "sttlb", 23206082082SLemover normalNSets = 64, 233a0301c0dSLemover normalNWays = 1, 234a0301c0dSLemover normalAssociative = "sa", 235a0301c0dSLemover normalReplacer = Some("setplru"), 23606082082SLemover superNWays = 16, 237a0301c0dSLemover normalAsVictim = true, 23853b8f1a7SLemover outReplace = false, 2395b7ef044SLemover partialStaticPMP = true, 240f1fe8698SLemover outsideRecvFlush = true, 2415cf62c1aSLemover saveLevel = true 242a0301c0dSLemover ), 243c8309e8aSHaoyuan Feng pftlbParameters: TLBParameters = TLBParameters( 244c8309e8aSHaoyuan Feng name = "pftlb", 245c8309e8aSHaoyuan Feng normalNSets = 64, 246c8309e8aSHaoyuan Feng normalNWays = 1, 247c8309e8aSHaoyuan Feng normalAssociative = "sa", 248c8309e8aSHaoyuan Feng normalReplacer = Some("setplru"), 249c8309e8aSHaoyuan Feng superNWays = 16, 250c8309e8aSHaoyuan Feng normalAsVictim = true, 251c8309e8aSHaoyuan Feng outReplace = false, 252c8309e8aSHaoyuan Feng partialStaticPMP = true, 253c8309e8aSHaoyuan Feng outsideRecvFlush = true, 254c8309e8aSHaoyuan Feng saveLevel = true 255c8309e8aSHaoyuan Feng ), 256bf08468cSLemover refillBothTlb: Boolean = false, 257a0301c0dSLemover btlbParameters: TLBParameters = TLBParameters( 258a0301c0dSLemover name = "btlb", 259a0301c0dSLemover normalNSets = 1, 260a0301c0dSLemover normalNWays = 64, 261a0301c0dSLemover superNWays = 4, 262a0301c0dSLemover ), 2635854c1edSLemover l2tlbParameters: L2TLBParameters = L2TLBParameters(), 2642225d46eSJiawei Lin NumPerfCounters: Int = 16, 26505f23f57SWilliam Wang icacheParameters: ICacheParameters = ICacheParameters( 26605f23f57SWilliam Wang tagECC = Some("parity"), 26705f23f57SWilliam Wang dataECC = Some("parity"), 26805f23f57SWilliam Wang replacer = Some("setplru"), 2691d8f4dcbSJay nMissEntries = 2, 2707052722fSJay nProbeEntries = 2, 271cb93f2f2Sguohongyu nPrefetchEntries = 12, 272b1ded4e8Sguohongyu nPrefBufferEntries = 64, 273a108d429SJay hasPrefetch = true, 27405f23f57SWilliam Wang ), 2754f94c0c6SJiawei Lin dcacheParametersOpt: Option[DCacheParameters] = Some(DCacheParameters( 27605f23f57SWilliam Wang tagECC = Some("secded"), 27705f23f57SWilliam Wang dataECC = Some("secded"), 27805f23f57SWilliam Wang replacer = Some("setplru"), 27905f23f57SWilliam Wang nMissEntries = 16, 280300ded30SWilliam Wang nProbeEntries = 8, 281300ded30SWilliam Wang nReleaseEntries = 18 2824f94c0c6SJiawei Lin )), 28315ee59e4Swakafa L2CacheParamsOpt: Option[L2Param] = Some(L2Param( 284a1ea7f76SJiawei Lin name = "l2", 285a1ea7f76SJiawei Lin ways = 8, 286a1ea7f76SJiawei Lin sets = 1024, // default 512KB L2 28715ee59e4Swakafa prefetch = Some(coupledL2.prefetch.PrefetchReceiverParams()) 2884f94c0c6SJiawei Lin )), 289d5be5d19SJiawei Lin L2NBanks: Int = 1, 290a1ea7f76SJiawei Lin usePTWRepeater: Boolean = false, 291e0374b1cSHaoyuan Feng softTLB: Boolean = false, // dpi-c l1tlb debug only 292e0374b1cSHaoyuan Feng softPTW: Boolean = false, // dpi-c l2tlb debug only 2935afdf73cSHaoyuan Feng softPTWDelay: Int = 1 2942225d46eSJiawei Lin){ 295b52d4755SXuan Hu def vlWidth = log2Up(VLEN) + 1 296b52d4755SXuan Hu 297c7fabd05SSteve Gou val allHistLens = SCHistLens ++ ITTageTableInfos.map(_._2) ++ TageTableInfos.map(_._2) :+ UbtbGHRLength 298c7fabd05SSteve Gou val HistoryLength = allHistLens.max + numBr * FtqSize + 9 // 256 for the predictor configs now 299c7fabd05SSteve Gou 3003b739f49SXuan Hu def intSchdParams = { 3013b739f49SXuan Hu implicit val schdType: SchedulerType = IntScheduler() 3023b739f49SXuan Hu val pregBits = intPreg.addrWidth 3033b739f49SXuan Hu val numRfRead = intPreg.numRead 3043b739f49SXuan Hu val numRfWrite = intPreg.numWrite 3053b739f49SXuan Hu SchdBlockParams(Seq( 3063b739f49SXuan Hu IssueBlockParams(Seq( 307*cfbf6f34SXuan Hu ExeUnitParams("IEX0", Seq(AluCfg, MulCfg, BkuCfg), Seq(IntWB(port = 0, 0)), Seq(Seq(IntRD(0, 0)), Seq(IntRD(1, 0)))), 308*cfbf6f34SXuan Hu ExeUnitParams("IEX1", Seq(AluCfg, MulCfg, BkuCfg), Seq(IntWB(port = 1, 1)), Seq(Seq(IntRD(2, 1)), Seq(IntRD(3, 1)))), 309cde70b38SzhanglyGit ), numEntries = 8, pregBits = pregBits, numWakeupFromWB = numRfWrite, numEnq = 2), 310cde70b38SzhanglyGit IssueBlockParams(Seq( 311*cfbf6f34SXuan Hu ExeUnitParams("BJU0", Seq(BrhCfg, JmpCfg, CsrCfg, FenceCfg), Seq(IntWB(port = 2, 0)), Seq(Seq(IntRD(4, 0)), Seq(IntRD(5, 0)))), 312*cfbf6f34SXuan Hu ExeUnitParams("BJU1", Seq(BrhCfg), Seq(), Seq(Seq(IntRD(6, 0)), Seq(IntRD(7, 0)))), 3133b739f49SXuan Hu ), numEntries = 8, pregBits = pregBits, numWakeupFromWB = numRfWrite, numEnq = 2), 3143b739f49SXuan Hu IssueBlockParams(Seq( 315*cfbf6f34SXuan Hu ExeUnitParams("IMISC0", Seq(VSetRiWiCfg), Seq(IntWB(port = 3, 0)), Seq(Seq(IntRD(6, 2)), Seq(IntRD(7, 2)))), 3163b739f49SXuan Hu ), numEntries = 8, pregBits = pregBits, numWakeupFromWB = numRfWrite, numEnq = 2), 3173b739f49SXuan Hu IssueBlockParams(Seq( 318*cfbf6f34SXuan Hu ExeUnitParams("IMISC1", Seq(I2fCfg, VSetRiWvfCfg), Seq(VfWB(port = 4, 0)), Seq(Seq(IntRD(6, 1)), Seq(IntRD(7, 1)))), 3193b739f49SXuan Hu ), numEntries = 8, pregBits = pregBits, numWakeupFromWB = numRfWrite, numEnq = 2), 3203b739f49SXuan Hu IssueBlockParams(Seq( 321*cfbf6f34SXuan Hu ExeUnitParams("IDIV0", Seq(DivCfg), Seq(IntWB(port = 4, 0)), Seq(Seq(IntRD(8, 0)), Seq(IntRD(9, 0)))), 3222372d0fbSfdy ), numEntries = 8, pregBits = pregBits, numWakeupFromWB = numRfWrite, numEnq = 2), 3233b739f49SXuan Hu ), 3243b739f49SXuan Hu numPregs = intPreg.numEntries, 3253b739f49SXuan Hu numRfReadWrite = Some((numRfRead, numRfWrite)), 3263b739f49SXuan Hu numDeqOutside = 0, 3273b739f49SXuan Hu schdType = schdType, 3283b739f49SXuan Hu rfDataWidth = intPreg.dataCfg.dataWidth, 3293b739f49SXuan Hu numUopIn = dpParams.IntDqDeqWidth, 3303b739f49SXuan Hu ) 3313b739f49SXuan Hu } 3323b739f49SXuan Hu def vfSchdParams = { 3333b739f49SXuan Hu implicit val schdType: SchedulerType = VfScheduler() 3343b739f49SXuan Hu val pregBits = vfPreg.addrWidth 3353b739f49SXuan Hu val numRfRead = vfPreg.numRead 3363b739f49SXuan Hu val numRfWrite = vfPreg.numWrite 3373b739f49SXuan Hu SchdBlockParams(Seq( 338*cfbf6f34SXuan Hu// IssueBlockParams(Seq( 339*cfbf6f34SXuan Hu// 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)))), 340*cfbf6f34SXuan Hu// 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)))), 341*cfbf6f34SXuan Hu// ), numEntries = 8, pregBits = pregBits, numWakeupFromWB = numRfWrite, numEnq = 2), 3423b739f49SXuan Hu IssueBlockParams(Seq( 343*cfbf6f34SXuan Hu ExeUnitParams("FEX0", Seq(FmacCfg), Seq(VfWB(port = 0, 0)), Seq(Seq(VfRD(1, 0)), Seq(VfRD(2, 0)), Seq(VfRD(3, 0)))), 344*cfbf6f34SXuan Hu ExeUnitParams("FEX1", Seq(FmacCfg), Seq(VfWB(port = 1, 0)), Seq(Seq(VfRD(4, 0)), Seq(VfRD(5, 0)), Seq(VfRD(6, 0)))), 34535d005dfSXuan Hu ), numEntries = 8, pregBits = pregBits, numWakeupFromWB = numRfWrite, numEnq = 2), 3463b739f49SXuan Hu IssueBlockParams(Seq( 347*cfbf6f34SXuan Hu ExeUnitParams("FEX2", Seq(FDivSqrtCfg), Seq(VfWB(port = 2, 0)), Seq(Seq(VfRD(11, 0)), Seq(VfRD(12, 0)))), 348*cfbf6f34SXuan Hu ExeUnitParams("FEX3", Seq(F2fCfg, F2iCfg, VSetRvfWvfCfg), Seq(VfWB(port = 3, 0), IntWB(port = 5, 0)), Seq(Seq(VfRD(7, 0)), Seq(VfRD(8, 0)))), 349efdf5c1cSxiaofeibao-xjtu ), numEntries = 8, pregBits = pregBits, numWakeupFromWB = numRfWrite, numEnq = 2), 3503b739f49SXuan Hu ), 3513b739f49SXuan Hu numPregs = vfPreg.numEntries, 3523b739f49SXuan Hu numRfReadWrite = Some((numRfRead, numRfWrite)), 3533b739f49SXuan Hu numDeqOutside = 0, 3543b739f49SXuan Hu schdType = schdType, 3553b739f49SXuan Hu rfDataWidth = vfPreg.dataCfg.dataWidth, 3563b739f49SXuan Hu numUopIn = dpParams.FpDqDeqWidth, 3573b739f49SXuan Hu ) 3583b739f49SXuan Hu } 3593b739f49SXuan Hu def memSchdParams = { 3603b739f49SXuan Hu implicit val schdType: SchedulerType = MemScheduler() 3613b739f49SXuan Hu val pregBits = vfPreg.addrWidth max intPreg.addrWidth 3623b739f49SXuan Hu val rfDataWidth = 64 3632225d46eSJiawei Lin 3643b739f49SXuan Hu SchdBlockParams(Seq( 3653b739f49SXuan Hu IssueBlockParams(Seq( 366*cfbf6f34SXuan Hu ExeUnitParams("LDU0", Seq(LduCfg), Seq(IntWB(6, 0), VfWB(6, 0)), Seq(Seq(IntRD(10, 0)))), 367*cfbf6f34SXuan Hu ExeUnitParams("LDU1", Seq(LduCfg), Seq(IntWB(7, 0), VfWB(7, 0)), Seq(Seq(IntRD(11, 0)))), 368141a6449SXuan Hu ), numEntries = 8, pregBits = pregBits, numWakeupFromWB = 16, numEnq = 2), 3693b739f49SXuan Hu IssueBlockParams(Seq( 370*cfbf6f34SXuan Hu ExeUnitParams("STA0", Seq(StaCfg, MouCfg), Seq(IntWB(6, 1)), Seq(Seq(IntRD(12, 0)))), 371*cfbf6f34SXuan Hu ExeUnitParams("STA1", Seq(StaCfg, MouCfg), Seq(IntWB(7, 1)), Seq(Seq(IntRD(13, 0)))), 372141a6449SXuan Hu ), numEntries = 8, pregBits = pregBits, numWakeupFromWB = 16, numEnq = 2), 3733b739f49SXuan Hu IssueBlockParams(Seq( 374*cfbf6f34SXuan Hu ExeUnitParams("STD0", Seq(StdCfg, MoudCfg), Seq(), Seq(Seq(IntRD(8, Int.MaxValue), VfRD(12, Int.MaxValue)))), 375*cfbf6f34SXuan Hu ExeUnitParams("STD1", Seq(StdCfg, MoudCfg), Seq(), Seq(Seq(IntRD(9, Int.MaxValue), VfRD(13, Int.MaxValue)))), 376141a6449SXuan Hu ), numEntries = 8, pregBits = pregBits, numWakeupFromWB = 16, numEnq = 2), 3774ee69032SzhanglyGit IssueBlockParams(Seq( 378*cfbf6f34SXuan Hu ExeUnitParams("VLDU0", Seq(VlduCfg), Seq(VfWB(5, 1)), Seq(Seq(VfRD(0, 0)), Seq(VfRD(1, 0)), Seq(VfRD(2, 0)), Seq(VfRD(3, 0)), Seq(VfRD(4, 0)))), 379*cfbf6f34SXuan Hu ExeUnitParams("VLDU1", Seq(VlduCfg), Seq(VfWB(6, 1)), Seq(Seq(VfRD(5, 0)), Seq(VfRD(6, 0)), Seq(VfRD(7, 0)), Seq(VfRD(8, 0)), Seq(VfRD(9, 0)))), 3804ee69032SzhanglyGit ), numEntries = 8, pregBits = pregBits, numWakeupFromWB = 16, numEnq = 2), 3813b739f49SXuan Hu ), 382141a6449SXuan Hu numPregs = intPreg.numEntries max vfPreg.numEntries, 3833b739f49SXuan Hu numRfReadWrite = None, 3843b739f49SXuan Hu numDeqOutside = 0, 3853b739f49SXuan Hu schdType = schdType, 3863b739f49SXuan Hu rfDataWidth = rfDataWidth, 3873b739f49SXuan Hu numUopIn = dpParams.LsDqDeqWidth, 3883b739f49SXuan Hu ) 3893b739f49SXuan Hu } 3902225d46eSJiawei Lin 391bf35baadSXuan Hu def PregIdxWidthMax = intPreg.addrWidth max vfPreg.addrWidth 392bf35baadSXuan Hu 393bf35baadSXuan Hu def iqWakeUpParams = { 394bf35baadSXuan Hu Seq( 395bf35baadSXuan Hu WakeUpConfig("IEX0" -> "IEX0"), 396bf35baadSXuan Hu WakeUpConfig("IEX0" -> "IEX1"), 397bf35baadSXuan Hu WakeUpConfig("IEX1" -> "IEX0"), 398bf35baadSXuan Hu WakeUpConfig("IEX1" -> "IEX1"), 399bf35baadSXuan Hu WakeUpConfig("IEX0" -> "BJU0"), 400bf35baadSXuan Hu WakeUpConfig("IEX0" -> "BJU1"), 401bf35baadSXuan Hu WakeUpConfig("IEX1" -> "BJU0"), 402bf35baadSXuan Hu WakeUpConfig("IEX1" -> "BJU1"), 403bf35baadSXuan Hu WakeUpConfig("IEX0" -> "LDU0"), 404bf35baadSXuan Hu WakeUpConfig("IEX0" -> "LDU1"), 405bf35baadSXuan Hu WakeUpConfig("IEX1" -> "LDU0"), 406bf35baadSXuan Hu WakeUpConfig("IEX1" -> "LDU1"), 407bf35baadSXuan Hu WakeUpConfig("IEX0" -> "STA0"), 408bf35baadSXuan Hu WakeUpConfig("IEX0" -> "STA1"), 409bf35baadSXuan Hu WakeUpConfig("IEX1" -> "STA0"), 410bf35baadSXuan Hu WakeUpConfig("IEX1" -> "STA1"), 411*cfbf6f34SXuan Hu WakeUpConfig("IMISC1" -> "FEX0"), 412*cfbf6f34SXuan Hu WakeUpConfig("IMISC1" -> "FEX1"), 413*cfbf6f34SXuan Hu WakeUpConfig("IMISC1" -> "FEX2"), 414*cfbf6f34SXuan Hu WakeUpConfig("IMISC1" -> "FEX3"), 415*cfbf6f34SXuan Hu WakeUpConfig("IMISC1" -> "FEX4"), 416*cfbf6f34SXuan Hu WakeUpConfig("FEX3" -> "FEX0"), 417*cfbf6f34SXuan Hu WakeUpConfig("FEX3" -> "FEX1"), 418*cfbf6f34SXuan Hu WakeUpConfig("FEX3" -> "FEX2"), 419*cfbf6f34SXuan Hu WakeUpConfig("FEX3" -> "FEX3"), 420*cfbf6f34SXuan Hu WakeUpConfig("FEX3" -> "IEX0"), 421*cfbf6f34SXuan Hu WakeUpConfig("FEX3" -> "IEX1"), 422*cfbf6f34SXuan Hu WakeUpConfig("FEX3" -> "BJU0"), 423*cfbf6f34SXuan Hu WakeUpConfig("FEX3" -> "BJU1"), 424bf35baadSXuan Hu ) 425bf35baadSXuan Hu } 426bf35baadSXuan Hu 427bf35baadSXuan Hu def backendParams: BackendParams = backend.BackendParams( 428bf35baadSXuan Hu Map( 4293b739f49SXuan Hu IntScheduler() -> intSchdParams, 4303b739f49SXuan Hu VfScheduler() -> vfSchdParams, 4313b739f49SXuan Hu MemScheduler() -> memSchdParams, 432bf35baadSXuan Hu ), 433bf35baadSXuan Hu Seq( 4343b739f49SXuan Hu intPreg, 4353b739f49SXuan Hu vfPreg, 436bf35baadSXuan Hu ), 437bf35baadSXuan Hu iqWakeUpParams, 438bf35baadSXuan Hu ) 4392225d46eSJiawei Lin} 4402225d46eSJiawei Lin 4412225d46eSJiawei Lincase object DebugOptionsKey extends Field[DebugOptions] 4422225d46eSJiawei Lin 4432225d46eSJiawei Lincase class DebugOptions 4442225d46eSJiawei Lin( 4451545277aSYinan Xu FPGAPlatform: Boolean = false, 4461545277aSYinan Xu EnableDifftest: Boolean = false, 447cbe9a847SYinan Xu AlwaysBasicDiff: Boolean = true, 4481545277aSYinan Xu EnableDebug: Boolean = false, 4492225d46eSJiawei Lin EnablePerfDebug: Boolean = true, 450eb163ef0SHaojin Tang UseDRAMSim: Boolean = false, 451047e34f9SMaxpicca-Li EnableConstantin: Boolean = false, 452eb163ef0SHaojin Tang EnableTopDown: Boolean = false 4532225d46eSJiawei Lin) 4542225d46eSJiawei Lin 4552225d46eSJiawei Lintrait HasXSParameter { 4562225d46eSJiawei Lin 4572225d46eSJiawei Lin implicit val p: Parameters 4582225d46eSJiawei Lin 4592f30d658SYinan Xu val PAddrBits = p(SoCParamsKey).PAddrBits // PAddrBits is Phyical Memory addr bits 4602f30d658SYinan Xu 4612225d46eSJiawei Lin val coreParams = p(XSCoreParamsKey) 4622225d46eSJiawei Lin val env = p(DebugOptionsKey) 4632225d46eSJiawei Lin 4642225d46eSJiawei Lin val XLEN = coreParams.XLEN 465deb6421eSHaojin Tang val VLEN = coreParams.VLEN 466a8db15d8Sfdy val ELEN = coreParams.ELEN 4672225d46eSJiawei Lin val minFLen = 32 4682225d46eSJiawei Lin val fLen = 64 4692225d46eSJiawei Lin def xLen = XLEN 4702225d46eSJiawei Lin 4712225d46eSJiawei Lin val HasMExtension = coreParams.HasMExtension 4722225d46eSJiawei Lin val HasCExtension = coreParams.HasCExtension 4732225d46eSJiawei Lin val HasDiv = coreParams.HasDiv 4742225d46eSJiawei Lin val HasIcache = coreParams.HasICache 4752225d46eSJiawei Lin val HasDcache = coreParams.HasDCache 4762225d46eSJiawei Lin val AddrBits = coreParams.AddrBits // AddrBits is used in some cases 4772225d46eSJiawei Lin val VAddrBits = coreParams.VAddrBits // VAddrBits is Virtual Memory addr bits 47845f497a4Shappy-lx val AsidLength = coreParams.AsidLength 479a760aeb0Shappy-lx val ReSelectLen = coreParams.ReSelectLen 4802225d46eSJiawei Lin val AddrBytes = AddrBits / 8 // unused 4812225d46eSJiawei Lin val DataBits = XLEN 4822225d46eSJiawei Lin val DataBytes = DataBits / 8 4832225d46eSJiawei Lin val HasFPU = coreParams.HasFPU 4840ba52110SZiyue Zhang val HasVPU = coreParams.HasVPU 485ad3ba452Szhanglinjuan val HasCustomCSRCacheOp = coreParams.HasCustomCSRCacheOp 4862225d46eSJiawei Lin val FetchWidth = coreParams.FetchWidth 4872225d46eSJiawei Lin val PredictWidth = FetchWidth * (if (HasCExtension) 2 else 1) 4882225d46eSJiawei Lin val EnableBPU = coreParams.EnableBPU 4892225d46eSJiawei Lin val EnableBPD = coreParams.EnableBPD // enable backing predictor(like Tage) in BPUStage3 4902225d46eSJiawei Lin val EnableRAS = coreParams.EnableRAS 4912225d46eSJiawei Lin val EnableLB = coreParams.EnableLB 4922225d46eSJiawei Lin val EnableLoop = coreParams.EnableLoop 4932225d46eSJiawei Lin val EnableSC = coreParams.EnableSC 4942225d46eSJiawei Lin val EnbaleTlbDebug = coreParams.EnbaleTlbDebug 4952225d46eSJiawei Lin val HistoryLength = coreParams.HistoryLength 49686d9c530SLingrui98 val EnableGHistDiff = coreParams.EnableGHistDiff 497ab0200c8SEaston Man val EnableCommitGHistDiff = coreParams.EnableCommitGHistDiff 498f2aabf0dSLingrui98 val UbtbGHRLength = coreParams.UbtbGHRLength 499b37e4b45SLingrui98 val UbtbSize = coreParams.UbtbSize 50011d0c81dSLingrui98 val EnableFauFTB = coreParams.EnableFauFTB 501b37e4b45SLingrui98 val FtbSize = coreParams.FtbSize 502b37e4b45SLingrui98 val FtbWays = coreParams.FtbWays 5032225d46eSJiawei Lin val RasSize = coreParams.RasSize 50416a1cc4bSzoujr 505bf358e08SLingrui98 def getBPDComponents(resp_in: BranchPredictionResp, p: Parameters) = { 506bf358e08SLingrui98 coreParams.branchPredictor(resp_in, p) 50716a1cc4bSzoujr } 508dd6c0695SLingrui98 val numBr = coreParams.numBr 509dd6c0695SLingrui98 val TageTableInfos = coreParams.TageTableInfos 510cb4f77ceSLingrui98 val TageBanks = coreParams.numBr 511dd6c0695SLingrui98 val SCNRows = coreParams.SCNRows 512dd6c0695SLingrui98 val SCCtrBits = coreParams.SCCtrBits 51334ed6fbcSLingrui98 val SCHistLens = coreParams.SCHistLens 51434ed6fbcSLingrui98 val SCNTables = coreParams.SCNTables 515dd6c0695SLingrui98 51634ed6fbcSLingrui98 val SCTableInfos = Seq.fill(SCNTables)((SCNRows, SCCtrBits)) zip SCHistLens map { 51734ed6fbcSLingrui98 case ((n, cb), h) => (n, cb, h) 518dd6c0695SLingrui98 } 519dd6c0695SLingrui98 val ITTageTableInfos = coreParams.ITTageTableInfos 520dd6c0695SLingrui98 type FoldedHistoryInfo = Tuple2[Int, Int] 521dd6c0695SLingrui98 val foldedGHistInfos = 5224813e060SLingrui98 (TageTableInfos.map{ case (nRows, h, t) => 523dd6c0695SLingrui98 if (h > 0) 5244813e060SLingrui98 Set((h, min(log2Ceil(nRows/numBr), h)), (h, min(h, t)), (h, min(h, t-1))) 525dd6c0695SLingrui98 else 526dd6c0695SLingrui98 Set[FoldedHistoryInfo]() 5274813e060SLingrui98 }.reduce(_++_).toSet ++ 52834ed6fbcSLingrui98 SCTableInfos.map{ case (nRows, _, h) => 529dd6c0695SLingrui98 if (h > 0) 530e992912cSLingrui98 Set((h, min(log2Ceil(nRows/TageBanks), h))) 531dd6c0695SLingrui98 else 532dd6c0695SLingrui98 Set[FoldedHistoryInfo]() 53334ed6fbcSLingrui98 }.reduce(_++_).toSet ++ 534dd6c0695SLingrui98 ITTageTableInfos.map{ case (nRows, h, t) => 535dd6c0695SLingrui98 if (h > 0) 536dd6c0695SLingrui98 Set((h, min(log2Ceil(nRows), h)), (h, min(h, t)), (h, min(h, t-1))) 537dd6c0695SLingrui98 else 538dd6c0695SLingrui98 Set[FoldedHistoryInfo]() 539527dc111SLingrui98 }.reduce(_++_) ++ 540527dc111SLingrui98 Set[FoldedHistoryInfo]((UbtbGHRLength, log2Ceil(UbtbSize))) 541527dc111SLingrui98 ).toList 54216a1cc4bSzoujr 543c7fabd05SSteve Gou 544c7fabd05SSteve Gou 5452225d46eSJiawei Lin val CacheLineSize = coreParams.CacheLineSize 5462225d46eSJiawei Lin val CacheLineHalfWord = CacheLineSize / 16 5472225d46eSJiawei Lin val ExtHistoryLength = HistoryLength + 64 5482225d46eSJiawei Lin val IBufSize = coreParams.IBufSize 5492225d46eSJiawei Lin val DecodeWidth = coreParams.DecodeWidth 5502225d46eSJiawei Lin val RenameWidth = coreParams.RenameWidth 5512225d46eSJiawei Lin val CommitWidth = coreParams.CommitWidth 552d91483a6Sfdy val MaxUopSize = coreParams.MaxUopSize 5532225d46eSJiawei Lin val FtqSize = coreParams.FtqSize 5542225d46eSJiawei Lin val EnableLoadFastWakeUp = coreParams.EnableLoadFastWakeUp 555d91483a6Sfdy val IntLogicRegs = coreParams.IntLogicRegs 556d91483a6Sfdy val FpLogicRegs = coreParams.FpLogicRegs 557d91483a6Sfdy val VecLogicRegs = coreParams.VecLogicRegs 558fe60541bSXuan Hu val VCONFIG_IDX = coreParams.VCONFIG_IDX 5592225d46eSJiawei Lin val NRPhyRegs = coreParams.NRPhyRegs 5602225d46eSJiawei Lin val PhyRegIdxWidth = log2Up(NRPhyRegs) 56173faecdcSXuan Hu val IntPhyRegs = coreParams.IntPhyRegs 56273faecdcSXuan Hu val VfPhyRegs = coreParams.VfPhyRegs 56373faecdcSXuan Hu val IntPregIdxWidth = log2Up(IntPhyRegs) 56473faecdcSXuan Hu val VfPregIdxWidth = log2Up(VfPhyRegs) 5659aca92b9SYinan Xu val RobSize = coreParams.RobSize 566a8db15d8Sfdy val RabSize = coreParams.RabSize 56770224bf6SYinan Xu val IntRefCounterWidth = log2Ceil(RobSize) 568e4f69d78Ssfencevma val VirtualLoadQueueSize = coreParams.VirtualLoadQueueSize 569e4f69d78Ssfencevma val LoadQueueRARSize = coreParams.LoadQueueRARSize 570e4f69d78Ssfencevma val LoadQueueRAWSize = coreParams.LoadQueueRAWSize 571e4f69d78Ssfencevma val RollbackGroupSize = coreParams.RollbackGroupSize 572e4f69d78Ssfencevma val LoadQueueReplaySize = coreParams.LoadQueueReplaySize 573e4f69d78Ssfencevma val LoadUncacheBufferSize = coreParams.LoadUncacheBufferSize 5740a992150SWilliam Wang val LoadQueueNWriteBanks = coreParams.LoadQueueNWriteBanks 5752225d46eSJiawei Lin val StoreQueueSize = coreParams.StoreQueueSize 5760a992150SWilliam Wang val StoreQueueNWriteBanks = coreParams.StoreQueueNWriteBanks 577e4f69d78Ssfencevma val StoreQueueForwardWithMask = coreParams.StoreQueueForwardWithMask 578cea88ff8SWilliam Wang val VlsQueueSize = coreParams.VlsQueueSize 5792225d46eSJiawei Lin val dpParams = coreParams.dpParams 5803b739f49SXuan Hu 5813b739f49SXuan Hu def backendParams: BackendParams = coreParams.backendParams 582351e22f2SXuan Hu def MemIQSizeMax = backendParams.memSchdParams.get.issueBlockParams.map(_.numEntries).max 583351e22f2SXuan Hu def IQSizeMax = backendParams.allSchdParams.map(_.issueBlockParams.map(_.numEntries).max).max 5842225d46eSJiawei Lin val LoadPipelineWidth = coreParams.LoadPipelineWidth 5852225d46eSJiawei Lin val StorePipelineWidth = coreParams.StorePipelineWidth 586cea88ff8SWilliam Wang val VecMemSrcInWidth = coreParams.VecMemSrcInWidth 587cea88ff8SWilliam Wang val VecMemInstWbWidth = coreParams.VecMemInstWbWidth 588cea88ff8SWilliam Wang val VecMemDispatchWidth = coreParams.VecMemDispatchWidth 5892225d46eSJiawei Lin val StoreBufferSize = coreParams.StoreBufferSize 59005f23f57SWilliam Wang val StoreBufferThreshold = coreParams.StoreBufferThreshold 59146f74b57SHaojin Tang val EnsbufferWidth = coreParams.EnsbufferWidth 59237225120Ssfencevma val UncacheBufferSize = coreParams.UncacheBufferSize 59364886eefSWilliam Wang val EnableLoadToLoadForward = coreParams.EnableLoadToLoadForward 5943db2cf75SWilliam Wang val EnableFastForward = coreParams.EnableFastForward 59567682d05SWilliam Wang val EnableLdVioCheckAfterReset = coreParams.EnableLdVioCheckAfterReset 596026615fcSWilliam Wang val EnableSoftPrefetchAfterReset = coreParams.EnableSoftPrefetchAfterReset 597026615fcSWilliam Wang val EnableCacheErrorAfterReset = coreParams.EnableCacheErrorAfterReset 598144422dcSMaxpicca-Li val EnableDCacheWPU = coreParams.EnableDCacheWPU 5996786cfb7SWilliam Wang val EnableAccurateLoadError = coreParams.EnableAccurateLoadError 60037225120Ssfencevma val EnableUncacheWriteOutstanding = coreParams.EnableUncacheWriteOutstanding 60145f497a4Shappy-lx val asidLen = coreParams.MMUAsidLen 602a0301c0dSLemover val BTLBWidth = coreParams.LoadPipelineWidth + coreParams.StorePipelineWidth 603bf08468cSLemover val refillBothTlb = coreParams.refillBothTlb 604a0301c0dSLemover val itlbParams = coreParams.itlbParameters 605a0301c0dSLemover val ldtlbParams = coreParams.ldtlbParameters 606a0301c0dSLemover val sttlbParams = coreParams.sttlbParameters 607c8309e8aSHaoyuan Feng val pftlbParams = coreParams.pftlbParameters 608a0301c0dSLemover val btlbParams = coreParams.btlbParameters 6095854c1edSLemover val l2tlbParams = coreParams.l2tlbParameters 6102225d46eSJiawei Lin val NumPerfCounters = coreParams.NumPerfCounters 6112225d46eSJiawei Lin 6122225d46eSJiawei Lin val instBytes = if (HasCExtension) 2 else 4 6132225d46eSJiawei Lin val instOffsetBits = log2Ceil(instBytes) 6142225d46eSJiawei Lin 61505f23f57SWilliam Wang val icacheParameters = coreParams.icacheParameters 6164f94c0c6SJiawei Lin val dcacheParameters = coreParams.dcacheParametersOpt.getOrElse(DCacheParameters()) 6172225d46eSJiawei Lin 618b899def8SWilliam Wang // dcache block cacheline when lr for LRSCCycles - LRSCBackOff cycles 619b899def8SWilliam Wang // for constrained LR/SC loop 620b899def8SWilliam Wang val LRSCCycles = 64 621b899def8SWilliam Wang // for lr storm 622b899def8SWilliam Wang val LRSCBackOff = 8 6232225d46eSJiawei Lin 6242225d46eSJiawei Lin // cache hierarchy configurations 6252225d46eSJiawei Lin val l1BusDataWidth = 256 6262225d46eSJiawei Lin 627de169c67SWilliam Wang // load violation predict 628de169c67SWilliam Wang val ResetTimeMax2Pow = 20 //1078576 629de169c67SWilliam Wang val ResetTimeMin2Pow = 10 //1024 630de169c67SWilliam Wang // wait table parameters 631de169c67SWilliam Wang val WaitTableSize = 1024 632de169c67SWilliam Wang val MemPredPCWidth = log2Up(WaitTableSize) 633de169c67SWilliam Wang val LWTUse2BitCounter = true 634de169c67SWilliam Wang // store set parameters 635de169c67SWilliam Wang val SSITSize = WaitTableSize 636de169c67SWilliam Wang val LFSTSize = 32 637de169c67SWilliam Wang val SSIDWidth = log2Up(LFSTSize) 638de169c67SWilliam Wang val LFSTWidth = 4 639de169c67SWilliam Wang val StoreSetEnable = true // LWT will be disabled if SS is enabled 640cc4fb544Ssfencevma val LFSTEnable = false 641cc4fb544Ssfencevma 642cd365d4cSrvcoresjw val PCntIncrStep: Int = 6 643cd365d4cSrvcoresjw val numPCntHc: Int = 25 644cd365d4cSrvcoresjw val numPCntPtw: Int = 19 645cd365d4cSrvcoresjw 646cd365d4cSrvcoresjw val numCSRPCntFrontend = 8 647cd365d4cSrvcoresjw val numCSRPCntCtrl = 8 648cd365d4cSrvcoresjw val numCSRPCntLsu = 8 649cd365d4cSrvcoresjw val numCSRPCntHc = 5 650c0be7f33SXuan Hu 651c0be7f33SXuan Hu // source stages of cancel signal to issue queues 652c0be7f33SXuan Hu val cancelStages = Seq("IS", "OG0", "OG1") 6532225d46eSJiawei Lin} 654