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 19289fc2f9SLinJiaweiimport chisel3._ 20289fc2f9SLinJiaweiimport chisel3.util._ 218891a219SYinan Xuimport org.chipsalliance.cde.config.Parameters 22ffc9de54Swakafaimport utility.MemReqSource 23289fc2f9SLinJiaweiimport xiangshan._ 2425a80bceSYanqin Liimport xiangshan.backend.fu.PMPRespBundle 25289fc2f9SLinJiaweiimport xiangshan.cache.mmu.TlbRequestIO 260d32f713Shappy-lximport xiangshan.mem.{LdPrefetchTrainBundle, StPrefetchTrainBundle, L1PrefetchReq} 276810d1e8Ssfencevmaimport xiangshan.backend._ 28*881e32f5SZifei Zhangimport coupledL2.PrefetchCtrlFromCore 29*881e32f5SZifei Zhang 30*881e32f5SZifei Zhangclass PrefetchCtrl(implicit p: Parameters) extends XSBundle { 31*881e32f5SZifei Zhang val l1I_pf_enable = Bool() 32*881e32f5SZifei Zhang val l2_pf_enable = Bool() 33*881e32f5SZifei Zhang val l1D_pf_enable = Bool() 34*881e32f5SZifei Zhang val l1D_pf_train_on_hit = Bool() 35*881e32f5SZifei Zhang val l1D_pf_enable_agt = Bool() 36*881e32f5SZifei Zhang val l1D_pf_enable_pht = Bool() 37*881e32f5SZifei Zhang val l1D_pf_active_threshold = UInt(4.W) 38*881e32f5SZifei Zhang val l1D_pf_active_stride = UInt(6.W) 39*881e32f5SZifei Zhang val l1D_pf_enable_stride = Bool() 40*881e32f5SZifei Zhang val l2_pf_store_only = Bool() 41*881e32f5SZifei Zhang val l2_pf_recv_enable = Bool() 42*881e32f5SZifei Zhang val l2_pf_pbop_enable = Bool() 43*881e32f5SZifei Zhang val l2_pf_vbop_enable = Bool() 44*881e32f5SZifei Zhang val l2_pf_tp_enable = Bool() 45*881e32f5SZifei Zhang 46*881e32f5SZifei Zhang def toL2PrefetchCtrl(): PrefetchCtrlFromCore = { 47*881e32f5SZifei Zhang val res = Wire(new PrefetchCtrlFromCore) 48*881e32f5SZifei Zhang res.l2_pf_master_en := l2_pf_enable 49*881e32f5SZifei Zhang res.l2_pf_recv_en := l2_pf_recv_enable 50*881e32f5SZifei Zhang res.l2_pbop_en := l2_pf_pbop_enable 51*881e32f5SZifei Zhang res.l2_vbop_en := l2_pf_vbop_enable 52*881e32f5SZifei Zhang res.l2_tp_en := l2_pf_tp_enable 53*881e32f5SZifei Zhang res 54*881e32f5SZifei Zhang } 55*881e32f5SZifei Zhang} 560d32f713Shappy-lx 570d32f713Shappy-lxclass L2PrefetchReq(implicit p: Parameters) extends XSBundle { 580d32f713Shappy-lx val addr = UInt(PAddrBits.W) 590d32f713Shappy-lx val source = UInt(MemReqSource.reqSourceBits.W) 600d32f713Shappy-lx} 61289fc2f9SLinJiawei 62289fc2f9SLinJiaweiclass PrefetcherIO()(implicit p: Parameters) extends XSBundle { 63272ec6b1SHaojin Tang val ld_in = Flipped(Vec(backendParams.LdExuCnt, ValidIO(new LdPrefetchTrainBundle()))) 64272ec6b1SHaojin Tang val st_in = Flipped(Vec(backendParams.StaExuCnt, ValidIO(new StPrefetchTrainBundle()))) 65289fc2f9SLinJiawei val tlb_req = new TlbRequestIO(nRespDups = 2) 6625a80bceSYanqin Li val pmp_resp = Flipped(new PMPRespBundle()) 67967327d8SLinJiawei val l1_req = DecoupledIO(new L1PrefetchReq()) 680d32f713Shappy-lx val l2_req = ValidIO(new L2PrefetchReq()) 690d32f713Shappy-lx val l3_req = ValidIO(UInt(PAddrBits.W)) // TODO: l3 pf source 7085de5caeSLinJiawei val enable = Input(Bool()) 71289fc2f9SLinJiawei} 72289fc2f9SLinJiawei 730d32f713Shappy-lxclass PrefetchReqBundle()(implicit p: Parameters) extends XSBundle { 740d32f713Shappy-lx val vaddr = UInt(VAddrBits.W) 750d32f713Shappy-lx val paddr = UInt(PAddrBits.W) 760d32f713Shappy-lx val pc = UInt(VAddrBits.W) 7720e09ab1Shappy-lx val miss = Bool() 78f4221883Shappy-lx val pfHitStream = Bool() 790d32f713Shappy-lx} 800d32f713Shappy-lx 81289fc2f9SLinJiaweitrait PrefetcherParams 82289fc2f9SLinJiawei 83289fc2f9SLinJiaweiabstract class BasePrefecher()(implicit p: Parameters) extends XSModule { 84289fc2f9SLinJiawei val io = IO(new PrefetcherIO()) 850d32f713Shappy-lx 860d32f713Shappy-lx io.l3_req.valid := false.B 870d32f713Shappy-lx io.l3_req.bits := DontCare 88289fc2f9SLinJiawei}