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} 81865a66fSlinjiaweiimport freechips.rocketchip.tilelink.{TLBuffer, TLFuzzer, TLIdentityNode, TLXbar} 91865a66fSlinjiaweiimport utils.DebugIdentityNode 107d5ddbe6SLinJiaweiimport xiangshan.{HasXSParameter, XSCore} 11a428082bSLinJiawei 12a428082bSLinJiawei 13a428082bSLinJiaweicase class SoCParameters 14a428082bSLinJiawei( 15a428082bSLinJiawei EnableILA: Boolean = false, 16a428082bSLinJiawei HasL2Cache: Boolean = false, 17a428082bSLinJiawei HasPrefetch: Boolean = false 18a428082bSLinJiawei) 19006e1884SZihao Yu 207d5ddbe6SLinJiaweitrait HasSoCParameter extends HasXSParameter{ 213e586e47Slinjiawei val soc = top.Parameters.get.socParameters 22a428082bSLinJiawei val EnableILA = soc.EnableILA 23a428082bSLinJiawei val HasL2cache = soc.HasL2Cache 24a428082bSLinJiawei val HasPrefetch = soc.HasPrefetch 25303b861dSZihao Yu} 26303b861dSZihao Yu 271e3fad10SLinJiaweiclass ILABundle extends Bundle {} 28303b861dSZihao Yu 293e586e47Slinjiawei 303e586e47Slinjiaweiclass DummyCore()(implicit p: Parameters) extends LazyModule { 313e586e47Slinjiawei val mem = TLFuzzer(nOperations = 10) 323e586e47Slinjiawei val mmio = TLFuzzer(nOperations = 10) 333e586e47Slinjiawei 343e586e47Slinjiawei lazy val module = new LazyModuleImp(this){ 353e586e47Slinjiawei 363e586e47Slinjiawei } 373e586e47Slinjiawei} 383e586e47Slinjiawei 393e586e47Slinjiawei 403e586e47Slinjiaweiclass XSSoc()(implicit p: Parameters) extends LazyModule with HasSoCParameter { 413e586e47Slinjiawei 42222e17e5Slinjiawei private val xsCore = LazyModule(new XSCore()) 433e586e47Slinjiawei 443e586e47Slinjiawei // only mem and extDev visible externally 453e586e47Slinjiawei val mem = xsCore.mem 46*d709d2f8SAllen val dma = xsCore.dma 473e586e47Slinjiawei val extDev = TLIdentityNode() 483e586e47Slinjiawei 493e586e47Slinjiawei private val mmioXbar = TLXbar() 503e586e47Slinjiawei private val clint = LazyModule(new TLTimer( 513e586e47Slinjiawei Seq(AddressSet(0x38000000L, 0x0000ffffL)), 523e586e47Slinjiawei sim = !env.FPGAPlatform 533e586e47Slinjiawei )) 543e586e47Slinjiawei 551865a66fSlinjiawei mmioXbar := 561865a66fSlinjiawei TLBuffer() := 571865a66fSlinjiawei DebugIdentityNode() := 581865a66fSlinjiawei xsCore.mmio 591865a66fSlinjiawei 601865a66fSlinjiawei clint.node := 611865a66fSlinjiawei mmioXbar 621865a66fSlinjiawei 631865a66fSlinjiawei extDev := 641865a66fSlinjiawei mmioXbar 653e586e47Slinjiawei 663e586e47Slinjiawei lazy val module = new LazyModuleImp(this){ 67006e1884SZihao Yu val io = IO(new Bundle{ 68466eb0a8SZihao Yu val meip = Input(Bool()) 69a428082bSLinJiawei val ila = if(env.FPGAPlatform && EnableILA) Some(Output(new ILABundle)) else None 70006e1884SZihao Yu }) 7135bfeecbSYinan Xu xsCore.module.io.externalInterrupt.mtip := clint.module.io.mtip 7235bfeecbSYinan Xu xsCore.module.io.externalInterrupt.msip := clint.module.io.msip 7335bfeecbSYinan Xu xsCore.module.io.externalInterrupt.meip := RegNext(RegNext(io.meip)) 74006e1884SZihao Yu } 753e586e47Slinjiawei 763e586e47Slinjiawei} 773e586e47Slinjiawei 783e586e47Slinjiawei 793e586e47Slinjiawei//class XSSoc extends Module with HasSoCParameter { 803e586e47Slinjiawei// val io = IO(new Bundle{ 813e586e47Slinjiawei// val mem = new TLCached(l1BusParams) 823e586e47Slinjiawei// val mmio = new TLCached(l1BusParams) 833e586e47Slinjiawei// val frontend = Flipped(new AXI4) //TODO: do we need it ? 843e586e47Slinjiawei// val meip = Input(Bool()) 853e586e47Slinjiawei// val ila = if (env.FPGAPlatform && EnableILA) Some(Output(new ILABundle)) else None 863e586e47Slinjiawei// }) 873e586e47Slinjiawei// 883e586e47Slinjiawei// val xsCore = Module(new XSCore) 893e586e47Slinjiawei// 903e586e47Slinjiawei// io.frontend <> DontCare 913e586e47Slinjiawei// 923e586e47Slinjiawei// io.mem <> xsCore.io.mem 933e586e47Slinjiawei// 943e586e47Slinjiawei// val addrSpace = List( 953e586e47Slinjiawei// (0x40000000L, 0x40000000L), // external devices 963e586e47Slinjiawei// (0x38000000L, 0x00010000L) // CLINT 973e586e47Slinjiawei// ) 983e586e47Slinjiawei// val mmioXbar = Module(new NaiveTL1toN(addrSpace, xsCore.io.mem.params)) 993e586e47Slinjiawei// mmioXbar.io.in <> xsCore.io.mmio 1003e586e47Slinjiawei// 1013e586e47Slinjiawei// val extDev = mmioXbar.io.out(0) 1023e586e47Slinjiawei// val clint = Module(new AXI4Timer(sim = !env.FPGAPlatform)) 1033e586e47Slinjiawei// clint.io.in <> AXI4ToAXI4Lite(MMIOTLToAXI4(mmioXbar.io.out(1))) 1043e586e47Slinjiawei// 1053e586e47Slinjiawei// io.mmio <> extDev 1063e586e47Slinjiawei// 1073e586e47Slinjiawei// val mtipSync = clint.io.extra.get.mtip 1083e586e47Slinjiawei// val meipSync = RegNext(RegNext(io.meip)) 1093e586e47Slinjiawei// ExcitingUtils.addSource(mtipSync, "mtip") 1103e586e47Slinjiawei// ExcitingUtils.addSource(meipSync, "meip") 1113e586e47Slinjiawei//} 112