xref: /XiangShan/src/main/scala/xiangshan/package.scala (revision 518d86588c9b2d06b514bf268da5d10fc897f3e8)
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
1004b56283SZhangZifei
1104b56283SZhangZifei    def isReg(srcType: UInt) = srcType===reg
1204b56283SZhangZifei    def isPc(srcType: UInt) = srcType===pc
1304b56283SZhangZifei    def isImm(srcType: UInt) = srcType===imm
1404b56283SZhangZifei    def isFp(srcType: UInt) = srcType===fp
155c321a22SZhangZifei    def isPcImm(srcType: UInt) = isPc(srcType) || isImm(srcType)
165c321a22SZhangZifei    def isRegFp(srcType: UInt) = isReg(srcType) || isFp(srcType)
1704b56283SZhangZifei
189a2e6b8aSLinJiawei    def apply() = UInt(2.W)
199a2e6b8aSLinJiawei  }
209a2e6b8aSLinJiawei
219a2e6b8aSLinJiawei  object SrcState {
229a2e6b8aSLinJiawei    def busy    = "b00".U
239a2e6b8aSLinJiawei    def rdy     = "b01".U
249a2e6b8aSLinJiawei    def specRdy = "b10".U // speculative ready, for future use
259a2e6b8aSLinJiawei    def apply() = UInt(2.W)
269a2e6b8aSLinJiawei  }
279a2e6b8aSLinJiawei
289a2e6b8aSLinJiawei  object FuType extends HasXSParameter {
29cafb3558SLinJiawei    def num           = exuParameters.NRFuType
30cafb3558SLinJiawei
31cafb3558SLinJiawei    def jmp          = "b0000".U
32cafb3558SLinJiawei    def i2f          = "b0001".U
33cafb3558SLinJiawei    def csr          = "b0010".U
34cafb3558SLinJiawei    def alu          = "b0011".U
35cafb3558SLinJiawei    def mul          = "b0100".U
36cafb3558SLinJiawei    def div          = "b0101".U
37cafb3558SLinJiawei
38cafb3558SLinJiawei    def fmac         = "b1000".U
39cafb3558SLinJiawei    def fmisc        = "b1001".U
40cafb3558SLinJiawei    def fDivSqrt     = "b1010".U
41cafb3558SLinJiawei
42cafb3558SLinJiawei    def ldu          = "b1100".U
43cafb3558SLinJiawei    def stu          = "b1101".U
449a2e6b8aSLinJiawei
459a2e6b8aSLinJiawei    def apply() = UInt(log2Up(num).W)
469a2e6b8aSLinJiawei
47cafb3558SLinJiawei    def isIntExu(fuType: UInt) =  !fuType(3)
48cafb3558SLinJiawei    def isFpExu(fuType: UInt) = fuType(3, 2) === "b10".U
49cafb3558SLinJiawei    def isMemExu(fuType: UInt) = fuType(3, 2) === "b11".U
50cafb3558SLinJiawei
51cafb3558SLinJiawei    val functionNameMap = Map(
52cafb3558SLinJiawei      jmp.litValue() -> "jmp",
53cafb3558SLinJiawei      i2f.litValue() -> "int to float",
54cafb3558SLinJiawei      csr.litValue() -> "csr",
55cafb3558SLinJiawei      alu.litValue() -> "alu",
56cafb3558SLinJiawei      mul.litValue() -> "mul",
57cafb3558SLinJiawei      div.litValue() -> "div",
58cafb3558SLinJiawei      fmac.litValue() -> "fmac",
59cafb3558SLinJiawei      fmisc.litValue() -> "fmisc",
60cafb3558SLinJiawei      fDivSqrt.litValue() -> "fdiv/fsqrt",
61cafb3558SLinJiawei      ldu.litValue() -> "load",
62cafb3558SLinJiawei      stu.litValue() -> "store"
63cafb3558SLinJiawei    )
64cafb3558SLinJiawei
659a2e6b8aSLinJiawei  }
669a2e6b8aSLinJiawei
679a2e6b8aSLinJiawei  object FuOpType extends HasXSParameter {
68cafb3558SLinJiawei    def apply() = UInt(exuParameters.FuOpWidth.W)
699a2e6b8aSLinJiawei  }
70ebd97ecbSzhanglinjuan
71ebd97ecbSzhanglinjuan  object BTBtype {
72ebd97ecbSzhanglinjuan    def B = "b00".U  // branch
73ebd97ecbSzhanglinjuan    def J = "b01".U  // jump
74ebd97ecbSzhanglinjuan    def I = "b10".U  // indirect
75ebd97ecbSzhanglinjuan    def R = "b11".U  // return
76ebd97ecbSzhanglinjuan
77ebd97ecbSzhanglinjuan    def apply() = UInt(2.W)
78ebd97ecbSzhanglinjuan  }
79*518d8658SYinan Xu
80*518d8658SYinan Xu  object DPQType {
81*518d8658SYinan Xu    def INT = "b00".U // int dispatch
82*518d8658SYinan Xu    def FP = "b01".U // fp dispatch
83*518d8658SYinan Xu    def LS = "b10".U // ls dispatch
84*518d8658SYinan Xu
85*518d8658SYinan Xu    def apply() = UInt(2.W)
86*518d8658SYinan Xu  }
879a2e6b8aSLinJiawei}
88