xref: /XiangShan/src/main/scala/xiangshan/mem/prefetch/BasePrefecher.scala (revision 99ce5576f0ecce1b5045b7bc0dbbb2debd934fbb)
1ffc9de54Swakafa/***************************************************************************************
2ffc9de54Swakafa  * Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences
3ffc9de54Swakafa  * Copyright (c) 2020-2021 Peng Cheng Laboratory
4ffc9de54Swakafa  *
5ffc9de54Swakafa  * XiangShan is licensed under Mulan PSL v2.
6ffc9de54Swakafa  * You can use this software according to the terms and conditions of the Mulan PSL v2.
7ffc9de54Swakafa  * You may obtain a copy of Mulan PSL v2 at:
8ffc9de54Swakafa  *          http://license.coscl.org.cn/MulanPSL2
9ffc9de54Swakafa  *
10ffc9de54Swakafa  * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
11ffc9de54Swakafa  * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
12ffc9de54Swakafa  * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
13ffc9de54Swakafa  *
14ffc9de54Swakafa  * See the Mulan PSL v2 for more details.
15ffc9de54Swakafa  ***************************************************************************************/
16ffc9de54Swakafa
17289fc2f9SLinJiaweipackage xiangshan.mem.prefetch
18289fc2f9SLinJiawei
199e12e8edScz4eimport org.chipsalliance.cde.config.Parameters
20289fc2f9SLinJiaweiimport chisel3._
21289fc2f9SLinJiaweiimport chisel3.util._
22ffc9de54Swakafaimport utility.MemReqSource
23289fc2f9SLinJiaweiimport xiangshan._
246810d1e8Ssfencevmaimport xiangshan.backend._
259e12e8edScz4eimport xiangshan.backend.fu.PMPRespBundle
269e12e8edScz4eimport xiangshan.mem.L1PrefetchReq
27*99ce5576Scz4eimport xiangshan.mem.Bundles.LsPrefetchTrainBundle
289e12e8edScz4eimport xiangshan.cache.mmu.TlbRequestIO
29881e32f5SZifei Zhangimport coupledL2.PrefetchCtrlFromCore
30881e32f5SZifei Zhang
31881e32f5SZifei Zhangclass PrefetchCtrl(implicit p: Parameters) extends XSBundle {
32881e32f5SZifei Zhang  val l1I_pf_enable = Bool()
33881e32f5SZifei Zhang  val l2_pf_enable = Bool()
34881e32f5SZifei Zhang  val l1D_pf_enable = Bool()
35881e32f5SZifei Zhang  val l1D_pf_train_on_hit = Bool()
36881e32f5SZifei Zhang  val l1D_pf_enable_agt = Bool()
37881e32f5SZifei Zhang  val l1D_pf_enable_pht = Bool()
38881e32f5SZifei Zhang  val l1D_pf_active_threshold = UInt(4.W)
39881e32f5SZifei Zhang  val l1D_pf_active_stride = UInt(6.W)
40881e32f5SZifei Zhang  val l1D_pf_enable_stride = Bool()
41881e32f5SZifei Zhang  val l2_pf_store_only = Bool()
42881e32f5SZifei Zhang  val l2_pf_recv_enable = Bool()
43881e32f5SZifei Zhang  val l2_pf_pbop_enable = Bool()
44881e32f5SZifei Zhang  val l2_pf_vbop_enable = Bool()
45881e32f5SZifei Zhang  val l2_pf_tp_enable = Bool()
46881e32f5SZifei Zhang
47881e32f5SZifei Zhang  def toL2PrefetchCtrl(): PrefetchCtrlFromCore = {
48881e32f5SZifei Zhang    val res = Wire(new PrefetchCtrlFromCore)
49881e32f5SZifei Zhang    res.l2_pf_master_en := l2_pf_enable
50881e32f5SZifei Zhang    res.l2_pf_recv_en := l2_pf_recv_enable
51881e32f5SZifei Zhang    res.l2_pbop_en := l2_pf_pbop_enable
52881e32f5SZifei Zhang    res.l2_vbop_en := l2_pf_vbop_enable
53881e32f5SZifei Zhang    res.l2_tp_en := l2_pf_tp_enable
54881e32f5SZifei Zhang    res
55881e32f5SZifei Zhang  }
56881e32f5SZifei Zhang}
570d32f713Shappy-lx
580d32f713Shappy-lxclass L2PrefetchReq(implicit p: Parameters) extends XSBundle {
590d32f713Shappy-lx  val addr = UInt(PAddrBits.W)
600d32f713Shappy-lx  val source = UInt(MemReqSource.reqSourceBits.W)
610d32f713Shappy-lx}
62289fc2f9SLinJiawei
63289fc2f9SLinJiaweiclass PrefetcherIO()(implicit p: Parameters) extends XSBundle {
64*99ce5576Scz4e  val ld_in = Flipped(Vec(backendParams.LdExuCnt, ValidIO(new LsPrefetchTrainBundle())))
65*99ce5576Scz4e  val st_in = Flipped(Vec(backendParams.StaExuCnt, ValidIO(new LsPrefetchTrainBundle())))
66289fc2f9SLinJiawei  val tlb_req = new TlbRequestIO(nRespDups = 2)
6725a80bceSYanqin Li  val pmp_resp = Flipped(new PMPRespBundle())
68967327d8SLinJiawei  val l1_req = DecoupledIO(new L1PrefetchReq())
690d32f713Shappy-lx  val l2_req = ValidIO(new L2PrefetchReq())
700d32f713Shappy-lx  val l3_req = ValidIO(UInt(PAddrBits.W)) // TODO: l3 pf source
7185de5caeSLinJiawei  val enable = Input(Bool())
72289fc2f9SLinJiawei}
73289fc2f9SLinJiawei
740d32f713Shappy-lxclass PrefetchReqBundle()(implicit p: Parameters) extends XSBundle {
750d32f713Shappy-lx  val vaddr       = UInt(VAddrBits.W)
760d32f713Shappy-lx  val paddr       = UInt(PAddrBits.W)
770d32f713Shappy-lx  val pc          = UInt(VAddrBits.W)
7820e09ab1Shappy-lx  val miss        = Bool()
79f4221883Shappy-lx  val pfHitStream = Bool()
800d32f713Shappy-lx}
810d32f713Shappy-lx
82289fc2f9SLinJiaweitrait PrefetcherParams
83289fc2f9SLinJiawei
84289fc2f9SLinJiaweiabstract class BasePrefecher()(implicit p: Parameters) extends XSModule {
85289fc2f9SLinJiawei  val io = IO(new PrefetcherIO())
860d32f713Shappy-lx
870d32f713Shappy-lx  io.l3_req.valid := false.B
880d32f713Shappy-lx  io.l3_req.bits  := DontCare
89289fc2f9SLinJiawei}
90