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