the rest of paper is: \hs{[a|n]}. Where the \hs{a} is the element
type, and \hs{n} is the length of the vector. Note that this is
a notation used in this paper only, vectors are slightly more
- elaborate in real \CLaSH\ programs.
+ verbose in real \CLaSH\ descriptions.
% The state type of an 8 element register bank would then for example
% be:
\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)
+fu op inputs (addr1, addr2) = regIn
where
- in1 = inputs!addr1
- in2 = inputs!addr2
- out' = op in1 in2
+ in1 = inputs!addr1
+ in2 = inputs!addr2
+ regIn = op in1 in2
\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)
+ fuss' = [ fu const inputs (addrs!0) (fuss!0)
, fu (+) inputs (addrs!1) (fuss!1)
, fu (-) inputs (addrs!2) (fuss!2)
, fu (*) inputs (addrs!3) (fuss!3)
]
- (fuss', outputs) = unzip fures
- inputs = 0 +> (1 +> (input +> outputs))
- out = head outputs
+ inputs = 0 +> (1 +> (input +> fuss))
+ out = head fuss
\end{code}
\section{Related work}