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