RiscV-Formal/hs/Machine.hs

76 lines
1.3 KiB
Haskell
Raw Normal View History

2025-02-13 04:54:15 +00:00
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE NumericUnderscores #-}
module Machine(
Machine(..),
RISCVCPU(..),
2025-02-19 14:06:40 +00:00
Peripherals(..),
2025-02-13 04:54:15 +00:00
Endian(..),
machineInit) where
import Clash.Prelude
import Types(Pc, Mem)
import RegFiles(GPR, FPR, CSR, gprInit, fprInit, csrInit)
2025-02-19 14:06:40 +00:00
import Peripherals.Ram(Ram)
2025-02-13 04:54:15 +00:00
data Endian = Big | Little
deriving (Generic, Show, Eq, NFDataX)
data PrivilegeLevel
= MachineMode
| SuperVisorMode
| UserMode
deriving (Generic, Show, Eq, NFDataX)
2025-02-19 14:06:40 +00:00
data Peripherals = Peripherals
{
ram :: Ram
}
deriving (Generic, Show, Eq, NFDataX)
2025-02-13 04:54:15 +00:00
data RISCVCPU = RISCVCPU
{ pc :: Pc,
gpr :: GPR,
fpr :: FPR,
privilegeLevel :: PrivilegeLevel
}
deriving (Generic, Show, Eq, NFDataX)
data Machine = Machine
{ cpu :: RISCVCPU,
2025-02-19 14:06:40 +00:00
peripherals :: Peripherals
2025-02-13 04:54:15 +00:00
}
deriving (Generic, Show, Eq, NFDataX)
riscvCPUInit :: RISCVCPU
riscvCPUInit =
RISCVCPU
0
gprInit
fprInit
MachineMode
2025-02-19 14:06:40 +00:00
machineInit :: Peripherals -> Machine
machineInit peripherals =
2025-02-13 04:54:15 +00:00
Machine
riscvCPUInit
2025-02-19 14:06:40 +00:00
peripherals
2025-02-13 04:54:15 +00:00
memInit :: Vec 14 (Unsigned 32)
memInit =
0x0000A03C
:> 0x3000A5E8
:> 0x1A002038
:> 0x18002598
:> 0x10002588
:> 0x01002170
:> 0xF8FF8141
:> 0x08002588
:> 0x01002138
:> 0x00002598
:> 0xE8FFFF4B
:> 0x00000060
:> 0x002000C0
:> 0x00000000
:> Nil