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*acb0b98eSXuan Hu ExeUnitParams("IEX0", Seq(AluCfg), Seq(IntWB(port = 0, 0)), Seq(Seq(IntRD(0, 0)), Seq(IntRD(1, 0)))), 308*acb0b98eSXuan Hu ExeUnitParams("IEX1", Seq(AluCfg), Seq(IntWB(port = 1, 0)), Seq(Seq(IntRD(2, 0)), Seq(IntRD(3, 0)))), 309cde70b38SzhanglyGit ), numEntries = 8, pregBits = pregBits, numWakeupFromWB = numRfWrite, numEnq = 2), 310cde70b38SzhanglyGit IssueBlockParams(Seq( 311*acb0b98eSXuan Hu ExeUnitParams("IEX2", Seq(AluCfg, MulCfg, BkuCfg), Seq(IntWB(port = 2, 0)), Seq(Seq(IntRD(4, 0)), Seq(IntRD(5, 0)))), 312*acb0b98eSXuan Hu ExeUnitParams("IEX3", Seq(AluCfg, MulCfg, BkuCfg), Seq(IntWB(port = 3, 0)), Seq(Seq(IntRD(6, 0)), Seq(IntRD(7, 0)))), 3133b739f49SXuan Hu ), numEntries = 8, pregBits = pregBits, numWakeupFromWB = numRfWrite, numEnq = 2), 3143b739f49SXuan Hu IssueBlockParams(Seq( 315*acb0b98eSXuan Hu ExeUnitParams("BJU0", Seq(BrhCfg, JmpCfg, CsrCfg, FenceCfg), Seq(IntWB(port = 4, 0)), Seq(Seq(IntRD(8, 0)), Seq(IntRD(9, 0)))), 316*acb0b98eSXuan Hu ExeUnitParams("BJU1", Seq(BrhCfg), Seq(), Seq(Seq(IntRD(2, 1)), Seq(IntRD(3, 1)))), 3173b739f49SXuan Hu ), numEntries = 8, pregBits = pregBits, numWakeupFromWB = numRfWrite, numEnq = 2), 3183b739f49SXuan Hu IssueBlockParams(Seq( 319*acb0b98eSXuan Hu ExeUnitParams("IMISC0", Seq(VSetRiWiCfg, I2fCfg, VSetRiWvfCfg), Seq(IntWB(port = 4, 1), VfWB(4, 0)), Seq(Seq(IntRD(8, 1)), Seq(IntRD(9, 1)))), 3203b739f49SXuan Hu ), numEntries = 8, pregBits = pregBits, numWakeupFromWB = numRfWrite, numEnq = 2), 3213b739f49SXuan Hu IssueBlockParams(Seq( 322*acb0b98eSXuan Hu ExeUnitParams("IDIV0", Seq(DivCfg), Seq(IntWB(port = 5, 1)), Seq(Seq(IntRD(6, Int.MaxValue)), Seq(IntRD(7, Int.MaxValue)))), 3232372d0fbSfdy ), numEntries = 8, pregBits = pregBits, numWakeupFromWB = numRfWrite, numEnq = 2), 3243b739f49SXuan Hu ), 3253b739f49SXuan Hu numPregs = intPreg.numEntries, 3263b739f49SXuan Hu numRfReadWrite = Some((numRfRead, numRfWrite)), 3273b739f49SXuan Hu numDeqOutside = 0, 3283b739f49SXuan Hu schdType = schdType, 3293b739f49SXuan Hu rfDataWidth = intPreg.dataCfg.dataWidth, 3303b739f49SXuan Hu numUopIn = dpParams.IntDqDeqWidth, 3313b739f49SXuan Hu ) 3323b739f49SXuan Hu } 3333b739f49SXuan Hu def vfSchdParams = { 3343b739f49SXuan Hu implicit val schdType: SchedulerType = VfScheduler() 3353b739f49SXuan Hu val pregBits = vfPreg.addrWidth 3363b739f49SXuan Hu val numRfRead = vfPreg.numRead 3373b739f49SXuan Hu val numRfWrite = vfPreg.numWrite 3383b739f49SXuan Hu SchdBlockParams(Seq( 3393b739f49SXuan Hu IssueBlockParams(Seq( 340344c8465Sxiaofeibao-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)))), 341344c8465Sxiaofeibao-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)))), 342344c8465Sxiaofeibao-xjtu ), numEntries = 8, pregBits = pregBits, numWakeupFromWB = numRfWrite, numEnq = 2), 343344c8465Sxiaofeibao-xjtu IssueBlockParams(Seq( 344344c8465Sxiaofeibao-xjtu ExeUnitParams("FEX0", Seq(FmacCfg), Seq(VfWB(port = 1, 0)), Seq(Seq(VfRD(1, 0)), Seq(VfRD(2, 0)), Seq(VfRD(3, 0)))), 345cfbf6f34SXuan Hu ExeUnitParams("FEX1", Seq(FmacCfg), Seq(VfWB(port = 1, 0)), Seq(Seq(VfRD(4, 0)), Seq(VfRD(5, 0)), Seq(VfRD(6, 0)))), 34635d005dfSXuan Hu ), numEntries = 8, pregBits = pregBits, numWakeupFromWB = numRfWrite, numEnq = 2), 3473b739f49SXuan Hu IssueBlockParams(Seq( 348cfbf6f34SXuan Hu ExeUnitParams("FEX2", Seq(FDivSqrtCfg), Seq(VfWB(port = 2, 0)), Seq(Seq(VfRD(11, 0)), Seq(VfRD(12, 0)))), 349344c8465Sxiaofeibao-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)))), 350efdf5c1cSxiaofeibao-xjtu ), numEntries = 8, pregBits = pregBits, numWakeupFromWB = numRfWrite, numEnq = 2), 35175841254Sxiaofeibao-xjtu IssueBlockParams(Seq( 352344c8465Sxiaofeibao-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)))), 353344c8465Sxiaofeibao-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)))), 354344c8465Sxiaofeibao-xjtu ), numEntries = 8, pregBits = pregBits, numWakeupFromWB = numRfWrite, numEnq = 2), 355344c8465Sxiaofeibao-xjtu IssueBlockParams(Seq( 356344c8465Sxiaofeibao-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)))), 357344c8465Sxiaofeibao-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)))), 358344c8465Sxiaofeibao-xjtu ), numEntries = 8, pregBits = pregBits, numWakeupFromWB = numRfWrite, numEnq = 2), 359344c8465Sxiaofeibao-xjtu IssueBlockParams(Seq( 360344c8465Sxiaofeibao-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)))), 36175841254Sxiaofeibao-xjtu ), numEntries = 8, pregBits = pregBits, numWakeupFromWB = numRfWrite, numEnq = 2), 3623b739f49SXuan Hu ), 3633b739f49SXuan Hu numPregs = vfPreg.numEntries, 3643b739f49SXuan Hu numRfReadWrite = Some((numRfRead, numRfWrite)), 3653b739f49SXuan Hu numDeqOutside = 0, 3663b739f49SXuan Hu schdType = schdType, 3673b739f49SXuan Hu rfDataWidth = vfPreg.dataCfg.dataWidth, 3683b739f49SXuan Hu numUopIn = dpParams.FpDqDeqWidth, 3693b739f49SXuan Hu ) 3703b739f49SXuan Hu } 3713b739f49SXuan Hu def memSchdParams = { 3723b739f49SXuan Hu implicit val schdType: SchedulerType = MemScheduler() 3733b739f49SXuan Hu val pregBits = vfPreg.addrWidth max intPreg.addrWidth 3743b739f49SXuan Hu val rfDataWidth = 64 3752225d46eSJiawei Lin 3763b739f49SXuan Hu SchdBlockParams(Seq( 3773b739f49SXuan Hu IssueBlockParams(Seq( 378cfbf6f34SXuan Hu ExeUnitParams("LDU0", Seq(LduCfg), Seq(IntWB(6, 0), VfWB(6, 0)), Seq(Seq(IntRD(10, 0)))), 379cfbf6f34SXuan Hu ExeUnitParams("LDU1", Seq(LduCfg), Seq(IntWB(7, 0), VfWB(7, 0)), Seq(Seq(IntRD(11, 0)))), 380141a6449SXuan Hu ), numEntries = 8, pregBits = pregBits, numWakeupFromWB = 16, numEnq = 2), 3813b739f49SXuan Hu IssueBlockParams(Seq( 382cfbf6f34SXuan Hu ExeUnitParams("STA0", Seq(StaCfg, MouCfg), Seq(IntWB(6, 1)), Seq(Seq(IntRD(12, 0)))), 383cfbf6f34SXuan Hu ExeUnitParams("STA1", Seq(StaCfg, MouCfg), Seq(IntWB(7, 1)), Seq(Seq(IntRD(13, 0)))), 384141a6449SXuan Hu ), numEntries = 8, pregBits = pregBits, numWakeupFromWB = 16, numEnq = 2), 3853b739f49SXuan Hu IssueBlockParams(Seq( 386cfbf6f34SXuan Hu ExeUnitParams("STD0", Seq(StdCfg, MoudCfg), Seq(), Seq(Seq(IntRD(8, Int.MaxValue), VfRD(12, Int.MaxValue)))), 387cfbf6f34SXuan Hu ExeUnitParams("STD1", Seq(StdCfg, MoudCfg), Seq(), Seq(Seq(IntRD(9, Int.MaxValue), VfRD(13, Int.MaxValue)))), 388141a6449SXuan Hu ), numEntries = 8, pregBits = pregBits, numWakeupFromWB = 16, numEnq = 2), 3894ee69032SzhanglyGit IssueBlockParams(Seq( 390344c8465Sxiaofeibao-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)))), 391344c8465Sxiaofeibao-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)))), 3924ee69032SzhanglyGit ), numEntries = 8, pregBits = pregBits, numWakeupFromWB = 16, numEnq = 2), 3933b739f49SXuan Hu ), 394141a6449SXuan Hu numPregs = intPreg.numEntries max vfPreg.numEntries, 3953b739f49SXuan Hu numRfReadWrite = None, 3963b739f49SXuan Hu numDeqOutside = 0, 3973b739f49SXuan Hu schdType = schdType, 3983b739f49SXuan Hu rfDataWidth = rfDataWidth, 3993b739f49SXuan Hu numUopIn = dpParams.LsDqDeqWidth, 4003b739f49SXuan Hu ) 4013b739f49SXuan Hu } 4022225d46eSJiawei Lin 403bf35baadSXuan Hu def PregIdxWidthMax = intPreg.addrWidth max vfPreg.addrWidth 404bf35baadSXuan Hu 405bf35baadSXuan Hu def iqWakeUpParams = { 406bf35baadSXuan Hu Seq( 407bf35baadSXuan Hu WakeUpConfig("IEX0" -> "IEX0"), 408bf35baadSXuan Hu WakeUpConfig("IEX0" -> "IEX1"), 409bf35baadSXuan Hu WakeUpConfig("IEX1" -> "IEX0"), 410bf35baadSXuan Hu WakeUpConfig("IEX1" -> "IEX1"), 411bf35baadSXuan Hu WakeUpConfig("IEX0" -> "BJU0"), 412bf35baadSXuan Hu WakeUpConfig("IEX0" -> "BJU1"), 413bf35baadSXuan Hu WakeUpConfig("IEX1" -> "BJU0"), 414bf35baadSXuan Hu WakeUpConfig("IEX1" -> "BJU1"), 415bf35baadSXuan Hu WakeUpConfig("IEX0" -> "LDU0"), 416bf35baadSXuan Hu WakeUpConfig("IEX0" -> "LDU1"), 417bf35baadSXuan Hu WakeUpConfig("IEX1" -> "LDU0"), 418bf35baadSXuan Hu WakeUpConfig("IEX1" -> "LDU1"), 419bf35baadSXuan Hu WakeUpConfig("IEX0" -> "STA0"), 420bf35baadSXuan Hu WakeUpConfig("IEX0" -> "STA1"), 421bf35baadSXuan Hu WakeUpConfig("IEX1" -> "STA0"), 422bf35baadSXuan Hu WakeUpConfig("IEX1" -> "STA1"), 423*acb0b98eSXuan Hu WakeUpConfig("IMISC0" -> "FEX0"), 424*acb0b98eSXuan Hu WakeUpConfig("IMISC0" -> "FEX1"), 425*acb0b98eSXuan Hu WakeUpConfig("IMISC0" -> "FEX2"), 426*acb0b98eSXuan Hu WakeUpConfig("IMISC0" -> "FEX3"), 427*acb0b98eSXuan Hu WakeUpConfig("IMISC0" -> "FEX4"), 428cfbf6f34SXuan Hu WakeUpConfig("FEX3" -> "FEX0"), 429cfbf6f34SXuan Hu WakeUpConfig("FEX3" -> "FEX1"), 430cfbf6f34SXuan Hu WakeUpConfig("FEX3" -> "FEX2"), 431cfbf6f34SXuan Hu WakeUpConfig("FEX3" -> "FEX3"), 432bf35baadSXuan Hu ) 433bf35baadSXuan Hu } 434bf35baadSXuan Hu 435bf35baadSXuan Hu def backendParams: BackendParams = backend.BackendParams( 436bf35baadSXuan Hu Map( 4373b739f49SXuan Hu IntScheduler() -> intSchdParams, 4383b739f49SXuan Hu VfScheduler() -> vfSchdParams, 4393b739f49SXuan Hu MemScheduler() -> memSchdParams, 440bf35baadSXuan Hu ), 441bf35baadSXuan Hu Seq( 4423b739f49SXuan Hu intPreg, 4433b739f49SXuan Hu vfPreg, 444bf35baadSXuan Hu ), 445bf35baadSXuan Hu iqWakeUpParams, 446bf35baadSXuan Hu ) 4472225d46eSJiawei Lin} 4482225d46eSJiawei Lin 4492225d46eSJiawei Lincase object DebugOptionsKey extends Field[DebugOptions] 4502225d46eSJiawei Lin 4512225d46eSJiawei Lincase class DebugOptions 4522225d46eSJiawei Lin( 4531545277aSYinan Xu FPGAPlatform: Boolean = false, 4541545277aSYinan Xu EnableDifftest: Boolean = false, 455cbe9a847SYinan Xu AlwaysBasicDiff: Boolean = true, 4561545277aSYinan Xu EnableDebug: Boolean = false, 4572225d46eSJiawei Lin EnablePerfDebug: Boolean = true, 458eb163ef0SHaojin Tang UseDRAMSim: Boolean = false, 459047e34f9SMaxpicca-Li EnableConstantin: Boolean = false, 460eb163ef0SHaojin Tang EnableTopDown: Boolean = false 4612225d46eSJiawei Lin) 4622225d46eSJiawei Lin 4632225d46eSJiawei Lintrait HasXSParameter { 4642225d46eSJiawei Lin 4652225d46eSJiawei Lin implicit val p: Parameters 4662225d46eSJiawei Lin 4672f30d658SYinan Xu val PAddrBits = p(SoCParamsKey).PAddrBits // PAddrBits is Phyical Memory addr bits 4682f30d658SYinan Xu 4692225d46eSJiawei Lin val coreParams = p(XSCoreParamsKey) 4702225d46eSJiawei Lin val env = p(DebugOptionsKey) 4712225d46eSJiawei Lin 4722225d46eSJiawei Lin val XLEN = coreParams.XLEN 473deb6421eSHaojin Tang val VLEN = coreParams.VLEN 474a8db15d8Sfdy val ELEN = coreParams.ELEN 4752225d46eSJiawei Lin val minFLen = 32 4762225d46eSJiawei Lin val fLen = 64 4772225d46eSJiawei Lin def xLen = XLEN 4782225d46eSJiawei Lin 4792225d46eSJiawei Lin val HasMExtension = coreParams.HasMExtension 4802225d46eSJiawei Lin val HasCExtension = coreParams.HasCExtension 4812225d46eSJiawei Lin val HasDiv = coreParams.HasDiv 4822225d46eSJiawei Lin val HasIcache = coreParams.HasICache 4832225d46eSJiawei Lin val HasDcache = coreParams.HasDCache 4842225d46eSJiawei Lin val AddrBits = coreParams.AddrBits // AddrBits is used in some cases 4852225d46eSJiawei Lin val VAddrBits = coreParams.VAddrBits // VAddrBits is Virtual Memory addr bits 48645f497a4Shappy-lx val AsidLength = coreParams.AsidLength 487a760aeb0Shappy-lx val ReSelectLen = coreParams.ReSelectLen 4882225d46eSJiawei Lin val AddrBytes = AddrBits / 8 // unused 4892225d46eSJiawei Lin val DataBits = XLEN 4902225d46eSJiawei Lin val DataBytes = DataBits / 8 4912225d46eSJiawei Lin val HasFPU = coreParams.HasFPU 4920ba52110SZiyue Zhang val HasVPU = coreParams.HasVPU 493ad3ba452Szhanglinjuan val HasCustomCSRCacheOp = coreParams.HasCustomCSRCacheOp 4942225d46eSJiawei Lin val FetchWidth = coreParams.FetchWidth 4952225d46eSJiawei Lin val PredictWidth = FetchWidth * (if (HasCExtension) 2 else 1) 4962225d46eSJiawei Lin val EnableBPU = coreParams.EnableBPU 4972225d46eSJiawei Lin val EnableBPD = coreParams.EnableBPD // enable backing predictor(like Tage) in BPUStage3 4982225d46eSJiawei Lin val EnableRAS = coreParams.EnableRAS 4992225d46eSJiawei Lin val EnableLB = coreParams.EnableLB 5002225d46eSJiawei Lin val EnableLoop = coreParams.EnableLoop 5012225d46eSJiawei Lin val EnableSC = coreParams.EnableSC 5022225d46eSJiawei Lin val EnbaleTlbDebug = coreParams.EnbaleTlbDebug 5032225d46eSJiawei Lin val HistoryLength = coreParams.HistoryLength 50486d9c530SLingrui98 val EnableGHistDiff = coreParams.EnableGHistDiff 505ab0200c8SEaston Man val EnableCommitGHistDiff = coreParams.EnableCommitGHistDiff 506f2aabf0dSLingrui98 val UbtbGHRLength = coreParams.UbtbGHRLength 507b37e4b45SLingrui98 val UbtbSize = coreParams.UbtbSize 50811d0c81dSLingrui98 val EnableFauFTB = coreParams.EnableFauFTB 509b37e4b45SLingrui98 val FtbSize = coreParams.FtbSize 510b37e4b45SLingrui98 val FtbWays = coreParams.FtbWays 5112225d46eSJiawei Lin val RasSize = coreParams.RasSize 51216a1cc4bSzoujr 513bf358e08SLingrui98 def getBPDComponents(resp_in: BranchPredictionResp, p: Parameters) = { 514bf358e08SLingrui98 coreParams.branchPredictor(resp_in, p) 51516a1cc4bSzoujr } 516dd6c0695SLingrui98 val numBr = coreParams.numBr 517dd6c0695SLingrui98 val TageTableInfos = coreParams.TageTableInfos 518cb4f77ceSLingrui98 val TageBanks = coreParams.numBr 519dd6c0695SLingrui98 val SCNRows = coreParams.SCNRows 520dd6c0695SLingrui98 val SCCtrBits = coreParams.SCCtrBits 52134ed6fbcSLingrui98 val SCHistLens = coreParams.SCHistLens 52234ed6fbcSLingrui98 val SCNTables = coreParams.SCNTables 523dd6c0695SLingrui98 52434ed6fbcSLingrui98 val SCTableInfos = Seq.fill(SCNTables)((SCNRows, SCCtrBits)) zip SCHistLens map { 52534ed6fbcSLingrui98 case ((n, cb), h) => (n, cb, h) 526dd6c0695SLingrui98 } 527dd6c0695SLingrui98 val ITTageTableInfos = coreParams.ITTageTableInfos 528dd6c0695SLingrui98 type FoldedHistoryInfo = Tuple2[Int, Int] 529dd6c0695SLingrui98 val foldedGHistInfos = 5304813e060SLingrui98 (TageTableInfos.map{ case (nRows, h, t) => 531dd6c0695SLingrui98 if (h > 0) 5324813e060SLingrui98 Set((h, min(log2Ceil(nRows/numBr), h)), (h, min(h, t)), (h, min(h, t-1))) 533dd6c0695SLingrui98 else 534dd6c0695SLingrui98 Set[FoldedHistoryInfo]() 5354813e060SLingrui98 }.reduce(_++_).toSet ++ 53634ed6fbcSLingrui98 SCTableInfos.map{ case (nRows, _, h) => 537dd6c0695SLingrui98 if (h > 0) 538e992912cSLingrui98 Set((h, min(log2Ceil(nRows/TageBanks), h))) 539dd6c0695SLingrui98 else 540dd6c0695SLingrui98 Set[FoldedHistoryInfo]() 54134ed6fbcSLingrui98 }.reduce(_++_).toSet ++ 542dd6c0695SLingrui98 ITTageTableInfos.map{ case (nRows, h, t) => 543dd6c0695SLingrui98 if (h > 0) 544dd6c0695SLingrui98 Set((h, min(log2Ceil(nRows), h)), (h, min(h, t)), (h, min(h, t-1))) 545dd6c0695SLingrui98 else 546dd6c0695SLingrui98 Set[FoldedHistoryInfo]() 547527dc111SLingrui98 }.reduce(_++_) ++ 548527dc111SLingrui98 Set[FoldedHistoryInfo]((UbtbGHRLength, log2Ceil(UbtbSize))) 549527dc111SLingrui98 ).toList 55016a1cc4bSzoujr 551c7fabd05SSteve Gou 552c7fabd05SSteve Gou 5532225d46eSJiawei Lin val CacheLineSize = coreParams.CacheLineSize 5542225d46eSJiawei Lin val CacheLineHalfWord = CacheLineSize / 16 5552225d46eSJiawei Lin val ExtHistoryLength = HistoryLength + 64 5562225d46eSJiawei Lin val IBufSize = coreParams.IBufSize 5572225d46eSJiawei Lin val DecodeWidth = coreParams.DecodeWidth 5582225d46eSJiawei Lin val RenameWidth = coreParams.RenameWidth 5592225d46eSJiawei Lin val CommitWidth = coreParams.CommitWidth 560d91483a6Sfdy val MaxUopSize = coreParams.MaxUopSize 5612225d46eSJiawei Lin val FtqSize = coreParams.FtqSize 5622225d46eSJiawei Lin val EnableLoadFastWakeUp = coreParams.EnableLoadFastWakeUp 563d91483a6Sfdy val IntLogicRegs = coreParams.IntLogicRegs 564d91483a6Sfdy val FpLogicRegs = coreParams.FpLogicRegs 565d91483a6Sfdy val VecLogicRegs = coreParams.VecLogicRegs 566fe60541bSXuan Hu val VCONFIG_IDX = coreParams.VCONFIG_IDX 5672225d46eSJiawei Lin val NRPhyRegs = coreParams.NRPhyRegs 5682225d46eSJiawei Lin val PhyRegIdxWidth = log2Up(NRPhyRegs) 56973faecdcSXuan Hu val IntPhyRegs = coreParams.IntPhyRegs 57073faecdcSXuan Hu val VfPhyRegs = coreParams.VfPhyRegs 57173faecdcSXuan Hu val IntPregIdxWidth = log2Up(IntPhyRegs) 57273faecdcSXuan Hu val VfPregIdxWidth = log2Up(VfPhyRegs) 5739aca92b9SYinan Xu val RobSize = coreParams.RobSize 574a8db15d8Sfdy val RabSize = coreParams.RabSize 57570224bf6SYinan Xu val IntRefCounterWidth = log2Ceil(RobSize) 576e4f69d78Ssfencevma val VirtualLoadQueueSize = coreParams.VirtualLoadQueueSize 577e4f69d78Ssfencevma val LoadQueueRARSize = coreParams.LoadQueueRARSize 578e4f69d78Ssfencevma val LoadQueueRAWSize = coreParams.LoadQueueRAWSize 579e4f69d78Ssfencevma val RollbackGroupSize = coreParams.RollbackGroupSize 580e4f69d78Ssfencevma val LoadQueueReplaySize = coreParams.LoadQueueReplaySize 581e4f69d78Ssfencevma val LoadUncacheBufferSize = coreParams.LoadUncacheBufferSize 5820a992150SWilliam Wang val LoadQueueNWriteBanks = coreParams.LoadQueueNWriteBanks 5832225d46eSJiawei Lin val StoreQueueSize = coreParams.StoreQueueSize 5840a992150SWilliam Wang val StoreQueueNWriteBanks = coreParams.StoreQueueNWriteBanks 585e4f69d78Ssfencevma val StoreQueueForwardWithMask = coreParams.StoreQueueForwardWithMask 586cea88ff8SWilliam Wang val VlsQueueSize = coreParams.VlsQueueSize 5872225d46eSJiawei Lin val dpParams = coreParams.dpParams 5883b739f49SXuan Hu 5893b739f49SXuan Hu def backendParams: BackendParams = coreParams.backendParams 590351e22f2SXuan Hu def MemIQSizeMax = backendParams.memSchdParams.get.issueBlockParams.map(_.numEntries).max 591351e22f2SXuan Hu def IQSizeMax = backendParams.allSchdParams.map(_.issueBlockParams.map(_.numEntries).max).max 5922225d46eSJiawei Lin val LoadPipelineWidth = coreParams.LoadPipelineWidth 5932225d46eSJiawei Lin val StorePipelineWidth = coreParams.StorePipelineWidth 594cea88ff8SWilliam Wang val VecMemSrcInWidth = coreParams.VecMemSrcInWidth 595cea88ff8SWilliam Wang val VecMemInstWbWidth = coreParams.VecMemInstWbWidth 596cea88ff8SWilliam Wang val VecMemDispatchWidth = coreParams.VecMemDispatchWidth 5972225d46eSJiawei Lin val StoreBufferSize = coreParams.StoreBufferSize 59805f23f57SWilliam Wang val StoreBufferThreshold = coreParams.StoreBufferThreshold 59946f74b57SHaojin Tang val EnsbufferWidth = coreParams.EnsbufferWidth 60037225120Ssfencevma val UncacheBufferSize = coreParams.UncacheBufferSize 60164886eefSWilliam Wang val EnableLoadToLoadForward = coreParams.EnableLoadToLoadForward 6023db2cf75SWilliam Wang val EnableFastForward = coreParams.EnableFastForward 60367682d05SWilliam Wang val EnableLdVioCheckAfterReset = coreParams.EnableLdVioCheckAfterReset 604026615fcSWilliam Wang val EnableSoftPrefetchAfterReset = coreParams.EnableSoftPrefetchAfterReset 605026615fcSWilliam Wang val EnableCacheErrorAfterReset = coreParams.EnableCacheErrorAfterReset 606144422dcSMaxpicca-Li val EnableDCacheWPU = coreParams.EnableDCacheWPU 6076786cfb7SWilliam Wang val EnableAccurateLoadError = coreParams.EnableAccurateLoadError 60837225120Ssfencevma val EnableUncacheWriteOutstanding = coreParams.EnableUncacheWriteOutstanding 60945f497a4Shappy-lx val asidLen = coreParams.MMUAsidLen 610a0301c0dSLemover val BTLBWidth = coreParams.LoadPipelineWidth + coreParams.StorePipelineWidth 611bf08468cSLemover val refillBothTlb = coreParams.refillBothTlb 612a0301c0dSLemover val itlbParams = coreParams.itlbParameters 613a0301c0dSLemover val ldtlbParams = coreParams.ldtlbParameters 614a0301c0dSLemover val sttlbParams = coreParams.sttlbParameters 615c8309e8aSHaoyuan Feng val pftlbParams = coreParams.pftlbParameters 616a0301c0dSLemover val btlbParams = coreParams.btlbParameters 6175854c1edSLemover val l2tlbParams = coreParams.l2tlbParameters 6182225d46eSJiawei Lin val NumPerfCounters = coreParams.NumPerfCounters 6192225d46eSJiawei Lin 6202225d46eSJiawei Lin val instBytes = if (HasCExtension) 2 else 4 6212225d46eSJiawei Lin val instOffsetBits = log2Ceil(instBytes) 6222225d46eSJiawei Lin 62305f23f57SWilliam Wang val icacheParameters = coreParams.icacheParameters 6244f94c0c6SJiawei Lin val dcacheParameters = coreParams.dcacheParametersOpt.getOrElse(DCacheParameters()) 6252225d46eSJiawei Lin 626b899def8SWilliam Wang // dcache block cacheline when lr for LRSCCycles - LRSCBackOff cycles 627b899def8SWilliam Wang // for constrained LR/SC loop 628b899def8SWilliam Wang val LRSCCycles = 64 629b899def8SWilliam Wang // for lr storm 630b899def8SWilliam Wang val LRSCBackOff = 8 6312225d46eSJiawei Lin 6322225d46eSJiawei Lin // cache hierarchy configurations 6332225d46eSJiawei Lin val l1BusDataWidth = 256 6342225d46eSJiawei Lin 635de169c67SWilliam Wang // load violation predict 636de169c67SWilliam Wang val ResetTimeMax2Pow = 20 //1078576 637de169c67SWilliam Wang val ResetTimeMin2Pow = 10 //1024 638de169c67SWilliam Wang // wait table parameters 639de169c67SWilliam Wang val WaitTableSize = 1024 640de169c67SWilliam Wang val MemPredPCWidth = log2Up(WaitTableSize) 641de169c67SWilliam Wang val LWTUse2BitCounter = true 642de169c67SWilliam Wang // store set parameters 643de169c67SWilliam Wang val SSITSize = WaitTableSize 644de169c67SWilliam Wang val LFSTSize = 32 645de169c67SWilliam Wang val SSIDWidth = log2Up(LFSTSize) 646de169c67SWilliam Wang val LFSTWidth = 4 647de169c67SWilliam Wang val StoreSetEnable = true // LWT will be disabled if SS is enabled 648cc4fb544Ssfencevma val LFSTEnable = false 649cc4fb544Ssfencevma 650cd365d4cSrvcoresjw val PCntIncrStep: Int = 6 651cd365d4cSrvcoresjw val numPCntHc: Int = 25 652cd365d4cSrvcoresjw val numPCntPtw: Int = 19 653cd365d4cSrvcoresjw 654cd365d4cSrvcoresjw val numCSRPCntFrontend = 8 655cd365d4cSrvcoresjw val numCSRPCntCtrl = 8 656cd365d4cSrvcoresjw val numCSRPCntLsu = 8 657cd365d4cSrvcoresjw val numCSRPCntHc = 5 658c0be7f33SXuan Hu 659c0be7f33SXuan Hu // source stages of cancel signal to issue queues 660c0be7f33SXuan Hu val cancelStages = Seq("IS", "OG0", "OG1") 6612225d46eSJiawei Lin} 662