xref: /XiangShan/src/main/scala/xiangshan/package.scala (revision ebd97ecb0965bb584d0fde039539d67d673e7268)
19a2e6b8aSLinJiaweiimport chisel3._
29a2e6b8aSLinJiaweiimport chisel3.util._
39a2e6b8aSLinJiawei
49a2e6b8aSLinJiaweipackage object xiangshan {
59a2e6b8aSLinJiawei  object SrcType {
69a2e6b8aSLinJiawei    def reg = "b00".U
79a2e6b8aSLinJiawei    def pc  = "b01".U
89a2e6b8aSLinJiawei    def imm = "b01".U
99a2e6b8aSLinJiawei    def fp  = "b10".U
109a2e6b8aSLinJiawei    def apply() = UInt(2.W)
119a2e6b8aSLinJiawei  }
129a2e6b8aSLinJiawei
139a2e6b8aSLinJiawei  object SrcState {
149a2e6b8aSLinJiawei    def busy    = "b00".U
159a2e6b8aSLinJiawei    def rdy     = "b01".U
169a2e6b8aSLinJiawei    def specRdy = "b10".U // speculative ready, for future use
179a2e6b8aSLinJiawei    def apply() = UInt(2.W)
189a2e6b8aSLinJiawei  }
199a2e6b8aSLinJiawei
209a2e6b8aSLinJiawei  object FuType extends HasXSParameter {
219a2e6b8aSLinJiawei    def num           = exuConfig.NRFuType
229a2e6b8aSLinJiawei    def bru          = "b0000".U
239a2e6b8aSLinJiawei    def alu          = "b0001".U
249a2e6b8aSLinJiawei    def mul          = "b0010".U
259a2e6b8aSLinJiawei    def mdu          = "b0011".U
269a2e6b8aSLinJiawei    def fmac         = "b0100".U
279a2e6b8aSLinJiawei    def fmisc        = "b0101".U
289a2e6b8aSLinJiawei    def fmiscDivSqrt = "b0110".U
299a2e6b8aSLinJiawei    def ldu          = "b1001".U
309a2e6b8aSLinJiawei    def stu          = "b1000".U
319a2e6b8aSLinJiawei
329a2e6b8aSLinJiawei    def apply() = UInt(log2Up(num).W)
339a2e6b8aSLinJiawei
349a2e6b8aSLinJiawei    def isIntExu(fuType: UInt) =  fuType(3, 2) === "b00".U
359a2e6b8aSLinJiawei    def isFpExu(fuType: UInt) = fuType(2)
369a2e6b8aSLinJiawei    def isMemExu(fuType: UInt) = fuType(3)
379a2e6b8aSLinJiawei  }
389a2e6b8aSLinJiawei
399a2e6b8aSLinJiawei  object FuOpType extends HasXSParameter {
409a2e6b8aSLinJiawei    def apply() = UInt(exuConfig.FuOpWidth.W)
419a2e6b8aSLinJiawei  }
42*ebd97ecbSzhanglinjuan
43*ebd97ecbSzhanglinjuan  object BTBtype {
44*ebd97ecbSzhanglinjuan    def B = "b00".U  // branch
45*ebd97ecbSzhanglinjuan    def J = "b01".U  // jump
46*ebd97ecbSzhanglinjuan    def I = "b10".U  // indirect
47*ebd97ecbSzhanglinjuan    def R = "b11".U  // return
48*ebd97ecbSzhanglinjuan
49*ebd97ecbSzhanglinjuan    def apply() = UInt(2.W)
50*ebd97ecbSzhanglinjuan  }
519a2e6b8aSLinJiawei}
52