Add a two-port mux hardware model.
[matthijs/master-project/cλash.git] / Adders.hs
index ce261668e48eb7a9afd5a8e05ddb4bd31f65edf0..4745d8cd66b1984ae6e119f2e1e5399f38110ea2 100644 (file)
--- a/Adders.hs
+++ b/Adders.hs
@@ -16,6 +16,10 @@ show_add f = do print ("Sum:   " ++ (displaysigs s)); print ("Carry: " ++ (displ
     b = [Low, Low, Low, High]
     (s, c) = f (a, b)
 
+mux2 :: Bit -> (Bit, Bit) -> Bit
+mux2 Low (a, b) = a
+mux2 High (a, b) = b
+
 -- Not really an adder, but this is nice minimal hardware description
 wire :: Bit -> Bit
 wire a = a
@@ -39,6 +43,14 @@ dff d s = (s', q)
     q = s
     s' = d
 
+type ShifterState = (Bit, Bit, Bit, Bit)
+shifter :: Bit -> ShifterState -> (ShifterState, Bit)
+shifter a s =
+  (s', o)
+  where
+    s' = (a, b, c, d)
+    (b, c, d, o) = s
+
 -- Combinatoric stateless no-carry adder
 -- A -> B -> S
 no_carry_adder :: (Bit, Bit) -> Bit