xref: /XiangShan/src/main/scala/xiangshan/backend/fu/wrapper/VSet.scala (revision d91483a658064c7276ee0181b0c527a3e2a7d2ee)
1package xiangshan.backend.fu.wrapper
2
3import chipsalliance.rocketchip.config.Parameters
4import chisel3._
5import xiangshan.backend.fu.{FuConfig, FuncUnit, VsetModule}
6
7class VSetIVL(cfg: FuConfig)(implicit p: Parameters) extends FuncUnit(cfg) {
8  private val vsetModule = Module(new VsetModule)
9
10  private val flushed = io.in.bits.robIdx.needFlush(io.flush)
11
12  io.out.valid := io.in.valid
13  io.in.ready := io.out.ready
14
15  private val in = io.in.bits
16  private val out = io.out.bits
17  vsetModule.io.src0 := in.src(0)
18  vsetModule.io.src1 := in.src(1)
19  vsetModule.io.func := in.fuOpType
20  vsetModule.io.oldVConfig := 0.U
21  out.data := vsetModule.io.vl
22  connectNonPipedCtrlSingal
23}
24
25class VSetIVConfig(cfg: FuConfig)(implicit p: Parameters) extends FuncUnit(cfg) {
26  private val vsetModule = Module(new VsetModule)
27
28  private val flushed = io.in.bits.robIdx.needFlush(io.flush)
29
30  io.out.valid := io.in.valid
31  io.in.ready := io.out.ready
32
33  private val in = io.in.bits
34  private val out = io.out.bits
35  vsetModule.io.src0 := in.src(0)
36  vsetModule.io.src1 := in.src(1)
37  vsetModule.io.func := in.fuOpType
38  vsetModule.io.oldVConfig := 0.U
39  out.data := vsetModule.io.vconfig
40  connectNonPipedCtrlSingal
41}
42
43class VSetFVConfig(cfg: FuConfig)(implicit p: Parameters) extends FuncUnit(cfg) {
44  private val vsetModule = Module(new VsetModule)
45
46  private val flushed = io.in.bits.robIdx.needFlush(io.flush)
47
48  io.out.valid := io.in.valid
49  io.in.ready := io.out.ready
50
51  private val in = io.in.bits
52  private val out = io.out.bits
53  vsetModule.io.src0 := 0.U
54  vsetModule.io.src1 := in.src(1)
55  vsetModule.io.func := in.fuOpType
56  vsetModule.io.oldVConfig := in.src(0)
57  out.data := vsetModule.io.vconfig
58  connectNonPipedCtrlSingal
59}