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