提交 f769a1e2 编写于 作者: W William Wang

RS: store rs now supports delayed issue

上级 c89ea98a
...@@ -283,6 +283,9 @@ class MemBlockImp(outer: MemBlock) extends LazyModuleImp(outer) ...@@ -283,6 +283,9 @@ class MemBlockImp(outer: MemBlock) extends LazyModuleImp(outer)
stu.io.stin <> rs.io.deq stu.io.stin <> rs.io.deq
stu.io.lsq <> lsq.io.storeIn(i) stu.io.lsq <> lsq.io.storeIn(i)
// Lsq to load unit's rs
rs.io.stIssuePtr := lsq.io.issuePtrExt
// sync issue info to rs // sync issue info to rs
lsq.io.storeIssue(i).valid := rs.io.deq.valid lsq.io.storeIssue(i).valid := rs.io.deq.valid
lsq.io.storeIssue(i).bits := rs.io.deq.bits lsq.io.storeIssue(i).bits := rs.io.deq.bits
......
...@@ -105,7 +105,7 @@ class ReservationStation ...@@ -105,7 +105,7 @@ class ReservationStation
val deq = DecoupledIO(new ExuInput) val deq = DecoupledIO(new ExuInput)
val srcRegValue = Input(Vec(srcNum, UInt(srcLen.W))) val srcRegValue = Input(Vec(srcNum, UInt(srcLen.W)))
val stIssuePtr = if (exuCfg == Exu.ldExeUnitCfg) Input(new SqPtr()) else null val stIssuePtr = if (exuCfg == Exu.ldExeUnitCfg || exuCfg == Exu.stExeUnitCfg) Input(new SqPtr()) else null
val fpRegValue = if (exuCfg == Exu.stExeUnitCfg) Input(UInt(srcLen.W)) else null val fpRegValue = if (exuCfg == Exu.stExeUnitCfg) Input(UInt(srcLen.W)) else null
val jumpPc = if(exuCfg == Exu.jumpExeUnitCfg) Input(UInt(VAddrBits.W)) else null val jumpPc = if(exuCfg == Exu.jumpExeUnitCfg) Input(UInt(VAddrBits.W)) else null
...@@ -160,7 +160,7 @@ class ReservationStation ...@@ -160,7 +160,7 @@ class ReservationStation
c.valid := i.valid c.valid := i.valid
c.bits := i.bits.uop c.bits := i.bits.uop
} }
if (exuCfg == Exu.ldExeUnitCfg) { if (exuCfg == Exu.ldExeUnitCfg || exuCfg == Exu.stExeUnitCfg) {
ctrl.io.stIssuePtr := RegNext(io.stIssuePtr) ctrl.io.stIssuePtr := RegNext(io.stIssuePtr)
} }
...@@ -476,7 +476,7 @@ class ReservationStationCtrl ...@@ -476,7 +476,7 @@ class ReservationStationCtrl
val listen = Output(Vec(srcNum, Vec(iqSize, Vec(fastPortsCnt + slowPortsCnt, Bool())))) val listen = Output(Vec(srcNum, Vec(iqSize, Vec(fastPortsCnt + slowPortsCnt, Bool()))))
val enqSrcReady = Output(Vec(srcNum, Bool())) val enqSrcReady = Output(Vec(srcNum, Bool()))
val stIssuePtr = if (exuCfg == Exu.ldExeUnitCfg) Input(new SqPtr()) else null val stIssuePtr = if (exuCfg == Exu.ldExeUnitCfg || exuCfg == Exu.stExeUnitCfg) Input(new SqPtr()) else null
}) })
val selValid = io.sel.valid val selValid = io.sel.valid
...@@ -547,7 +547,7 @@ class ReservationStationCtrl ...@@ -547,7 +547,7 @@ class ReservationStationCtrl
// load wait store // load wait store
io.readyVec := srcQueueWire.map(Cat(_).andR) io.readyVec := srcQueueWire.map(Cat(_).andR)
if (exuCfg == Exu.ldExeUnitCfg) { if (exuCfg == Exu.ldExeUnitCfg || exuCfg == Exu.stExeUnitCfg) {
val ldWait = Reg(Vec(iqSize, Bool())) val ldWait = Reg(Vec(iqSize, Bool()))
val sqIdx = Reg(Vec(iqSize, new SqPtr())) val sqIdx = Reg(Vec(iqSize, new SqPtr()))
ldWait.zip(sqIdx).map{ case (lw, sq) => ldWait.zip(sqIdx).map{ case (lw, sq) =>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册