1c6d43980SLemover/*************************************************************************************** 2c6d43980SLemover* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences 3f320e0f0SYinan Xu* Copyright (c) 2020-2021 Peng Cheng Laboratory 4c6d43980SLemover* 5c6d43980SLemover* XiangShan is licensed under Mulan PSL v2. 6c6d43980SLemover* You can use this software according to the terms and conditions of the Mulan PSL v2. 7c6d43980SLemover* You may obtain a copy of Mulan PSL v2 at: 8c6d43980SLemover* http://license.coscl.org.cn/MulanPSL2 9c6d43980SLemover* 10c6d43980SLemover* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, 11c6d43980SLemover* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, 12c6d43980SLemover* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. 13c6d43980SLemover* 14c6d43980SLemover* See the Mulan PSL v2 for more details. 15c6d43980SLemover***************************************************************************************/ 16c6d43980SLemover 17006e1884SZihao Yupackage system 18006e1884SZihao Yu 192225d46eSJiawei Linimport chipsalliance.rocketchip.config.{Field, Parameters} 20006e1884SZihao Yuimport chisel3._ 21096ea47eSzhanglinjuanimport chisel3.util._ 222225d46eSJiawei Linimport xiangshan.{DebugOptionsKey, HasXSParameter, XSBundle, XSCore, XSCoreParameters} 230584d3a8SLinJiaweiimport freechips.rocketchip.tile.{BusErrorUnit, BusErrorUnitParams, BusErrors, L1BusErrors} 24*a1ea7f76SJiawei Linimport huancun.{CacheParameters, HCCacheParameters} 25a428082bSLinJiawei 262225d46eSJiawei Lincase object SoCParamsKey extends Field[SoCParameters] 272225d46eSJiawei Lin 28a428082bSLinJiaweicase class SoCParameters 29a428082bSLinJiawei( 302225d46eSJiawei Lin cores: List[XSCoreParameters], 31a428082bSLinJiawei EnableILA: Boolean = false, 32175bcfe9SLinJiawei extIntrs: Int = 150, 33*a1ea7f76SJiawei Lin L3NBanks: Int = 4, 34*a1ea7f76SJiawei Lin L3CacheParams: HCCacheParameters = HCCacheParameters( 35*a1ea7f76SJiawei Lin name = "l3", 36*a1ea7f76SJiawei Lin level = 3, 37*a1ea7f76SJiawei Lin ways = 8, 38*a1ea7f76SJiawei Lin sets = 2048 // 1MB per bank 39*a1ea7f76SJiawei Lin ), 4005f23f57SWilliam Wang useFakeL3Cache: Boolean = false, 412225d46eSJiawei Lin){ 422225d46eSJiawei Lin val PAddrBits = cores.map(_.PAddrBits).reduce((x, y) => if(x > y) x else y) 432225d46eSJiawei Lin // L3 configurations 442225d46eSJiawei Lin val L3InnerBusWidth = 256 452225d46eSJiawei Lin val L3BlockSize = 64 462225d46eSJiawei Lin // on chip network configurations 472225d46eSJiawei Lin val L3OuterBusWidth = 256 482225d46eSJiawei Lin} 492225d46eSJiawei Lin 502225d46eSJiawei Lintrait HasSoCParameter { 512225d46eSJiawei Lin implicit val p: Parameters 522225d46eSJiawei Lin 532225d46eSJiawei Lin val soc = p(SoCParamsKey) 542225d46eSJiawei Lin val debugOpts = p(DebugOptionsKey) 552225d46eSJiawei Lin val NumCores = soc.cores.size 56a428082bSLinJiawei val EnableILA = soc.EnableILA 572225d46eSJiawei Lin 582225d46eSJiawei Lin // L3 configurations 599d5a2027SYinan Xu val useFakeL3Cache = soc.useFakeL3Cache 602225d46eSJiawei Lin val L3InnerBusWidth = soc.L3InnerBusWidth 612225d46eSJiawei Lin val L3BlockSize = soc.L3BlockSize 622225d46eSJiawei Lin val L3NBanks = soc.L3NBanks 632225d46eSJiawei Lin 642225d46eSJiawei Lin // on chip network configurations 652225d46eSJiawei Lin val L3OuterBusWidth = soc.L3OuterBusWidth 662225d46eSJiawei Lin 672225d46eSJiawei Lin val NrExtIntr = soc.extIntrs 68303b861dSZihao Yu} 69303b861dSZihao Yu 701e3fad10SLinJiaweiclass ILABundle extends Bundle {} 71303b861dSZihao Yu 723e586e47Slinjiawei 732225d46eSJiawei Linclass L1CacheErrorInfo(implicit val p: Parameters) extends Bundle with HasSoCParameter { 742225d46eSJiawei Lin val paddr = Valid(UInt(soc.PAddrBits.W)) 750584d3a8SLinJiawei // for now, we only detect ecc 760584d3a8SLinJiawei val ecc_error = Valid(Bool()) 773e586e47Slinjiawei} 783e586e47Slinjiawei 792225d46eSJiawei Linclass XSL1BusErrors(val nCores: Int)(implicit val p: Parameters) extends BusErrors { 809637c0c6SLinJiawei val icache = Vec(nCores, new L1CacheErrorInfo) 814e3ce935Sljw val l1plus = Vec(nCores, new L1CacheErrorInfo) 829637c0c6SLinJiawei val dcache = Vec(nCores, new L1CacheErrorInfo) 839637c0c6SLinJiawei 849637c0c6SLinJiawei override def toErrorList: List[Option[(ValidIO[UInt], String, String)]] = 859637c0c6SLinJiawei List.tabulate(nCores){i => 869637c0c6SLinJiawei List( 879637c0c6SLinJiawei Some(icache(i).paddr, s"IBUS_$i", s"Icache_$i bus error"), 889637c0c6SLinJiawei Some(icache(i).ecc_error, s"I_ECC_$i", s"Icache_$i ecc error"), 894e3ce935Sljw Some(l1plus(i).paddr, s"L1PLUS_$i", s"L1PLUS_$i bus error"), 904e3ce935Sljw Some(l1plus(i).ecc_error, s"L1PLUS_ECC_$i", s"L1PLUS_$i ecc error"), 919637c0c6SLinJiawei Some(dcache(i).paddr, s"DBUS_$i", s"Dcache_$i bus error"), 929637c0c6SLinJiawei Some(dcache(i).ecc_error, s"D_ECC_$i", s"Dcache_$i ecc error") 930584d3a8SLinJiawei ) 949637c0c6SLinJiawei }.flatten 950584d3a8SLinJiawei} 96