3 import CLasH.HardwareTypes hiding (fst,snd)
4 import CLasH.Translator.Annotations
5 import qualified Prelude as P
10 main = Sim.simulate exec program initial_state
11 mainIO = Sim.simulateIO exec initial_state
15 newtype State s = State s deriving (P.Show)
19 (High, Low, High), -- z = r1 and t (0) ; t = r1 (1)
20 (Low, Low, Low), -- z = r0 or t (1); t = r0 (0)
21 (Low, High, dontcare), -- r0 = z (1)
22 (High, Low, High), -- z = r1 and t (0); t = r1 (1)
23 (High, High, dontcare) -- r1 = z (0)
26 --initial_state = (Regs Low High, Low, Low)
27 initial_state = State (State (0, 1), 0, 0)
29 type Word = SizedWord D4
32 type RegisterBankState = State (Word, Word)
33 --data RegisterBankState = Regs { r0, r1 :: Bit} deriving (Show)
37 -> Bit -- ^ Write Enable
39 -> RegisterBankState -> -- State
40 (RegisterBankState, Word) -- (State', Output)
42 register_bank addr we d (State s) =
46 o = case addr of Low -> fst s; High -> snd s
47 in (State s, o) -- Don't change state
51 r0' = case addr of Low -> d; High -> r0
52 r1' = case addr of High -> d; Low -> r1
54 in (State s', 0) -- Don't output anything useful
60 alu :: AluOp -> Word -> Word -> Word
62 --alu High a b = a `hwand` b
63 --alu Low a b = a `hwor` b
64 alu High a b = a P.+ b
67 type ExecState = State (RegisterBankState, Word, Word)
68 exec :: (RegAddr, Bit, AluOp) -> ExecState -> (ExecState, Word)
70 {-# ANN exec TopEntity #-}
72 exec (addr, we, op) (State s) =
76 (reg_s', t') = register_bank addr we z reg_s
80 -- vim: set ts=8 sw=2 sts=2 expandtab: