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} 24a1ea7f76SJiawei 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, 33a1ea7f76SJiawei Lin L3NBanks: Int = 4, 34*4f94c0c6SJiawei Lin L3CacheParamsOpt: Option[HCCacheParameters] = Some(HCCacheParameters( 35a1ea7f76SJiawei Lin name = "l3", 36a1ea7f76SJiawei Lin level = 3, 37a1ea7f76SJiawei Lin ways = 8, 38a1ea7f76SJiawei Lin sets = 2048 // 1MB per bank 39*4f94c0c6SJiawei Lin )) 402225d46eSJiawei Lin){ 412225d46eSJiawei Lin val PAddrBits = cores.map(_.PAddrBits).reduce((x, y) => if(x > y) x else y) 422225d46eSJiawei Lin // L3 configurations 432225d46eSJiawei Lin val L3InnerBusWidth = 256 442225d46eSJiawei Lin val L3BlockSize = 64 452225d46eSJiawei Lin // on chip network configurations 462225d46eSJiawei Lin val L3OuterBusWidth = 256 472225d46eSJiawei Lin} 482225d46eSJiawei Lin 492225d46eSJiawei Lintrait HasSoCParameter { 502225d46eSJiawei Lin implicit val p: Parameters 512225d46eSJiawei Lin 522225d46eSJiawei Lin val soc = p(SoCParamsKey) 532225d46eSJiawei Lin val debugOpts = p(DebugOptionsKey) 542225d46eSJiawei Lin val NumCores = soc.cores.size 55a428082bSLinJiawei val EnableILA = soc.EnableILA 562225d46eSJiawei Lin 572225d46eSJiawei Lin // L3 configurations 582225d46eSJiawei Lin val L3InnerBusWidth = soc.L3InnerBusWidth 592225d46eSJiawei Lin val L3BlockSize = soc.L3BlockSize 602225d46eSJiawei Lin val L3NBanks = soc.L3NBanks 612225d46eSJiawei Lin 622225d46eSJiawei Lin // on chip network configurations 632225d46eSJiawei Lin val L3OuterBusWidth = soc.L3OuterBusWidth 642225d46eSJiawei Lin 652225d46eSJiawei Lin val NrExtIntr = soc.extIntrs 66303b861dSZihao Yu} 67303b861dSZihao Yu 681e3fad10SLinJiaweiclass ILABundle extends Bundle {} 69303b861dSZihao Yu 703e586e47Slinjiawei 712225d46eSJiawei Linclass L1CacheErrorInfo(implicit val p: Parameters) extends Bundle with HasSoCParameter { 722225d46eSJiawei Lin val paddr = Valid(UInt(soc.PAddrBits.W)) 730584d3a8SLinJiawei // for now, we only detect ecc 740584d3a8SLinJiawei val ecc_error = Valid(Bool()) 753e586e47Slinjiawei} 763e586e47Slinjiawei 772225d46eSJiawei Linclass XSL1BusErrors(val nCores: Int)(implicit val p: Parameters) extends BusErrors { 789637c0c6SLinJiawei val icache = Vec(nCores, new L1CacheErrorInfo) 794e3ce935Sljw val l1plus = Vec(nCores, new L1CacheErrorInfo) 809637c0c6SLinJiawei val dcache = Vec(nCores, new L1CacheErrorInfo) 819637c0c6SLinJiawei 829637c0c6SLinJiawei override def toErrorList: List[Option[(ValidIO[UInt], String, String)]] = 839637c0c6SLinJiawei List.tabulate(nCores){i => 849637c0c6SLinJiawei List( 859637c0c6SLinJiawei Some(icache(i).paddr, s"IBUS_$i", s"Icache_$i bus error"), 869637c0c6SLinJiawei Some(icache(i).ecc_error, s"I_ECC_$i", s"Icache_$i ecc error"), 874e3ce935Sljw Some(l1plus(i).paddr, s"L1PLUS_$i", s"L1PLUS_$i bus error"), 884e3ce935Sljw Some(l1plus(i).ecc_error, s"L1PLUS_ECC_$i", s"L1PLUS_$i ecc error"), 899637c0c6SLinJiawei Some(dcache(i).paddr, s"DBUS_$i", s"Dcache_$i bus error"), 909637c0c6SLinJiawei Some(dcache(i).ecc_error, s"D_ECC_$i", s"Dcache_$i ecc error") 910584d3a8SLinJiawei ) 929637c0c6SLinJiawei }.flatten 930584d3a8SLinJiawei} 94