2 \title{Haskell as a higher order structural hardware description language}
3 \author{Matthijs Kooijman}
4 \date{December 14, 2009}
6 \frame{\titlepage \setcounter{framenumber}{1}}
11 \frametitle{Functions}
13 \begin{block}{Applying the $sqrt$ function to 4}<1>
16 \begin{block}{A mathematical square function}<2->
20 \begin{block}{A square function in Haskell}<3->
21 \texttt{square x = x * x}
27 \item Functionele taal -$>$ Wiskunde-achtig
28 \item Functies staan centraal
29 \item Next sheet: sqrt example
32 \item Stop er argumenten in (toepassen)
33 \item Krijg een resultaat terug
35 \item Next sheet: f(x) = x*x example
38 \item \emph{Hoe} werkt de functie (definitie)
40 \item Next sheet: square in Haskell
48 \begin{block}{Pythagoras' theorem}
53 $ c = \sqrt{a^2 + b^2} $
57 \includegraphics[width=3cm]{figures/Pythagoras}
62 % TODO: Alignment is weird due to mixing columns and non-columns
63 \begin{block}{Calculating $c$ in Haskell}
64 \texttt{pyth a b = sqrt ((square a) + (square b))}
70 \item Functies kunnen door andere functies gebruikt worden
71 \item Next sheet: Pyth function
72 \item Complexere functie
73 \item Next sheet: Pyth in Haskell
79 \texttt{pyth a b = sqrt ((square a) + (square b))}
83 \includegraphics[width=9.5cm]{figures/archs/Pyth}
89 \item Next sheet: Pyth hardware
90 \item Argumenten -$>$ input poorten
91 \item Toepassing -$>$ component
92 \item Resultaat -$>$ output poort
93 \item (Combinatorische) hardware is continu
100 \begin{block}{Pure functions}
103 \begin{block}{Impure functions}
110 \item Next sheet: Purity
111 \item Wiskundige en functionele functies zijn (meestal) puur.
112 \item Zelfde argumenten -$>$ zelfde resultaten
113 \item Geen bijwerkingen.
118 TODO: Impure (stateful) example.
131 CAES language for hardware descriptions
137 \item Next sheet: \clash
138 \item Hardware beschrijven in Haskell: \clash
139 \item Nog niet gezien: keuzes, pattern matching, polymorfisme, hogere orde
141 \item Dit was de taal -$>$ compiler nodig
146 \begin{block}{Compiler pipeline}
147 $\xrightarrow{Haskell}{GHC frontend}
148 \xrightarrow{Core}{Normalization}
149 \xrightarrow{Core}{Backend}
156 \item Next sheet: \clash\ pipeline
157 \item GHC: bestaande compiler
158 \item Core: simpele functionale taal, niet minder expressief (vergelijk:
159 taal zonder synoniemen)
160 \item VHDL: Complexe HDL, gebruiken alleen netlist onderdelen.
161 \item Normalisatie: Nog simpeler maken.
166 \frametitle{Netlists}
171 \includegraphics[width=9.5cm]{figures/archs/Square}
174 \begin{block}{Remember \texttt{square}}
182 \item Next sheet: Square netlist
183 \item Core hetzelfde als Haskell -$>$ gebruik Haskell syntax voor Core
184 \item Netlist is componenten (vierkantjes) en verbindingen (lijntjes)
185 \item Component heeft poorten, poorten moeten een naam hebben
186 \item Resultaat van square heeft geen naam -$>$ geen normaalvorm
191 \frametitle{Transformation}
200 func = let res = E in res
209 \begin{block}{Apply to square}
216 square x = let res = x * x in res
222 \item Next sheet: transformation example
223 \item Transformatie nodig om output poort een naam te geven
224 \item Next sheet: Apply to square
225 \item Toepassen op square, res heeft nu een naam.
230 \frametitle{Normalization system}
233 \includegraphics[width=9.5cm]{figures/norm/Normalizing}
239 \item Systeem van transformaties
240 \item Volgorde ongedefinieerd: Doe maar wat, tot het net meer kan.
241 \item Next sheet: Graafnotatie
242 \item Lijnen zijn transformaties
243 \item Keuzes (meerdere uitgaande lijnen)
244 \item Alles komt onderin uit
249 \frametitle{Normalization system}
252 \includegraphics[width=8cm]{figures/norm/Incorrect}
258 \item Meerdere normaalvormen
260 \item Systeem werkt nu \emph{meestal}
261 \item verbeteringen en bewijzen nodig
266 \frametitle{Normalization system}
269 \item Easy to work with
270 \item Allows analysis
277 \item Goede scheiding
278 \item Makkelijk implementeren
279 \item Wiskundige beschrijving -$>$ bewijzen
280 \item Huidige systeem is nog incompleet
286 \frametitle{But now?}
288 \item \clash\ has a solid base
289 \item Lots of work left
296 \item \clash\ is helemaal nieuw werk
297 \item Tekortkomingen: Haskell is niet ideaal, state beschrijvingen zijn
298 niet compact, transformaties zijn nog niet (bewezen compleet).
299 \item Meer testen nodig,
308 % vim: set filetype=tex sw=2 sts=2 expandtab: