40 lines
715 B
Haskell
40 lines
715 B
Haskell
{-# LANGUAGE DataKinds #-}
|
|
{-# LANGUAGE NumericUnderscores #-}
|
|
|
|
module Cpu(
|
|
RISCVCPU(..),
|
|
Endian(..),
|
|
riscvCPUInit) where
|
|
|
|
import Clash.Prelude
|
|
import Types(Pc, Mem)
|
|
import RegFiles(GPR, FPR, CSR, gprInit, fprInit, csrInit)
|
|
import Peripherals.Ram(Ram)
|
|
|
|
data Endian = Big | Little
|
|
deriving (Generic, Show, Eq, NFDataX)
|
|
|
|
data PrivilegeLevel
|
|
= MachineMode
|
|
| SuperVisorMode
|
|
| UserMode
|
|
deriving (Generic, Show, Eq, NFDataX)
|
|
|
|
data RISCVCPU = RISCVCPU
|
|
{ pc :: Pc,
|
|
gpr :: GPR,
|
|
fpr :: FPR,
|
|
csr :: CSR,
|
|
privilegeLevel :: PrivilegeLevel
|
|
}
|
|
deriving (Generic, Show, Eq, NFDataX)
|
|
|
|
riscvCPUInit :: RISCVCPU
|
|
riscvCPUInit =
|
|
RISCVCPU
|
|
0
|
|
gprInit
|
|
fprInit
|
|
csrInit
|
|
MachineMode
|