13b739f49SXuan Hupackage xiangshan.backend.ctrlblock 23b739f49SXuan Hu 383ba63b3SXuan Huimport org.chipsalliance.cde.config.Parameters 43b739f49SXuan Huimport chisel3.util.ValidIO 53b739f49SXuan Huimport chisel3._ 6730cfbc0SXuan Huimport xiangshan.backend.BackendParams 73b739f49SXuan Huimport xiangshan.{CustomCSRCtrlIO, MemPredUpdateReq, Redirect, XSBundle, XSModule} 83b739f49SXuan Huimport xiangshan.mem.mdp.{DispatchLFSTIO, LFST, SSIT, SSITEntry, WaitTable} 9730cfbc0SXuan Huimport xiangshan.backend.Bundles.DynInst 103b739f49SXuan Hu 113b739f49SXuan Huclass MemCtrl(params: BackendParams)(implicit p: Parameters) extends XSModule { 123b739f49SXuan Hu val io = IO(new MemCtrlIO(params)) 133b739f49SXuan Hu 143b739f49SXuan Hu private val ssit = Module(new SSIT) 153b739f49SXuan Hu private val waittable = Module(new WaitTable) 163b739f49SXuan Hu private val lfst = Module(new LFST) 173b739f49SXuan Hu ssit.io.update <> RegNext(io.memPredUpdate) 183b739f49SXuan Hu waittable.io.update <> RegNext(io.memPredUpdate) 193b739f49SXuan Hu ssit.io.csrCtrl := RegNext(io.csrCtrl) 203b739f49SXuan Hu waittable.io.csrCtrl := RegNext(io.csrCtrl) 213b739f49SXuan Hu 223b739f49SXuan Hu for (i <- 0 until RenameWidth) { 23*9477429fSsinceforYy ssit.io.ren(i) := io.mdpFoldPcVecVld(i) 243b739f49SXuan Hu ssit.io.raddr(i) := io.mdpFlodPcVec(i) 253b739f49SXuan Hu waittable.io.raddr(i) := io.mdpFlodPcVec(i) 263b739f49SXuan Hu } 273b739f49SXuan Hu lfst.io.redirect <> RegNext(io.redirect) 283b739f49SXuan Hu lfst.io.storeIssue <> RegNext(io.stIn) 293b739f49SXuan Hu lfst.io.csrCtrl <> RegNext(io.csrCtrl) 303b739f49SXuan Hu lfst.io.dispatch <> io.dispatchLFSTio 313b739f49SXuan Hu 323b739f49SXuan Hu io.waitTable2Rename := waittable.io.rdata 333b739f49SXuan Hu io.ssit2Rename := ssit.io.rdata 343b739f49SXuan Hu} 353b739f49SXuan Hu 363b739f49SXuan Huclass MemCtrlIO(params: BackendParams)(implicit p: Parameters) extends XSBundle { 373b739f49SXuan Hu val redirect = Flipped(ValidIO(new Redirect)) 383b739f49SXuan Hu val csrCtrl = Input(new CustomCSRCtrlIO) 39272ec6b1SHaojin Tang val stIn = Vec(params.StaExuCnt, Flipped(ValidIO(new DynInst))) // use storeSetHit, ssid, robIdx 403b739f49SXuan Hu val memPredUpdate = Input(new MemPredUpdateReq) 41*9477429fSsinceforYy val mdpFoldPcVecVld = Input(Vec(DecodeWidth, Bool())) 423b739f49SXuan Hu val mdpFlodPcVec = Input(Vec(DecodeWidth, UInt(MemPredPCWidth.W))) 433b739f49SXuan Hu val dispatchLFSTio = Flipped(new DispatchLFSTIO) 443b739f49SXuan Hu val waitTable2Rename = Vec(DecodeWidth, Output(Bool())) // loadWaitBit 453b739f49SXuan Hu val ssit2Rename = Vec(RenameWidth, Output(new SSITEntry)) // ssit read result 463b739f49SXuan Hu} 47