1006e1884SZihao Yupackage system 2006e1884SZihao Yu 3*3e586e47Slinjiaweiimport chipsalliance.rocketchip.config.Parameters 4*3e586e47Slinjiaweiimport device.{AXI4Timer, TLTimer} 5006e1884SZihao Yuimport chisel3._ 6096ea47eSzhanglinjuanimport chisel3.util._ 7*3e586e47Slinjiaweiimport freechips.rocketchip.diplomacy.{AddressSet, LazyModule, LazyModuleImp} 8*3e586e47Slinjiaweiimport 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{ 20*3e586e47Slinjiawei 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 28*3e586e47Slinjiawei 29*3e586e47Slinjiaweiclass DummyCore()(implicit p: Parameters) extends LazyModule { 30*3e586e47Slinjiawei val mem = TLFuzzer(nOperations = 10) 31*3e586e47Slinjiawei val mmio = TLFuzzer(nOperations = 10) 32*3e586e47Slinjiawei 33*3e586e47Slinjiawei lazy val module = new LazyModuleImp(this){ 34*3e586e47Slinjiawei 35*3e586e47Slinjiawei } 36*3e586e47Slinjiawei} 37*3e586e47Slinjiawei 38*3e586e47Slinjiawei 39*3e586e47Slinjiaweiclass XSSoc()(implicit p: Parameters) extends LazyModule with HasSoCParameter { 40*3e586e47Slinjiawei 41*3e586e47Slinjiawei private val xsCore = LazyModule(new DummyCore()) 42*3e586e47Slinjiawei 43*3e586e47Slinjiawei // only mem and extDev visible externally 44*3e586e47Slinjiawei val mem = xsCore.mem 45*3e586e47Slinjiawei val extDev = TLIdentityNode() 46*3e586e47Slinjiawei 47*3e586e47Slinjiawei private val mmioXbar = TLXbar() 48*3e586e47Slinjiawei private val clint = LazyModule(new TLTimer( 49*3e586e47Slinjiawei Seq(AddressSet(0x38000000L, 0x0000ffffL)), 50*3e586e47Slinjiawei sim = !env.FPGAPlatform 51*3e586e47Slinjiawei )) 52*3e586e47Slinjiawei 53*3e586e47Slinjiawei mmioXbar := xsCore.mmio 54*3e586e47Slinjiawei clint.node := mmioXbar 55*3e586e47Slinjiawei extDev := mmioXbar 56*3e586e47Slinjiawei 57*3e586e47Slinjiawei 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 }) 62*3e586e47Slinjiawei 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 } 67*3e586e47Slinjiawei 68*3e586e47Slinjiawei} 69*3e586e47Slinjiawei 70*3e586e47Slinjiawei 71*3e586e47Slinjiawei//class XSSoc extends Module with HasSoCParameter { 72*3e586e47Slinjiawei// val io = IO(new Bundle{ 73*3e586e47Slinjiawei// val mem = new TLCached(l1BusParams) 74*3e586e47Slinjiawei// val mmio = new TLCached(l1BusParams) 75*3e586e47Slinjiawei// val frontend = Flipped(new AXI4) //TODO: do we need it ? 76*3e586e47Slinjiawei// val meip = Input(Bool()) 77*3e586e47Slinjiawei// val ila = if (env.FPGAPlatform && EnableILA) Some(Output(new ILABundle)) else None 78*3e586e47Slinjiawei// }) 79*3e586e47Slinjiawei// 80*3e586e47Slinjiawei// val xsCore = Module(new XSCore) 81*3e586e47Slinjiawei// 82*3e586e47Slinjiawei// io.frontend <> DontCare 83*3e586e47Slinjiawei// 84*3e586e47Slinjiawei// io.mem <> xsCore.io.mem 85*3e586e47Slinjiawei// 86*3e586e47Slinjiawei// val addrSpace = List( 87*3e586e47Slinjiawei// (0x40000000L, 0x40000000L), // external devices 88*3e586e47Slinjiawei// (0x38000000L, 0x00010000L) // CLINT 89*3e586e47Slinjiawei// ) 90*3e586e47Slinjiawei// val mmioXbar = Module(new NaiveTL1toN(addrSpace, xsCore.io.mem.params)) 91*3e586e47Slinjiawei// mmioXbar.io.in <> xsCore.io.mmio 92*3e586e47Slinjiawei// 93*3e586e47Slinjiawei// val extDev = mmioXbar.io.out(0) 94*3e586e47Slinjiawei// val clint = Module(new AXI4Timer(sim = !env.FPGAPlatform)) 95*3e586e47Slinjiawei// clint.io.in <> AXI4ToAXI4Lite(MMIOTLToAXI4(mmioXbar.io.out(1))) 96*3e586e47Slinjiawei// 97*3e586e47Slinjiawei// io.mmio <> extDev 98*3e586e47Slinjiawei// 99*3e586e47Slinjiawei// val mtipSync = clint.io.extra.get.mtip 100*3e586e47Slinjiawei// val meipSync = RegNext(RegNext(io.meip)) 101*3e586e47Slinjiawei// ExcitingUtils.addSource(mtipSync, "mtip") 102*3e586e47Slinjiawei// ExcitingUtils.addSource(meipSync, "meip") 103*3e586e47Slinjiawei//} 104