xref: /XiangShan/src/main/scala/xiangshan/backend/ctrlblock/MemCtrl.scala (revision 9477429f7dc92dfd72de3908b8e953de2886a01d)
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