xref: /XiangShan/src/main/scala/xiangshan/backend/rename/RenameTable.scala (revision c6d439803a044ea209139672b25e35fe8d7f4aa0)
1*c6d43980SLemover/***************************************************************************************
2*c6d43980SLemover* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences
3*c6d43980SLemover*
4*c6d43980SLemover* XiangShan is licensed under Mulan PSL v2.
5*c6d43980SLemover* You can use this software according to the terms and conditions of the Mulan PSL v2.
6*c6d43980SLemover* You may obtain a copy of Mulan PSL v2 at:
7*c6d43980SLemover*          http://license.coscl.org.cn/MulanPSL2
8*c6d43980SLemover*
9*c6d43980SLemover* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
10*c6d43980SLemover* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
11*c6d43980SLemover* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
12*c6d43980SLemover*
13*c6d43980SLemover* See the Mulan PSL v2 for more details.
14*c6d43980SLemover***************************************************************************************/
15*c6d43980SLemover
16b034d3b9SLinJiaweipackage xiangshan.backend.rename
17b034d3b9SLinJiawei
182225d46eSJiawei Linimport chipsalliance.rocketchip.config.Parameters
19b034d3b9SLinJiaweiimport chisel3._
20b034d3b9SLinJiaweiimport chisel3.util._
21b034d3b9SLinJiaweiimport xiangshan._
22b034d3b9SLinJiawei
232225d46eSJiawei Linclass RatReadPort(implicit p: Parameters) extends XSBundle {
24b034d3b9SLinJiawei  val addr = Input(UInt(5.W))
25bed2b789SLinJiawei  val rdata = Output(UInt(PhyRegIdxWidth.W))
26b034d3b9SLinJiawei}
27b034d3b9SLinJiawei
282225d46eSJiawei Linclass RatWritePort(implicit p: Parameters) extends XSBundle {
29b034d3b9SLinJiawei  val wen = Input(Bool())
30b034d3b9SLinJiawei  val addr = Input(UInt(5.W))
31bed2b789SLinJiawei  val wdata = Input(UInt(PhyRegIdxWidth.W))
32b034d3b9SLinJiawei}
33b034d3b9SLinJiawei
342225d46eSJiawei Linclass RenameTable(float: Boolean)(implicit p: Parameters) extends XSModule {
35b034d3b9SLinJiawei  val io = IO(new Bundle() {
362d7c7105SYinan Xu    val redirect = Input(Bool())
372d7c7105SYinan Xu    val flush = Input(Bool())
38b424051cSYinan Xu    val walkWen = Input(Bool())
39b034d3b9SLinJiawei    val readPorts = Vec({if(float) 4 else 3} * RenameWidth, new RatReadPort)
4000ad41d0SYinan Xu    val specWritePorts = Vec(CommitWidth, new RatWritePort)
41b034d3b9SLinJiawei    val archWritePorts = Vec(CommitWidth, new RatWritePort)
422225d46eSJiawei Lin    val debug_rdata = Vec(32, Output(UInt(PhyRegIdxWidth.W)))
43b034d3b9SLinJiawei  })
44b034d3b9SLinJiawei
45b034d3b9SLinJiawei  // speculative rename table
46191cb795SLinJiawei  val spec_table = RegInit(VecInit(Seq.tabulate(32)(i => i.U(PhyRegIdxWidth.W))))
47b034d3b9SLinJiawei
48b034d3b9SLinJiawei  // arch state rename table
49191cb795SLinJiawei  val arch_table = RegInit(VecInit(Seq.tabulate(32)(i => i.U(PhyRegIdxWidth.W))))
50b034d3b9SLinJiawei
51b424051cSYinan Xu  // When redirect happens (mis-prediction), don't update the rename table
52b424051cSYinan Xu  // However, when mis-prediction and walk happens at the same time, rename table needs to be updated
53b034d3b9SLinJiawei  for (w <- io.specWritePorts){
542d7c7105SYinan Xu    when (w.wen && (!(io.redirect || io.flush) || io.walkWen)) {
55b424051cSYinan Xu      spec_table(w.addr) := w.wdata
56b424051cSYinan Xu    }
57b034d3b9SLinJiawei  }
58b034d3b9SLinJiawei
59b034d3b9SLinJiawei  for((r, i) <- io.readPorts.zipWithIndex){
60b034d3b9SLinJiawei    r.rdata := spec_table(r.addr)
61b034d3b9SLinJiawei  }
62b034d3b9SLinJiawei
63b034d3b9SLinJiawei  for(w <- io.archWritePorts){
64b034d3b9SLinJiawei    when(w.wen){ arch_table(w.addr) := w.wdata }
65b034d3b9SLinJiawei  }
66b034d3b9SLinJiawei
672d7c7105SYinan Xu  when (io.flush) {
68b034d3b9SLinJiawei    spec_table := arch_table
69b424051cSYinan Xu    // spec table needs to be updated when flushPipe
70ce4949a0SYinan Xu    for (w <- io.archWritePorts) {
71ce4949a0SYinan Xu      when(w.wen){ spec_table(w.addr) := w.wdata }
72ce4949a0SYinan Xu    }
73b034d3b9SLinJiawei  }
74b034d3b9SLinJiawei
752225d46eSJiawei Lin  io.debug_rdata := arch_table
7644dead2fSZhangZifei}
77