2 \section{Presentation Matthijs}
8 \begin{block}{Applying the $sqrt$ function to 4}<1>
11 \begin{block}{A mathematical square function}<2->
15 \begin{block}{A square function in Haskell}<3->
16 \texttt{square x = x * x}
22 \item Functionele taal -$>$ Wiskunde-achtig
23 \item Functies staan centraal
24 \item Next sheet: sqrt example
27 \item Stop er argumenten in (toepassen)
28 \item Krijg een resultaat terug
30 \item Next sheet: f(x) = x*x example
33 \item \emph{Hoe} werkt de functie (definitie)
35 \item Next sheet: square in Haskell
43 \begin{block}{Pythagoras' theorem}
48 $ c = \sqrt{a^2 + b^2} $
52 \includegraphics[width=3cm]{figures/Pythagoras}
57 % TODO: Alignment is weird due to mixing columns and non-columns
58 \begin{block}{Calculating $c$ in Haskell}
59 \texttt{pyth a b = sqrt ((square a) + (square b))}
65 \item Functies kunnen door andere functies gebruikt worden
66 \item Next sheet: Pyth function
67 \item Complexere functie
68 \item Next sheet: Pyth in Haskell
74 \texttt{pyth a b = sqrt ((square a) + (square b))}
78 \includegraphics[width=9.5cm]{figures/archs/Pyth}
84 \item Next sheet: Pyth hardware
85 \item Argumenten -$>$ input poorten
86 \item Toepassing -$>$ component
87 \item Resultaat -$>$ output poort
88 \item (Combinatorische) hardware is continu
95 \begin{block}{Pure functions}
98 \begin{block}{Impure functions}
105 \item Next sheet: Purity
106 \item Wiskundige en functionele functies zijn (meestal) puur.
107 \item Zelfde argumenten -$>$ zelfde resultaten
108 \item Geen bijwerkingen.
115 \frametitle{Multiply-accumulate}
119 Input A & Input B & Output \\
129 \includegraphics[width=7cm]{figures/archs/Mac}
137 \item Next sheet: MAC circuit and I/O values
138 \item MAC is common circuit
139 \item Multiplies pairs, one pair at a time
140 \item Stores sum so far
142 \item Depends on inputs \emph{and} current register value
143 \item Solution: Put register value (state) in argument
148 \frametitle{Multiply-accumulate}
154 mac (a, b) (State s) = let
162 \includegraphics[width=7cm]{figures/archs/MacExternal}
170 \item Next sheet: MAC implementation
171 \item Current state as argument (annotated)
172 \item Two parts in the result: New state and output
173 \item Register is placed ``outside''
174 \item We want it inside!
175 \item Annotation allows compiler to put it inside
178 \begin{frame}[fragile]
179 \frametitle{Simulating}
181 \begin{block}{Recursive run function}
187 \begin{block}{Remember \texttt{mac}}
190 mac (a, b) (State s) = let
199 \item Next sheet: run function
200 \item Used for simulation only
201 \item Recursion ``stores'' state
202 \item Each recursion step, \texttt{f} is evaluated once.
205 \subsection{\texorpdfstring{\clash{}}{CLasH}}
212 CAES Language for Synchronous Hardware
218 \item Next sheet: \clash
219 \item Hardware beschrijven in Haskell: \clash
220 \item Nog niet gezien: keuzes, pattern matching, polymorfisme, hogere orde
222 \item Dit was de taal -$>$ compiler nodig
227 \begin{block}{Compiler pipeline}
228 $\xrightarrow{Haskell}{GHC frontend}
229 \xrightarrow{Core}{Normalization}
230 \xrightarrow{Core}{Backend}
237 \item Next sheet: \clash\ pipeline
238 \item GHC: bestaande compiler
239 \item Core: simpele functionale taal, niet minder expressief (vergelijk:
240 taal zonder synoniemen)
241 \item VHDL: Complexe HDL, gebruiken alleen netlist onderdelen.
242 \item Normalisatie: Nog simpeler maken (Polymorphisme, hogere orde eruit,
246 \subsection{Normalization}
249 \frametitle{Netlists}
254 \includegraphics[width=9.5cm]{figures/archs/Square}
257 \begin{block}{Remember \texttt{square}}
265 \item Next sheet: Square netlist
266 \item Core hetzelfde als Haskell -$>$ gebruik Haskell syntax voor Core
267 \item Netlist is componenten (vierkantjes) en verbindingen (lijntjes)
268 \item Component heeft poorten, poorten moeten een naam hebben
269 \item Resultaat van square heeft geen naam -$>$ geen normaalvorm
274 \frametitle{Transformation}
283 func = let res = E in res
292 \begin{block}{Apply to square}
299 square x = let res = x * x in res
305 \item Next sheet: transformation example
306 \item Transformatie nodig om output poort een naam te geven
307 \item Next sheet: Apply to square
308 \item Toepassen op square, res heeft nu een naam.
313 \frametitle{Normalization system}
316 \includegraphics[width=9.5cm]{figures/norm/Normalizing}
322 \item Systeem van transformaties
323 \item Volgorde ongedefinieerd: Doe maar wat, tot het net meer kan.
324 \item Next sheet: Graafnotatie
325 \item Lijnen zijn transformaties
326 \item Keuzes (meerdere uitgaande lijnen)
327 \item Alles komt onderin uit
332 \frametitle{Normalization system}
335 \includegraphics[width=8cm]{figures/norm/Incorrect}
341 \item Meerdere normaalvormen
343 \item Systeem werkt nu \emph{meestal}
344 \item verbeteringen en bewijzen nodig
349 \frametitle{Normalization system}
352 \item Easy to work with
353 \item Allows analysis
360 \item Goede scheiding
361 \item Makkelijk implementeren
362 \item Wiskundige beschrijving -$>$ bewijzen
363 \item Huidige systeem is nog incompleet
371 \frametitle{But now?}
373 \item \clash\ has a solid base
374 \item Lots of work left
381 \item \clash\ is helemaal nieuw werk
382 \item Tekortkomingen: Haskell is niet ideaal, state beschrijvingen zijn
383 niet compact, transformaties zijn nog niet (bewezen compleet).
384 \item Meer testen nodig,
385 \item Met meer testen en meer werk -$>$ taal van de toekomst!
391 \vspace{2cm}\centerline{\Huge{Thanks!}}
394 % vim: set filetype=tex sw=2 sts=2 expandtab: