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
Fix zipWith template to work with partially applied functions, add support for boolea...
[matthijs/master-project/cλash.git]
/
Adders.hs
diff --git
a/Adders.hs
b/Adders.hs
index 3afb82fae22e6ecebd6349ac23da944ebbec95f5..3afb163b69c3263b6ef861d2edf18298a0b49c85 100644
(file)
--- a/
Adders.hs
+++ b/
Adders.hs
@@
-1,3
+1,5
@@
+{-# LANGUAGE TemplateHaskell #-}
+
module Adders where
import Bits
import qualified Sim
module Adders where
import Bits
import qualified Sim
@@
-7,10
+9,13
@@
import Prelude hiding (
null, length, head, tail, last, init, take, drop, (++), map, foldl, foldr,
zipWith, zip, unzip, concat, reverse, iterate )
null, length, head, tail, last, init, take, drop, (++), map, foldl, foldr,
zipWith, zip, unzip, concat, reverse, iterate )
-import Language.Haskell.Syntax
+
--
import Language.Haskell.Syntax
import Types
import Types
+import Types.Data.Num.Decimal.Literals
import Data.Param.TFVec
import Data.RangedWord
import Data.Param.TFVec
import Data.RangedWord
+import Data.SizedInt
+import Data.SizedWord
mainIO f = Sim.simulateIO (Sim.stateless f) ()
mainIO f = Sim.simulateIO (Sim.stateless f) ()
@@
-19,11
+24,11
@@
mainIO f = Sim.simulateIO (Sim.stateless f) ()
stateless :: (i -> o) -> (i -> () -> ((), o))
stateless f = \i s -> (s, f i)
stateless :: (i -> o) -> (i -> () -> ((), o))
stateless f = \i s -> (s, f i)
-show_add f = do print ("Sum: " P.++ (displaysigs s)); print ("Carry: " P.++ (displaysig c))
- where
- a = [High, High, High, High]
- b = [Low, Low, Low, High]
- (s, c) = f (a, b)
+
--
show_add f = do print ("Sum: " P.++ (displaysigs s)); print ("Carry: " P.++ (displaysig c))
+
--
where
+
--
a = [High, High, High, High]
+
--
b = [Low, Low, Low, High]
+
--
(s, c) = f (a, b)
mux2 :: Bit -> (Bit, Bit) -> Bit
mux2 Low (a, b) = a
mux2 :: Bit -> (Bit, Bit) -> Bit
mux2 Low (a, b) = a
@@
-172,8
+177,13
@@
highordtest = \x ->
in
\c d -> op' d c
in
\c d -> op' d c
-functiontest :: TFVec D4 Bit -> TFVec D5 Bit -> RangedWord D3 -> RangedWord D4 -> (Bit, Bit)
-functiontest = \v1 v2 i1 i2 -> let r1 = v1!i1 ; r2 = v2!i2 in (r1,r2)
+xand a b = hwand a b
+
+functiontest :: TFVec D12 Bit -> TFVec D6 Bit
+functiontest = \v -> let r = take d6 v in r
+
+functiontest2 :: SizedInt D8 -> SizedInt D7
+functiontest2 = \a -> let r = Data.SizedInt.resize a in r
xhwnot x = hwnot x
xhwnot x = hwnot x
@@
-192,24
+202,24
@@
highordtest2 = \a b ->
\c d -> op' d c
-- Four bit adder, using the continous adder below
-- [a] -> [b] -> ([s], cout)
\c d -> op' d c
-- Four bit adder, using the continous adder below
-- [a] -> [b] -> ([s], cout)
-con_adder_4 as bs =
- ([s3, s2, s1, s0], c)
- where
- ((s0, _):(s1, _):(s2, _):(s3, c):_) = con_adder (P.zip ((P.reverse as) P.++ lows) ((P.reverse bs) P.++ lows))
+
--
con_adder_4 as bs =
+
--
([s3, s2, s1, s0], c)
+
--
where
+
--
((s0, _):(s1, _):(s2, _):(s3, c):_) = con_adder (P.zip ((P.reverse as) P.++ lows) ((P.reverse bs) P.++ lows))
-- Continuous sequential version
-- Stream a -> Stream b -> Stream (sum, cout)
-- Continuous sequential version
-- Stream a -> Stream b -> Stream (sum, cout)
-con_adder :: Stream (Bit, Bit) -> Stream (Bit, Bit)
+
--
con_adder :: Stream (Bit, Bit) -> Stream (Bit, Bit)
-- Forward to con_adder_int, but supply an initial state
-- Forward to con_adder_int, but supply an initial state
-con_adder pin =
- con_adder_int pin Low
+
--
con_adder pin =
+
--
con_adder_int pin Low
-- Stream a -> Stream b -> state -> Stream (s, c)
-- Stream a -> Stream b -> state -> Stream (s, c)
-con_adder_int :: Stream (Bit, Bit) -> Bit -> Stream (Bit, Bit)
-con_adder_int ((a,b):rest) cin =
- (s, cout) : con_adder_int rest cout
- where
- (s, cout) = full_adder (a, b, cin)
+
--
con_adder_int :: Stream (Bit, Bit) -> Bit -> Stream (Bit, Bit)
+
--
con_adder_int ((a,b):rest) cin =
+
--
(s, cout) : con_adder_int rest cout
+
--
where
+
--
(s, cout) = full_adder (a, b, cin)
-- vim: set ts=8 sw=2 sts=2 expandtab:
-- vim: set ts=8 sw=2 sts=2 expandtab: