Reduce code-size of higher-order cpu
authorChristiaan Baaij <baaijcpr@wlan228123.mobiel.utwente.nl>
Wed, 3 Mar 2010 09:09:09 +0000 (10:09 +0100)
committerChristiaan Baaij <baaijcpr@wlan228123.mobiel.utwente.nl>
Wed, 3 Mar 2010 09:09:09 +0000 (10:09 +0100)
HigherOrderCPU.hs
cλash.lhs

index fd7471b4f9119257607ccc381f1f0a07b282bb78..94bb7b6030d992cd46de713a57aa4b6e95b25a2d 100644 (file)
@@ -12,15 +12,8 @@ import CLasH.Translator.Annotations
 type Word   = SizedInt D16
 type Index  = RangedWord
 
 type Word   = SizedInt D16
 type Index  = RangedWord
 
-const :: a -> a -> a
 const a b = 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
 fu op inputs (addr1, addr2) out =
   (out', out)
   where
@@ -42,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))) +> (
   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
     (fuss', outputs) = unzip fures
     inputs = 0 +> (1 +> (input +> outputs))
     out = head outputs
index e02b16d567e3d348d8c258c8db0386128778d517..3bcf41e75f41e3a0d507925cf1b78ea005e7b251 100644 (file)
@@ -1192,11 +1192,6 @@ the vectors of the \acro{FIR} code to a length of 4, is depicted in
 \subsection{Higher order CPU}
 
 \begin{code}
 \subsection{Higher order CPU}
 
 \begin{code}
-fu :: (a -> a -> a)
-      -> [a | n]
-      -> (Index (n - 1), Index (n - 1))
-      -> a
-      -> (a, a)
 fu op inputs (addr1, addr2) (State out) =
   (State out', out)
   where
 fu op inputs (addr1, addr2) (State out) =
   (State out', out)
   where
@@ -1206,12 +1201,8 @@ fu op inputs (addr1, addr2) (State out) =
 \end{code}
 
 \begin{code}
 \end{code}
 
 \begin{code}
-type CpuState = State [Word | 4]
-
-cpu :: Word 
-       -> [(Index 6, Index 6) | 4]
-       -> CpuState
-       -> (CpuState, Word)
+cpu :: Word -> [(Index 6, Index 6) | 4] 
+  -> State [Word | 4] -> (State [Word | 4], Word)
 cpu input addrs (State fuss) = (State fuss', out)
   where
     fures =   [ fu const  inputs (addrs!0) (fuss!0)
 cpu input addrs (State fuss) = (State fuss', out)
   where
     fures =   [ fu const  inputs (addrs!0) (fuss!0)