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