%include talk.fmt
+\section{Presentation Matthijs}
\title{Haskell as a higher order structural hardware description language}
\author{Matthijs Kooijman}
\date{December 14, 2009}
\frame
{
- \begin{block}{Applying the $sqrt$ function to 4}
+ \frametitle{Functions}
+
+ \begin{block}{Applying the $sqrt$ function to 4}<1>
$ sqrt(4) = 2$
\end{block}
-}
-
-\note[itemize]
-{
- \item Functional language - Math like
- \item Central: Functions
- \item Outside:
- \begin{itemize}
- \item Put arguments in (application)
- \item get result out
- \end{itemize}
- \item Inside:
- \begin{itemize}
- \item \emph{How} does the function work? (definition)
- \end{itemize}
-
- \item Next sheet: sqrt example
-}
-
-\frame
-{
- \begin{block}{A mathematical square function}
+ \begin{block}{A mathematical square function}<2->
$ f(x) = x * x$
\end{block}
- \pause
- \begin{block}{A square function in Haskell}
+ \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 No braces
- \item Next sheet: pyth in Haskell
- \item Functions can be used by other functions
+ \item Geen haakjes
}
\frame
\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}
\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.
+}
+
+\frame
+{
+ TODO: Impure (stateful) example.
+}
+
+\note[itemize]
+{
+ \item TODO
+}
+
+\frame{
+ \begin{center}
+ {\Huge \clash}
+
+ \bigskip
+ CAES language for hardware descriptions
+ \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.
+}
+
+\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
+}
+
+\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,
+}
+
+\frame
+{
+ {\Huge Thanks!}
+
+}
+
% vim: set filetype=tex sw=2 sts=2 expandtab: