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