Merge git://github.com/christiaanb/thesispresentation
[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
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 \frame
118 {
119   TODO: Impure (stateful) example.
120 }
121
122 \note[itemize]
123 {
124   \item TODO
125 }
126
127 \frame{
128   \begin{center}
129   {\Huge \clash}
130
131   \bigskip
132   CAES language for hardware descriptions
133   \end{center}
134 }
135
136 \note[itemize]
137 {
138   \item Next sheet: \clash
139   \item Hardware beschrijven in Haskell: \clash
140   \item Nog niet gezien: keuzes, pattern matching, polymorfisme, hogere orde
141   functies....
142   \item Dit was de taal -$>$ compiler nodig
143 }
144
145 \frame
146 {
147   \begin{block}{Compiler pipeline}
148   $\xrightarrow{Haskell}{GHC frontend}
149   \xrightarrow{Core}{Normalization}
150   \xrightarrow{Core}{Backend}
151   \xrightarrow{VHDL}$
152   \end{block}
153 }
154
155 \note[itemize]
156 {
157   \item Next sheet: \clash\ pipeline
158   \item GHC: bestaande compiler
159   \item Core: simpele functionale taal, niet minder expressief (vergelijk:
160   taal zonder synoniemen)
161   \item VHDL: Complexe HDL, gebruiken alleen netlist onderdelen.
162   \item Normalisatie: Nog simpeler maken.
163 }
164
165 \frame
166 {
167   \frametitle{Netlists}
168
169   \bigskip
170   \bigskip
171   \begin{figure}
172     \includegraphics[width=9.5cm]{figures/archs/Square}
173   \end{figure}
174
175   \begin{block}{Remember \texttt{square}}
176     square x = x * x
177   \end{block}
178  
179 }
180
181 \note[itemize]
182 {
183   \item Next sheet: Square netlist
184   \item Core hetzelfde als Haskell -$>$ gebruik Haskell syntax voor Core
185   \item Netlist is componenten (vierkantjes) en verbindingen (lijntjes)
186   \item Component heeft poorten, poorten moeten een naam hebben
187   \item Resultaat van square heeft geen naam -$>$ geen normaalvorm
188 }
189
190 \frame
191 {
192   \frametitle{Transformation}
193   \begin{columns}
194     \begin{column}{5cm}
195       func = E
196       
197       \smallskip
198       \hrule
199
200       \smallskip
201       func = let res = E in res
202     \end{column}
203     \begin{column}{5cm}
204       E has no name
205     \end{column}
206   \end{columns}
207
208   \pause
209   \bigskip
210   \begin{block}{Apply to square}
211     square x = x * x
212
213     \smallskip
214     \hrule
215
216     \smallskip
217     square x = let res = x * x in res
218   \end{block}
219 }
220
221 \note[itemize]
222 {
223   \item Next sheet: transformation example
224   \item Transformatie nodig om output poort een naam te geven
225   \item Next sheet: Apply to square
226   \item Toepassen op square, res heeft nu een naam.
227 }
228
229 \frame
230 {
231   \frametitle{Normalization system}
232   
233   \begin{figure}
234     \includegraphics[width=9.5cm]{figures/norm/Normalizing}
235   \end{figure}
236 }
237
238 \note[itemize]
239 {
240   \item Systeem van transformaties
241   \item Volgorde ongedefinieerd: Doe maar wat, tot het net meer kan.
242   \item Next sheet: Graafnotatie
243   \item Lijnen zijn transformaties
244   \item Keuzes (meerdere uitgaande lijnen)
245   \item Alles komt onderin uit
246 }
247
248 \frame
249 {
250   \frametitle{Normalization system}
251   
252   \begin{figure}
253     \includegraphics[width=8cm]{figures/norm/Incorrect}
254   \end{figure}
255 }
256
257 \note[itemize]
258 {
259   \item Meerdere normaalvormen
260   \item Cykel
261   \item Systeem werkt nu \emph{meestal}
262   \item verbeteringen en bewijzen nodig
263 }
264
265 \frame
266 {
267   \frametitle{Normalization system}
268
269   \begin{itemize}
270     \item Easy to work with
271     \item Allows analysis
272     \item Still complex
273   \end{itemize}
274 }
275
276 \note[itemize]
277 {
278   \item Goede scheiding
279   \item Makkelijk implementeren
280   \item Wiskundige beschrijving -$>$ bewijzen
281   \item Huidige systeem is nog incompleet
282   \item De goede weg
283 }
284
285 \frame
286 {
287   \frametitle{But now?}
288   \begin{itemize}
289     \item \clash\ has a solid base
290     \item Lots of work left
291     \item Needs testing!
292   \end{itemize}
293 }
294
295 \note[itemize]
296 {
297   \item \clash\ is helemaal nieuw werk
298   \item Tekortkomingen: Haskell is niet ideaal, state beschrijvingen zijn
299   niet compact, transformaties zijn nog niet (bewezen compleet).
300   \item Meer testen nodig, 
301 }
302
303 \frame
304 {
305   {\Huge Thanks!}
306
307 }
308     
309 % vim: set filetype=tex sw=2 sts=2 expandtab: