1package xiangshan.backend.fu.NewCSR.CSREvents 2 3import chisel3._ 4import chisel3.util._ 5import org.chipsalliance.cde.config.Parameters 6import utility.{SignExt, ZeroExt} 7import xiangshan.{ExceptionNO, HasXSParameter} 8import xiangshan.ExceptionNO._ 9import xiangshan.backend.fu.NewCSR.CSRBundles.{CauseBundle, OneFieldBundle, PrivState} 10import xiangshan.backend.fu.NewCSR.CSRConfig._ 11import xiangshan.backend.fu.NewCSR.CSRDefines._ 12import xiangshan.backend.fu.NewCSR._ 13import xiangshan.backend.fu.util.CSRConst 14 15trait CSREvents { self: NewCSR => 16 val trapEntryMEvent = Module(new TrapEntryMEventModule) 17 18 val trapEntryHSEvent = Module(new TrapEntryHSEventModule) 19 20 val trapEntryVSEvent = Module(new TrapEntryVSEventModule) 21 22 val mretEvent = Module(new MretEventModule) 23 24 val sretEvent = Module(new SretEventModule) 25 26 val events: Seq[Module with CSREventBase] = Seq( 27 trapEntryMEvent, 28 trapEntryHSEvent, 29 trapEntryVSEvent, 30 mretEvent, 31 sretEvent, 32 ) 33 34 events.foreach(x => dontTouch(x.out)) 35 36 val trapEntryEvents: Seq[Module with CSREventBase] = Seq( 37 trapEntryMEvent, 38 trapEntryHSEvent, 39 trapEntryVSEvent, 40 ) 41} 42 43trait EventUpdatePrivStateOutput { 44 val privState = ValidIO(new PrivState) 45} 46 47trait EventOutputBase { 48 def getBundleByName(name: String): Valid[CSRBundle] 49} 50 51trait CSREventBase { 52 val valid = IO(Input(Bool())) 53 val in: Bundle 54 val out: Bundle 55} 56 57class TrapEntryEventInput(implicit val p: Parameters) extends Bundle with HasXSParameter { 58 val causeNO = Input(new CauseBundle) 59 val trapPc = Input(UInt(VaddrMaxWidth.W)) 60 val isCrossPageIPF = Input(Bool()) 61 62 // always current privilege 63 val iMode = Input(new PrivState()) 64 // take MRPV into consideration 65 val dMode = Input(new PrivState()) 66 // status 67 val privState = Input(new PrivState) 68 val mstatus = Input(new MstatusBundle) 69 val hstatus = Input(new HstatusBundle) 70 val sstatus = Input(new SstatusBundle) 71 val vsstatus = Input(new SstatusBundle) 72 val satp = Input(new SatpBundle) 73 val vsatp = Input(new SatpBundle) 74 // from mem 75 val memExceptionVAddr = Input(UInt(VAddrBits.W)) 76 val memExceptionGPAddr = Input(UInt(GPAddrBits.W)) 77} 78