X-Git-Url: https://git.stderr.nl/gitweb?p=matthijs%2Fmaster-project%2Fdsd-paper.git;a=blobdiff_plain;f=HigherOrderCPU.hs;h=94bb7b6030d992cd46de713a57aa4b6e95b25a2d;hp=cc242bf50b25f15a7319e1bf485980430708bdb3;hb=645d4f8e703fcb77044b0fce5b3134187ef056aa;hpb=9d378e704a7fa44dd43b9a92a3b0c4296c5f6389 diff --git a/HigherOrderCPU.hs b/HigherOrderCPU.hs index cc242bf..94bb7b6 100644 --- a/HigherOrderCPU.hs +++ b/HigherOrderCPU.hs @@ -1,5 +1,4 @@ -{-# LANGUAGE TypeOperators, TemplateHaskell, TypeFamilies, - ScopedTypeVariables, RecordWildCards, FlexibleContexts #-} +{-# LANGUAGE TypeOperators, TemplateHaskell, TypeFamilies, ScopedTypeVariables #-} module HigherOrderCPU where @@ -13,15 +12,8 @@ import CLasH.Translator.Annotations type Word = SizedInt D16 type Index = RangedWord -const :: a -> a -> a const a b = a -fu :: ( PositiveT p, NaturalT n, (p :>: n) ~ True) => - (a -> a -> a) - -> Vector p a - -> (Index n, Index n) - -> a - -> (a, a) fu op inputs (addr1, addr2) out = (out', out) where @@ -43,8 +35,8 @@ cpu input addrs (State fuss) = where fures = (fu const inputs (addrs!(0 :: Index D3)) (fuss!(0 :: Index D3))) +> ( (fu (+) inputs (addrs!(1 :: Index D3)) (fuss!(1 :: Index D3))) +> ( - (fu (-) inputs (addrs!(2 :: Index D3)) (fuss!(2 :: Index D3))) +> ( singleton - (fu (*) inputs (addrs!(3 :: Index D3)) (fuss!(3 :: Index D3)))))) + (fu (-) inputs (addrs!(2 :: Index D3)) (fuss!(2 :: Index D3))) +> ( + (fu (*) inputs (addrs!(3 :: Index D3)) (fuss!(3 :: Index D3))) +> empty))) (fuss', outputs) = unzip fures inputs = 0 +> (1 +> (input +> outputs)) out = head outputs