583408c12a3763fa6c7f073277ebd19979e12dfc
[matthijs/master-project/final-presentation.git] / matthijs / introduction.lhs
1 %include talk.fmt
2 \section{Presentation Matthijs}
3 \subsection{Functions}
4 \frame
5 {
6   \frametitle{Functions}
7
8   \begin{block}{Applying the $sqrt$ function to 4}<1>
9   $ sqrt(4) = 2$
10   \end{block}
11   \begin{block}{A mathematical square function}<2->
12   $ f(x) = x * x$
13   \end{block}
14   
15   \begin{block}{A square function in Haskell}<3->
16   \texttt{square x = x * x}
17   \end{block}
18 }
19
20 \note[itemize]
21 {
22   \item Functionele taal -$>$ Wiskunde-achtig
23   \item Functies staan centraal
24   \item Next sheet: sqrt example
25   \item Van buitenaf:
26     \begin{itemize}
27       \item Stop er argumenten in (toepassen)
28       \item Krijg een resultaat terug
29     \end{itemize}
30   \item Next sheet: f(x) = x*x example
31   \item Van binnenaf:
32     \begin{itemize}
33       \item \emph{Hoe} werkt de functie (definitie)
34     \end{itemize}
35   \item Next sheet: square in Haskell
36   \item Geen haakjes
37 }
38
39 \frame
40 {
41   \begin{columns}
42     \begin{column}{8cm}
43       \begin{block}{Pythagoras' theorem}
44       $ a^2 + b^2 = c^2 $
45
46       or
47
48       $ c = \sqrt{a^2 + b^2} $
49       \end{block}
50     \end{column}
51     \begin{column}{3cm}
52       \includegraphics[width=3cm]{figures/Pythagoras}
53     \end{column}
54   \end{columns}
55
56   \pause
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))}
60   \end{block}
61 }
62
63 \note[itemize]
64 {
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
69 }
70
71 \frame
72 {
73   \begin{block}{}
74     \texttt{pyth a b = sqrt ((square a) + (square b))}
75   \end{block}
76
77   \begin{figure}
78     \includegraphics[width=9.5cm]{figures/archs/Pyth}
79   \end{figure}
80 }
81
82 \note[itemize]
83 {
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
89 }
90
91 \frame
92 {
93   \frametitle{Purity}
94
95   \begin{block}{Pure functions}
96     sqrt, pyth
97   \end{block}
98   \begin{block}{Impure functions}
99     random, delete\_file
100   \end{block}
101 }
102
103 \note[itemize]
104 {
105   \item Next sheet: Purity
106   \item Wiskundige en functionele functies zijn (meestal) puur.
107   \item Zelfde argumenten -$>$ zelfde resultaten
108   \item Geen bijwerkingen.
109 }
110
111 \subsection{State}
112
113 \frame
114 {
115   \frametitle{Multiply-accumulate}
116   \begin{columns}
117     \begin{column}{4cm}
118         \begin{tabular}{lll}
119           Input A & Input B & Output \\
120           \hline
121           1 & 1 & 1 \\
122           1 & 2 & 3 \\
123           1 & 1 & 4 \\
124           2 & 2 & 8 \\
125         \end{tabular}
126     \end{column}
127     \begin{column}{6cm}
128       \begin{figure}
129         \includegraphics[width=7cm]{figures/archs/Mac}
130       \end{figure}
131     \end{column}
132   \end{columns}
133 }
134
135 \note[itemize]
136 {
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
141   \item Not pure!
142   \item Depends on inputs \emph{and} current register value
143   \item Solution: Put register value (state) in argument
144 }
145
146 \frame
147 {
148   \frametitle{Multiply-accumulate}
149   \begin{columns}
150     \begin{column}{4cm}
151       \begin{block}{}
152         \vspace{-0.5cm}
153 \begin{verbatim}
154 mac (a, b) (State s) = let
155   sum = s + (a * b)
156 in (State sum, sum)
157 \end{verbatim}
158       \end{block}
159     \end{column}
160     \begin{column}{6cm}
161       \begin{figure}
162         \includegraphics[width=7cm]{figures/archs/MacExternal}
163       \end{figure}
164     \end{column}
165   \end{columns}
166 }
167
168 \note[itemize]
169 {
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
176 }
177
178 \begin{frame}[fragile]
179   \frametitle{Simulating}
180
181   \begin{block}{Recursive run function}
182     run f (i:is) s = let
183       (s', o) = f i s
184     in o : (run f is s')
185   \end{block}
186
187   \begin{block}{Remember \texttt{mac}}
188 \vspace{-0.5cm}
189 \begin{verbatim}
190 mac (a, b) (State s) = let
191   sum = s + (a * b)
192 in (State sum, sum)
193 \end{verbatim}
194   \end{block}
195 \end{frame}
196
197 \note[itemize]
198 {
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.
203 }
204
205 \subsection{\texorpdfstring{\clash{}}{CLasH}}
206
207 \frame{
208   \begin{center}
209   {\Huge \clash}
210
211   \bigskip
212   CAES Language for Synchronous Hardware
213   \end{center}
214 }
215
216 \note[itemize]
217 {
218   \item Next sheet: \clash
219   \item Hardware beschrijven in Haskell: \clash
220   \item Nog niet gezien: keuzes, pattern matching, polymorfisme, hogere orde
221   functies....
222   \item Dit was de taal -$>$ compiler nodig
223 }
224
225 \frame
226 {
227   \begin{block}{Compiler pipeline}
228   $\xrightarrow{Haskell}{GHC frontend}
229   \xrightarrow{Core}{Normalization}
230   \xrightarrow{Core}{Backend}
231   \xrightarrow{VHDL}$
232   \end{block}
233 }
234
235 \note[itemize]
236 {
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,
243   eenduidige vorm).
244 }
245
246 \subsection{Normalization}
247 \frame
248 {
249   \frametitle{Netlists}
250
251   \bigskip
252   \bigskip
253   \begin{figure}
254     \includegraphics[width=9.5cm]{figures/archs/Square}
255   \end{figure}
256
257   \begin{block}{Remember \texttt{square}}
258     square x = x * x
259   \end{block}
260  
261 }
262
263 \note[itemize]
264 {
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
270 }
271
272 \frame
273 {
274   \frametitle{Transformation}
275   \begin{columns}
276     \begin{column}{5cm}
277       func = E
278       
279       \smallskip
280       \hrule
281
282       \smallskip
283       func = let res = E in res
284     \end{column}
285     \begin{column}{5cm}
286       E has no name
287     \end{column}
288   \end{columns}
289
290   \pause
291   \bigskip
292   \begin{block}{Apply to square}
293     square x = x * x
294
295     \smallskip
296     \hrule
297
298     \smallskip
299     square x = let res = x * x in res
300   \end{block}
301 }
302
303 \note[itemize]
304 {
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.
309 }
310
311 \frame
312 {
313   \frametitle{Normalization system}
314   
315   \begin{figure}
316     \includegraphics[width=9.5cm]{figures/norm/Normalizing}
317   \end{figure}
318 }
319
320 \note[itemize]
321 {
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
328 }
329
330 \frame
331 {
332   \frametitle{Normalization system}
333   
334   \begin{figure}
335     \includegraphics[width=8cm]{figures/norm/Incorrect}
336   \end{figure}
337 }
338
339 \note[itemize]
340 {
341   \item Meerdere normaalvormen
342   \item Cykel
343   \item Systeem werkt nu \emph{meestal}
344   \item verbeteringen en bewijzen nodig
345 }
346
347 \frame
348 {
349   \frametitle{Normalization system}
350
351   \begin{itemize}
352     \item Easy to work with
353     \item Allows analysis
354     \item Still complex
355   \end{itemize}
356 }
357
358 \note[itemize]
359 {
360   \item Goede scheiding
361   \item Makkelijk implementeren
362   \item Wiskundige beschrijving -$>$ bewijzen
363   \item Huidige systeem is nog incompleet
364   \item De goede weg
365 }
366
367 \subsection{Summary}
368
369 \frame
370 {
371   \frametitle{But now?}
372   \begin{itemize}
373     \item \clash\ has a solid base
374     \item Lots of work left
375     \item Needs testing!
376   \end{itemize}
377 }
378
379 \note[itemize]
380 {
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!
386 }
387
388 \subsection{Thanks}
389 \frame
390 {
391 \vspace{2cm}\centerline{\Huge{Thanks!}}
392 }
393     
394 % vim: set filetype=tex sw=2 sts=2 expandtab: