xref: /XiangShan/src/main/scala/xiangshan/frontend/Frontend.scala (revision b086c6da80b5e7e939f9ce8dde0b13f881c26a65)
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}