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