Merge branch 'master' of http://git.stderr.nl/matthijs/master-project/paper
authorChristiaan Baaij <baaijcpr@wlan228123.mobiel.utwente.nl>
Fri, 26 Feb 2010 08:17:10 +0000 (09:17 +0100)
committerChristiaan Baaij <baaijcpr@wlan228123.mobiel.utwente.nl>
Fri, 26 Feb 2010 08:17:10 +0000 (09:17 +0100)
1  2 
cλash.lhs

diff --combined cλash.lhs
index c4a281f53f9d3e481545c29f745b401d9c30428e,362fe5831c8679cd38292a76c03381bbf84456b6..6f158b5edc0b4e04357e51977bfb7a6ca8ab9e3f
@@@ -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
      \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 
      
  \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}. 
  %