1*c6d43980SLemover/*************************************************************************************** 2*c6d43980SLemover* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences 3*c6d43980SLemover* 4*c6d43980SLemover* XiangShan is licensed under Mulan PSL v2. 5*c6d43980SLemover* You can use this software according to the terms and conditions of the Mulan PSL v2. 6*c6d43980SLemover* You may obtain a copy of Mulan PSL v2 at: 7*c6d43980SLemover* http://license.coscl.org.cn/MulanPSL2 8*c6d43980SLemover* 9*c6d43980SLemover* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, 10*c6d43980SLemover* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, 11*c6d43980SLemover* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. 12*c6d43980SLemover* 13*c6d43980SLemover* See the Mulan PSL v2 for more details. 14*c6d43980SLemover***************************************************************************************/ 15*c6d43980SLemover 16006e1884SZihao Yupackage system 17006e1884SZihao Yu 182225d46eSJiawei Linimport chipsalliance.rocketchip.config.{Field, Parameters} 19006e1884SZihao Yuimport chisel3._ 20096ea47eSzhanglinjuanimport chisel3.util._ 212225d46eSJiawei Linimport xiangshan.{DebugOptionsKey, HasXSParameter, XSBundle, XSCore, XSCoreParameters} 220584d3a8SLinJiaweiimport freechips.rocketchip.tile.{BusErrorUnit, BusErrorUnitParams, BusErrors, L1BusErrors} 23a428082bSLinJiawei 242225d46eSJiawei Lincase object SoCParamsKey extends Field[SoCParameters] 252225d46eSJiawei Lin 26a428082bSLinJiaweicase class SoCParameters 27a428082bSLinJiawei( 282225d46eSJiawei Lin cores: List[XSCoreParameters], 29a428082bSLinJiawei EnableILA: Boolean = false, 30175bcfe9SLinJiawei extIntrs: Int = 150, 3105f23f57SWilliam Wang useFakeL3Cache: Boolean = false, 3205f23f57SWilliam Wang L3Size: Int = 4 * 1024 * 1024 // 4MB 332225d46eSJiawei Lin){ 342225d46eSJiawei Lin val PAddrBits = cores.map(_.PAddrBits).reduce((x, y) => if(x > y) x else y) 352225d46eSJiawei Lin // L3 configurations 362225d46eSJiawei Lin val L3InnerBusWidth = 256 372225d46eSJiawei Lin val L3BlockSize = 64 382225d46eSJiawei Lin val L3NBanks = 4 392225d46eSJiawei Lin val L3NWays = 8 40006e1884SZihao Yu 412225d46eSJiawei Lin // on chip network configurations 422225d46eSJiawei Lin val L3OuterBusWidth = 256 432225d46eSJiawei Lin 442225d46eSJiawei Lin} 452225d46eSJiawei Lin 462225d46eSJiawei Lintrait HasSoCParameter { 472225d46eSJiawei Lin implicit val p: Parameters 482225d46eSJiawei Lin 492225d46eSJiawei Lin val soc = p(SoCParamsKey) 502225d46eSJiawei Lin val debugOpts = p(DebugOptionsKey) 512225d46eSJiawei Lin val NumCores = soc.cores.size 52a428082bSLinJiawei val EnableILA = soc.EnableILA 532225d46eSJiawei Lin 542225d46eSJiawei Lin // L3 configurations 559d5a2027SYinan Xu val useFakeL3Cache = soc.useFakeL3Cache 562225d46eSJiawei Lin val L3InnerBusWidth = soc.L3InnerBusWidth 572225d46eSJiawei Lin val L3Size = soc.L3Size 582225d46eSJiawei Lin val L3BlockSize = soc.L3BlockSize 592225d46eSJiawei Lin val L3NBanks = soc.L3NBanks 602225d46eSJiawei Lin val L3NWays = soc.L3NWays 612225d46eSJiawei Lin val L3NSets = L3Size / L3BlockSize / L3NBanks / L3NWays 622225d46eSJiawei Lin 632225d46eSJiawei Lin // on chip network configurations 642225d46eSJiawei Lin val L3OuterBusWidth = soc.L3OuterBusWidth 652225d46eSJiawei Lin 662225d46eSJiawei Lin val NrExtIntr = soc.extIntrs 67303b861dSZihao Yu} 68303b861dSZihao Yu 691e3fad10SLinJiaweiclass ILABundle extends Bundle {} 70303b861dSZihao Yu 713e586e47Slinjiawei 722225d46eSJiawei Linclass L1CacheErrorInfo(implicit val p: Parameters) extends Bundle with HasSoCParameter { 732225d46eSJiawei Lin val paddr = Valid(UInt(soc.PAddrBits.W)) 740584d3a8SLinJiawei // for now, we only detect ecc 750584d3a8SLinJiawei val ecc_error = Valid(Bool()) 763e586e47Slinjiawei} 773e586e47Slinjiawei 782225d46eSJiawei Linclass XSL1BusErrors(val nCores: Int)(implicit val p: Parameters) extends BusErrors { 799637c0c6SLinJiawei val icache = Vec(nCores, new L1CacheErrorInfo) 804e3ce935Sljw val l1plus = Vec(nCores, new L1CacheErrorInfo) 819637c0c6SLinJiawei val dcache = Vec(nCores, new L1CacheErrorInfo) 829637c0c6SLinJiawei 839637c0c6SLinJiawei override def toErrorList: List[Option[(ValidIO[UInt], String, String)]] = 849637c0c6SLinJiawei List.tabulate(nCores){i => 859637c0c6SLinJiawei List( 869637c0c6SLinJiawei Some(icache(i).paddr, s"IBUS_$i", s"Icache_$i bus error"), 879637c0c6SLinJiawei Some(icache(i).ecc_error, s"I_ECC_$i", s"Icache_$i ecc error"), 884e3ce935Sljw Some(l1plus(i).paddr, s"L1PLUS_$i", s"L1PLUS_$i bus error"), 894e3ce935Sljw Some(l1plus(i).ecc_error, s"L1PLUS_ECC_$i", s"L1PLUS_$i ecc error"), 909637c0c6SLinJiawei Some(dcache(i).paddr, s"DBUS_$i", s"Dcache_$i bus error"), 919637c0c6SLinJiawei Some(dcache(i).ecc_error, s"D_ECC_$i", s"Dcache_$i ecc error") 920584d3a8SLinJiawei ) 939637c0c6SLinJiawei }.flatten 940584d3a8SLinJiawei} 95