Skip to content

Commit

Permalink
refactor(MemBlock): move MemBlock.scala from backend to mem (#4221)
Browse files Browse the repository at this point in the history
  • Loading branch information
cz4e authored Feb 8, 2025
1 parent 981114e commit c590fb3
Show file tree
Hide file tree
Showing 6 changed files with 38 additions and 35 deletions.
5 changes: 3 additions & 2 deletions src/main/scala/xiangshan/XSCore.scala
Original file line number Diff line number Diff line change
Expand Up @@ -27,13 +27,14 @@ import freechips.rocketchip.tile.HasFPUParameters
import system.HasSoCParameter
import utils._
import utility._
import xiangshan.frontend._
import xiangshan.backend._
import xiangshan.backend.fu.PMPRespBundle
import xiangshan.backend.trace.TraceCoreInterface
import xiangshan.mem._
import xiangshan.cache.mmu._
import xiangshan.frontend._
import scala.collection.mutable.ListBuffer
import xiangshan.cache.mmu.TlbRequestIO
import scala.collection.mutable.ListBuffer

abstract class XSModule(implicit val p: Parameters) extends Module
with HasXSParameter
Expand Down
6 changes: 3 additions & 3 deletions src/main/scala/xiangshan/backend/dispatch/Dispatch.scala
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,13 @@ import chisel3.util._
import difftest._
import utils._
import utility._
import xiangshan.ExceptionNO._
import xiangshan._
import xiangshan.backend.MemCoreTopDownIO
import xiangshan.ExceptionNO._
import xiangshan.backend.rob.{RobDispatchTopDownIO, RobEnqIO}
import xiangshan.mem.mdp._
import xiangshan.backend.Bundles.DynInst
import xiangshan.backend.fu.FuType
import xiangshan.mem.mdp._
import xiangshan.mem.MemCoreTopDownIO

case class DispatchParameters
(
Expand Down
10 changes: 5 additions & 5 deletions src/main/scala/xiangshan/backend/dispatch/NewDispatch.scala
Original file line number Diff line number Diff line change
Expand Up @@ -19,18 +19,15 @@ package xiangshan.backend.dispatch
import org.chipsalliance.cde.config.Parameters
import chisel3._
import chisel3.util._
import chisel3.util.experimental.decode._
import freechips.rocketchip.diplomacy.{LazyModule, LazyModuleImp}
import utility._
import xiangshan.ExceptionNO._
import xiangshan._
import xiangshan.backend.MemCoreTopDownIO
import xiangshan.backend.rob.{RobDispatchTopDownIO, RobEnqIO}
import xiangshan.mem.mdp._
import xiangshan.mem.{HasVLSUParameters, _}
import xiangshan.backend.Bundles.{DecodedInst, DynInst, ExuVec, IssueQueueIQWakeUpBundle}
import xiangshan.backend.fu.{FuConfig, FuType}
import xiangshan.backend.rename.BusyTable
import chisel3.util.experimental.decode._
import freechips.rocketchip.diplomacy.{LazyModule, LazyModuleImp}
import xiangshan.backend.fu.{FuConfig, FuType}
import xiangshan.backend.rename.BusyTableReadIO
import xiangshan.backend.datapath.DataConfig._
Expand All @@ -40,6 +37,9 @@ import xiangshan.backend.datapath.WbConfig.VfWB
import xiangshan.backend.fu.FuType.FuTypeOrR
import xiangshan.backend.dispatch.Dispatch2IqFpImp
import xiangshan.backend.regcache.{RCTagTableReadPort, RegCacheTagTable}
import xiangshan.mem.MemCoreTopDownIO
import xiangshan.mem.mdp._
import xiangshan.mem.{HasVLSUParameters, _}


// TODO delete trigger message from frontend to iq
Expand Down
2 changes: 1 addition & 1 deletion src/main/scala/xiangshan/backend/fu/FuConfig.scala
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@ import chisel3._
import utils.EnumUtils.OHEnumeration
import xiangshan.ExceptionNO._
import xiangshan.SelImm
import xiangshan.backend.Std
import xiangshan.backend.fu.fpu.{IntToFP, IntFPToVec}
import xiangshan.backend.fu.wrapper._
import xiangshan.backend.Bundles.ExuInput
import xiangshan.backend.datapath.DataConfig._
import xiangshan.mem.Std

/**
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
* See the Mulan PSL v2 for more details.
***************************************************************************************/

package xiangshan.backend
package xiangshan.mem

import org.chipsalliance.cde.config.Parameters
import chisel3._
Expand All @@ -24,29 +24,31 @@ import freechips.rocketchip.diplomacy.{BundleBridgeSource, LazyModule, LazyModul
import freechips.rocketchip.interrupts.{IntSinkNode, IntSinkPortSimple}
import freechips.rocketchip.tile.HasFPUParameters
import freechips.rocketchip.tilelink._
import coupledL2.{PrefetchRecv}
import device.MsiInfoBundle
import utils._
import utility._
import system.SoCParamsKey
import xiangshan._
import xiangshan.ExceptionNO._
import xiangshan.frontend.HasInstrMMIOConst
import xiangshan.backend.Bundles.{DynInst, MemExuInput, MemExuOutput}
import xiangshan.backend.ctrlblock.{DebugLSIO, LsTopdownInfo}
import xiangshan.backend.exu.MemExeUnit
import xiangshan.backend.fu._
import xiangshan.backend.fu.FuType._
import xiangshan.backend.rob.{RobDebugRollingIO, RobPtr}
import xiangshan.backend.fu.util.{HasCSRConst, SdtrigExt}
import xiangshan.cache._
import xiangshan.cache.mmu._
import xiangshan.backend.{BackendToTopBundle, TopToBackendBundle}
import xiangshan.backend.rob.{RobDebugRollingIO, RobPtr, RobLsqIO}
import xiangshan.backend.datapath.NewPipelineConnect
import xiangshan.backend.fu.NewCSR.{CsrTriggerBundle, TriggerUtil}
import xiangshan.backend.trace.{Itype, TraceCoreInterface}
import xiangshan.backend.Bundles._
import xiangshan.mem._
import xiangshan.mem.mdp._
import xiangshan.frontend.HasInstrMMIOConst
import xiangshan.mem.prefetch.{BasePrefecher, L1Prefetcher, SMSParams, SMSPrefetcher}
import xiangshan.backend.datapath.NewPipelineConnect
import system.SoCParamsKey
import xiangshan.backend.fu.NewCSR.TriggerUtil
import xiangshan.ExceptionNO._
import xiangshan.backend.trace.{Itype, TraceCoreInterface}
import xiangshan.cache._
import xiangshan.cache.mmu._
import coupledL2.{PrefetchRecv}

trait HasMemBlockParameters extends HasXSParameter {
// number of memory units
Expand Down
26 changes: 13 additions & 13 deletions src/main/scala/xiangshan/mem/lsqueue/LoadQueueUncache.scala
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ import utility._
import xiangshan.backend.Bundles
import xiangshan.backend.Bundles.{DynInst, MemExuOutput}
import xiangshan.backend.fu.FuConfig.LduCfg
import xiangshan.backend.HasMemBlockParameters
import xiangshan.mem.HasMemBlockParameters

class UncacheEntry(entryIndex: Int)(implicit p: Parameters) extends XSModule
with HasCircularQueuePtrHelper
Expand Down Expand Up @@ -69,13 +69,13 @@ class UncacheEntry(entryIndex: Int)(implicit p: Parameters) extends XSModule
val uncacheState = RegInit(s_idle)
val uncacheData = Reg(io.uncache.resp.bits.data.cloneType)
val nderr = RegInit(false.B)

val writeback = Mux(req.nc, io.ncOut.fire, io.mmioOut.fire)
val slaveAck = req_valid && io.uncache.idResp.valid && io.uncache.idResp.bits.mid === entryIndex.U

/**
* Flush
*
*
* 1. direct flush during idle
* 2. otherwise delayed flush until receiving uncache resp
*/
Expand Down Expand Up @@ -289,7 +289,7 @@ class LoadQueueUncache(implicit p: Parameters) extends XSModule
// exception generated by outer bus
val exception = Valid(new LqWriteBundle)
})

/******************************************************************
* Structure
******************************************************************/
Expand Down Expand Up @@ -331,13 +331,13 @@ class LoadQueueUncache(implicit p: Parameters) extends XSModule

/******************************************************************
* Enqueue
*
*
* s1: hold
* s2: confirm enqueue and write entry
* valid: no redirect, no exception, no replay, is mmio/nc
* ready: freelist can allocate
******************************************************************/

val s1_sortedVec = HwSort(VecInit(io.req.map { case x => DataWithPtr(x.valid, x.bits, x.bits.uop.robIdx) }))
val s1_req = VecInit(s1_sortedVec.map(_.bits))
val s1_valid = VecInit(s1_sortedVec.map(_.valid))
Expand Down Expand Up @@ -381,17 +381,17 @@ class LoadQueueUncache(implicit p: Parameters) extends XSModule

/******************************************************************
* Uncache Transaction
*
*
* 1. uncache req
* 2. uncache resp
* 3. writeback
******************************************************************/
private val NC_WB_MOD = NCWBPorts.length

val uncacheReq = Wire(DecoupledIO(io.uncache.req.bits.cloneType))
val mmioSelect = entries.map(e => e.io.mmioSelect).reduce(_ || _)
val mmioReq = Wire(DecoupledIO(io.uncache.req.bits.cloneType))
// TODO lyq: It's best to choose in robIdx order / the order in which they enter
// TODO lyq: It's best to choose in robIdx order / the order in which they enter
val ncReqArb = Module(new RRArbiterInit(io.uncache.req.bits.cloneType, LoadUncacheBufferSize))

val mmioOut = Wire(DecoupledIO(io.mmioOut(0).bits.cloneType))
Expand Down Expand Up @@ -523,16 +523,16 @@ class LoadQueueUncache(implicit p: Parameters) extends XSModule

/******************************************************************
* Uncache rollback detection
*
*
* When uncache loads enqueue, it searches uncache loads, They can not enqueue and need re-execution.
*
*
* Cycle 0: uncache enqueue.
* Cycle 1: Select oldest uncache loads.
* Cycle 2: Redirect Fire.
* Choose the oldest load from LoadPipelineWidth oldest loads.
* Prepare redirect request according to the detected rejection.
* Fire redirect request (if valid)
*
*
* Load_S3 .... Load_S3
* stage 0: lq lq
* | | (can not enqueue)
Expand All @@ -543,7 +543,7 @@ class LoadQueueUncache(implicit p: Parameters) extends XSModule
* stage 2: lq
* |
* rollback req
*
*
******************************************************************/
def selectOldestRedirect(xs: Seq[Valid[Redirect]]): Vec[Bool] = {
val compareVec = (0 until xs.length).map(i => (0 until i).map(j => isAfter(xs(j).bits.robIdx, xs(i).bits.robIdx)))
Expand Down

0 comments on commit c590fb3

Please sign in to comment.