1package xiangshan.frontend 2import utils.XSInfo 3import chisel3._ 4import chisel3.util._ 5import utils.PipelineConnect 6import xiangshan._ 7import xiangshan.cache._ 8 9 10class Frontend extends XSModule { 11 val io = IO(new Bundle() { 12 val icacheMemAcq = DecoupledIO(new L1plusCacheReq) 13 val icacheMemGrant = Flipped(DecoupledIO(new L1plusCacheResp)) 14 val l1plusFlush = Output(Bool()) 15 val fencei = Input(Bool()) 16 val ptw = new TlbPtwIO 17 val backend = new FrontendToBackendIO 18 val sfence = Input(new SfenceBundle) 19 val tlbCsr = Input(new TlbCsrBundle) 20 }) 21 22 val ifu = Module(new IFU) 23 val ibuffer = Module(new Ibuffer) 24 25 26 val needFlush = io.backend.redirect.valid 27 28 // from backend 29 ifu.io.redirect <> io.backend.redirect 30 ifu.io.cfiUpdateInfo <> io.backend.cfiUpdateInfo 31 // to icache 32 ifu.io.icacheMemGrant <> io.icacheMemGrant 33 ifu.io.fencei := io.fencei 34 // to tlb 35 ifu.io.sfence := io.sfence 36 ifu.io.tlbCsr := io.tlbCsr 37 // from icache 38 io.l1plusFlush := ifu.io.l1plusFlush 39 io.icacheMemAcq <> ifu.io.icacheMemAcq 40 // itlb to ptw 41 io.ptw <> ifu.io.ptw 42 // ifu to ibuffer 43 ibuffer.io.in <> ifu.io.fetchPacket 44 // backend to ibuffer 45 ibuffer.io.flush := needFlush 46 // ibuffer to backend 47 io.backend.cfVec <> ibuffer.io.out 48 49 // for(out <- ibuffer.io.out){ 50 // XSInfo(out.fire(), 51 // p"inst:${Hexadecimal(out.bits.instr)} pc:${Hexadecimal(out.bits.pc)}\n" 52 // ) 53 // } 54 55 56}