created Decode result
This commit is contained in:
parent
a6c435791a
commit
2b1c486c17
5 changed files with 156 additions and 137 deletions
103
hs/Exceptions.hs
103
hs/Exceptions.hs
|
@ -8,6 +8,7 @@ module Exceptions(
|
|||
) where
|
||||
|
||||
import Clash.Prelude
|
||||
import Types(Addr, Insn)
|
||||
|
||||
data Exception =
|
||||
SupervisorSoftwareInterrupt
|
||||
|
@ -17,9 +18,9 @@ data Exception =
|
|||
| SupervisorExternalInterrupt
|
||||
| MachineExternalInterrupt
|
||||
| CounterOverflowInterrupt
|
||||
| InstructionAddressMisaligned
|
||||
| InstructionAccessFault
|
||||
| IllegalInstruction
|
||||
| InstructionAddressMisaligned Addr
|
||||
| InstructionAccessFault Addr
|
||||
| IllegalInstruction Insn
|
||||
| Breakpoint
|
||||
| LoadAddressMisaligned
|
||||
| LoadAccessFault
|
||||
|
@ -37,53 +38,53 @@ data Exception =
|
|||
deriving (Generic, Show, Eq, NFDataX)
|
||||
|
||||
exceptionCode :: Exception -> Unsigned 6
|
||||
exceptionCode SupervisorSoftwareInterrupt = 1
|
||||
exceptionCode MachineSoftwareInterrupt = 3
|
||||
exceptionCode SupervisorTimerInterrupt = 5
|
||||
exceptionCode MachineTimerInterrupt = 7
|
||||
exceptionCode SupervisorExternalInterrupt = 9
|
||||
exceptionCode MachineExternalInterrupt = 11
|
||||
exceptionCode CounterOverflowInterrupt = 13
|
||||
exceptionCode InstructionAddressMisaligned = 0
|
||||
exceptionCode InstructionAccessFault = 1
|
||||
exceptionCode IllegalInstruction = 2
|
||||
exceptionCode Breakpoint = 3
|
||||
exceptionCode LoadAddressMisaligned = 4
|
||||
exceptionCode LoadAccessFault = 5
|
||||
exceptionCode StoreAMOAddressMisaligned = 6
|
||||
exceptionCode StoreAMOAccessFault = 7
|
||||
exceptionCode EnvironmentCallFromUMode = 8
|
||||
exceptionCode EnvironmentCallFromSMode = 9
|
||||
exceptionCode EnvironmentCallFromMMode = 11
|
||||
exceptionCode InstructionPageFault = 12
|
||||
exceptionCode LoadPageFault = 13
|
||||
exceptionCode StoreAMOPageFault = 15
|
||||
exceptionCode DoubleTrap = 16
|
||||
exceptionCode SoftwareCheck = 18
|
||||
exceptionCode HardwareError = 19
|
||||
exceptionCode SupervisorSoftwareInterrupt = 1
|
||||
exceptionCode MachineSoftwareInterrupt = 3
|
||||
exceptionCode SupervisorTimerInterrupt = 5
|
||||
exceptionCode MachineTimerInterrupt = 7
|
||||
exceptionCode SupervisorExternalInterrupt = 9
|
||||
exceptionCode MachineExternalInterrupt = 11
|
||||
exceptionCode CounterOverflowInterrupt = 13
|
||||
exceptionCode (InstructionAddressMisaligned _) = 0
|
||||
exceptionCode (InstructionAccessFault _) = 1
|
||||
exceptionCode (IllegalInstruction _) = 2
|
||||
exceptionCode Breakpoint = 3
|
||||
exceptionCode LoadAddressMisaligned = 4
|
||||
exceptionCode LoadAccessFault = 5
|
||||
exceptionCode StoreAMOAddressMisaligned = 6
|
||||
exceptionCode StoreAMOAccessFault = 7
|
||||
exceptionCode EnvironmentCallFromUMode = 8
|
||||
exceptionCode EnvironmentCallFromSMode = 9
|
||||
exceptionCode EnvironmentCallFromMMode = 11
|
||||
exceptionCode InstructionPageFault = 12
|
||||
exceptionCode LoadPageFault = 13
|
||||
exceptionCode StoreAMOPageFault = 15
|
||||
exceptionCode DoubleTrap = 16
|
||||
exceptionCode SoftwareCheck = 18
|
||||
exceptionCode HardwareError = 19
|
||||
|
||||
isSynchronousException :: Exception -> Bool
|
||||
isSynchronousException SupervisorSoftwareInterrupt = False
|
||||
isSynchronousException MachineSoftwareInterrupt = False
|
||||
isSynchronousException SupervisorTimerInterrupt = False
|
||||
isSynchronousException MachineTimerInterrupt = False
|
||||
isSynchronousException SupervisorExternalInterrupt = False
|
||||
isSynchronousException MachineExternalInterrupt = False
|
||||
isSynchronousException CounterOverflowInterrupt = False
|
||||
isSynchronousException InstructionAddressMisaligned = True
|
||||
isSynchronousException InstructionAccessFault = True
|
||||
isSynchronousException IllegalInstruction = True
|
||||
isSynchronousException Breakpoint = True
|
||||
isSynchronousException LoadAddressMisaligned = True
|
||||
isSynchronousException LoadAccessFault = True
|
||||
isSynchronousException StoreAMOAddressMisaligned = True
|
||||
isSynchronousException StoreAMOAccessFault = True
|
||||
isSynchronousException EnvironmentCallFromUMode = True
|
||||
isSynchronousException EnvironmentCallFromSMode = True
|
||||
isSynchronousException EnvironmentCallFromMMode = True
|
||||
isSynchronousException InstructionPageFault = True
|
||||
isSynchronousException LoadPageFault = True
|
||||
isSynchronousException StoreAMOPageFault = True
|
||||
isSynchronousException DoubleTrap = True
|
||||
isSynchronousException SoftwareCheck = True
|
||||
isSynchronousException HardwareError = True
|
||||
isSynchronousException SupervisorSoftwareInterrupt = False
|
||||
isSynchronousException MachineSoftwareInterrupt = False
|
||||
isSynchronousException SupervisorTimerInterrupt = False
|
||||
isSynchronousException MachineTimerInterrupt = False
|
||||
isSynchronousException SupervisorExternalInterrupt = False
|
||||
isSynchronousException MachineExternalInterrupt = False
|
||||
isSynchronousException CounterOverflowInterrupt = False
|
||||
isSynchronousException (InstructionAddressMisaligned _) = True
|
||||
isSynchronousException (InstructionAccessFault _) = True
|
||||
isSynchronousException (IllegalInstruction _) = True
|
||||
isSynchronousException Breakpoint = True
|
||||
isSynchronousException LoadAddressMisaligned = True
|
||||
isSynchronousException LoadAccessFault = True
|
||||
isSynchronousException StoreAMOAddressMisaligned = True
|
||||
isSynchronousException StoreAMOAccessFault = True
|
||||
isSynchronousException EnvironmentCallFromUMode = True
|
||||
isSynchronousException EnvironmentCallFromSMode = True
|
||||
isSynchronousException EnvironmentCallFromMMode = True
|
||||
isSynchronousException InstructionPageFault = True
|
||||
isSynchronousException LoadPageFault = True
|
||||
isSynchronousException StoreAMOPageFault = True
|
||||
isSynchronousException DoubleTrap = True
|
||||
isSynchronousException SoftwareCheck = True
|
||||
isSynchronousException HardwareError = True
|
||||
|
|
Reference in a new issue