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._ 24*25a80bceSYanqin Liimport xiangshan.backend.fu.PMPRespBundle 25289fc2f9SLinJiaweiimport xiangshan.cache.mmu.TlbRequestIO 260d32f713Shappy-lximport xiangshan.mem.{LdPrefetchTrainBundle, StPrefetchTrainBundle, L1PrefetchReq} 276810d1e8Ssfencevmaimport xiangshan.backend._ 280d32f713Shappy-lx 290d32f713Shappy-lxclass L2PrefetchReq(implicit p: Parameters) extends XSBundle { 300d32f713Shappy-lx val addr = UInt(PAddrBits.W) 310d32f713Shappy-lx val source = UInt(MemReqSource.reqSourceBits.W) 320d32f713Shappy-lx} 33289fc2f9SLinJiawei 34289fc2f9SLinJiaweiclass PrefetcherIO()(implicit p: Parameters) extends XSBundle { 35272ec6b1SHaojin Tang val ld_in = Flipped(Vec(backendParams.LdExuCnt, ValidIO(new LdPrefetchTrainBundle()))) 36272ec6b1SHaojin Tang val st_in = Flipped(Vec(backendParams.StaExuCnt, ValidIO(new StPrefetchTrainBundle()))) 37289fc2f9SLinJiawei val tlb_req = new TlbRequestIO(nRespDups = 2) 38*25a80bceSYanqin Li val pmp_resp = Flipped(new PMPRespBundle()) 39967327d8SLinJiawei val l1_req = DecoupledIO(new L1PrefetchReq()) 400d32f713Shappy-lx val l2_req = ValidIO(new L2PrefetchReq()) 410d32f713Shappy-lx val l3_req = ValidIO(UInt(PAddrBits.W)) // TODO: l3 pf source 4285de5caeSLinJiawei val enable = Input(Bool()) 43289fc2f9SLinJiawei} 44289fc2f9SLinJiawei 450d32f713Shappy-lxclass PrefetchReqBundle()(implicit p: Parameters) extends XSBundle { 460d32f713Shappy-lx val vaddr = UInt(VAddrBits.W) 470d32f713Shappy-lx val paddr = UInt(PAddrBits.W) 480d32f713Shappy-lx val pc = UInt(VAddrBits.W) 4920e09ab1Shappy-lx val miss = Bool() 50f4221883Shappy-lx val pfHitStream = Bool() 510d32f713Shappy-lx} 520d32f713Shappy-lx 53289fc2f9SLinJiaweitrait PrefetcherParams 54289fc2f9SLinJiawei 55289fc2f9SLinJiaweiabstract class BasePrefecher()(implicit p: Parameters) extends XSModule { 56289fc2f9SLinJiawei val io = IO(new PrefetcherIO()) 570d32f713Shappy-lx 580d32f713Shappy-lx io.l3_req.valid := false.B 590d32f713Shappy-lx io.l3_req.bits := DontCare 60289fc2f9SLinJiawei}