X-Git-Url: https://git.stderr.nl/gitweb?a=blobdiff_plain;f=matthijs%2Fintroduction.lhs;h=1e68a9bdfba7e1c34054f68800e8c05117eedb73;hb=eddf8c0d7ac909cebfecb415e6cc2dc23e59e5b1;hp=b8f01b9c03503351b928db757481afaeb777066a;hpb=d0420235340ee715db69a023bf0f6ad75d573735;p=matthijs%2Fmaster-project%2Ffinal-presentation.git diff --git a/matthijs/introduction.lhs b/matthijs/introduction.lhs index b8f01b9..1e68a9b 100644 --- a/matthijs/introduction.lhs +++ b/matthijs/introduction.lhs @@ -1,6 +1,317 @@ %include talk.fmt +\section{Presentation Matthijs} \title{Haskell as a higher order structural hardware description language} \author{Matthijs Kooijman} \date{December 14, 2009} -\frame{\titlepage \setcounter{framenumber}{1}} \ No newline at end of file +\frame{\titlepage \setcounter{framenumber}{1}} + +\subsection{Functions} +\frame +{ + \frametitle{Functions} + + \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 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: