From: Christiaan Baaij Date: Fri, 26 Feb 2010 08:17:10 +0000 (+0100) Subject: Merge branch 'master' of http://git.stderr.nl/matthijs/master-project/paper X-Git-Url: https://git.stderr.nl/gitweb?p=matthijs%2Fmaster-project%2Fdsd-paper.git;a=commitdiff_plain;h=ff86fa7f14fb766248ff24849e3621674ba501e8;hp=-c Merge branch 'master' of git.stderr.nl/matthijs/master-project/paper --- ff86fa7f14fb766248ff24849e3621674ba501e8 diff --combined "c\316\273ash.lhs" index c4a281f,362fe58..6f158b5 --- "a/c\316\273ash.lhs" +++ "b/c\316\273ash.lhs" @@@ -606,7 -606,10 +606,7 @@@ by an (optimizing) \VHDL\ synthesis too % against the constructors in the \hs{case} expressions. We can see two versions of a contrived example below, the first using a \hs{case} construct and the other using a \hs{if-then-else} - constructs, in the code below. The example sums two values when they are - equal or non-equal (depending on the predicate given) and returns 0 - otherwise. Both versions of the example roughly correspond to the same - netlist, which is depicted in \Cref{img:choice}. + constructs, in the code below. \begin{code} sumif pred a b = case pred of @@@ -631,11 -634,6 +631,11 @@@ \caption{Choice - sumif} \label{img:choice} \end{figure} + + The example sums two values when they are equal or non-equal (depending on + the predicate given) and returns 0 otherwise. Both versions of the example + roughly correspond to the same netlist, which is depicted in + \Cref{img:choice}. A slightly more complex (but very powerful) form of choice is pattern matching. A function can be defined in multiple clauses, where each clause @@@ -1013,7 -1011,27 +1013,27 @@@ \section{\CLaSH\ prototype} - foo\par bar + The \CLaSH language as presented above can be translated to \VHDL using + the prototype \CLaSH compiler. This compiler allows experimentation with + the \CLaSH language and allows for running \CLaSH designs on actual FPGA + hardware. + + \comment{Add clash pipeline image} + The prototype heavily uses \GHC, the Glasgow Haskell Compiler. Figure + TODO shows the \CLaSH compiler pipeline. As you can see, the frontend + is completely reused from \GHC, which allows the \CLaSH prototype to + support most of the Haskell Language. The \GHC frontend produces the + program in the \emph{Core} format, which is a very small, functional, + typed language which is relatively easy to process. + + The second step in the compilation process is \emph{normalization}. This + step runs a number of \emph{meaning preserving} transformations on the + Core program, to bring it into a \emph{normal form}. This normal form + has a number of restrictions that make the program similar to hardware. + In particular, a program in normal form no longer has any polymorphism + or higher order functions. + + The final step is a simple translation to \VHDL. \section{Use cases} As an example of a common hardware design where the use of higher-order @@@ -1135,7 -1153,7 +1155,7 @@@ tools for formal verification. Lava des generators when viewed from a synthesis viewpoint, in that the language elements of Haskell, such as choice, can be used to guide the circuit generation. If a developer wants to insert a choice element inside an actual -circuit he will have to specify this explicitly as a component. +circuit he will have to explicitly instantiate a multiplexer-like component. In this respect \CLaSH\ differs from Lava, in that all the choice elements, such as case-statements and pattern matching, are synthesized to choice @@@ -1145,9 -1163,11 +1165,9 @@@ mentioned in this section The merits of polymorphic typing, combined with higher-order functions, are now also recognized in the `main-stream' hardware description languages, -exemplified by the new \VHDL-2008 standard~\cite{VHDL2008}. \VHDL-2008 has -support to specify types as generics, thus allowing a developer to describe +exemplified by the new \VHDL-2008 standard~\cite{VHDL2008}. \VHDL-2008 support for generics has been extended to types, allowing a developer to describe polymorphic components. Note that those types still require an explicit -generic map, whereas type-inference and type-specialization are implicit in -\CLaSH. +generic map, whereas types can be automatically inferred in \CLaSH. % Wired~\cite{Wired},, T-Ruby~\cite{T-Ruby}, Hydra~\cite{Hydra}. %