1006e1884SZihao Yupackage system 2006e1884SZihao Yu 3*2225d46eSJiawei Linimport chipsalliance.rocketchip.config.{Field, Parameters} 4006e1884SZihao Yuimport chisel3._ 5096ea47eSzhanglinjuanimport chisel3.util._ 6*2225d46eSJiawei Linimport xiangshan.{DebugOptionsKey, HasXSParameter, XSBundle, XSCore, XSCoreParameters} 70584d3a8SLinJiaweiimport freechips.rocketchip.tile.{BusErrorUnit, BusErrorUnitParams, BusErrors, L1BusErrors} 8a428082bSLinJiawei 9*2225d46eSJiawei Lincase object SoCParamsKey extends Field[SoCParameters] 10*2225d46eSJiawei Lin 11a428082bSLinJiaweicase class SoCParameters 12a428082bSLinJiawei( 13*2225d46eSJiawei Lin cores: List[XSCoreParameters], 14a428082bSLinJiawei EnableILA: Boolean = false, 15*2225d46eSJiawei Lin extIntrs: Int = 150 16*2225d46eSJiawei Lin){ 17*2225d46eSJiawei Lin val PAddrBits = cores.map(_.PAddrBits).reduce((x, y) => if(x > y) x else y) 18*2225d46eSJiawei Lin // L3 configurations 19*2225d46eSJiawei Lin val L3InnerBusWidth = 256 20*2225d46eSJiawei Lin val L3Size = 4 * 1024 * 1024 // 4MB 21*2225d46eSJiawei Lin val L3BlockSize = 64 22*2225d46eSJiawei Lin val L3NBanks = 4 23*2225d46eSJiawei Lin val L3NWays = 8 24006e1884SZihao Yu 25*2225d46eSJiawei Lin // on chip network configurations 26*2225d46eSJiawei Lin val L3OuterBusWidth = 256 27*2225d46eSJiawei Lin 28*2225d46eSJiawei Lin} 29*2225d46eSJiawei Lin 30*2225d46eSJiawei Lintrait HasSoCParameter { 31*2225d46eSJiawei Lin implicit val p: Parameters 32*2225d46eSJiawei Lin 33*2225d46eSJiawei Lin val soc = p(SoCParamsKey) 34*2225d46eSJiawei Lin val debugOpts = p(DebugOptionsKey) 35*2225d46eSJiawei Lin val NumCores = soc.cores.size 36a428082bSLinJiawei val EnableILA = soc.EnableILA 37*2225d46eSJiawei Lin 38*2225d46eSJiawei Lin // L3 configurations 39*2225d46eSJiawei Lin val L3InnerBusWidth = soc.L3InnerBusWidth 40*2225d46eSJiawei Lin val L3Size = soc.L3Size 41*2225d46eSJiawei Lin val L3BlockSize = soc.L3BlockSize 42*2225d46eSJiawei Lin val L3NBanks = soc.L3NBanks 43*2225d46eSJiawei Lin val L3NWays = soc.L3NWays 44*2225d46eSJiawei Lin val L3NSets = L3Size / L3BlockSize / L3NBanks / L3NWays 45*2225d46eSJiawei Lin 46*2225d46eSJiawei Lin // on chip network configurations 47*2225d46eSJiawei Lin val L3OuterBusWidth = soc.L3OuterBusWidth 48*2225d46eSJiawei Lin 49*2225d46eSJiawei Lin val NrExtIntr = soc.extIntrs 50303b861dSZihao Yu} 51303b861dSZihao Yu 521e3fad10SLinJiaweiclass ILABundle extends Bundle {} 53303b861dSZihao Yu 543e586e47Slinjiawei 55*2225d46eSJiawei Linclass L1CacheErrorInfo(implicit val p: Parameters) extends Bundle with HasSoCParameter { 56*2225d46eSJiawei Lin val paddr = Valid(UInt(soc.PAddrBits.W)) 570584d3a8SLinJiawei // for now, we only detect ecc 580584d3a8SLinJiawei val ecc_error = Valid(Bool()) 593e586e47Slinjiawei} 603e586e47Slinjiawei 61*2225d46eSJiawei Linclass XSL1BusErrors(val nCores: Int)(implicit val p: Parameters) extends BusErrors { 629637c0c6SLinJiawei val icache = Vec(nCores, new L1CacheErrorInfo) 634e3ce935Sljw val l1plus = Vec(nCores, new L1CacheErrorInfo) 649637c0c6SLinJiawei val dcache = Vec(nCores, new L1CacheErrorInfo) 659637c0c6SLinJiawei 669637c0c6SLinJiawei override def toErrorList: List[Option[(ValidIO[UInt], String, String)]] = 679637c0c6SLinJiawei List.tabulate(nCores){i => 689637c0c6SLinJiawei List( 699637c0c6SLinJiawei Some(icache(i).paddr, s"IBUS_$i", s"Icache_$i bus error"), 709637c0c6SLinJiawei Some(icache(i).ecc_error, s"I_ECC_$i", s"Icache_$i ecc error"), 714e3ce935Sljw Some(l1plus(i).paddr, s"L1PLUS_$i", s"L1PLUS_$i bus error"), 724e3ce935Sljw Some(l1plus(i).ecc_error, s"L1PLUS_ECC_$i", s"L1PLUS_$i ecc error"), 739637c0c6SLinJiawei Some(dcache(i).paddr, s"DBUS_$i", s"Dcache_$i bus error"), 749637c0c6SLinJiawei Some(dcache(i).ecc_error, s"D_ECC_$i", s"Dcache_$i ecc error") 750584d3a8SLinJiawei ) 769637c0c6SLinJiawei }.flatten 770584d3a8SLinJiawei} 78