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 dretEvent = Module(new DretEventModule) 27 28 val events: Seq[Module with CSREventBase] = Seq( 29 trapEntryMEvent, 30 trapEntryHSEvent, 31 trapEntryVSEvent, 32 mretEvent, 33 sretEvent, 34 dretEvent, 35 ) 36 37 events.foreach(x => dontTouch(x.out)) 38 39 val trapEntryEvents: Seq[Module with CSREventBase] = Seq( 40 trapEntryMEvent, 41 trapEntryHSEvent, 42 trapEntryVSEvent, 43 ) 44} 45 46trait EventUpdatePrivStateOutput { 47 val privState = ValidIO(new PrivState) 48} 49 50trait EventOutputBase { 51 def getBundleByName(name: String): Valid[CSRBundle] 52} 53 54trait CSREventBase { 55 val valid = IO(Input(Bool())) 56 val in: Bundle 57 val out: Bundle 58} 59 60class TrapEntryEventInput(implicit val p: Parameters) extends Bundle with HasXSParameter { 61 val causeNO = Input(new CauseBundle) 62 val trapPc = Input(UInt(VaddrMaxWidth.W)) 63 val isCrossPageIPF = Input(Bool()) 64 65 // always current privilege 66 val iMode = Input(new PrivState()) 67 // take MRPV into consideration 68 val dMode = Input(new PrivState()) 69 // status 70 val privState = Input(new PrivState) 71 val mstatus = Input(new MstatusBundle) 72 val hstatus = Input(new HstatusBundle) 73 val sstatus = Input(new SstatusBundle) 74 val vsstatus = Input(new SstatusBundle) 75 val satp = Input(new SatpBundle) 76 val vsatp = Input(new SatpBundle) 77 // from mem 78 val memExceptionVAddr = Input(UInt(VAddrBits.W)) 79 val memExceptionGPAddr = Input(UInt(GPAddrBits.W)) 80} 81