X-Git-Url: https://git.stderr.nl/gitweb?a=blobdiff_plain;f=matthijs%2Fintroduction.lhs;h=369ab79dcb5bb3e8f692691251e19c16ecd101a7;hb=a8f72535b76928e7374968ae7ae0407d4f82c5c5;hp=50087a0b963224662e78a38da2f74721a31793b4;hpb=b614e04b171194ad19ea2597a7028f84cc03389c;p=matthijs%2Fmaster-project%2Ffinal-presentation.git diff --git a/matthijs/introduction.lhs b/matthijs/introduction.lhs index 50087a0..369ab79 100644 --- a/matthijs/introduction.lhs +++ b/matthijs/introduction.lhs @@ -1,55 +1,39 @@ %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}} - - +\subsection{Functions} \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 @@ -68,6 +52,7 @@ \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} @@ -75,4 +60,336 @@ \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 +{ + \frametitle{Multiply-accumulate} + \begin{columns} + \begin{column}{5cm} + \begin{block}{} + \begin{tabular}{lll} + Input A & Input B & Output \\ + \hline + 1 & 1 & 0 \\ + 1 & 2 & 1 \\ + 1 & 1 & 3 \\ + 2 & 2 & 4 \\ + \end{tabular} + \end{block} + \end{column} + \begin{column}{5cm} + \begin{figure} + TODO: Image of MAC with internal register + \end{figure} + \end{column} + \end{columns} +} + +\note[itemize] +{ + \item Next sheet: MAC circuit and I/O values + \item MAC is common circuit + \item Multiplies pairs, one pair at a time + \item Stores sum so far + \item Not pure! + \item Depends on inputs \emph{and} current register value + \item Solution: Put register value (state) in argument +} + +\frame +{ + \frametitle{Multiply-accumulate} + \begin{columns} + \begin{column}{5cm} + \begin{block}{} + \vspace{-0.5cm} +\begin{verbatim} +mac (a, b) (State s) = let + sum = s + (a * b) +in (State sum, sum) +\end{verbatim} + \end{block} + \end{column} + \begin{column}{5cm} + \begin{figure} + TODO: Image of MAC with external register + \end{figure} + \end{column} + \end{columns} +} + +\note[itemize] +{ + \item Next sheet: MAC implementation + \item Current state as argument (annotated) + \item Two parts in the result: New state and output + \item Register is placed ``outside'' + \item We want it inside! + \item Annotation allows compiler to put it inside +} + +\begin{frame}[fragile] + \frametitle{Simulating} + + \begin{block}{Recursive run function} + run f (i:is) s = let + (o, s') = f i s + in o : (run f is s') + \end{block} + + \begin{block}{Remember \texttt{mac}} +\vspace{-0.5cm} +\begin{verbatim} +mac (a, b) (State s) = let + sum = s + (a * b) +in (State sum, sum) +\end{verbatim} + \end{block} +\end{frame} + +\note[itemize] +{ + \item Next sheet: run function + \item Used for simulation only + \item Recursion ``stores'' state + \item Each recursion step, \texttt{f} is evaluated once. +} + +\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: