Fill in sheets about state.
[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}{5cm}
118       \begin{block}{}
119         \begin{tabular}{lll}
120           Input A & Input B & Output \\
121           \hline
122           1 & 1 & 0 \\
123           1 & 2 & 1 \\
124           1 & 1 & 3 \\
125           2 & 2 & 4 \\
126         \end{tabular}
127       \end{block}
128     \end{column}
129     \begin{column}{5cm}
130       \begin{figure}
131         TODO: Image of MAC with internal register
132       \end{figure}
133     \end{column}
134   \end{columns}
135 }
136
137 \note[itemize]
138 {
139   \item Next sheet: MAC circuit and I/O values
140   \item MAC is common circuit
141   \item Multiplies pairs, one pair at a time
142   \item Stores sum so far
143   \item Not pure!
144   \item Depends on inputs \emph{and} current register value
145   \item Solution: Put register value (state) in argument
146 }
147
148 \frame
149 {
150   \frametitle{Multiply-accumulate}
151   \begin{columns}
152     \begin{column}{5cm}
153       \begin{block}{}
154         \vspace{-0.5cm}
155 \begin{verbatim}
156 mac (a, b) (State s) = let
157   sum = s + (a * b)
158 in (State sum, sum)
159 \end{verbatim}
160       \end{block}
161     \end{column}
162     \begin{column}{5cm}
163       \begin{figure}
164         TODO: Image of MAC with external register
165       \end{figure}
166     \end{column}
167   \end{columns}
168 }
169
170 \note[itemize]
171 {
172   \item Next sheet: MAC implementation
173   \item Current state as argument (annotated)
174   \item Two parts in the result: New state and output
175   \item Register is placed ``outside''
176   \item We want it inside!
177   \item Annotation allows compiler to put it inside
178 }
179
180 \begin{frame}[fragile]
181   \frametitle{Simulating}
182
183   \begin{block}{Recursive run function}
184     run f (i:is) s = let
185       (o, s') = f i s
186     in o : (run f is s')
187   \end{block}
188
189   \begin{block}{Remember \texttt{mac}}
190 \vspace{-0.5cm}
191 \begin{verbatim}
192 mac (a, b) (State s) = let
193   sum = s + (a * b)
194 in (State sum, sum)
195 \end{verbatim}
196   \end{block}
197 \end{frame}
198
199 \note[itemize]
200 {
201   \item Next sheet: run function
202   \item Used for simulation only
203   \item Recursion ``stores'' state
204   \item Each recursion step, \texttt{f} is evaluated once.
205 }
206
207 \subsection{\clash}
208
209 \frame{
210   \begin{center}
211   {\Huge \clash}
212
213   \bigskip
214   CAES Language for Synchronous Hardware
215   \end{center}
216 }
217
218 \note[itemize]
219 {
220   \item Next sheet: \clash
221   \item Hardware beschrijven in Haskell: \clash
222   \item Nog niet gezien: keuzes, pattern matching, polymorfisme, hogere orde
223   functies....
224   \item Dit was de taal -$>$ compiler nodig
225 }
226
227 \frame
228 {
229   \begin{block}{Compiler pipeline}
230   $\xrightarrow{Haskell}{GHC frontend}
231   \xrightarrow{Core}{Normalization}
232   \xrightarrow{Core}{Backend}
233   \xrightarrow{VHDL}$
234   \end{block}
235 }
236
237 \note[itemize]
238 {
239   \item Next sheet: \clash\ pipeline
240   \item GHC: bestaande compiler
241   \item Core: simpele functionale taal, niet minder expressief (vergelijk:
242   taal zonder synoniemen)
243   \item VHDL: Complexe HDL, gebruiken alleen netlist onderdelen.
244   \item Normalisatie: Nog simpeler maken.
245 }
246
247 \subsection{Normalization}
248 \frame
249 {
250   \frametitle{Netlists}
251
252   \bigskip
253   \bigskip
254   \begin{figure}
255     \includegraphics[width=9.5cm]{figures/archs/Square}
256   \end{figure}
257
258   \begin{block}{Remember \texttt{square}}
259     square x = x * x
260   \end{block}
261  
262 }
263
264 \note[itemize]
265 {
266   \item Next sheet: Square netlist
267   \item Core hetzelfde als Haskell -$>$ gebruik Haskell syntax voor Core
268   \item Netlist is componenten (vierkantjes) en verbindingen (lijntjes)
269   \item Component heeft poorten, poorten moeten een naam hebben
270   \item Resultaat van square heeft geen naam -$>$ geen normaalvorm
271 }
272
273 \frame
274 {
275   \frametitle{Transformation}
276   \begin{columns}
277     \begin{column}{5cm}
278       func = E
279       
280       \smallskip
281       \hrule
282
283       \smallskip
284       func = let res = E in res
285     \end{column}
286     \begin{column}{5cm}
287       E has no name
288     \end{column}
289   \end{columns}
290
291   \pause
292   \bigskip
293   \begin{block}{Apply to square}
294     square x = x * x
295
296     \smallskip
297     \hrule
298
299     \smallskip
300     square x = let res = x * x in res
301   \end{block}
302 }
303
304 \note[itemize]
305 {
306   \item Next sheet: transformation example
307   \item Transformatie nodig om output poort een naam te geven
308   \item Next sheet: Apply to square
309   \item Toepassen op square, res heeft nu een naam.
310 }
311
312 \frame
313 {
314   \frametitle{Normalization system}
315   
316   \begin{figure}
317     \includegraphics[width=9.5cm]{figures/norm/Normalizing}
318   \end{figure}
319 }
320
321 \note[itemize]
322 {
323   \item Systeem van transformaties
324   \item Volgorde ongedefinieerd: Doe maar wat, tot het net meer kan.
325   \item Next sheet: Graafnotatie
326   \item Lijnen zijn transformaties
327   \item Keuzes (meerdere uitgaande lijnen)
328   \item Alles komt onderin uit
329 }
330
331 \frame
332 {
333   \frametitle{Normalization system}
334   
335   \begin{figure}
336     \includegraphics[width=8cm]{figures/norm/Incorrect}
337   \end{figure}
338 }
339
340 \note[itemize]
341 {
342   \item Meerdere normaalvormen
343   \item Cykel
344   \item Systeem werkt nu \emph{meestal}
345   \item verbeteringen en bewijzen nodig
346 }
347
348 \frame
349 {
350   \frametitle{Normalization system}
351
352   \begin{itemize}
353     \item Easy to work with
354     \item Allows analysis
355     \item Still complex
356   \end{itemize}
357 }
358
359 \note[itemize]
360 {
361   \item Goede scheiding
362   \item Makkelijk implementeren
363   \item Wiskundige beschrijving -$>$ bewijzen
364   \item Huidige systeem is nog incompleet
365   \item De goede weg
366 }
367
368 \subsection{Summary}
369
370 \frame
371 {
372   \frametitle{But now?}
373   \begin{itemize}
374     \item \clash\ has a solid base
375     \item Lots of work left
376     \item Needs testing!
377   \end{itemize}
378 }
379
380 \note[itemize]
381 {
382   \item \clash\ is helemaal nieuw werk
383   \item Tekortkomingen: Haskell is niet ideaal, state beschrijvingen zijn
384   niet compact, transformaties zijn nog niet (bewezen compleet).
385   \item Meer testen nodig, 
386 }
387
388 \subsection{Thanks}
389 \frame
390 {
391   {\Huge Thanks!}
392
393 }
394     
395 % vim: set filetype=tex sw=2 sts=2 expandtab: