xref: /XiangShan/src/main/scala/xiangshan/package.scala (revision cafb355860832e74823efc10f9ea6c557461a10d)
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 {
29*cafb3558SLinJiawei    def num           = exuParameters.NRFuType
30*cafb3558SLinJiawei
31*cafb3558SLinJiawei    def jmp          = "b0000".U
32*cafb3558SLinJiawei    def i2f          = "b0001".U
33*cafb3558SLinJiawei    def csr          = "b0010".U
34*cafb3558SLinJiawei    def alu          = "b0011".U
35*cafb3558SLinJiawei    def mul          = "b0100".U
36*cafb3558SLinJiawei    def div          = "b0101".U
37*cafb3558SLinJiawei
38*cafb3558SLinJiawei    def fmac         = "b1000".U
39*cafb3558SLinJiawei    def fmisc        = "b1001".U
40*cafb3558SLinJiawei    def fDivSqrt     = "b1010".U
41*cafb3558SLinJiawei
42*cafb3558SLinJiawei    def ldu          = "b1100".U
43*cafb3558SLinJiawei    def stu          = "b1101".U
449a2e6b8aSLinJiawei
459a2e6b8aSLinJiawei    def apply() = UInt(log2Up(num).W)
469a2e6b8aSLinJiawei
47*cafb3558SLinJiawei    def isIntExu(fuType: UInt) =  !fuType(3)
48*cafb3558SLinJiawei    def isFpExu(fuType: UInt) = fuType(3, 2) === "b10".U
49*cafb3558SLinJiawei    def isMemExu(fuType: UInt) = fuType(3, 2) === "b11".U
50*cafb3558SLinJiawei
51*cafb3558SLinJiawei    val functionNameMap = Map(
52*cafb3558SLinJiawei      jmp.litValue() -> "jmp",
53*cafb3558SLinJiawei      i2f.litValue() -> "int to float",
54*cafb3558SLinJiawei      csr.litValue() -> "csr",
55*cafb3558SLinJiawei      alu.litValue() -> "alu",
56*cafb3558SLinJiawei      mul.litValue() -> "mul",
57*cafb3558SLinJiawei      div.litValue() -> "div",
58*cafb3558SLinJiawei      fmac.litValue() -> "fmac",
59*cafb3558SLinJiawei      fmisc.litValue() -> "fmisc",
60*cafb3558SLinJiawei      fDivSqrt.litValue() -> "fdiv/fsqrt",
61*cafb3558SLinJiawei      ldu.litValue() -> "load",
62*cafb3558SLinJiawei      stu.litValue() -> "store"
63*cafb3558SLinJiawei    )
64*cafb3558SLinJiawei
659a2e6b8aSLinJiawei  }
669a2e6b8aSLinJiawei
679a2e6b8aSLinJiawei  object FuOpType extends HasXSParameter {
68*cafb3558SLinJiawei    def apply() = UInt(exuParameters.FuOpWidth.W)
699a2e6b8aSLinJiawei  }
709a2e6b8aSLinJiawei}
71