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 icacheReq = DecoupledIO(new ICacheReq) 13 val icacheResp = Flipped(DecoupledIO(new ICacheResp)) 14 val icacheFlush = Output(UInt(2.W)) 15 val backend = new FrontendToBackendIO 16 }) 17 18 val ifu = Module(new IFU) 19 val ibuffer = if(EnableLB) Module(new LoopBuffer) else Module(new Ibuffer) 20 21 val needFlush = io.backend.redirect.valid 22 23 //backend 24 ifu.io.redirect <> io.backend.redirect 25 ifu.io.inOrderBrInfo <> io.backend.inOrderBrInfo 26 ifu.io.outOfOrderBrInfo <> io.backend.outOfOrderBrInfo 27 //icache 28 io.icacheReq <> ifu.io.icacheReq 29 io.icacheFlush <> ifu.io.icacheFlush 30 ifu.io.icacheResp <> io.icacheResp 31 //ibuffer 32 ibuffer.io.in <> ifu.io.fetchPacket 33 ibuffer.io.flush := needFlush 34 35 io.backend.cfVec <> ibuffer.io.out 36 37 for(out <- ibuffer.io.out){ 38 XSInfo(out.fire(), 39 p"inst:${Hexadecimal(out.bits.instr)} pc:${Hexadecimal(out.bits.pc)}\n" 40 ) 41 } 42 43 44} 45