c2062cf20ce41f9194580ec97fd8cbe758ef91c1
[matthijs/master-project/final-presentation.git] / matthijs / introduction.lhs
1 %include talk.fmt
2 \section{Presentation Matthijs}
3 \title{Haskell as a higher order structural hardware description language}
4 \author{Matthijs Kooijman}
5 \date{December 14, 2009}
6
7 \frame{\titlepage \setcounter{framenumber}{1}}
8
9 \subsection{Functions}
10 \frame
11 {
12   \frametitle{Functions}
13
14   \begin{block}{Applying the $sqrt$ function to 4}<1>
15   $ sqrt(4) = 2$
16   \end{block}
17   \begin{block}{A mathematical square function}<2->
18   $ f(x) = x * x$
19   \end{block}
20   
21   \begin{block}{A square function in Haskell}<3->
22   \texttt{square x = x * x}
23   \end{block}
24 }
25
26 \note[itemize]
27 {
28   \item Functionele taal -$>$ Wiskunde-achtig
29   \item Functies staan centraal
30   \item Next sheet: sqrt example
31   \item Van buitenaf:
32     \begin{itemize}
33       \item Stop er argumenten in (toepassen)
34       \item Krijg een resultaat terug
35     \end{itemize}
36   \item Next sheet: f(x) = x*x example
37   \item Van binnenaf:
38     \begin{itemize}
39       \item \emph{Hoe} werkt de functie (definitie)
40     \end{itemize}
41   \item Next sheet: square in Haskell
42   \item Geen haakjes
43 }
44
45 \frame
46 {
47   \begin{columns}
48     \begin{column}{8cm}
49       \begin{block}{Pythagoras' theorem}
50       $ a^2 + b^2 = c^2 $
51
52       or
53
54       $ c = \sqrt{a^2 + b^2} $
55       \end{block}
56     \end{column}
57     \begin{column}{3cm}
58       \includegraphics[width=3cm]{figures/Pythagoras}
59     \end{column}
60   \end{columns}
61
62   \pause
63   % TODO: Alignment is weird due to mixing columns and non-columns
64   \begin{block}{Calculating $c$ in Haskell}
65     \texttt{pyth a b = sqrt ((square a) + (square b))}
66   \end{block}
67 }
68
69 \note[itemize]
70 {
71   \item Functies kunnen door andere functies gebruikt worden
72   \item Next sheet: Pyth function
73   \item Complexere functie
74   \item Next sheet: Pyth in Haskell
75 }
76
77 \frame
78 {
79   \begin{block}{}
80     \texttt{pyth a b = sqrt ((square a) + (square b))}
81   \end{block}
82
83   \begin{figure}
84     \includegraphics[width=9.5cm]{figures/archs/Pyth}
85   \end{figure}
86 }
87
88 \note[itemize]
89 {
90   \item Next sheet: Pyth hardware
91   \item Argumenten -$>$ input poorten
92   \item Toepassing -$>$ component
93   \item Resultaat -$>$ output poort
94   \item (Combinatorische) hardware is continu
95 }
96
97 \frame
98 {
99   \frametitle{Purity}
100
101   \begin{block}{Pure functions}
102     sqrt, pyth
103   \end{block}
104   \begin{block}{Impure functions}
105     random, delete\_file
106   \end{block}
107 }
108
109 \note[itemize]
110 {
111   \item Next sheet: Purity
112   \item Wiskundige en functionele functies zijn (meestal) puur.
113   \item Zelfde argumenten -$>$ zelfde resultaten
114   \item Geen bijwerkingen.
115 }
116
117 \subsection{State}
118
119 \frame
120 {
121   TODO: Impure (stateful) example.
122 }
123
124 \note[itemize]
125 {
126   \item TODO
127 }
128
129 \subsection{\clash}
130
131 \frame{
132   \begin{center}
133   {\Huge \clash}
134
135   \bigskip
136   CAES Language for Synchronous Hardware
137   \end{center}
138 }
139
140 \note[itemize]
141 {
142   \item Next sheet: \clash
143   \item Hardware beschrijven in Haskell: \clash
144   \item Nog niet gezien: keuzes, pattern matching, polymorfisme, hogere orde
145   functies....
146   \item Dit was de taal -$>$ compiler nodig
147 }
148
149 \frame
150 {
151   \begin{block}{Compiler pipeline}
152   $\xrightarrow{Haskell}{GHC frontend}
153   \xrightarrow{Core}{Normalization}
154   \xrightarrow{Core}{Backend}
155   \xrightarrow{VHDL}$
156   \end{block}
157 }
158
159 \note[itemize]
160 {
161   \item Next sheet: \clash\ pipeline
162   \item GHC: bestaande compiler
163   \item Core: simpele functionale taal, niet minder expressief (vergelijk:
164   taal zonder synoniemen)
165   \item VHDL: Complexe HDL, gebruiken alleen netlist onderdelen.
166   \item Normalisatie: Nog simpeler maken.
167 }
168
169 \subsection{Normalization}
170 \frame
171 {
172   \frametitle{Netlists}
173
174   \bigskip
175   \bigskip
176   \begin{figure}
177     \includegraphics[width=9.5cm]{figures/archs/Square}
178   \end{figure}
179
180   \begin{block}{Remember \texttt{square}}
181     square x = x * x
182   \end{block}
183  
184 }
185
186 \note[itemize]
187 {
188   \item Next sheet: Square netlist
189   \item Core hetzelfde als Haskell -$>$ gebruik Haskell syntax voor Core
190   \item Netlist is componenten (vierkantjes) en verbindingen (lijntjes)
191   \item Component heeft poorten, poorten moeten een naam hebben
192   \item Resultaat van square heeft geen naam -$>$ geen normaalvorm
193 }
194
195 \frame
196 {
197   \frametitle{Transformation}
198   \begin{columns}
199     \begin{column}{5cm}
200       func = E
201       
202       \smallskip
203       \hrule
204
205       \smallskip
206       func = let res = E in res
207     \end{column}
208     \begin{column}{5cm}
209       E has no name
210     \end{column}
211   \end{columns}
212
213   \pause
214   \bigskip
215   \begin{block}{Apply to square}
216     square x = x * x
217
218     \smallskip
219     \hrule
220
221     \smallskip
222     square x = let res = x * x in res
223   \end{block}
224 }
225
226 \note[itemize]
227 {
228   \item Next sheet: transformation example
229   \item Transformatie nodig om output poort een naam te geven
230   \item Next sheet: Apply to square
231   \item Toepassen op square, res heeft nu een naam.
232 }
233
234 \frame
235 {
236   \frametitle{Normalization system}
237   
238   \begin{figure}
239     \includegraphics[width=9.5cm]{figures/norm/Normalizing}
240   \end{figure}
241 }
242
243 \note[itemize]
244 {
245   \item Systeem van transformaties
246   \item Volgorde ongedefinieerd: Doe maar wat, tot het net meer kan.
247   \item Next sheet: Graafnotatie
248   \item Lijnen zijn transformaties
249   \item Keuzes (meerdere uitgaande lijnen)
250   \item Alles komt onderin uit
251 }
252
253 \frame
254 {
255   \frametitle{Normalization system}
256   
257   \begin{figure}
258     \includegraphics[width=8cm]{figures/norm/Incorrect}
259   \end{figure}
260 }
261
262 \note[itemize]
263 {
264   \item Meerdere normaalvormen
265   \item Cykel
266   \item Systeem werkt nu \emph{meestal}
267   \item verbeteringen en bewijzen nodig
268 }
269
270 \frame
271 {
272   \frametitle{Normalization system}
273
274   \begin{itemize}
275     \item Easy to work with
276     \item Allows analysis
277     \item Still complex
278   \end{itemize}
279 }
280
281 \note[itemize]
282 {
283   \item Goede scheiding
284   \item Makkelijk implementeren
285   \item Wiskundige beschrijving -$>$ bewijzen
286   \item Huidige systeem is nog incompleet
287   \item De goede weg
288 }
289
290 \subsection{Summary}
291
292 \frame
293 {
294   \frametitle{But now?}
295   \begin{itemize}
296     \item \clash\ has a solid base
297     \item Lots of work left
298     \item Needs testing!
299   \end{itemize}
300 }
301
302 \note[itemize]
303 {
304   \item \clash\ is helemaal nieuw werk
305   \item Tekortkomingen: Haskell is niet ideaal, state beschrijvingen zijn
306   niet compact, transformaties zijn nog niet (bewezen compleet).
307   \item Meer testen nodig, 
308 }
309
310 \subsection{Thanks}
311 \frame
312 {
313   {\Huge Thanks!}
314
315 }
316     
317 % vim: set filetype=tex sw=2 sts=2 expandtab: