xref: /XiangShan/src/main/scala/xiangshan/cache/CacheInstruction.scala (revision ad3ba452dbdc06e3b547303da7c55a686bd6b50c)
1*ad3ba452Szhanglinjuanpackage xiangshan.cache
2*ad3ba452Szhanglinjuan
3*ad3ba452Szhanglinjuanimport chisel3._
4*ad3ba452Szhanglinjuanimport chisel3.util._
5*ad3ba452Szhanglinjuanimport xiangshan._
6*ad3ba452Szhanglinjuanimport xiangshan.frontend._
7*ad3ba452Szhanglinjuanimport utils._
8*ad3ba452Szhanglinjuanimport chipsalliance.rocketchip.config.Parameters
9*ad3ba452Szhanglinjuan
10*ad3ba452Szhanglinjuanobject CacheOpMap{
11*ad3ba452Szhanglinjuan  def apply(opcode: String, optype: String,  name: String ): Map[String, String] = {
12*ad3ba452Szhanglinjuan    Map(
13*ad3ba452Szhanglinjuan      "opcode" -> opcode,
14*ad3ba452Szhanglinjuan      "optype" -> optype,
15*ad3ba452Szhanglinjuan      "name"   -> name,
16*ad3ba452Szhanglinjuan    )
17*ad3ba452Szhanglinjuan  }
18*ad3ba452Szhanglinjuan}
19*ad3ba452Szhanglinjuan
20*ad3ba452Szhanglinjuanobject CacheRegMap{
21*ad3ba452Szhanglinjuan  def apply(offset: String,  width: String, authority: String, name: String ): Pair[String, Map[String, String]] = {
22*ad3ba452Szhanglinjuan    name -> Map(
23*ad3ba452Szhanglinjuan      "offset" -> offset,
24*ad3ba452Szhanglinjuan      "width"  -> width,
25*ad3ba452Szhanglinjuan      "authority" -> authority,
26*ad3ba452Szhanglinjuan    )
27*ad3ba452Szhanglinjuan  }
28*ad3ba452Szhanglinjuan}
29*ad3ba452Szhanglinjuan
30*ad3ba452Szhanglinjuantrait CacheControlConst{
31*ad3ba452Szhanglinjuan  def maxDataRowSupport = 8
32*ad3ba452Szhanglinjuan}
33*ad3ba452Szhanglinjuan
34*ad3ba452Szhanglinjuanobject CacheInstrucion{
35*ad3ba452Szhanglinjuan  def CacheOperation = List(
36*ad3ba452Szhanglinjuan    CacheOpMap("b00000", "CHECK",  "READ_TAG_ECC"),
37*ad3ba452Szhanglinjuan    CacheOpMap("b00001", "CHECK",  "READ_DATA_ECC"),
38*ad3ba452Szhanglinjuan    CacheOpMap("b00010", "LOAD",   "READ_TAG"),
39*ad3ba452Szhanglinjuan    CacheOpMap("b00011", "LOAD",   "READ_DATA"),
40*ad3ba452Szhanglinjuan    CacheOpMap("b00100", "STORE",  "WRITE_TAG_ECC"),
41*ad3ba452Szhanglinjuan    CacheOpMap("b00101", "STORE",  "WRITE_DATA_ECC"),
42*ad3ba452Szhanglinjuan    CacheOpMap("b00110", "STORE",  "WRITE_TAG"),
43*ad3ba452Szhanglinjuan    CacheOpMap("b00111", "STORE",  "WRITE_DATA"),
44*ad3ba452Szhanglinjuan    CacheOpMap("b01000", "FLUSH",  "FLUSH_BLOCK")
45*ad3ba452Szhanglinjuan  )
46*ad3ba452Szhanglinjuan
47*ad3ba452Szhanglinjuan  def CacheInsRegisterList = Map(
48*ad3ba452Szhanglinjuan    /**         offset    width     authority   name */
49*ad3ba452Szhanglinjuan    CacheRegMap("0",      "64",     "RW",       "CACHE_LEVEL"),
50*ad3ba452Szhanglinjuan    CacheRegMap("1",      "64",     "RW",       "CACHE_WAY"),
51*ad3ba452Szhanglinjuan    CacheRegMap("2",      "64",     "RW",       "CACHE_IDX"),
52*ad3ba452Szhanglinjuan    CacheRegMap("3",      "64",     "RW",       "CACHE_TAG_ECC"),
53*ad3ba452Szhanglinjuan    CacheRegMap("4",      "64",     "RW",       "CACHE_TAG_BITS"),
54*ad3ba452Szhanglinjuan    CacheRegMap("5",      "64",     "RW",       "CACHE_TAG_LOW"),
55*ad3ba452Szhanglinjuan    CacheRegMap("6",      "64",     "RW",       "CACHE_TAG_HIGH"),
56*ad3ba452Szhanglinjuan    CacheRegMap("7",      "64",     "R",        "CACHE_ECC_WIDTH"),
57*ad3ba452Szhanglinjuan    CacheRegMap("8",      "64",     "RW",       "CACHE_ECC_NUM"),
58*ad3ba452Szhanglinjuan    CacheRegMap("9",      "64",     "RW",       "CACHE_DATA_ECC"),
59*ad3ba452Szhanglinjuan    CacheRegMap("10",     "64",     "RW",       "CACHE_DATA_0"),
60*ad3ba452Szhanglinjuan    CacheRegMap("11",     "64",     "RW",       "CACHE_DATA_1"),
61*ad3ba452Szhanglinjuan    CacheRegMap("12",     "64",     "RW",       "CACHE_DATA_2"),
62*ad3ba452Szhanglinjuan    CacheRegMap("13",     "64",     "RW",       "CACHE_DATA_3"),
63*ad3ba452Szhanglinjuan    CacheRegMap("14",     "64",     "RW",       "CACHE_DATA_4"),
64*ad3ba452Szhanglinjuan    CacheRegMap("15",     "64",     "RW",       "CACHE_DATA_5"),
65*ad3ba452Szhanglinjuan    CacheRegMap("16",     "64",     "RW",       "CACHE_DATA_6"),
66*ad3ba452Szhanglinjuan    CacheRegMap("17",     "64",     "RW",       "CACHE_DATA_7"),
67*ad3ba452Szhanglinjuan    CacheRegMap("18",     "64",     "R",        "OP_FINISH") ,
68*ad3ba452Szhanglinjuan    CacheRegMap("19",     "64",     "RW",       "CACHE_OP")
69*ad3ba452Szhanglinjuan  )
70*ad3ba452Szhanglinjuan
71*ad3ba452Szhanglinjuan  def COP_CHECK = 0.U
72*ad3ba452Szhanglinjuan  def COP_LOAD  = 1.U
73*ad3ba452Szhanglinjuan  def COP_STORE = 2.U
74*ad3ba452Szhanglinjuan  def COP_FLUSH = 3.U
75*ad3ba452Szhanglinjuan
76*ad3ba452Szhanglinjuan  def isReadTagECC(opcode: UInt)            = opcode === "b00000".U
77*ad3ba452Szhanglinjuan  def isReadDataECC(opcode: UInt)           = opcode === "b00001".U
78*ad3ba452Szhanglinjuan  def isReadTag(opcode: UInt)               = opcode === "b00010".U
79*ad3ba452Szhanglinjuan  def isReadData(opcode: UInt)              = opcode === "b00011".U
80*ad3ba452Szhanglinjuan  def isWriteTagECC(opcode: UInt)           = opcode === "b00101".U
81*ad3ba452Szhanglinjuan  def isWriteTag(opcode: UInt)              = opcode === "b00110".U
82*ad3ba452Szhanglinjuan  def isWriteData(opcode: UInt)             = opcode === "b00111".U
83*ad3ba452Szhanglinjuan  def isFlush(opcode: UInt)                 = opcode === "b01000".U
84*ad3ba452Szhanglinjuan}
85*ad3ba452Szhanglinjuan
86*ad3ba452Szhanglinjuanclass CacheCtrlReqInfo(implicit p: Parameters) extends XSBundle with CacheControlConst {
87*ad3ba452Szhanglinjuan  val wayNum          = UInt(XLEN.W)
88*ad3ba452Szhanglinjuan  val index           = UInt(XLEN.W)
89*ad3ba452Szhanglinjuan  val opCode          = UInt(XLEN.W)
90*ad3ba452Szhanglinjuan  val write_tag_high  = UInt(XLEN.W)
91*ad3ba452Szhanglinjuan  val write_tag_low   = UInt(XLEN.W)
92*ad3ba452Szhanglinjuan  val write_tag_ecc   = UInt(XLEN.W)
93*ad3ba452Szhanglinjuan  val write_data_vec  = Vec(maxDataRowSupport, UInt(XLEN.W))
94*ad3ba452Szhanglinjuan  val write_data_ecc  = UInt(XLEN.W)
95*ad3ba452Szhanglinjuan  val ecc_num         = UInt(XLEN.W)
96*ad3ba452Szhanglinjuan}
97*ad3ba452Szhanglinjuan
98*ad3ba452Szhanglinjuanclass CacheCtrlRespInfo(implicit p: Parameters) extends XSBundle with HasICacheParameters with CacheControlConst{
99*ad3ba452Szhanglinjuan  val read_tag_high  = UInt(XLEN.W)
100*ad3ba452Szhanglinjuan  val read_tag_low   = UInt(XLEN.W)
101*ad3ba452Szhanglinjuan  val read_tag_ecc   = UInt(XLEN.W)
102*ad3ba452Szhanglinjuan  val read_data_vec  = Vec(maxDataRowSupport, UInt(XLEN.W))
103*ad3ba452Szhanglinjuan  val read_data_ecc  = UInt(XLEN.W)
104*ad3ba452Szhanglinjuan  val ecc_num        = UInt(XLEN.W)
105*ad3ba452Szhanglinjuan}
106*ad3ba452Szhanglinjuan
107*ad3ba452Szhanglinjuan
108*ad3ba452Szhanglinjuan// class CSRCacheInsIO(implicit p: Parameters) extends XSModule{
109*ad3ba452Szhanglinjuan//   // TODO: extend pmp cfg interface
110*ad3ba452Szhanglinjuan// }
111