xref: /XiangShan/src/main/scala/xiangshan/frontend/icache/ICacheBundle.scala (revision 6c106319588f5988a282dc2e7c687a9d44e9c209)
11d8f4dcbSJay/***************************************************************************************
2e3da8badSTang Haojin* Copyright (c) 2024 Beijing Institute of Open Source Chip (BOSC)
3e3da8badSTang Haojin* Copyright (c) 2020-2024 Institute of Computing Technology, Chinese Academy of Sciences
41d8f4dcbSJay* Copyright (c) 2020-2021 Peng Cheng Laboratory
51d8f4dcbSJay*
61d8f4dcbSJay* XiangShan is licensed under Mulan PSL v2.
71d8f4dcbSJay* You can use this software according to the terms and conditions of the Mulan PSL v2.
81d8f4dcbSJay* You may obtain a copy of Mulan PSL v2 at:
91d8f4dcbSJay*          http://license.coscl.org.cn/MulanPSL2
101d8f4dcbSJay*
111d8f4dcbSJay* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
121d8f4dcbSJay* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
131d8f4dcbSJay* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
141d8f4dcbSJay*
151d8f4dcbSJay* See the Mulan PSL v2 for more details.
161d8f4dcbSJay***************************************************************************************/
171d8f4dcbSJay
181d8f4dcbSJaypackage xiangshan.frontend.icache
191d8f4dcbSJay
201d8f4dcbSJayimport chisel3._
211d8f4dcbSJayimport chisel3.util._
22cf7d6b7aSMuziimport org.chipsalliance.cde.config.Parameters
231d8f4dcbSJay
24cf7d6b7aSMuziclass ICacheReadBundle(implicit p: Parameters) extends ICacheBundle {
25415fcbe2Sxu_zh  val vSetIdx:      Vec[UInt]      = Vec(2, UInt(idxBits.W))
26415fcbe2Sxu_zh  val waymask:      Vec[Vec[Bool]] = Vec(2, Vec(nWays, Bool()))
27415fcbe2Sxu_zh  val blkOffset:    UInt           = UInt(log2Ceil(blockBytes).W)
28415fcbe2Sxu_zh  val isDoubleLine: Bool           = Bool()
291d8f4dcbSJay}
301d8f4dcbSJay
31cf7d6b7aSMuziclass ICacheMetaWriteBundle(implicit p: Parameters) extends ICacheBundle {
32415fcbe2Sxu_zh  val virIdx:  UInt = UInt(idxBits.W)
33415fcbe2Sxu_zh  val phyTag:  UInt = UInt(tagBits.W)
34415fcbe2Sxu_zh  val waymask: UInt = UInt(nWays.W)
35415fcbe2Sxu_zh  val bankIdx: Bool = Bool()
36*6c106319Sxu_zh  val poison:  Bool = Bool()
371d8f4dcbSJay
38*6c106319Sxu_zh  def generate(tag: UInt, idx: UInt, waymask: UInt, bankIdx: Bool, poison: Bool): Unit = {
391d8f4dcbSJay    this.virIdx  := idx
401d8f4dcbSJay    this.phyTag  := tag
411d8f4dcbSJay    this.waymask := waymask
421d8f4dcbSJay    this.bankIdx := bankIdx
43*6c106319Sxu_zh    this.poison  := poison
441d8f4dcbSJay  }
45e39d6828Sxu_zh}
461d8f4dcbSJay
47e39d6828Sxu_zhclass ICacheMetaFlushBundle(implicit p: Parameters) extends ICacheBundle {
48415fcbe2Sxu_zh  val virIdx:  UInt = UInt(idxBits.W)
49415fcbe2Sxu_zh  val waymask: UInt = UInt(nWays.W)
501d8f4dcbSJay}
511d8f4dcbSJay
52cf7d6b7aSMuziclass ICacheDataWriteBundle(implicit p: Parameters) extends ICacheBundle {
53415fcbe2Sxu_zh  val virIdx:  UInt = UInt(idxBits.W)
54415fcbe2Sxu_zh  val data:    UInt = UInt(blockBits.W)
55415fcbe2Sxu_zh  val waymask: UInt = UInt(nWays.W)
56415fcbe2Sxu_zh  val bankIdx: Bool = Bool()
57*6c106319Sxu_zh  val poison:  Bool = Bool()
581d8f4dcbSJay
59*6c106319Sxu_zh  def generate(data: UInt, idx: UInt, waymask: UInt, bankIdx: Bool, poison: Bool): Unit = {
601d8f4dcbSJay    this.virIdx  := idx
611d8f4dcbSJay    this.data    := data
621d8f4dcbSJay    this.waymask := waymask
631d8f4dcbSJay    this.bankIdx := bankIdx
64*6c106319Sxu_zh    this.poison  := poison
651d8f4dcbSJay  }
661d8f4dcbSJay}
671d8f4dcbSJay
68cf7d6b7aSMuziclass ICacheMetaRespBundle(implicit p: Parameters) extends ICacheBundle {
69415fcbe2Sxu_zh  val metas:      Vec[Vec[ICacheMetadata]] = Vec(PortNumber, Vec(nWays, new ICacheMetadata))
70415fcbe2Sxu_zh  val codes:      Vec[Vec[UInt]]           = Vec(PortNumber, Vec(nWays, UInt(ICacheMetaCodeBits.W)))
71415fcbe2Sxu_zh  val entryValid: Vec[Vec[Bool]]           = Vec(PortNumber, Vec(nWays, Bool()))
728966a895Sxu_zh
738966a895Sxu_zh  // for compatibility
74415fcbe2Sxu_zh  def tags: Vec[Vec[UInt]] = VecInit(metas.map(port => VecInit(port.map(way => way.tag))))
758966a895Sxu_zh}
768966a895Sxu_zh
77cf7d6b7aSMuziclass ICacheDataRespBundle(implicit p: Parameters) extends ICacheBundle {
78415fcbe2Sxu_zh  val datas: Vec[UInt] = Vec(ICacheDataBanks, UInt(ICacheDataBits.W))
79415fcbe2Sxu_zh  val codes: Vec[UInt] = Vec(ICacheDataBanks, UInt(ICacheDataCodeBits.W))
801d8f4dcbSJay}
811d8f4dcbSJay
82b92f8445Sssszwicclass ReplacerTouch(implicit p: Parameters) extends ICacheBundle {
83415fcbe2Sxu_zh  val vSetIdx: UInt = UInt(idxBits.W)
84415fcbe2Sxu_zh  val way:     UInt = UInt(wayBits.W)
85b1ded4e8Sguohongyu}
86b1ded4e8Sguohongyu
87b92f8445Sssszwicclass ReplacerVictim(implicit p: Parameters) extends ICacheBundle {
88415fcbe2Sxu_zh  val vSetIdx: Valid[UInt] = ValidIO(UInt(idxBits.W))
89415fcbe2Sxu_zh  val way:     UInt        = Input(UInt(wayBits.W))
9058c354d0Sssszwic}
91