1bc063562SLemover/*************************************************************************************** 2bc063562SLemover* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences 3bc063562SLemover* Copyright (c) 2020-2021 Peng Cheng Laboratory 4bc063562SLemover* 5bc063562SLemover* XiangShan is licensed under Mulan PSL v2. 6bc063562SLemover* You can use this software according to the terms and conditions of the Mulan PSL v2. 7bc063562SLemover* You may obtain a copy of Mulan PSL v2 at: 8bc063562SLemover* http://license.coscl.org.cn/MulanPSL2 9bc063562SLemover* 10bc063562SLemover* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, 11bc063562SLemover* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, 12bc063562SLemover* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. 13bc063562SLemover* 14bc063562SLemover* See the Mulan PSL v2 for more details. 15bc063562SLemover***************************************************************************************/ 16bc063562SLemoverpackage xiangshan.cache.mmu 17bc063562SLemover 18bc063562SLemoverimport chisel3._ 19bc063562SLemoverimport chisel3.util._ 20bc063562SLemoverimport chipsalliance.rocketchip.config.Parameters 21bc063562SLemoverimport xiangshan.{SfenceBundle, XSModule} 22bc063562SLemoverimport utils._ 23bc063562SLemover 24*45f497a4Shappy-lxclass L2TlbPrefetchIO(implicit p: Parameters) extends MMUIOBaseBundle with HasPtwConst { 25bc063562SLemover val in = Flipped(ValidIO(new Bundle { 26bc063562SLemover val vpn = UInt(vpnLen.W) 27bc063562SLemover })) 28bc063562SLemover val out = DecoupledIO(new Bundle { 29bc063562SLemover val vpn = UInt(vpnLen.W) 30bc063562SLemover val source = UInt(bSourceWidth.W) 31bc063562SLemover }) 32bc063562SLemover} 33bc063562SLemover 34bc063562SLemoverclass L2TlbPrefetch(implicit p: Parameters) extends XSModule with HasPtwConst { 35bc063562SLemover val io = IO(new L2TlbPrefetchIO()) 36bc063562SLemover 37*45f497a4Shappy-lx val flush = io.sfence.valid || io.csr.satp.changed 38bd5d9cb9SLemover val next_line = RegEnable(get_next_line(io.in.bits.vpn), io.in.valid) 39*45f497a4Shappy-lx val v = ValidHold(io.in.valid && !flush, io.out.fire(), flush) 40bc063562SLemover 41bc063562SLemover io.out.valid := v 42bc063562SLemover io.out.bits.vpn := next_line 43bc063562SLemover io.out.bits.source := prefetchID.U 44bc063562SLemover} 45