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