Start section on State
[matthijs/master-project/dsd-paper.git] / cλash.lhs
index 58caa4bb9c3b75b0eab808ce1c27e296fa66fced..a86cd63e4c2c9e6446be87e0f7161346ae8cbb0d 100644 (file)
 
 % Macro for certain acronyms in small caps. Doesn't work with the
 % default font, though (it contains no smallcaps it seems).
-\def\VHDL{{\small{VHDL}}}
-\def\GHC{{\small{GHC}}}
-\def\CLaSH{\textsc{C$\lambda$aSH}}
+\def\acro#1{{\small{#1}}}
+\def\VHDL{\acro{VHDL}}
+\def\GHC{\acro{GHC}}
+\def\CLaSH{{\small{C}}$\lambda$a{\small{SH}}}
 
 % Macro for pretty printing haskell snippets. Just monospaced for now, perhaps
 % we'll get something more complex later on.
 \def\hs#1{\texttt{#1}}
 \def\quote#1{``{#1}"}
 
+\newenvironment{xlist}[1][\rule{0em}{0em}]{%
+  \begin{list}{}{%
+    \settowidth{\labelwidth}{#1:}
+    \setlength{\labelsep}{0.5cm}
+    \setlength{\leftmargin}{\labelwidth}
+    \addtolength{\leftmargin}{\labelsep}
+    \setlength{\rightmargin}{0pt}
+    \setlength{\parsep}{0.5ex plus 0.2ex minus 0.1ex}
+    \setlength{\itemsep}{0 ex plus 0.2ex}
+    \renewcommand{\makelabel}[1]{##1:\hfil}
+    }
+  }
+{\end{list}}
+
 %include polycode.fmt
 
 \begin{document}
 %
 % paper title
 % can use linebreaks \\ within to get better formatting as desired
-\title{\CLaSH: Structural Descriptions \\ of Synchronous Hardware using Haskell}
+\title{C$\lambda$aSH: Structural Descriptions \\ of Synchronous Hardware using Haskell}
 
 
 % author names and affiliations
@@ -573,7 +588,7 @@ sumif _ _ _ = 0
     others are defined by the \CLaSH\ package, so they are user-defined types
     from Haskell's point of view).
 
-    \begin{description}
+    \begin{xlist}
       \item[\hs{Bit}]
         This is the most basic type available. It is mapped directly onto
         the \texttt{std\_logic} \VHDL\ type. Mapping this to the
@@ -595,9 +610,9 @@ sumif _ _ _ = 0
         length type, so you can define an unsigned word of 32 bits wide as
         ollows:
 
-        \begin{verbatim}
-          type Word32 = SizedWord D32
-        \end{verbatim}
+\begin{verbatim}
+  type Word32 = SizedWord D32
+\end{verbatim}
 
         Here, a type synonym \hs{Word32} is defined that is equal to the
         \hs{SizedWord} type constructor applied to the type \hs{D32}. \hs{D32}
@@ -617,9 +632,9 @@ sumif _ _ _ = 0
         of the vector and the type of the elements contained in it. The state
         type of an 8 element register bank would then for example be:
 
-        \begin{verbatim}
-        type RegisterState = Vector D8 Word32
-        \end{verbatim}
+\begin{verbatim}
+type RegisterState = Vector D8 Word32
+\end{verbatim}
 
         Here, a type synonym \hs{RegisterState} is defined that is equal to
         the \hs{Vector} type constructor applied to the types \hs{D8} (The type
@@ -639,9 +654,9 @@ sumif _ _ _ = 0
 
         To define an index for the 8 element vector above, we would do:
 
-        \begin{verbatim}
-        type RegisterIndex = RangedWord D7
-        \end{verbatim}
+\begin{verbatim}
+type RegisterIndex = RangedWord D7
+\end{verbatim}
 
         Here, a type synonym \hs{RegisterIndex} is defined that is equal to
         the \hs{RangedWord} type constructor applied to the type \hs{D7}. In
@@ -650,7 +665,7 @@ sumif _ _ _ = 0
         8 element vector \hs{RegisterState} above.
 
         This type is translated to the \texttt{unsigned} \VHDL type.
-    \end{description}
+    \end{xlist}
   \subsection{User-defined types}
     There are three ways to define new types in Haskell: algebraic
     data-types with the \hs{data} keyword, type synonyms with the \hs{type}
@@ -671,8 +686,7 @@ sumif _ _ _ = 0
 
     For algebraic types, we can make the following distinction: 
 
-    \begin{description}
-
+    \begin{xlist}
       \item[Product types]
         A product type is an algebraic datatype with a single constructor with
         two or more fields, denoted in practice like (a,b), (a,b,c), etc. This
@@ -715,9 +729,9 @@ sumif _ _ _ = 0
         no obvious \VHDL\ alternative. They can easily be emulated, however, as
         we will see from an example:
 
-        \begin{verbatim}
-        data Sum = A Bit Word | B Word
-        \end{verbatim}
+\begin{verbatim}
+data Sum = A Bit Word | B Word
+\end{verbatim}
 
         An obvious way to translate this would be to create an enumeration to
         distinguish the constructors and then create a big record that
@@ -725,10 +739,10 @@ sumif _ _ _ = 0
         translation that would result from the following enumeration and
         product type (using a tuple for clarity):
 
-        \begin{verbatim}
-        data SumC = A | B
-        type Sum = (SumC, Bit, Word, Word)
-        \end{verbatim}
+\begin{verbatim}
+data SumC = A | B
+type Sum = (SumC, Bit, Word, Word)
+\end{verbatim}
 
         Here, the \hs{SumC} type effectively signals which of the latter three
         fields of the \hs{Sum} type are valid (the first two if \hs{A}, the
@@ -746,8 +760,14 @@ sumif _ _ _ = 0
         different types and could not be shared. However, in the final
         hardware, both of these types would simply be 8 bit connections,
         so we have a 100\% size increase by not sharing these.
-      \end{description}
+      \end{xlist}
 
+  \subsection{State}
+    A very important concept in hardware it the concept of state. In a 
+    stateful design, the outputs depend on the history of the inputs, or the 
+    state. State is usually stored in registers, which retain their value 
+    during a clock cycle. As we want to describe more than simple 
+    combinatorial designs, \CLaSH\ needs an abstraction mechanism for state.
 
 \section{\CLaSH\ prototype}
 
@@ -755,15 +775,15 @@ foo\par bar
 
 \section{Related work}
 Many functional hardware description languages have been developed over the 
-years. Early work includes such languages as \textsc{$\mu$fp}~\cite{muFP}, an 
-extension of Backus' \textsc{fp} language to synchronous streams, designed 
+years. Early work includes such languages as $\mu$\acro{FP}~\cite{muFP}, an 
+extension of Backus' \acro{FP} language to synchronous streams, designed 
 particularly for describing and reasoning about regular circuits. The 
 Ruby~\cite{Ruby} language uses relations, instead of functions, to describe 
-circuits, and has a particular focus on layout. \textsc{hml}~\cite{HML2} is a 
+circuits, and has a particular focus on layout. \acro{HML}~\cite{HML2} is a 
 hardware modeling language based on the strict functional language 
-\textsc{ml}, and has support for polymorphic types and higher-order functions. 
+\acro{ML}, and has support for polymorphic types and higher-order functions. 
 Published work suggests that there is no direct simulation support for 
-\textsc{hml}, and that the translation to \VHDL\ is only partial.
+\acro{HML}, and that the translation to \VHDL\ is only partial.
 
 Like this work, many functional hardware description languages have some sort 
 of foundation in the functional programming language Haskell. 
@@ -802,7 +822,7 @@ Wired~\cite{Wired},, T-Ruby~\cite{T-Ruby}, Hydra~\cite{Hydra}.
 
 A functional language designed specifically for hardware design is 
 $re{\mathit{FL}}^{ect}$~\cite{reFLect}, which draws experience from earlier 
-language called \textsc{fl}~\cite{FL} to la
+language called \acro{FL}~\cite{FL} to la
 
 % An example of a floating figure using the graphicx package.
 % Note that \label must occur AFTER (or within) \caption.