xref: /XiangShan/src/main/scala/xiangshan/backend/fu/NewCSR/StateEnBundle.scala (revision 26033c52423227b765eaa12b5d2a2a1dd983ff14)
1*26033c52Schengguanghuipackage xiangshan.backend.fu.NewCSR
2*26033c52Schengguanghui
3*26033c52Schengguanghuiimport chisel3._
4*26033c52Schengguanghuiimport xiangshan.backend.fu.NewCSR.CSRDefines.{CSRROField => RO, CSRRWField => RW}
5*26033c52Schengguanghuiimport xiangshan.backend.fu.NewCSR.CSRBundles.PrivState
6*26033c52Schengguanghui
7*26033c52Schengguanghui
8*26033c52Schengguanghuiclass SstateenBundle0 extends CSRBundle {
9*26033c52Schengguanghui  override val len: Int = 32
10*26033c52Schengguanghui  val JVT  = RO(2).withReset(0.U) // jvt CSR in Zcmt extension
11*26033c52Schengguanghui  val FCSR = RO(1).withReset(0.U) // fp inst op 'x' register not f in Zfinx, Zdinx; misa.F =1 -> RO 0; misa.F=0 & this=0 -> V/EX_II
12*26033c52Schengguanghui  val C    = RW(0).withReset(1.U) // custom state enable, [m|h|s]stateen is standard, not custom.
13*26033c52Schengguanghui}
14*26033c52Schengguanghui
15*26033c52Schengguanghuiclass HstateenBundle0 extends SstateenBundle0 {
16*26033c52Schengguanghui  override val len: Int = 64
17*26033c52Schengguanghui  val SE0     = RW(63).withReset(1.U) // m: [h|s]stateen                h: sstateen
18*26033c52Schengguanghui  val ENVCFG  = RW(62).withReset(1.U) // m: [h|s]envcfg                 h: senvcfg
19*26033c52Schengguanghui  // Bits in any stateen CSR that are defined to control state that a hart doesn’t implement are read-only
20*26033c52Schengguanghui  // zeros for that hart. Smcsrind/Sscsrind is not implemented.
21*26033c52Schengguanghui  val CSRIND  = RO(60).withReset(1.U) // m: [vs|s]iselect, [vs|s]ireg*  h: siselect, sireg*
22*26033c52Schengguanghui  val AIA     = RW(59).withReset(1.U) // all other state added by the AIA and not controlled by bits 60 and 58
23*26033c52Schengguanghui  val IMSIC   = RW(58).withReset(1.U) // m: [vs|s]topei                 h: stopei
24*26033c52Schengguanghui  val CONTEXT = RO(57).withReset(0.U) // m: [h|s]context in Sdtrig      h: scontext
25*26033c52Schengguanghui}
26*26033c52Schengguanghui
27*26033c52Schengguanghuiclass MstateenBundle0 extends HstateenBundle0 {
28*26033c52Schengguanghui  val P1P13   = RO(56).withReset(0.U) // hedelegh in Priv Spec V1.13
29*26033c52Schengguanghui}
30*26033c52Schengguanghui
31*26033c52Schengguanghuitrait HasStateen0Bundle { self: CSRModule[_] =>
32*26033c52Schengguanghui  val fromMstateen0 = IO(Input(new MstateenBundle0))
33*26033c52Schengguanghui  val fromHstateen0 = IO(Input(new HstateenBundle0))
34*26033c52Schengguanghui  val privState     = IO(Input(new PrivState))
35*26033c52Schengguanghui}
36