projects
/
matthijs
/
master-project
/
cλash.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Allow a FlatFunction to be named as well as unnamed.
[matthijs/master-project/cλash.git]
/
Alu.hs
diff --git
a/Alu.hs
b/Alu.hs
index 40f76220ade83a2116b6f0bb928e8853cff34863..07c0d0dfb076b46e0725ad4400698b12f41a616f 100644
(file)
--- a/
Alu.hs
+++ b/
Alu.hs
@@
-1,4
+1,4
@@
-module Alu
(main)
where
+module Alu where
import Bits
import qualified Sim
import Bits
import qualified Sim
@@
-14,7
+14,7
@@
program = [
(High, High, DontCare) -- r1 = z (0)
]
(High, High, DontCare) -- r1 = z (0)
]
-initial_state = (Regs Low High,
(),
Low, Low)
+initial_state = (Regs Low High, Low, Low)
-- Register bank
-- Register bank
@@
-43,31
+43,30
@@
register_bank (addr, High, d) s = -- Write
-- ALU
-- ALU
-type AluState = ()
type AluOp = Bit
type AluOp = Bit
-alu ::
(AluOp, Bit, Bit) -> AluState -> (AluState, Bit)
-alu
(High, a, b) s = ((), a `hwand` b)
-alu
(Low, a, b) s = ((), a `hwor` b)
+alu ::
AluOp -> Bit -> Bit -> Bit
+alu
High a b = a `hwand` b
+alu
Low a b = a `hwor` b
-type ExecState = (RegisterBankState,
AluState,
Bit, Bit)
+type ExecState = (RegisterBankState, Bit, Bit)
exec :: (RegAddr, Bit, AluOp) -> ExecState -> (ExecState, ())
-- Read & Exec
exec (addr, Low, op) s =
(s', ())
where
exec :: (RegAddr, Bit, AluOp) -> ExecState -> (ExecState, ())
-- Read & Exec
exec (addr, Low, op) s =
(s', ())
where
- (reg_s,
alu_s,
t, z) = s
+ (reg_s, t, z) = s
(reg_s', t') = register_bank (addr, Low, DontCare) reg_s
(reg_s', t') = register_bank (addr, Low, DontCare) reg_s
- (alu_s', z') = alu (op, t', t) alu_s
- s' = (reg_s',
alu_s',
t', z')
+ z' = alu op t' t
+ s' = (reg_s', t', z')
-- Write
exec (addr, High, op) s =
(s', ())
where
-- Write
exec (addr, High, op) s =
(s', ())
where
- (reg_s,
alu_s,
t, z) = s
+ (reg_s, t, z) = s
(reg_s', _) = register_bank (addr, High, z) reg_s
(reg_s', _) = register_bank (addr, High, z) reg_s
- s' = (reg_s',
alu_s,
t, z)
+ s' = (reg_s', t, z)
-- vim: set ts=8 sw=2 sts=2 expandtab:
-- vim: set ts=8 sw=2 sts=2 expandtab: