xref: /XiangShan/src/main/scala/system/SoC.scala (revision 222e17e50aa21acebeceb8af532f5dd71b048eda)
1006e1884SZihao Yupackage system
2006e1884SZihao Yu
33e586e47Slinjiaweiimport chipsalliance.rocketchip.config.Parameters
43e586e47Slinjiaweiimport device.{AXI4Timer, TLTimer}
5006e1884SZihao Yuimport chisel3._
6096ea47eSzhanglinjuanimport chisel3.util._
73e586e47Slinjiaweiimport freechips.rocketchip.diplomacy.{AddressSet, LazyModule, LazyModuleImp}
83e586e47Slinjiaweiimport freechips.rocketchip.tilelink.{TLFuzzer, TLIdentityNode, TLXbar}
97d5ddbe6SLinJiaweiimport xiangshan.{HasXSParameter, XSCore}
10a428082bSLinJiawei
11a428082bSLinJiawei
12a428082bSLinJiaweicase class SoCParameters
13a428082bSLinJiawei(
14a428082bSLinJiawei  EnableILA: Boolean = false,
15a428082bSLinJiawei  HasL2Cache: Boolean = false,
16a428082bSLinJiawei  HasPrefetch: Boolean = false
17a428082bSLinJiawei)
18006e1884SZihao Yu
197d5ddbe6SLinJiaweitrait HasSoCParameter extends HasXSParameter{
203e586e47Slinjiawei  val soc = top.Parameters.get.socParameters
21a428082bSLinJiawei  val EnableILA = soc.EnableILA
22a428082bSLinJiawei  val HasL2cache = soc.HasL2Cache
23a428082bSLinJiawei  val HasPrefetch = soc.HasPrefetch
24303b861dSZihao Yu}
25303b861dSZihao Yu
261e3fad10SLinJiaweiclass ILABundle extends Bundle {}
27303b861dSZihao Yu
283e586e47Slinjiawei
293e586e47Slinjiaweiclass DummyCore()(implicit p: Parameters) extends LazyModule {
303e586e47Slinjiawei  val mem = TLFuzzer(nOperations = 10)
313e586e47Slinjiawei  val mmio = TLFuzzer(nOperations = 10)
323e586e47Slinjiawei
333e586e47Slinjiawei  lazy val module = new LazyModuleImp(this){
343e586e47Slinjiawei
353e586e47Slinjiawei  }
363e586e47Slinjiawei}
373e586e47Slinjiawei
383e586e47Slinjiawei
393e586e47Slinjiaweiclass XSSoc()(implicit p: Parameters) extends LazyModule with HasSoCParameter {
403e586e47Slinjiawei
41*222e17e5Slinjiawei  private val xsCore = LazyModule(new XSCore())
423e586e47Slinjiawei
433e586e47Slinjiawei  // only mem and extDev visible externally
443e586e47Slinjiawei  val mem = xsCore.mem
453e586e47Slinjiawei  val extDev = TLIdentityNode()
463e586e47Slinjiawei
473e586e47Slinjiawei  private val mmioXbar = TLXbar()
483e586e47Slinjiawei  private val clint = LazyModule(new TLTimer(
493e586e47Slinjiawei    Seq(AddressSet(0x38000000L, 0x0000ffffL)),
503e586e47Slinjiawei    sim = !env.FPGAPlatform
513e586e47Slinjiawei  ))
523e586e47Slinjiawei
533e586e47Slinjiawei  mmioXbar := xsCore.mmio
543e586e47Slinjiawei  clint.node := mmioXbar
553e586e47Slinjiawei  extDev := mmioXbar
563e586e47Slinjiawei
573e586e47Slinjiawei  lazy val module = new LazyModuleImp(this){
58006e1884SZihao Yu    val io = IO(new Bundle{
59466eb0a8SZihao Yu      val meip = Input(Bool())
60a428082bSLinJiawei      val ila = if(env.FPGAPlatform && EnableILA) Some(Output(new ILABundle)) else None
61006e1884SZihao Yu    })
623e586e47Slinjiawei    val mtipSync = WireInit(0.U(1.W)) //clint.module.mtip
63466eb0a8SZihao Yu    val meipSync = RegNext(RegNext(io.meip))
647d5ddbe6SLinJiawei    ExcitingUtils.addSource(mtipSync, "mtip")
657d5ddbe6SLinJiawei    ExcitingUtils.addSource(meipSync, "meip")
66006e1884SZihao Yu  }
673e586e47Slinjiawei
683e586e47Slinjiawei}
693e586e47Slinjiawei
703e586e47Slinjiawei
713e586e47Slinjiawei//class XSSoc extends Module with HasSoCParameter {
723e586e47Slinjiawei//  val io = IO(new Bundle{
733e586e47Slinjiawei//    val mem = new TLCached(l1BusParams)
743e586e47Slinjiawei//    val mmio = new TLCached(l1BusParams)
753e586e47Slinjiawei//    val frontend = Flipped(new AXI4) //TODO: do we need it ?
763e586e47Slinjiawei//    val meip = Input(Bool())
773e586e47Slinjiawei//    val ila = if (env.FPGAPlatform && EnableILA) Some(Output(new ILABundle)) else None
783e586e47Slinjiawei//  })
793e586e47Slinjiawei//
803e586e47Slinjiawei//  val xsCore = Module(new XSCore)
813e586e47Slinjiawei//
823e586e47Slinjiawei//  io.frontend <> DontCare
833e586e47Slinjiawei//
843e586e47Slinjiawei//  io.mem <> xsCore.io.mem
853e586e47Slinjiawei//
863e586e47Slinjiawei//  val addrSpace = List(
873e586e47Slinjiawei//    (0x40000000L, 0x40000000L), // external devices
883e586e47Slinjiawei//    (0x38000000L, 0x00010000L)  // CLINT
893e586e47Slinjiawei//  )
903e586e47Slinjiawei//  val mmioXbar = Module(new NaiveTL1toN(addrSpace, xsCore.io.mem.params))
913e586e47Slinjiawei//  mmioXbar.io.in <> xsCore.io.mmio
923e586e47Slinjiawei//
933e586e47Slinjiawei//  val extDev = mmioXbar.io.out(0)
943e586e47Slinjiawei//  val clint = Module(new AXI4Timer(sim = !env.FPGAPlatform))
953e586e47Slinjiawei//  clint.io.in <> AXI4ToAXI4Lite(MMIOTLToAXI4(mmioXbar.io.out(1)))
963e586e47Slinjiawei//
973e586e47Slinjiawei//  io.mmio <> extDev
983e586e47Slinjiawei//
993e586e47Slinjiawei//  val mtipSync = clint.io.extra.get.mtip
1003e586e47Slinjiawei//  val meipSync = RegNext(RegNext(io.meip))
1013e586e47Slinjiawei//  ExcitingUtils.addSource(mtipSync, "mtip")
1023e586e47Slinjiawei//  ExcitingUtils.addSource(meipSync, "meip")
1033e586e47Slinjiawei//}
104