xref: /XiangShan/src/main/scala/system/SoC.scala (revision a1ea7f76add43b40af78084f7f646a0010120cd7)
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