xref: /XiangShan/src/main/scala/xiangshan/cache/mmu/L2TlbPrefetch.scala (revision 45f497a4abde3fa5930268b418d634554b21b0b8)
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