save progress before switching to new bus architecture
This commit is contained in:
parent
88ec010f98
commit
d7d698a28c
4 changed files with 80 additions and 56 deletions
|
@ -1,7 +1,11 @@
|
|||
{-# LANGUAGE DataKinds #-}
|
||||
{-# LANGUAGE NumericUnderscores #-}
|
||||
|
||||
module Exceptions() where
|
||||
module Exceptions(
|
||||
Exception(..),
|
||||
exceptionCode,
|
||||
isSynchronousException
|
||||
) where
|
||||
|
||||
import Clash.Prelude
|
||||
|
||||
|
@ -32,3 +36,56 @@ data Exception =
|
|||
| SoftwareCheck
|
||||
| HardwareError
|
||||
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
|
||||
|
||||
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 Reserved = True
|
||||
isSynchronousException StoreAMOPageFault = True
|
||||
isSynchronousException DoubleTrap = True
|
||||
isSynchronousException SoftwareCheck = True
|
||||
isSynchronousException HardwareError = True
|
||||
|
|
Reference in a new issue