xref: /XiangShan/src/main/scala/xiangshan/backend/ctrlblock/MemCtrl.scala (revision 9477429f7dc92dfd72de3908b8e953de2886a01d)
1package xiangshan.backend.ctrlblock
2
3import org.chipsalliance.cde.config.Parameters
4import chisel3.util.ValidIO
5import chisel3._
6import xiangshan.backend.BackendParams
7import xiangshan.{CustomCSRCtrlIO, MemPredUpdateReq, Redirect, XSBundle, XSModule}
8import xiangshan.mem.mdp.{DispatchLFSTIO, LFST, SSIT, SSITEntry, WaitTable}
9import xiangshan.backend.Bundles.DynInst
10
11class MemCtrl(params: BackendParams)(implicit p: Parameters) extends XSModule {
12  val io = IO(new MemCtrlIO(params))
13
14  private val ssit = Module(new SSIT)
15  private val waittable = Module(new WaitTable)
16  private val lfst = Module(new LFST)
17  ssit.io.update <> RegNext(io.memPredUpdate)
18  waittable.io.update <> RegNext(io.memPredUpdate)
19  ssit.io.csrCtrl := RegNext(io.csrCtrl)
20  waittable.io.csrCtrl := RegNext(io.csrCtrl)
21
22  for (i <- 0 until RenameWidth) {
23    ssit.io.ren(i) := io.mdpFoldPcVecVld(i)
24    ssit.io.raddr(i) := io.mdpFlodPcVec(i)
25    waittable.io.raddr(i) := io.mdpFlodPcVec(i)
26  }
27  lfst.io.redirect <> RegNext(io.redirect)
28  lfst.io.storeIssue <> RegNext(io.stIn)
29  lfst.io.csrCtrl <> RegNext(io.csrCtrl)
30  lfst.io.dispatch <> io.dispatchLFSTio
31
32  io.waitTable2Rename := waittable.io.rdata
33  io.ssit2Rename := ssit.io.rdata
34}
35
36class MemCtrlIO(params: BackendParams)(implicit p: Parameters) extends XSBundle {
37  val redirect = Flipped(ValidIO(new Redirect))
38  val csrCtrl = Input(new CustomCSRCtrlIO)
39  val stIn = Vec(params.StaExuCnt, Flipped(ValidIO(new DynInst))) // use storeSetHit, ssid, robIdx
40  val memPredUpdate = Input(new MemPredUpdateReq)
41  val mdpFoldPcVecVld = Input(Vec(DecodeWidth, Bool()))
42  val mdpFlodPcVec = Input(Vec(DecodeWidth, UInt(MemPredPCWidth.W)))
43  val dispatchLFSTio = Flipped(new DispatchLFSTIO)
44  val waitTable2Rename = Vec(DecodeWidth, Output(Bool()))   // loadWaitBit
45  val ssit2Rename = Vec(RenameWidth, Output(new SSITEntry)) // ssit read result
46}
47