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