Update introduction to include jan's comments
authorChristiaan Baaij <baaijcpr@wlan228123.mobiel.utwente.nl>
Fri, 26 Feb 2010 15:29:25 +0000 (16:29 +0100)
committerChristiaan Baaij <baaijcpr@wlan228123.mobiel.utwente.nl>
Fri, 26 Feb 2010 15:29:25 +0000 (16:29 +0100)
clash.bib
cλash.lhs

index 6df0a8609745c8005652ab6b495536638b99c881..f3aeaa5fd49035bf74259dcbc94d5d2d96f389ba 100644 (file)
--- a/clash.bib
+++ b/clash.bib
   timestamp = {2010.01.20}
 }
 
   timestamp = {2010.01.20}
 }
 
+@INPROCEEDINGS{reductioncircuit,
+  author = {M. E. T. Gerards and J. Kuper and A. B. J. Kokkeler and E. Molenkamp},
+  title = {Streaming Reduction Circuit},
+  booktitle = {Proceedings of the 12th EUROMICRO Conference on Digital System Design,
+       Architectures, Methods and Tools, Patras, Greece},
+  year = {2009},
+  pages = {287--292},
+  address = {Los Alamitos},
+  month = {August},
+  publisher = {IEEE Computer Society Press},
+  abstract = {Reduction circuits are used to reduce rows of ?oating point values
+       to single values. Binary ?oating point operators often have deep
+       pipelines, which may cause hazards when many consecutive rows have
+       to be reduced. We present an algorithm by which any number of consecutive
+       rows of arbitrary lengths can be reduced by a pipelined commutative
+       and associative binary operator in an efficient manner. The algorithm
+       is simple to implement, has a low latency, produces results in-order,
+       and requires only small buffers. Besides, it uses only a single pipeline
+       for the involved operation. The complexity of the algorithm depends
+       on the depth of the pipeline, not on the length of the input rows.
+       In this paper we discuss an implementation of this algorithm and
+       we prove its correctness.},
+  eprintid = {17041},
+  event_dates = {27-29 Aug 2009},
+  event_type = {Conference},
+  howpublished = {http://eprints.eemcs.utwente.nl/17041/},
+  id_number = {10.1109/DSD.2009.141},
+  international = {Yes},
+  isbn_13 = {978-0-7695-3782-5},
+  ispublished = {Published},
+  location = {Patras, Greece},
+  num_pages = {6},
+  official_url = {http://dx.doi.org/10.1109/DSD.2009.141},
+  owner = {baaijcpr},
+  pres_types = {Talk},
+  refereed = {Yes},
+  research_groups = {EWI-CAES: Computer Architecture for Embedded Systems},
+  research_programs = {CTIT-WiSe: Wireless and Sensor Systems},
+  research_projects = {EASY: Embedded Adaptive Streaming sYstems},
+  timestamp = {2010.02.26}
+}
+
 @ARTICLE{reFLect,
   author = {Grundy,Jim and Melham,Tom and O'Leary,John},
   title = {{A reflective functional language for hardware design and theorem
 @ARTICLE{reFLect,
   author = {Grundy,Jim and Melham,Tom and O'Leary,John},
   title = {{A reflective functional language for hardware design and theorem
index b43aca82384bfb88c678106dc94b2f1ca7ee3bef..a42abe446f13f7e2caf9d1314162ea6655716c26 100644 (file)
 % author names and affiliations
 % use a multiple column layout for up to three different
 % affiliations
 % author names and affiliations
 % use a multiple column layout for up to three different
 % affiliations
-\author{\IEEEauthorblockN{Christiaan P.R. Baaij, Matthijs Kooijman, Jan Kuper, Marco E.T. Gerards, Bert Molenkamp, Sabih H. Gerez}
-\IEEEauthorblockA{University of Twente, Department of EEMCS\\
+\author{\IEEEauthorblockN{Christiaan P.R. Baaij, Matthijs Kooijman, Jan Kuper, Marco E.T. Gerards}%, Bert Molenkamp, Sabih H. Gerez}
+\IEEEauthorblockA{Computer Architecture for Embedded Systems (CAES)\\ 
+Department of EEMCS, University of Twente\\
 P.O. Box 217, 7500 AE, Enschede, The Netherlands\\
 c.p.r.baaij@@utwente.nl, matthijs@@stdin.nl, j.kuper@@utwente.nl}}
 % \and
 P.O. Box 217, 7500 AE, Enschede, The Netherlands\\
 c.p.r.baaij@@utwente.nl, matthijs@@stdin.nl, j.kuper@@utwente.nl}}
 % \and
@@ -479,7 +480,7 @@ traditional hardware description languages.
 
 
 \section{Introduction}
 
 
 \section{Introduction}
-Hardware description languages has allowed the productivity of hardware 
+Hardware description languages have allowed the productivity of hardware 
 engineers to keep pace with the development of chip technology. Standard 
 Hardware description languages, like \VHDL~\cite{VHDL2008} and 
 Verilog~\cite{Verilog}, allowed an engineer to describe circuits using a 
 engineers to keep pace with the development of chip technology. Standard 
 Hardware description languages, like \VHDL~\cite{VHDL2008} and 
 Verilog~\cite{Verilog}, allowed an engineer to describe circuits using a 
@@ -504,7 +505,7 @@ means that a developer is given a library of Haskell~\cite{Haskell} functions
 and types that together form the language primitives of the domain specific 
 language. As a result of how the signals are modeled and abstracted, the 
 functions used to describe a circuit also build a large domain-specific 
 and types that together form the language primitives of the domain specific 
 language. As a result of how the signals are modeled and abstracted, the 
 functions used to describe a circuit also build a large domain-specific 
-datatype (hidden from the designer) which can be further processed by an 
+datatype (hidden from the designer) which can then be processed further by an 
 embedded compiler. This compiler actually runs in the same environment as the 
 description; as a result compile-time and run-time become hard to define, as 
 the embedded compiler is usually compiled by the same Haskell compiler as the 
 embedded compiler. This compiler actually runs in the same environment as the 
 description; as a result compile-time and run-time become hard to define, as 
 the embedded compiler is usually compiled by the same Haskell compiler as the 
@@ -516,7 +517,7 @@ itself for the purpose of describing hardware. By taking this approach, we can
 capture certain language constructs, such as Haskell's choice elements 
 (if-constructs, case-constructs, pattern matching, etc.), which are not 
 available in the functional hardware description languages that are embedded 
 capture certain language constructs, such as Haskell's choice elements 
 (if-constructs, case-constructs, pattern matching, etc.), which are not 
 available in the functional hardware description languages that are embedded 
-in Haskell as a domain specific languages. As far as the authors know, such 
+in Haskell as a domain specific language. As far as the authors know, such 
 extensive support for choice-elements is new in the domain of functional 
 hardware description languages. As the hardware descriptions are plain Haskell 
 functions, these descriptions can be compiled for simulation using an 
 extensive support for choice-elements is new in the domain of functional 
 hardware description languages. As the hardware descriptions are plain Haskell 
 functions, these descriptions can be compiled for simulation using an 
@@ -525,18 +526,28 @@ optimizing Haskell compiler such as the Glasgow Haskell Compiler (\GHC)~\cite{gh
 Where descriptions in a conventional hardware description language have an 
 explicit clock for the purpose state and synchronicity, the clock is implied 
 in this research. A developer describes the behavior of the hardware between 
 Where descriptions in a conventional hardware description language have an 
 explicit clock for the purpose state and synchronicity, the clock is implied 
 in this research. A developer describes the behavior of the hardware between 
-clock cycles, as such, only synchronous systems can be described. Many 
-functional hardware description model signals as a stream of all values over 
-time; state is then modeled as a delay on this stream of values. The approach 
-taken in this research is to make the current state of a circuit part of the 
-input of the function and the updated state part of the output.
+clock cycles. The current abstraction of state and time limits the 
+descriptions to synchronous hardware, there however is room within the 
+language to eventually add a different abstraction mechanism that will allow 
+for the modeling of asynchronous systems. Many functional hardware description 
+model signals as a stream of all values over time; state is then modeled as a 
+delay on this stream of values. The approach taken in this research is to make 
+the current state of a circuit part of the input of the function and the 
+updated state part of the output.
 
 Like the standard hardware description languages, descriptions made in a 
 functional hardware description language must eventually be converted into a 
 
 Like the standard hardware description languages, descriptions made in a 
 functional hardware description language must eventually be converted into a 
-netlist. This research also features a prototype translator called \CLaSH\ 
-(pronounced: clash), which converts the Haskell code to equivalently behaving 
-synthesizable \VHDL\ code, ready to be converted to an actual netlist format 
-by an (optimizing) \VHDL\ synthesis tool.
+netlist. This research also features a prototype translator, which has the 
+same name as the language: \CLaSH\footnote{C$\lambda$aSH: CAES Language for 
+Synchronous Hardware} (pronounced: clash). This compiler converts the Haskell 
+code to equivalently behaving synthesizable \VHDL\ code, ready to be converted 
+to an actual netlist format by an (optimizing) \VHDL\ synthesis tool.
+
+Besides trivial circuits such as variants of both the FIR filter and the 
+simple CPU shown in \Cref{sec:usecases}, the \CLaSH\ compiler has also been 
+shown to work for non-trivial descriptions. \CLaSH\ has been able to 
+successfully translate the functional description of a streaming reduction 
+circuit~\cite{reductioncircuit} for floating point numbers.
 
 \section{Hardware description in Haskell}
 
 
 \section{Hardware description in Haskell}
 
@@ -650,9 +661,10 @@ by an (optimizing) \VHDL\ synthesis tool.
     (\Cref{img:choice}) as the earlier two versions of the example.
     
     \begin{code}
     (\Cref{img:choice}) as the earlier two versions of the example.
     
     \begin{code}
-    sumif Eq a b    | a == b = a + b
-    sumif Neq a b   | a != b = a + b
-    sumif _ _ _     = 0
+    sumif Eq a b    | a == b      = a + b
+                    | otherwise   = 0
+    sumif Neq a b   | a != b      = a + b
+                    | otherwise   = 0
     \end{code}
 
     % \begin{figure}
     \end{code}
 
     % \begin{figure}
@@ -1008,7 +1020,7 @@ by an (optimizing) \VHDL\ synthesis tool.
     value in the input list corresponds to exactly one cycle of the (implicit) 
     clock. The result of the simulation is a list of outputs for every clock
     cycle. As both the \hs{run} function and the hardware description are 
     value in the input list corresponds to exactly one cycle of the (implicit) 
     clock. The result of the simulation is a list of outputs for every clock
     cycle. As both the \hs{run} function and the hardware description are 
-    plain hardware, the complete simulation can be compiled by an optimizing
+    plain Haskell, the complete simulation can be compiled by an optimizing
     Haskell compiler.
     
 \section{\CLaSH\ prototype}
     Haskell compiler.
     
 \section{\CLaSH\ prototype}
@@ -1041,6 +1053,7 @@ or higher order functions.
 The final step is a simple translation to \VHDL.
 
 \section{Use cases}
 The final step is a simple translation to \VHDL.
 
 \section{Use cases}
+\label{sec:usecases}
 As an example of a common hardware design where the use of higher-order
 functions leads to a very natural description is a FIR filter, which is 
 basically the dot-product of two vectors:
 As an example of a common hardware design where the use of higher-order
 functions leads to a very natural description is a FIR filter, which is 
 basically the dot-product of two vectors:
@@ -1149,9 +1162,11 @@ semantic preserving transformations. A designer can model systems using
 heterogeneous models of computation, which include continuous time, 
 synchronous and untimed models of computation. Using so-called domain 
 interfaces a designer can simulate electronic systems which have both analog 
 heterogeneous models of computation, which include continuous time, 
 synchronous and untimed models of computation. Using so-called domain 
 interfaces a designer can simulate electronic systems which have both analog 
-as digital parts. ForSyDe has several simulation and  synthesis backends, 
-though synthesis is restricted to the synchronous subset of the ForSyDe 
-language. Unlike \CLaSH\ there is no support for the automated synthesis of descriptions that contain polymorphism or higher-order functions.
+as digital parts. ForSyDe has several backends including simulation and 
+automated synthesis, though automated synthesis is restricted to the 
+synchronous model of computation within ForSyDe. Unlike \CLaSH\ there is no 
+support for the automated synthesis of descriptions that contain polymorphism 
+or higher-order functions.
 
 Lava~\cite{Lava} is a hardware description language that focuses on the 
 structural representation of hardware. Besides support for simulation and 
 
 Lava~\cite{Lava} is a hardware description language that focuses on the 
 structural representation of hardware. Besides support for simulation and 
@@ -1300,7 +1315,7 @@ The authors would like to thank...
 % http://www.michaelshell.org/tex/ieeetran/bibtex/
 \bibliographystyle{IEEEtran}
 % argument is your BibTeX string definitions and bibliography database(s)
 % http://www.michaelshell.org/tex/ieeetran/bibtex/
 \bibliographystyle{IEEEtran}
 % argument is your BibTeX string definitions and bibliography database(s)
-\bibliography{IEEEabrv,clash.bib}
+\bibliography{clash}
 %
 % <OR> manually copy in the resultant .bbl file
 % set second argument of \begin to the number of references
 %
 % <OR> manually copy in the resultant .bbl file
 % set second argument of \begin to the number of references