Don't put a separate titlesheet in front of the introduction.
[matthijs/master-project/final-presentation.git] / matthijs / introduction.lhs
index b8f01b9c03503351b928db757481afaeb777066a..433ffcd37a7faa2b79704524c5d1a4f20654099e 100644 (file)
@@ -1,6 +1,311 @@
 %include talk.fmt
-\title{Haskell as a higher order structural hardware description language}
-\author{Matthijs Kooijman}
-\date{December 14, 2009}
+\section{Presentation Matthijs}
+\subsection{Functions}
+\frame
+{
+  \frametitle{Functions}
 
-\frame{\titlepage \setcounter{framenumber}{1}}
\ No newline at end of file
+  \begin{block}{Applying the $sqrt$ function to 4}<1>
+  $ sqrt(4) = 2$
+  \end{block}
+  \begin{block}{A mathematical square function}<2->
+  $ f(x) = x * x$
+  \end{block}
+  
+  \begin{block}{A square function in Haskell}<3->
+  \texttt{square x = x * x}
+  \end{block}
+}
+
+\note[itemize]
+{
+  \item Functionele taal -$>$ Wiskunde-achtig
+  \item Functies staan centraal
+  \item Next sheet: sqrt example
+  \item Van buitenaf:
+    \begin{itemize}
+      \item Stop er argumenten in (toepassen)
+      \item Krijg een resultaat terug
+    \end{itemize}
+  \item Next sheet: f(x) = x*x example
+  \item Van binnenaf:
+    \begin{itemize}
+      \item \emph{Hoe} werkt de functie (definitie)
+    \end{itemize}
+  \item Next sheet: square in Haskell
+  \item Geen haakjes
+}
+
+\frame
+{
+  \begin{columns}
+    \begin{column}{8cm}
+      \begin{block}{Pythagoras' theorem}
+      $ a^2 + b^2 = c^2 $
+
+      or
+
+      $ c = \sqrt{a^2 + b^2} $
+      \end{block}
+    \end{column}
+    \begin{column}{3cm}
+      \includegraphics[width=3cm]{figures/Pythagoras}
+    \end{column}
+  \end{columns}
+
+  \pause
+  % TODO: Alignment is weird due to mixing columns and non-columns
+  \begin{block}{Calculating $c$ in Haskell}
+    \texttt{pyth a b = sqrt ((square a) + (square b))}
+  \end{block}
+}
+
+\note[itemize]
+{
+  \item Functies kunnen door andere functies gebruikt worden
+  \item Next sheet: Pyth function
+  \item Complexere functie
+  \item Next sheet: Pyth in Haskell
+}
+
+\frame
+{
+  \begin{block}{}
+    \texttt{pyth a b = sqrt ((square a) + (square b))}
+  \end{block}
+
+  \begin{figure}
+    \includegraphics[width=9.5cm]{figures/archs/Pyth}
+  \end{figure}
+}
+
+\note[itemize]
+{
+  \item Next sheet: Pyth hardware
+  \item Argumenten -$>$ input poorten
+  \item Toepassing -$>$ component
+  \item Resultaat -$>$ output poort
+  \item (Combinatorische) hardware is continu
+}
+
+\frame
+{
+  \frametitle{Purity}
+
+  \begin{block}{Pure functions}
+    sqrt, pyth
+  \end{block}
+  \begin{block}{Impure functions}
+    random, delete\_file
+  \end{block}
+}
+
+\note[itemize]
+{
+  \item Next sheet: Purity
+  \item Wiskundige en functionele functies zijn (meestal) puur.
+  \item Zelfde argumenten -$>$ zelfde resultaten
+  \item Geen bijwerkingen.
+}
+
+\subsection{State}
+
+\frame
+{
+  TODO: Impure (stateful) example.
+}
+
+\note[itemize]
+{
+  \item TODO
+}
+
+\subsection{\clash}
+
+\frame{
+  \begin{center}
+  {\Huge \clash}
+
+  \bigskip
+  CAES Language for Synchronous Hardware
+  \end{center}
+}
+
+\note[itemize]
+{
+  \item Next sheet: \clash
+  \item Hardware beschrijven in Haskell: \clash
+  \item Nog niet gezien: keuzes, pattern matching, polymorfisme, hogere orde
+  functies....
+  \item Dit was de taal -$>$ compiler nodig
+}
+
+\frame
+{
+  \begin{block}{Compiler pipeline}
+  $\xrightarrow{Haskell}{GHC frontend}
+  \xrightarrow{Core}{Normalization}
+  \xrightarrow{Core}{Backend}
+  \xrightarrow{VHDL}$
+  \end{block}
+}
+
+\note[itemize]
+{
+  \item Next sheet: \clash\ pipeline
+  \item GHC: bestaande compiler
+  \item Core: simpele functionale taal, niet minder expressief (vergelijk:
+  taal zonder synoniemen)
+  \item VHDL: Complexe HDL, gebruiken alleen netlist onderdelen.
+  \item Normalisatie: Nog simpeler maken.
+}
+
+\subsection{Normalization}
+\frame
+{
+  \frametitle{Netlists}
+
+  \bigskip
+  \bigskip
+  \begin{figure}
+    \includegraphics[width=9.5cm]{figures/archs/Square}
+  \end{figure}
+
+  \begin{block}{Remember \texttt{square}}
+    square x = x * x
+  \end{block}
+}
+
+\note[itemize]
+{
+  \item Next sheet: Square netlist
+  \item Core hetzelfde als Haskell -$>$ gebruik Haskell syntax voor Core
+  \item Netlist is componenten (vierkantjes) en verbindingen (lijntjes)
+  \item Component heeft poorten, poorten moeten een naam hebben
+  \item Resultaat van square heeft geen naam -$>$ geen normaalvorm
+}
+
+\frame
+{
+  \frametitle{Transformation}
+  \begin{columns}
+    \begin{column}{5cm}
+      func = E
+      
+      \smallskip
+      \hrule
+
+      \smallskip
+      func = let res = E in res
+    \end{column}
+    \begin{column}{5cm}
+      E has no name
+    \end{column}
+  \end{columns}
+
+  \pause
+  \bigskip
+  \begin{block}{Apply to square}
+    square x = x * x
+
+    \smallskip
+    \hrule
+
+    \smallskip
+    square x = let res = x * x in res
+  \end{block}
+}
+
+\note[itemize]
+{
+  \item Next sheet: transformation example
+  \item Transformatie nodig om output poort een naam te geven
+  \item Next sheet: Apply to square
+  \item Toepassen op square, res heeft nu een naam.
+}
+
+\frame
+{
+  \frametitle{Normalization system}
+  
+  \begin{figure}
+    \includegraphics[width=9.5cm]{figures/norm/Normalizing}
+  \end{figure}
+}
+
+\note[itemize]
+{
+  \item Systeem van transformaties
+  \item Volgorde ongedefinieerd: Doe maar wat, tot het net meer kan.
+  \item Next sheet: Graafnotatie
+  \item Lijnen zijn transformaties
+  \item Keuzes (meerdere uitgaande lijnen)
+  \item Alles komt onderin uit
+}
+
+\frame
+{
+  \frametitle{Normalization system}
+  
+  \begin{figure}
+    \includegraphics[width=8cm]{figures/norm/Incorrect}
+  \end{figure}
+}
+
+\note[itemize]
+{
+  \item Meerdere normaalvormen
+  \item Cykel
+  \item Systeem werkt nu \emph{meestal}
+  \item verbeteringen en bewijzen nodig
+}
+
+\frame
+{
+  \frametitle{Normalization system}
+
+  \begin{itemize}
+    \item Easy to work with
+    \item Allows analysis
+    \item Still complex
+  \end{itemize}
+}
+
+\note[itemize]
+{
+  \item Goede scheiding
+  \item Makkelijk implementeren
+  \item Wiskundige beschrijving -$>$ bewijzen
+  \item Huidige systeem is nog incompleet
+  \item De goede weg
+}
+
+\subsection{Summary}
+
+\frame
+{
+  \frametitle{But now?}
+  \begin{itemize}
+    \item \clash\ has a solid base
+    \item Lots of work left
+    \item Needs testing!
+  \end{itemize}
+}
+
+\note[itemize]
+{
+  \item \clash\ is helemaal nieuw werk
+  \item Tekortkomingen: Haskell is niet ideaal, state beschrijvingen zijn
+  niet compact, transformaties zijn nog niet (bewezen compleet).
+  \item Meer testen nodig, 
+}
+
+\subsection{Thanks}
+\frame
+{
+  {\Huge Thanks!}
+
+}
+    
+% vim: set filetype=tex sw=2 sts=2 expandtab: