--- /dev/null
+FILE = clash-haskell09
+LHS2TEX = lhs2TeX -v --poly --haskell
+LATEXMK = latexmk -pdf
+RM = rm -f
+RSVG = rsvg-convert --format=pdf
+
+LHSRCS = \
+ introduction.lhs \
+ matthijs/introduction.lhs \
+ christiaan/introduction.lhs
+
+LHFORMATS = \
+ talk.fmt
+
+TEXSRCS = \
+ preamble.tex
+
+SVGFIGURES = \
+ mealymachine2.svg \
+ mealymachine2-func-red.svg \
+ mealymachine2-state-red.svg \
+ reducer.svg \
+ figures/schakelingen/CMOS_NAND_Layout.svg
+
+default: clash-haskell09
+
+clash-haskell09: texs figs $(TEXSRCS) $(LHFORMATS)
+ $(LHS2TEX) $(FILE).lhs > $(FILE).tex; \
+ $(LATEXMK) $(FILE); \
+ open $(FILE).pdf; \
+ $(RM) $(LHSRCS:.lhs=.tex)
+
+texs : $(LHSRCS:.lhs=.tex)
+%.tex : %.lhs
+ $(LHS2TEX) $< > $@
+
+figs : $(SVGFIGURES:.svg=.pdf)
+%.pdf : %.svg
+ $(RSVG) $< > $@
+
+clean:
+ latexmk -CA clash-haskell09
+ $(RM) $(SVGFIGURES:.svg=.pdf)
+ $(RM) $(FILE).tex
+ $(RM) $(FILE).ptb
+ $(RM) $(FILE).synctex.gz
+ $(RM) $(FILE).nav
+ $(RM) $(FILE).snm
+ $(RM) *.hi *.o *.aux
--- /dev/null
+{-# LINE 4 "PolyAlu.lhs" #-}
+{-# LANGUAGE TypeOperators, TypeFamilies, FlexibleContexts #-}
+module Main where
+
+import CLasH.HardwareTypes
+import CLasH.Translator.Annotations
+import qualified Prelude as P
+{-# LINE 52 "PolyAlu.lhs" #-}
+type Op a = a -> a -> a
+type Opcode = Bit
+{-# LINE 60 "PolyAlu.lhs" #-}
+type RegBank s a =
+ Vector s a
+type RegState s a =
+ State (RegBank s a)
+{-# LINE 68 "PolyAlu.lhs" #-}
+type Word = SizedInt D12
+{-# LINE 88 "PolyAlu.lhs" #-}
+alu ::
+ Op a -> Op a ->
+ Opcode -> a -> a -> a
+alu op1 op2 Low x y = op1 x y
+alu op1 op2 High x y = op2 x y
+{-# LINE 110 "PolyAlu.lhs" #-}
+registers ::
+ ((PositiveT s ,NaturalT (s :-: D1), (s :>: (s :-: D1)) ~ True )) => a -> RangedWord (s :-: D1) ->
+ RangedWord (s :-: D1) -> (RegState s a) -> (RegState s a, a )
+{-# LINE 118 "PolyAlu.lhs" #-}
+registers data_in rdaddr wraddr (State mem) =
+ (State mem', data_out)
+ where
+ data_out = mem!rdaddr
+ mem' = replace mem wraddr data_in
+{-# LINE 138 "PolyAlu.lhs" #-}
+type Instruction = (Opcode, Word, RangedWord D8, RangedWord D8)
+{-# LINE 142 "PolyAlu.lhs" #-}
+{-# ANN cpu TopEntity#-}
+cpu ::
+ Instruction -> RegState D9 Word -> (RegState D9 Word, Word)
+
+cpu (opc, d, rdaddr, wraddr) ram = (ram', alu_out)
+ where
+ alu_out = alu (+) (-) opc d ram_out
+ (ram',ram_out) = registers alu_out rdaddr wraddr ram
+{-# LINE 165 "PolyAlu.lhs" #-}
+{-# ANN initstate InitState#-}
+initstate :: RegState D9 Word
+initstate = State (copy (0 :: Word))
+
+{-# ANN program TestInput#-}
+program :: [Instruction]
+program =
+ [ (Low, 4, 0, 0) -- Write 4 to Reg0
+ , (Low, 3, 0, 1) -- Write 3+4 to Reg1
+ , (High,8, 1, 2) -- Write 8-7 to Reg2
+ ]
+
+run func state [] = []
+run func state (i:input) = o:out
+ where
+ (state', o) = func i state
+ out = run func state' input
+
+main :: IO ()
+main = do
+ let input = program
+ let istate = initstate
+ let output = run cpu istate input
+ mapM_ (\x -> putStr $ ("(" P.++ (show x) P.++ ")\n")) output
+ return ()
--- /dev/null
+%include talk.fmt
+%if style == newcode
+\begin{code}
+{-# LANGUAGE TypeOperators, TypeFamilies, FlexibleContexts #-}
+module Main where
+
+import CLasH.HardwareTypes
+import CLasH.Translator.Annotations
+import qualified Prelude as P
+\end{code}
+%endif
+
+\section{Polymorphic, Higher-Order CPU}
+\subsection{Introduction}
+\frame
+{
+\frametitle{Small Use Case}
+\begin{columns}[l]
+\column{0.5\textwidth}
+\begin{figure}
+\includegraphics[width=4.75cm]{simpleCPU}
+\end{figure}
+\column{0.5\textwidth}
+\vspace{5em}
+\begin{itemize}
+ \item Polymorphic, Higher-Order CPU
+ \item Use of state will be simple
+\end{itemize}
+\end{columns}
+}\note[itemize]{
+\item Small "toy"-example of what can be done in \clash{}
+\item Show what can be translated to Hardware
+\item Put your hardware glasses on: each function will be a component
+\item Use of state will be kept simple
+}
+
+\subsection{Type Definitions}
+\frame
+{
+\frametitle{Type definitions}\pause
+\begin{columns}[l]
+\column{0.5\textwidth}
+\begin{figure}
+\includegraphics[width=4.75cm]{simpleCPU}
+\end{figure}
+\column{0.5\textwidth}
+\vspace{2em}
+
+First we define some ALU types:
+\begin{beamercolorbox}[sep=-2.5ex,rounded=true,shadow=true,vmode]{codebox}
+\begin{code}
+type Op a = a -> a -> a
+type Opcode = Bit
+\end{code}
+\end{beamercolorbox}\pause
+\vspace{1em}
+And some Register types:
+\begin{beamercolorbox}[sep=-2.5ex,rounded=true,shadow=true,vmode]{codebox}
+\begin{code}
+type RegBank s a =
+ Vector s a
+type RegState s a =
+ State (RegBank s a)
+\end{code}
+\end{beamercolorbox}
+%if style == newcode
+\begin{code}
+type Word = SizedInt D12
+\end{code}
+%endif
+\end{columns}
+}\note[itemize]{
+\item The ALU operation is already polymorphic in input / output type
+\item We use a fixed size vector as the placeholder for the registers
+\item State has to be of the State type to be recognized as such
+}
+
+\subsection{Polymorphic, Higher-Order ALU}
+\frame
+{
+\frametitle{Simple ALU}
+\begin{figure}
+\includegraphics[width=5.25cm,trim=0mm 5.5cm 0mm 1cm, clip=true]{simpleCPU}
+\end{figure}
+Abstract ALU definition:
+\begin{beamercolorbox}[sep=-2.5ex,rounded=true,shadow=true,vmode]{codebox}
+\begin{code}
+alu ::
+ Op a -> Op a ->
+ Opcode -> a -> a -> a
+alu op1 op2 {-"{\color<2>[rgb]{1,0,0}"-}Low{-"}"-} x y = op1 x y
+alu op1 op2 {-"{\color<2>[rgb]{1,0,0}"-}High{-"}"-} x y = op2 x y
+\end{code}
+\end{beamercolorbox}
+}\note[itemize]{
+\item Alu is both higher-order, and polymorphic
+\item First two parameters are "compile time", other three are "runtime"
+\item We support pattern matching
+}
+
+\subsection{Register bank}
+\frame
+{
+\frametitle{Register Bank}
+\begin{figure}
+\includegraphics[width=5.25cm,trim=0mm 0.4cm 0mm 6.2cm, clip=true]{simpleCPU}
+\end{figure}
+%if style == newcode
+\begin{code}
+registers ::
+ CXT((PositiveT s ,NaturalT (s :-: D1), (s :>: (s :-: D1)) ~ True )) => a -> RangedWord (s :-: D1) ->
+ RangedWord (s :-: D1) -> (RegState s a) -> (RegState s a, a )
+\end{code}
+%endif
+A simple register bank:
+\begin{beamercolorbox}[sep=-2.5ex,rounded=true,shadow=true,vmode]{codebox}
+\begin{code}
+registers data_in rdaddr wraddr (State mem) =
+ (State mem', data_out)
+ where
+ data_out = mem!rdaddr
+ mem' = replace mem wraddr data_in
+\end{code}
+\end{beamercolorbox}
+}\note[itemize]{
+\item mem is statefull, indicated by the 'State' type
+\item replace and (!) are a builtin functions, (!) is vector equiv of (!!) for lists
+}
+
+\subsection{Simple CPU: ALU \& Register Bank}
+\frame
+{
+\frametitle{Simple CPU}
+Combining ALU and register bank:
+\begin{beamercolorbox}[sep=-2.5ex,rounded=true,shadow=true,vmode]{codebox}
+%if style == newcode
+\begin{code}
+type Instruction = (Opcode, Word, RangedWord D9, RangedWord D9)
+\end{code}
+%endif
+\begin{code}
+{-"{\color<2>[rgb]{1,0,0}"-}ANN(cpu TopEntity){-"}"-}
+cpu ::
+ Instruction -> RegState D10 Word ->
+ (RegState D10 Word, Word)
+cpu (opc, d, rdaddr, wraddr) ram = (ram', alu_out)
+ where
+ alu_out = alu {-"{\color<3>[rgb]{1,0,0}"-}(+){-"}"-} {-"{\color<3>[rgb]{1,0,0}"-}(-){-"}"-} opc d ram_out
+ (ram',ram_out) = registers alu_out rdaddr wraddr ram
+\end{code}
+\end{beamercolorbox}
+\begin{itemize}
+\uncover<2->{\item Annotation is used to indicate top-level component}
+\uncover<3->{\item Instantiate actual operations}
+\end{itemize}
+}\note[itemize]{
+\item We use the new Annotion functionality to indicate this is the top level. TopEntity is defined by us.
+\item At this stage, both operations for the ALU are defined
+\item No polymorphism or higher-order stuff is allowed at this level.
+\item Functions must be specialized, and have primitives for input and output
+\item D10 is a type-level number, beyond the scope of this presentation
+}
+
+%if style == newcode
+\begin{code}
+ANN(initstate InitState)
+initstate :: RegState D10 Word
+initstate = State (copy (0 :: Word))
+
+ANN(program TestInput)
+program :: [Instruction]
+program =
+ [ (Low, 4, 0, 0) -- Write 4 to Reg0
+ , (Low, 3, 0, 1) -- Write 3+4 to Reg1
+ , (High,8, 1, 2) -- Write 8-7 to Reg2
+ ]
+
+run func state [] = []
+run func state (i:input) = o:out
+ where
+ (state', o) = func i state
+ out = run func state' input
+
+main :: IO ()
+main = do
+ let input = program
+ let istate = initstate
+ let output = run cpu istate input
+ mapM_ (\x -> putStr $ ("(" P.++ (show x) P.++ ")\n")) output
+ return ()
+\end{code}
+%endif
--- /dev/null
+%%
+%% beamercolorthemecaes.sty
+%%
+%% Copyright (C) 2008 CAES (http://caes.ewi.utwente.nl)
+%%
+%% Authors : Pascal Wolkotte
+%% Created On : March 13 2008
+%%
+%% $Author: wolkottept $
+%% $Date: 2008-03-19 09:39:34 +0100 (Wed, 19 Mar 2008) $
+%% $Revision: 40 $
+%% $HeadURL: https://ewi630/svn/general/templates/caes/trunk/beamercolorthemecaes.sty $
+%%
+
+\mode<presentation>
+
+\definecolor{ut_orange}{rgb}{1,.4,.2}
+\definecolor{ut_blue}{rgb}{0,0,.4}
+\definecolor{ut_lightblue}{rgb}{0.5,0.5,.7}
+\definecolor{ut_green}{rgb}{0,.8,0}
+
+\setbeamercolor{normal text}{fg=ut_blue,bg=white}
+\setbeamercolor{alerted text}{fg=ut_orange}
+\setbeamercolor{example text}{fg=ut_green}
+
+\setbeamercolor{structure}{fg=ut_blue}
+\setbeamercolor{institute}{fg=ut_lightblue}
+
+\setbeamercolor{titlelike}{parent=structure}
+
+\setbeamercolor{frametitle}{parent=titlelike}
+\setbeamercolor{framesubtitle}{parent=frametitle}
+
+\setbeamercolor{itemize item}{fg=ut_orange}
+\setbeamercolor{itemize subitem}{fg=ut_green}
+\setbeamercolor{itemize subsubitem}{fg=ut_blue}
+
+\colorlet{ut_light}{ut_blue!10!white}
+\setbeamercolor{codebox}{bg=ut_light,fg=ut_blue}
+
+\mode
+<all>
--- /dev/null
+%%
+%% beamerfontthemecaes.sty
+%%
+%% Copyright (C) 2008 CAES (http://caes.ewi.utwente.nl)
+%%
+%% Authors : Pascal Wolkotte
+%% Created On : March 13 2008
+%%
+%% $Author: wolkottept $
+%% $Date: 2008-03-13 09:41:28 +0100 (Thu, 13 Mar 2008) $
+%% $Revision: 36 $
+%% $HeadURL: https://svncaes/svn/general/templates/caes/trunk/beamerfontthemecaes.sty $
+%%
+
+\mode<presentation>
+
+\setbeamerfont{item}{size=\large,parent=structure}
+\setbeamerfont{subitem}{size=\small,parent=item}
+\setbeamerfont{subsubitem}{size=\scriptsize,parent=subitem}
+
+\setbeamerfont{itemize item}{parent=item}
+\setbeamerfont{itemize subitem}{parent=subitem}
+\setbeamerfont{itemize subsubitem}{parent=subsubitem}
+
+\setbeamerfont{itemize/enumerate body}{size=\large}
+\setbeamerfont{itemize/enumerate subbody}{size=\small}
+\setbeamerfont{itemize/enumerate subsubbody}{size=\scriptsize}
+
+\mode
+<all>
--- /dev/null
+%%
+%% beamerinnerthemecaes.sty
+%%
+%% Copyright (C) 2008 CAES (http://caes.ewi.utwente.nl)
+%%
+%% Authors : Pascal Wolkotte
+%% Created On : March 13 2008
+%%
+%% $Author: wolkottept $
+%% $Date: 2008-03-19 10:33:08 +0100 (Wed, 19 Mar 2008) $
+%% $Revision: 41 $
+%% $HeadURL: https://ewi630/svn/general/templates/caes/trunk/beamerinnerthemecaes.sty $
+%%
+
+\mode<presentation>
+
+\setbeamertemplate{sections/subsections in toc}[square]
+
+\setbeamertemplate{items}[square]
+\setbeamertemplate{itemize item}{\hbox{\vrule width 1.2ex height 1.2ex}}
+\setbeamertemplate{itemize subitem}{\hbox{\vrule width 1ex height 1ex}}
+\setbeamertemplate{itemize subsubitem}{\hbox{\vrule width .8ex height .8ex}}
+
+\addtolength{\leftmargini}{-.4\labelwidth}
+\addtolength{\leftmarginii}{-.5\labelwidth}
+\addtolength{\leftmarginiii}{-.6\labelwidth}
+
+%\pgfdeclareimage[interpolate=true, height=.1\paperheight]{ctit_logo}{ctit_logo}
+
+\makeatletter
+
+%
+%
+% The \committee command
+%
+%
+\def\committee{\@dblarg\beamer@committee}
+\long\def\beamer@committee[#1]#2{%
+ \def\beamer@temp{#2}%
+ \ifx\beamer@temp\@empty
+ \def\insertcommittee{}
+ \else
+ \def\insertcommittee{\def\inst{\beamer@committee}\def\and{\beamer@andcommittee}#2}%
+ \fi
+ \def\beamer@shortcommittee{#1}}
+\committee{}
+
+\def\beamer@instcommittee#1{{\donotcoloroutermaths$^{#1}$}\ignorespaces}
+\def\beamer@andcommittee{\\[1em]}
+
+\newcommand\insertshortcommittee[1][]{%
+ {%
+ \let\thanks=\@gobble%
+ \def\inst{\beamer@committeeother}\def\and{\beamer@andcommittee}%
+ \beamer@setupshort{#1}%
+ \beamer@insertshort{\beamer@shortcommittee}%
+ }}
+
+
+\setbeamertemplate{title page}
+{
+ \begin{centering}
+ \vskip4em%
+ \begin{beamercolorbox}[sep=8pt,center]{title}
+ \usebeamerfont{title}\inserttitle\par%
+ \ifx\insertsubtitle\@empty%
+ \else%
+ \vskip0.25em%
+ {\usebeamerfont{subtitle}\usebeamercolor[fg]{subtitle}\insertsubtitle\par}%
+ \fi%
+ \end{beamercolorbox}%
+ \vskip.5em
+ \begin{beamercolorbox}[sep=8pt,center]{author}
+ \usebeamerfont{author}\insertauthor
+ \end{beamercolorbox}\vskip1em
+ % \begin{beamercolorbox}[sep=4pt,center]{date}
+ % \usebeamerfont{date}\insertcommittee
+ % \end{beamercolorbox}
+% {\usebeamercolor[fg]{titlegraphic}\inserttitlegraphic\par}
+ \vfill%
+ \begin{tikzpicture}
+ \path[use as bounding box] (0,0) rectangle (\textwidth,1pt);
+% \node[above left, inner sep=0pt] at (\textwidth,0) {\pgfuseimage{ctit_logo}};
+ \end{tikzpicture}
+ \begin{beamercolorbox}[sep=8pt,center]{institute}
+ \usebeamerfont{institute}\insertinstitute
+ \end{beamercolorbox}
+ \end{centering}
+}
+\makeatother
+
+\mode<all>
--- /dev/null
+%%
+%% beamercolorthemecaes.sty
+%%
+%% Copyright (C) 2008 CAES (http://caes.ewi.utwente.nl)
+%%
+%% Authors : Pascal Wolkotte
+%% Created On : March 13 2008
+%%
+%% $Author: bakkerv $
+%% $Date: 2008-03-25 10:31:52 +0100 (Tue, 25 Mar 2008) $
+%% $Revision: 45 $
+%% $HeadURL: https://ewi630/svn/general/templates/caes/trunk/beamerouterthemecaes.sty $
+%%
+\makeatletter
+
+\def\footlinetitle{title}
+\def\beamer@theme@footline{title}
+\DeclareOptionBeamer{footline}{\def\beamer@theme@footline{#1}}
+
+\newif\ifbeamer@theme@logoUT
+\def\hidelogoUT{ \beamer@theme@logoUTfalse }
+\def\showlogoUT{ \beamer@theme@logoUTtrue }
+\showlogoUT
+
+\ProcessOptionsBeamer
+
+\usetikzlibrary{positioning}
+\usetikzlibrary{fadings}
+
+\def\getcoordinates{
+ \node[coordinate] (titlepos) at (.95\paperwidth,-.217\paperheight) {};
+ \node[coordinate] (topleft) at (.05\paperwidth,-.225\paperheight) {};
+ \node[coordinate] (TL) at (0,0) {};
+ \node[coordinate] (BR) at (\paperwidth,-\textheight) {};
+ \node[coordinate] (F1) at (.65\paperwidth,-.25\textheight) {};
+ \node[coordinate] (F2) at (.95\paperwidth,-.5\textheight) {};
+ \node[coordinate] (F1m) at (.35\paperwidth,-.25\textheight) {};
+ \node[coordinate] (F2m) at (.05\paperwidth,-.5\textheight) {};
+}
+
+% -- Shading function. From 0 - 50 no transparency and from 50 - 100 transparency
+\pgfdeclarehorizontalshading{shading}{100bp}{ color(0bp)=(transparent!0); color(25bp)=(transparent!0); color(60bp)=(transparent!0); color(75bp)=(transparent!100); color(100bp)=(transparent!100)}
+\pgfdeclarefading{fading}{\pgfuseshading{shading}}
+\def\placehorzfading#1{
+ \pgfpathrectangle{\pgfpointorigin}{\pgfpoint{#1}{-\paperheight}}
+ \pgfsetfadingforcurrentpath{fading}{}
+ \pgfusepath{discard}
+}
+\pgfdeclarefading{LRfading}{
+\begin{tikzpicture}[line width=0pt]
+ \getcoordinates
+ \fill[pgftransparent!0] (TL -| F1m) rectangle (BR -| F1);
+ \shade[left color=pgftransparent!0, right color=pgftransparent!100] (TL -| F1) rectangle (BR -| F2);
+ \shade[right color=pgftransparent!0, left color=pgftransparent!100] (TL -| F2m) rectangle (BR -| F1m);
+\end{tikzpicture}
+}
+\pgfdeclarefading{BRfading}{
+\begin{tikzpicture}[line width=0pt]
+ \getcoordinates
+ \fill[pgftransparent!0] (TL) rectangle (F1);
+ \begin{scope}
+ \path[clip] (F1) -- (F2) -- (BR) |- (TL) -- cycle;
+ \shade[left color=pgftransparent!0, right color=pgftransparent!100] (TL -| F1) rectangle (BR -| F2);
+ \end{scope}
+ \begin{scope}
+ \path[clip] (F1) -- (F2) -- (BR) -| (TL) -- cycle;
+ \shade[top color=pgftransparent!0, bottom color=pgftransparent!100] (TL |- F1) rectangle (BR |- F2);
+ \end{scope}
+\end{tikzpicture}
+}
+
+\mode<presentation>
+
+% -- Headline and footline --
+\pgfdeclareimage[interpolate=true, height=.1\paperheight]{ut_logo}{ut_logo_blue}
+
+% -- HEADER --
+
+%Select the correct logo
+
+\defbeamertemplate{headline}{empty}{%
+ \begin{tikzpicture}
+ \path[use as bounding box] (0,0) rectangle (\paperwidth,-.11\paperheight);
+ \end{tikzpicture}
+}
+\def\UTheadline{
+ \begin{scope}
+ \placehorzfading{.95\paperwidth}
+ \node[fill=ut_blue, line width=0pt, minimum height=.033\paperheight, minimum width=.95\paperwidth, anchor=north west] (bart) at (0,0) {};
+ \placehorzfading{.8\paperwidth}
+ \node[fill=ut_orange,line width=0pt, minimum height=.043\paperheight, minimum width=.8\paperwidth, below=0pt of bart.south west, anchor=north west] (barm) {};
+ \placehorzfading{.675\paperwidth}
+ \node[fill=ut_lightblue, line width=0pt, minimum height=.032\paperheight, minimum width=.675\paperwidth, below=0pt of barm.south west, anchor=north west] (barb) {};
+ \end{scope}
+ \ifbeamer@theme@logoUT
+ \path (\paperwidth,-.11\paperheight) node[above left=0pt and 3pt, line width=0pt,inner sep=0pt] {\pgfuseimage{ut_logo}};
+ \fi
+}
+\pgfdeclareimage[interpolate=true, height=.1\paperheight]{logoNWchameleonA}{chameleonA}
+\pgfdeclareimage[interpolate=true, height=.14\paperheight]{logoNWchameleonB}{chameleonB}
+\pgfdeclareimage[interpolate=true, height=0.55\paperheight]{logoPoles}{poles_shaded}
+\pgfdeclareimage[interpolate=true, height=0.14\paperheight]{logoSloth}{sloth}
+
+\defbeamertemplate*{headline}{chameleonA theme}{%
+ \begin{tikzpicture}
+ \getcoordinates
+ \path[use as bounding box] (0,0) rectangle (\paperwidth,-.11\paperheight);
+ \UTheadline
+ \path (0,-.12\paperheight) node[above right=0pt, line width=0pt,inner sep=0pt] {\pgfuseimage{logoNWchameleonA}};
+ \end{tikzpicture}
+}
+\defbeamertemplate{headline}{chameleonB theme}{%
+ \begin{tikzpicture}
+ \getcoordinates
+ \path[use as bounding box] (0,0) rectangle (\paperwidth,-.11\paperheight);
+ \UTheadline
+ \path (-10pt,-.16\paperheight) node[above right=0pt, line width=0pt,inner sep=0pt] {\pgfuseimage{logoNWchameleonB}};
+ \end{tikzpicture}
+}
+\defbeamertemplate{headline}{energy theme}{%
+ \begin{tikzpicture}
+ \getcoordinates
+ \path[use as bounding box] (0,0) rectangle (\paperwidth,-.11\paperheight);
+ \UTheadline
+ \path (-3.2pt,-.16\paperheight) node[above right=0pt, line width=0pt,inner sep=0pt] {\pgfuseimage{logoSloth}};
+ \end{tikzpicture}
+}
+
+\defbeamertemplate{headline}{caes theme}{%
+ \begin{tikzpicture}
+ \getcoordinates
+ \path[use as bounding box] (0,0) rectangle (\paperwidth,-.11\paperheight);
+ \UTheadline
+ \end{tikzpicture}
+}
+
+% -- FOOTER --
+\defbeamertemplate{footline}{empty}{%
+ \leavevmode%
+ \begin{tikzpicture}[remember picture]
+ \path[clip,use as bounding box] (0,0) rectangle (\paperwidth,-.08\paperheight);
+ \end{tikzpicture}
+}
+\defbeamertemplate*{footline}{caes theme}{%
+ \leavevmode%
+ \begin{tikzpicture}[remember picture]
+ \path[clip,use as bounding box] (0,0) rectangle (\paperwidth,-.08\paperheight);
+ \draw[ut_orange,semithick] (.05\paperwidth,0) node[coordinate] (footerleft) {} -- node[coordinate] (footercenter) {} ++(.9\paperwidth,0pt) node [coordinate] (footerright) {};
+ \path (footerleft) node[below right=1ex and 0ex] {\inserttitle\ \insertsubtitle};
+ % \path (footercenter) node[below=1ex] {\insertshortdate};
+ \path (footerright) node[below left=1ex and 0ex] {\insertframenumber};
+ \end{tikzpicture}
+}
+
+% -- BACKGROUND --
+\defbeamertemplate{background}{empty}{}%
+
+%\ifbeamer@theme@background@soc
+ \pgfdeclareimage[interpolate=true, width=.65\paperwidth]{soc_bg}{soc_bg}
+%\fi
+\defbeamertemplate*{background}{soc theme}{
+ \begin{tikzpicture}[remember picture, overlay]
+ \getcoordinates
+ % Custom background
+ \makeatletter
+ \ifbeamer@plainframe\else
+ \path (\paperwidth,-\paperheight) node[above left, inner sep=0pt, line width=0pt,rotate=-15,yshift=-20mm,xshift=5mm] {\pgfuseimage{soc_bg}};
+ \fi
+ \makeatother
+ \end{tikzpicture}
+}
+\defbeamertemplate{background}{electricity poles}{
+ \begin{tikzpicture}[remember picture, overlay]
+ \getcoordinates
+ % Custom background
+ \makeatletter
+ \ifbeamer@plainframe\else
+ \path (\paperwidth,-\paperheight) node[anchor=south east,inner sep=0pt, line width=0pt] {\pgfuseimage{logoPoles}};
+ \fi
+ \makeatother
+ \end{tikzpicture}
+}
+
+
+% -- Navigation symbols --
+\setbeamertemplate{navigation symbols}[vertical]
+\defbeamertemplate{navigation symbols}{none}{}
+
+% -- Frame title: default --
+\defbeamertemplate{frametitle}{noleft}{
+ \nointerlineskip
+ \begin{beamercolorbox}[wd=\paperwidth,ht=.115\paperheight,dp=0pt]{}
+ \begin{tikzpicture}
+ \node[anchor=base east, inner xsep=0pt] (frametitle) at (.93\paperwidth,.02\paperwidth) {\usebeamerfont{frametitle}\insertframetitle};
+ \path[use as bounding box] (0,0) rectangle (\paperwidth,.115\paperheight);
+ \node[coordinate] (grayline) at (.05\paperwidth,0) {};
+ \ifx\insertframesubtitle\@empty\else%
+ \node[inner xsep=1ex, anchor=north east] (subtitle) at (frametitle.base east) {\usebeamerfont{framesubtitle}\usebeamercolor[fg]{framesubtitle}\insertframesubtitle};
+ \node[coordinate] (grayline) at (grayline |- subtitle.south) {};
+ \fi%
+ \begin{scope} % Lines
+ \pgfsetfading{LRfading}{\pgftransformshift{\pgfpoint{.5\paperwidth}{-.5\textheight}}}
+ \draw[gray!50,ultra thin] (grayline) -- +(.9\paperwidth,0);
+ \end{scope}
+ \end{tikzpicture}
+ \end{beamercolorbox}
+ \vskip-.25em %Line 110 beamerbaseframe.sty
+ \vskip-.2cm %Line 248 beamerbaseframe.sty
+ \vskip.02\paperwidth
+}
+\defbeamertemplate*{frametitle}{caes theme}{
+ \nointerlineskip
+ \begin{beamercolorbox}[wd=\paperwidth]{}
+
+ \begin{tikzpicture}
+ \node[anchor=base east, inner xsep=0pt] (frametitle) at (.93\paperwidth,.02\paperwidth) {\usebeamerfont{frametitle}\insertframetitle};
+ \node[coordinate] (grayline) at (.05\paperwidth,0) {};
+ \ifx\insertframesubtitle\@empty\else%
+ \node[inner xsep=1ex, inner ysep=0pt, anchor=base east] (subtitle) at ([yshift=-.04\paperwidth] frametitle.base east) {\usebeamerfont{framesubtitle}\usebeamercolor[fg]{framesubtitle}\insertframesubtitle};
+ \node[coordinate] (grayline) at ([yshift=-0.02\paperwidth] grayline |- subtitle.base) {};
+ \fi%
+
+ \path[use as bounding box] (TL |- grayline.south) rectangle (\paperwidth,.115\paperheight);
+
+ \begin{scope} % Lines
+ \pgfsetfading{BRfading}{\pgftransformshift{\pgfpoint{.5\paperwidth}{-.5\textheight}}}
+ \draw[gray!50,ultra thin] (grayline) +(.9\paperwidth,0) -| +(0,-.5\textheight);
+ \end{scope}
+ \end{tikzpicture}
+ \end{beamercolorbox}
+ \vskip-.25em %Line 110 beamerbaseframe.sty
+ \vskip-.2cm %Line 248 beamerbaseframe.sty
+ \vskip.01\paperwidth
+}
+
+\setbeamersize{text margin left=0.07\paperwidth, text margin right=0.07\paperwidth}
+
+\makeatother
+
+\mode
+<all>
--- /dev/null
+%%
+%% beamerthemecaes.sty
+%%
+%% Copyright (C) 2008 CAES (http://caes.ewi.utwente.nl)
+%%
+%% Authors : Pascal Wolkotte
+%% Created On : March 15 2008
+%%
+%% $Author: wolkottept $
+%% $Date: 2008-03-14 10:07:37 +0100 (Fri, 14 Mar 2008) $
+%% $Revision: 40 $
+%% $HeadURL: https://svncaes/svn/general/templates/caes/trunk/caes_presentation.cls $
+%%
+
+\mode<presentation>
+
+\useoutertheme{caes}
+\useinnertheme{default}
+\useinnertheme{caes}
+\usecolortheme{caes}
+\usefonttheme{caes}
+
+%\setbeamertemplate{headline}[caes theme]
+
+\setbeamertemplate{headline}[chameleonB theme]
+\setbeamertemplate{footline}[caes theme]
+\setbeamertemplate{background}[soc theme]
+\setbeamertemplate{navigation symbols}[vertical]
+\setbeamercovered{transparent}
+
+\DeclareOptionBeamer{empty}{
+ \setbeamertemplate{background}[empty]
+ \setbeamertemplate{navigation symbols}[none]
+ \PassOptionsToPackage{navigation=false}{beamerouterthemecaes}
+}
+
+\ProcessOptionsBeamer
+
+\mode
+<all>
--- /dev/null
+%%\r
+%% caes_presentation.cls\r
+%%\r
+%% Copyright (C) 2008 CAES (http://caes.ewi.utwente.nl)\r
+%%\r
+%% Authors : Pascal Wolkotte\r
+%% Created On : March 13 2008\r
+%%\r
+%% $Author: bakkerv $\r
+%% $Date: 2008-03-25 10:31:52 +0100 (Tue, 25 Mar 2008) $\r
+%% $Revision: 45 $\r
+%% $HeadURL: https://ewi630/svn/general/templates/caes/trunk/caes_presentation.cls $\r
+%% \r
+\r
+% -- BASIC SETTINGS --\r
+\NeedsTeXFormat{LaTeX2e}\r
+\ProvidesClass{caes_presentation}[2008/03/13 Standard document class for presentations of the CAES group] % Name of this class-file\r
+\r
+\DeclareOption{empty}{\PassOptionsToPackage{\CurrentOption}{beamerthemecaes}}\r
+\DeclareOption{powerpoint}{\PassOptionsToPackage{\CurrentOption}{beamerthemecaes}}\r
+\DeclareOption{chameleonA}{\PassOptionsToPackage{\CurrentOption}{beamerthemecaes}}\r
+\DeclareOption{chameleonB}{\PassOptionsToPackage{\CurrentOption}{beamerthemecaes}}\r
+\DeclareOption{energy}{\PassOptionsToPackage{\CurrentOption}{beamerthemecaes}}\r
+\r
+\r
+\DeclareOption*{\PassOptionsToClass{\CurrentOption}{beamer}}\r
+%\DeclareOption*{\PassOptionsToClass{\CurrentOption}{beamer}}\r
+\ProcessOptions\relax\r
+\LoadClass[t,11pt,hyperref={unicode},notes=show]{beamer}\r
+\r
+\pdfpageattr {/Group << /S /Transparency /I true /CS /DeviceRGB>>} %Solves colorshift due to transparency in figures\r
+\RequirePackage{tikz}\r
+\RequirePackage{url}\r
+\r
+\usetheme{caes}\r
+\date{\today}\r
+\institute[University of Twente]{\raggedleft\r
+Computer Architecture for Embedded Systems (CAES) group\\\r
+Faculty of Electrical Engineering, Mathematics and Computer Science\\\r
+University of Twente\\\r
+\url{http://caes.ewi.utwente.nl} \hfill Enschede, The Netherlands}\r
+\r
+\makeatletter\r
+\def\caestitle{\maketitle}\r
+\def\maketitle{ {\setbeamertemplate{navigation symbols}[none]\ifbeamer@inframe\titlepage\else\frame[b]{\titlepage}\fi} }\r
+\makeatother\r
+\r
+%\RequirePackage{caes}\r
+\r
+\r
+% -- END OF CLASS --\r
--- /dev/null
+%include talk.fmt
+\title{\clash :}
+\subtitle{From Haskell To Hardware}
+\author{Christiaan Baaij}
+\date{December 14, 2009}
+
+\frame{\titlepage \setcounter{framenumber}{1}}
\ No newline at end of file
--- /dev/null
+\RequirePackage{atbegshi}
+\documentclass[empty]{caes_presentation}
+%include talk.fmt
+\include{preamble}
+
+\title{Hardware and Functional Languages}
+\author{Matthijs Kooijman, Christiaan Baaij \\ \& Jan Kuper}
+\date{December 14, 2009}
+
+\begin{document}
+
+\frame{\titlepage}
+\note[itemize]{
+\item Gezamenlijke introductie (verteld door Matthijs)
+\item Presentatie Matthijs
+\item Presentatie Christiaan
+}
+
+\include{introduction}
+\include{matthijs/introduction}
+\include{christiaan/introduction}
+% \include{fir}
+% \include{reducer}
+
+\end{document}
--- /dev/null
+\section{Demonstration}
+
+\frame{
+\frametitle{Demo}
+Pre-Recorded Video: VHDL Synthesis takes too long\pause
+\vspace{3em}
+\begin{itemize}
+ \item Simulate the Haskell CPU description
+ \item Translate the Haskell description to VHDL
+ \item Simulate the generated VHDL
+\end{itemize}
+}\note[itemize]{
+\item Will show video
+}
+
+\frame{
+\frametitle{Generated Schematic}
+\begin{figure}
+\centerline{\includegraphics<1>[width=10.3cm]{cpucomplete}
+\includegraphics<2>[width=11.3cm]{cpualu}
+%\includegraphics<3>[height=6.3cm]{cpuregisters}
+}
+\end{figure}
+}
+
+%
+% \frame{
+% \frametitle{How do we use \clash{}?}
+% As a library:
+% \begin{itemize}
+% \item Import the module: CLasH.Translator
+% \item And call \emph{makeVHDLAnnotations ghc\_lib\_dir [files\_to\_translate]}
+% \end{itemize}
+% Customized GHC:
+% \begin{itemize}
+% \item Call GHC with the --vhdl flag
+% \item Use the :vhdl command in GHCi
+% \end{itemize}
+% }
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>\r
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">\r
+<!-- Generated by Microsoft Visio 11.0, SVG Export, v1.0 CMOS NAND Layout 2.svg Page-1 -->\r
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:v="http://schemas.microsoft.com/visio/2003/SVGExtensions/" width="3.27in"\r
+ height="6.52in" viewBox="0 0 235.44 469.44" xml:space="preserve" color-interpolation-filters="sRGB" class="st9">\r
+ <v:documentProperties v:langID="1033"/>\r
+\r
+ <style type="text/css">\r
+ <![CDATA[\r
+ .st1 {fill:none;stroke:#000000;stroke-dasharray:1.68,1.2,0,1.2,0,1.2;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24}\r
+ .st2 {fill:#ffff99;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24}\r
+ .st3 {fill:#ff9999;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24}\r
+ .st4 {fill:#99ff66;fill-opacity:0.75;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24}\r
+ .st5 {fill:#000000;font-family:Arial;font-size:8pt}\r
+ .st6 {fill:#99ccff;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24}\r
+ .st7 {fill:none;stroke:none;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.72}\r
+ .st8 {fill:#000000;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24}\r
+ .st9 {fill:none;fill-rule:evenodd;font-size:12;overflow:visible;stroke-linecap:square;stroke-miterlimit:3}\r
+ ]]>\r
+ </style>\r
+\r
+ <g v:mID="0" v:index="1" v:groupContext="foregroundPage">\r
+ <title>Page-1</title>\r
+ <v:pageProperties v:drawingScale="1" v:pageScale="1" v:drawingUnits="19" v:shadowOffsetX="9" v:shadowOffsetY="-9"/>\r
+ <g id="shape1-1" v:mID="1" v:groupContext="shape" transform="translate(0.72,-288.72)">\r
+ <title>Sheet.1</title>\r
+ <path d="M0 469.44 L234 469.44 L234 289.44 L0 289.44 L0 469.44 Z" class="st1"/>\r
+ </g>\r
+ <g id="shape2-3" v:mID="2" v:groupContext="shape" transform="translate(72.72,-333.72)">\r
+ <title>Sheet.2</title>\r
+ <rect x="0" y="406.44" width="135" height="63" class="st2"/>\r
+ </g>\r
+ <g id="shape3-5" v:mID="3" v:groupContext="shape" transform="translate(72.72,-180.72)">\r
+ <title>Sheet.3</title>\r
+ <rect x="0" y="406.44" width="135" height="63" class="st3"/>\r
+ </g>\r
+ <g id="shape4-7" v:mID="4" v:groupContext="shape" transform="translate(99.72,-162.72)">\r
+ <title>Sheet.4</title>\r
+ <desc>B</desc>\r
+ <v:userDefs/>\r
+ <v:textBlock v:margins="rect(4,4,4,4)" v:verticalAlign="0"/>\r
+ <v:textRect cx="13.5" cy="343.44" width="27" height="252"/>\r
+ <rect x="0" y="217.44" width="27" height="252" class="st4"/>\r
+ <text x="9.94" y="231.04" class="st5" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>B</text> </g>\r
+ <g id="shape5-10" v:mID="5" v:groupContext="shape" transform="translate(153.72,-162.72)">\r
+ <title>Sheet.5</title>\r
+ <desc>A</desc>\r
+ <v:userDefs/>\r
+ <v:textBlock v:margins="rect(4,4,4,4)" v:verticalAlign="0"/>\r
+ <v:textRect cx="13.5" cy="343.44" width="27" height="252"/>\r
+ <rect x="0" y="217.44" width="27" height="252" class="st4"/>\r
+ <text x="9.94" y="231.04" class="st5" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>A</text> </g>\r
+ <g id="group6-13" transform="translate(0.72,-72.72)" v:mID="6" v:groupContext="group">\r
+ <title>Sheet.6</title>\r
+ <g id="shape7-14" v:mID="7" v:groupContext="shape">\r
+ <title>Sheet.7</title>\r
+ <rect x="0" y="451.44" width="18" height="18" class="st6"/>\r
+ </g>\r
+ <g id="shape8-16" v:mID="8" v:groupContext="shape" transform="translate(18,5.68434E-014)">\r
+ <title>Sheet.8</title>\r
+ <desc>METAL1</desc>\r
+ <v:userDefs/>\r
+ <v:textBlock v:margins="rect(4,4,4,4)"/>\r
+ <v:textRect cx="36" cy="460.44" width="72" height="18"/>\r
+ <rect x="0" y="451.44" width="72" height="18" class="st7"/>\r
+ <text x="4" y="463.64" class="st5" v:langID="1033"><v:paragraph/><v:tabList/>METAL1</text> </g>\r
+ </g>\r
+ <g id="group9-19" transform="translate(0.72,-36.72)" v:mID="9" v:groupContext="group">\r
+ <title>Sheet.9</title>\r
+ <g id="shape10-20" v:mID="10" v:groupContext="shape">\r
+ <title>Sheet.10</title>\r
+ <rect x="0" y="451.44" width="18" height="18" class="st4"/>\r
+ </g>\r
+ <g id="shape11-22" v:mID="11" v:groupContext="shape" transform="translate(18,5.68434E-014)">\r
+ <title>Sheet.11</title>\r
+ <desc>POLY</desc>\r
+ <v:userDefs/>\r
+ <v:textBlock v:margins="rect(4,4,4,4)"/>\r
+ <v:textRect cx="36" cy="460.44" width="72" height="18"/>\r
+ <rect x="0" y="451.44" width="72" height="18" class="st7"/>\r
+ <text x="4" y="463.64" class="st5" v:langID="1033"><v:paragraph/><v:tabList/>POLY</text> </g>\r
+ </g>\r
+ <g id="group12-25" transform="translate(0.72,-0.72)" v:mID="12" v:groupContext="group">\r
+ <title>Sheet.12</title>\r
+ <g id="shape13-26" v:mID="13" v:groupContext="shape">\r
+ <title>Sheet.13</title>\r
+ <rect x="0" y="451.44" width="18" height="18" class="st8"/>\r
+ </g>\r
+ <g id="shape14-28" v:mID="14" v:groupContext="shape" transform="translate(18,5.68434E-014)">\r
+ <title>Sheet.14</title>\r
+ <desc>CONTACT</desc>\r
+ <v:userDefs/>\r
+ <v:textBlock v:margins="rect(4,4,4,4)"/>\r
+ <v:textRect cx="36" cy="460.44" width="72" height="18"/>\r
+ <rect x="0" y="451.44" width="72" height="18" class="st7"/>\r
+ <text x="4" y="463.64" class="st5" v:langID="1033"><v:paragraph/><v:tabList/>CONTACT</text> </g>\r
+ </g>\r
+ <g id="group15-31" transform="translate(126.72,-72.72)" v:mID="15" v:groupContext="group">\r
+ <title>Sheet.15</title>\r
+ <g id="shape16-32" v:mID="16" v:groupContext="shape">\r
+ <title>Sheet.16</title>\r
+ <rect x="0" y="451.44" width="18" height="18" class="st3"/>\r
+ </g>\r
+ <g id="shape17-34" v:mID="17" v:groupContext="shape" transform="translate(18,5.68434E-014)">\r
+ <title>Sheet.17</title>\r
+ <desc>N DIFFUSION</desc>\r
+ <v:userDefs/>\r
+ <v:textBlock v:margins="rect(4,4,4,4)"/>\r
+ <v:textRect cx="40.14" cy="460.44" width="80.28" height="18"/>\r
+ <rect x="0" y="451.44" width="80.28" height="18" class="st7"/>\r
+ <text x="4" y="463.64" class="st5" v:langID="1033"><v:paragraph/><v:tabList/>N DIFFUSION</text> </g>\r
+ </g>\r
+ <g id="group18-37" transform="translate(126.72,-0.72)" v:mID="18" v:groupContext="group">\r
+ <title>Sheet.18</title>\r
+ <g id="shape19-38" v:mID="19" v:groupContext="shape">\r
+ <title>Sheet.19</title>\r
+ <path d="M0 469.44 L18 469.44 L18 451.44 L0 451.44 L0 469.44 Z" class="st1"/>\r
+ </g>\r
+ <g id="shape20-40" v:mID="20" v:groupContext="shape" transform="translate(18,5.68434E-014)">\r
+ <title>Sheet.20</title>\r
+ <desc>N-WELL</desc>\r
+ <v:userDefs/>\r
+ <v:textBlock v:margins="rect(4,4,4,4)"/>\r
+ <v:textRect cx="36" cy="460.44" width="72" height="18"/>\r
+ <rect x="0" y="451.44" width="72" height="18" class="st7"/>\r
+ <text x="4" y="463.64" class="st5" v:langID="1033"><v:paragraph/><v:tabList/>N-WELL</text> </g>\r
+ </g>\r
+ <g id="group21-43" transform="translate(126.72,-36.72)" v:mID="21" v:groupContext="group">\r
+ <title>Sheet.21</title>\r
+ <g id="shape22-44" v:mID="22" v:groupContext="shape">\r
+ <title>Sheet.22</title>\r
+ <rect x="0" y="451.44" width="18" height="18" class="st2"/>\r
+ </g>\r
+ <g id="shape23-46" v:mID="23" v:groupContext="shape" transform="translate(18,5.68434E-014)">\r
+ <title>Sheet.23</title>\r
+ <desc>P DIFFUSION</desc>\r
+ <v:userDefs/>\r
+ <v:textBlock v:margins="rect(4,4,4,4)"/>\r
+ <v:textRect cx="40.14" cy="460.44" width="80.28" height="18"/>\r
+ <rect x="0" y="451.44" width="80.28" height="18" class="st7"/>\r
+ <text x="4" y="463.64" class="st5" v:langID="1033"><v:paragraph/><v:tabList/>P DIFFUSION</text> </g>\r
+ </g>\r
+ <g id="shape24-49" v:mID="24" v:groupContext="shape" transform="translate(27.72,-333.72)">\r
+ <title>Sheet.24</title>\r
+ <rect x="0" y="406.44" width="27" height="63" class="st3"/>\r
+ </g>\r
+ <g id="shape25-51" v:mID="25" v:groupContext="shape" transform="translate(27.72,-180.72)">\r
+ <title>Sheet.25</title>\r
+ <rect x="0" y="406.44" width="27" height="63" class="st2"/>\r
+ </g>\r
+ <g id="shape26-53" v:mID="26" v:groupContext="shape" transform="translate(0.72,-356.22)">\r
+ <title>Sheet.26</title>\r
+ <path d="M202.5 392.94 L234 392.94 L234 356.94 L0 356.94 L0 392.94 L76.5 392.94 L76.5 451.44 L31.5 451.44 L31.5 469.44\r
+ L76.5 469.44 L94.5 469.44 L94.5 451.44 L94.5 392.94 L184.5 392.94 L184.5 469.44 L202.5 469.44 L202.5 392.94\r
+ Z" class="st6"/>\r
+ </g>\r
+ <g id="shape27-55" v:mID="27" v:groupContext="shape" transform="translate(131.22,-203.782)">\r
+ <title>Sheet.27</title>\r
+ <path d="M72 411.5 L103.5 411.5 L103.5 393.5 L72 393.5 L54 393.5 L18 393.5 L18 299.56 L0 299.56 L0 393.5 L0 411.5 L54\r
+ 411.5 L54 469.44 L72 469.44 L72 411.5 Z" class="st6"/>\r
+ </g>\r
+ <g id="shape28-57" v:mID="28" v:groupContext="shape" transform="translate(135.72,-360.72)">\r
+ <title>Sheet.28</title>\r
+ <rect x="0" y="460.44" width="9" height="9" class="st8"/>\r
+ </g>\r
+ <g id="shape29-59" v:mID="29" v:groupContext="shape" transform="translate(189.72,-360.72)">\r
+ <title>Sheet.29</title>\r
+ <rect x="0" y="460.44" width="9" height="9" class="st8"/>\r
+ </g>\r
+ <g id="shape30-61" v:mID="30" v:groupContext="shape" transform="translate(189.72,-207.72)">\r
+ <title>Sheet.30</title>\r
+ <rect x="0" y="460.44" width="9" height="9" class="st8"/>\r
+ </g>\r
+ <g id="shape31-63" v:mID="31" v:groupContext="shape" transform="translate(81.72,-360.72)">\r
+ <title>Sheet.31</title>\r
+ <rect x="0" y="460.44" width="9" height="9" class="st8"/>\r
+ </g>\r
+ <g id="shape32-65" v:mID="32" v:groupContext="shape" transform="translate(36.72,-360.72)">\r
+ <title>Sheet.32</title>\r
+ <rect x="0" y="460.44" width="9" height="9" class="st8"/>\r
+ </g>\r
+ <g id="shape33-67" v:mID="33" v:groupContext="shape" transform="translate(0.72,-450.72)">\r
+ <title>Sheet.33</title>\r
+ <desc>VDD</desc>\r
+ <v:userDefs/>\r
+ <v:textBlock v:margins="rect(4,4,4,4)"/>\r
+ <v:textRect cx="117" cy="460.44" width="234" height="18"/>\r
+ <rect x="0" y="451.44" width="234" height="18" class="st7"/>\r
+ <text x="105.74" y="463.64" class="st5" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>VDD</text> </g>\r
+ <g id="shape34-70" v:mID="34" v:groupContext="shape" transform="translate(198.72,-261.72)">\r
+ <title>Sheet.34</title>\r
+ <desc>OUT</desc>\r
+ <v:userDefs/>\r
+ <v:textBlock v:margins="rect(4,4,4,4)"/>\r
+ <v:textRect cx="18" cy="460.44" width="36" height="18"/>\r
+ <rect x="0" y="451.44" width="36" height="18" class="st7"/>\r
+ <text x="6.74" y="463.64" class="st5" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>OUT</text> </g>\r
+ <g id="shape35-73" v:mID="35" v:groupContext="shape" transform="translate(0.72,-126.72)">\r
+ <title>Sheet.35</title>\r
+ <desc>VSS</desc>\r
+ <v:userDefs/>\r
+ <v:textBlock v:margins="rect(4,4,4,4)"/>\r
+ <v:textRect cx="117" cy="460.44" width="234" height="18"/>\r
+ <rect x="0" y="451.44" width="234" height="18" class="st7"/>\r
+ <text x="106.33" y="463.64" class="st5" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>VSS</text> </g>\r
+ <g id="shape36-76" v:mID="36" v:groupContext="shape" transform="translate(0.72,-108.72)">\r
+ <title>Sheet.36</title>\r
+ <path d="M94.5 392.94 L94.5 374.94 L94.5 356.94 L31.5 356.94 L31.5 374.94 L76.5 374.94 L76.5 392.94 L76.5 433.44 L0 433.44\r
+ L0 469.44 L234 469.44 L234 433.44 L94.5 433.44 L94.5 392.94 Z" class="st6"/>\r
+ </g>\r
+ <g id="shape37-78" v:mID="37" v:groupContext="shape" transform="translate(81.72,-207.72)">\r
+ <title>Sheet.37</title>\r
+ <rect x="0" y="460.44" width="9" height="9" class="st8"/>\r
+ </g>\r
+ <g id="shape38-80" v:mID="38" v:groupContext="shape" transform="translate(36.72,-207.72)">\r
+ <title>Sheet.38</title>\r
+ <rect x="0" y="460.44" width="9" height="9" class="st8"/>\r
+ </g>\r
+ </g>\r
+</svg>\r
--- /dev/null
+\section{4-taps FIR Filter}
+
+\begin{frame}[plain]
+ \vspace{-0.8em}
+ \begin{figure}
+ \centerline{\includegraphics[width=\paperwidth,trim=9mm 4cm 14mm 4cm, clip=true]{fir0.png}}
+ \end{figure}
+\end{frame}
+
+\begin{frame}[plain]
+ \vspace{-0.8em}
+ \begin{figure}
+ \centerline{\includegraphics[width=\paperwidth,trim=9mm 4cm 14mm 4cm, clip=true]{fir1.png}}
+ \end{figure}
+\end{frame}
+
+\begin{frame}[plain]
+ \vspace{-0.8em}
+ \begin{figure}
+ \centerline{\includegraphics[width=\paperwidth,trim=9mm 4cm 14mm 4cm, clip=true]{fir2.png}}
+ \end{figure}
+\end{frame}
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.0"
+ width="261.52942"
+ height="161.53819"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ sodipodi:docname="foldr.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <metadata
+ id="metadata10676">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <sodipodi:namedview
+ inkscape:window-height="1232"
+ inkscape:window-width="1024"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ guidetolerance="10.0"
+ gridtolerance="10.0"
+ objecttolerance="10.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base"
+ showgrid="false"
+ inkscape:zoom="1.0093657"
+ inkscape:cx="167.08218"
+ inkscape:cy="24.342676"
+ inkscape:window-x="0"
+ inkscape:window-y="22"
+ inkscape:current-layer="svg2"
+ showguides="false"
+ inkscape:guide-bbox="true">
+ <sodipodi:guide
+ orientation="0,1"
+ position="121.61102,135.23344"
+ id="guide2546" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="114.88949,147.81513"
+ id="guide2548" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="130.27983,154.5525"
+ id="guide2550" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="144.89297,157.02931"
+ id="guide2552" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="160.00147,156.03859"
+ id="guide2554" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="100.06284,116.16206"
+ id="guide2556" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="175.10997,155.79091"
+ id="guide2558" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="104.2734,119.87726"
+ id="guide2560" />
+ <inkscape:grid
+ type="xygrid"
+ id="grid2562"
+ visible="true"
+ enabled="true" />
+ </sodipodi:namedview>
+ <defs
+ id="defs4">
+ <marker
+ inkscape:stockid="Arrow1Send"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow1Send"
+ style="overflow:visible">
+ <path
+ id="path4059"
+ d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="matrix(-0.2,0,0,-0.2,-1.2,0)" />
+ </marker>
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 99.106232 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="380.3963 : 99.106232 : 1"
+ inkscape:persp3d-origin="190.19815 : 66.070821 : 1"
+ id="perspective10678" />
+ <marker
+ refX="0"
+ refY="0"
+ orient="auto"
+ id="Arrow2Lstart"
+ style="overflow:visible">
+ <path
+ d="M 8.7185878,4.0337352 L -2.2072895,0.01601326 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 L 8.7185878,4.0337352 z"
+ transform="matrix(1.1,0,0,1.1,1.1,0)"
+ id="path3653"
+ style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
+ </marker>
+ <marker
+ refX="0"
+ refY="0"
+ orient="auto"
+ id="Arrow2Lend"
+ style="overflow:visible">
+ <path
+ d="M 8.7185878,4.0337352 L -2.2072895,0.01601326 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 L 8.7185878,4.0337352 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ id="path3656"
+ style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
+ </marker>
+ <marker
+ refX="0"
+ refY="0"
+ orient="auto"
+ id="Arrow1Lend"
+ style="overflow:visible">
+ <path
+ d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z"
+ transform="matrix(-0.8,0,0,-0.8,-10,0)"
+ id="path3638"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" />
+ </marker>
+ <marker
+ refX="0"
+ refY="0"
+ orient="auto"
+ id="Arrow2Mstart"
+ style="overflow:visible">
+ <path
+ d="M 8.7185878,4.0337352 L -2.2072895,0.01601326 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 L 8.7185878,4.0337352 z"
+ transform="scale(0.6,0.6)"
+ id="path3659"
+ style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
+ </marker>
+ <marker
+ refX="0"
+ refY="0"
+ orient="auto"
+ id="Arrow2Mend"
+ style="overflow:visible">
+ <path
+ d="M 8.7185878,4.0337352 L -2.2072895,0.01601326 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 L 8.7185878,4.0337352 z"
+ transform="scale(-0.6,-0.6)"
+ id="path3662"
+ style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
+ </marker>
+ <marker
+ refX="0"
+ refY="0"
+ orient="auto"
+ id="Arrow2Lend-6"
+ style="overflow:visible">
+ <path
+ d="M 8.7185878,4.0337352 L -2.2072895,0.01601326 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 L 8.7185878,4.0337352 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ id="path3656-0"
+ style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
+ </marker>
+ </defs>
+ <text
+ style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+ xml:space="preserve"
+ id="text5424"
+ y="-65.91375"
+ x="59.491333"><tspan
+ id="tspan5426"
+ y="-65.91375"
+ x="59.491333" /></text>
+ <text
+ sodipodi:linespacing="100%"
+ style="font-size:12px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Palatino;-inkscape-font-specification:Palatino Italic"
+ xml:space="preserve"
+ id="text3712-5-7-1"
+ y="57.272881"
+ x="-34.764526"><tspan
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;font-family:Palatino;-inkscape-font-specification:Palatino"
+ id="tspan8173"
+ y="57.272881"
+ x="-34.764526" /></text>
+ <rect
+ width="260.11011"
+ height="160.11887"
+ rx="7.6502962"
+ ry="6.5830326"
+ x="0.70966303"
+ y="-160.82852"
+ id="rect3716"
+ style="fill:#f0f0f0;fill-opacity:1;stroke:#000000;stroke-width:1.41932607;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2.83865186, 1.41932594;stroke-dashoffset:0;stroke-opacity:1"
+ transform="scale(1,-1)" />
+ <text
+ x="37.889488"
+ y="35.526455"
+ id="text2417"
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Palatino;-inkscape-font-specification:Palatino"><tspan
+ x="37.889488"
+ y="35.526455"
+ id="tspan2421"
+ style="text-align:center;text-anchor:middle">:</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 35.38949,35.759895 L 25.5,45.759895"
+ id="path2564" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 40.5,35.526455 L 50.5,45.759895"
+ id="path2566" />
+ <text
+ x="53"
+ y="55.759895"
+ id="text2568"
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Palatino;-inkscape-font-specification:Palatino"><tspan
+ x="53"
+ y="55.759895"
+ id="tspan2570"
+ style="text-align:center;text-anchor:middle">:</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 50.77983,55.759895 L 40.89034,65.759895"
+ id="path2572" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 55.5,55.526455 L 65.5,65.759895"
+ id="path2574" />
+ <text
+ x="68"
+ y="75.993332"
+ id="text2576"
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Palatino;-inkscape-font-specification:Palatino"><tspan
+ x="68"
+ y="75.993332"
+ id="tspan2578"
+ style="text-align:center;text-anchor:middle">:</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 65.77983,75.993332 L 55.89034,85.993332"
+ id="path2580" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 70.5,75.759892 L 80.5,85.993332"
+ id="path2582" />
+ <text
+ x="83.10997"
+ y="95.759895"
+ id="text2584"
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Palatino;-inkscape-font-specification:Palatino"><tspan
+ x="83.10997"
+ y="95.759895"
+ id="tspan2586"
+ style="text-align:center;text-anchor:middle">:</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 80.8898,95.759892 L 71.00031,105.75989"
+ id="path2588" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 85.60997,95.526452 L 95.60997,105.75989"
+ id="path2590" />
+ <text
+ x="98"
+ y="115.7599"
+ id="text2592"
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Palatino;-inkscape-font-specification:Palatino"><tspan
+ x="98"
+ y="115.7599"
+ id="tspan2594"
+ style="text-align:center;text-anchor:middle">:</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 95.77983,115.75989 L 85.89034,125.75989"
+ id="path2596" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 100.5,115.52645 L 110.5,125.75989"
+ id="path2598" />
+ <text
+ x="20.5"
+ y="60.759895"
+ id="text2600"
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Palatino;-inkscape-font-specification:Palatino"><tspan
+ x="20.5"
+ y="60.759895"
+ id="tspan2602"
+ style="text-align:center;text-anchor:middle">1</tspan></text>
+ <text
+ x="35.5"
+ y="80.759895"
+ id="text2604"
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Palatino;-inkscape-font-specification:Palatino"><tspan
+ x="35.5"
+ y="80.759895"
+ id="tspan2606"
+ style="text-align:center;text-anchor:middle">2</tspan></text>
+ <text
+ x="50.5"
+ y="100.7599"
+ id="text2608"
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Palatino;-inkscape-font-specification:Palatino"><tspan
+ x="50.5"
+ y="100.7599"
+ id="tspan2610"
+ style="text-align:center;text-anchor:middle">3</tspan></text>
+ <text
+ x="65.5"
+ y="120.7599"
+ id="text2612"
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Palatino;-inkscape-font-specification:Palatino"><tspan
+ x="65.5"
+ y="120.7599"
+ id="tspan2614"
+ style="text-align:center;text-anchor:middle">4</tspan></text>
+ <text
+ x="80.5"
+ y="140.75989"
+ id="text2616"
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Palatino;-inkscape-font-specification:Palatino"><tspan
+ x="80.5"
+ y="140.75989"
+ id="tspan2618"
+ style="text-align:center;text-anchor:middle">5</tspan></text>
+ <text
+ x="117.16016"
+ y="140.75989"
+ id="text2620"
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Palatino;-inkscape-font-specification:Palatino"><tspan
+ x="117.16016"
+ y="140.75989"
+ id="tspan2622"
+ style="text-align:center;text-anchor:middle">[]</tspan></text>
+ <text
+ x="157.77951"
+ y="35.526451"
+ id="text2624"
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Palatino;-inkscape-font-specification:Palatino"><tspan
+ x="157.77951"
+ y="35.526451"
+ id="tspan2626"
+ style="text-align:center;text-anchor:middle">f</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 155.27952,35.759892 L 145.39003,45.759892"
+ id="path2628" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 160.39003,35.526452 L 170.39003,45.759892"
+ id="path2630" />
+ <text
+ x="172.89003"
+ y="55.759895"
+ id="text2632"
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Palatino;-inkscape-font-specification:Palatino"><tspan
+ x="172.89003"
+ y="55.759895"
+ id="tspan2634"
+ style="text-align:center;text-anchor:middle">f</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 170.66986,55.759892 L 160.78037,65.759892"
+ id="path2636" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 175.39003,55.526452 L 185.39003,65.759892"
+ id="path2638" />
+ <text
+ x="187.89001"
+ y="75.993332"
+ id="text2640"
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Palatino;-inkscape-font-specification:Palatino"><tspan
+ x="187.89001"
+ y="75.993332"
+ id="tspan2642"
+ style="text-align:center;text-anchor:middle">f</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 185.66986,75.993332 L 175.78037,85.993332"
+ id="path2644" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 190.39003,75.759892 L 200.39003,85.993332"
+ id="path2646" />
+ <text
+ x="203"
+ y="95.759895"
+ id="text2648"
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Palatino;-inkscape-font-specification:Palatino"><tspan
+ x="203"
+ y="95.759895"
+ id="tspan2650"
+ style="text-align:center;text-anchor:middle">f</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 200.77983,95.759892 L 190.89034,105.75989"
+ id="path2652" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 205.5,95.526452 L 215.5,105.75989"
+ id="path2654" />
+ <text
+ x="217.89001"
+ y="115.7599"
+ id="text2656"
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Palatino;-inkscape-font-specification:Palatino"><tspan
+ x="217.89001"
+ y="115.7599"
+ id="tspan2658"
+ style="text-align:center;text-anchor:middle">f</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 215.66986,115.75989 L 205.78037,125.75989"
+ id="path2660" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 220.39003,115.52645 L 230.39003,125.75989"
+ id="path2662" />
+ <text
+ x="140.39003"
+ y="60.759895"
+ id="text2664"
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Palatino;-inkscape-font-specification:Palatino"><tspan
+ x="140.39003"
+ y="60.759895"
+ id="tspan2666"
+ style="text-align:center;text-anchor:middle">1</tspan></text>
+ <text
+ x="155.39003"
+ y="80.759895"
+ id="text2668"
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Palatino;-inkscape-font-specification:Palatino"><tspan
+ x="155.39003"
+ y="80.759895"
+ id="tspan2670"
+ style="text-align:center;text-anchor:middle">2</tspan></text>
+ <text
+ x="170.39003"
+ y="100.7599"
+ id="text2672"
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Palatino;-inkscape-font-specification:Palatino"><tspan
+ x="170.39003"
+ y="100.7599"
+ id="tspan2674"
+ style="text-align:center;text-anchor:middle">3</tspan></text>
+ <text
+ x="185.39001"
+ y="120.7599"
+ id="text2676"
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Palatino;-inkscape-font-specification:Palatino"><tspan
+ x="185.39001"
+ y="120.7599"
+ id="tspan2678"
+ style="text-align:center;text-anchor:middle">4</tspan></text>
+ <text
+ x="200.39001"
+ y="140.75989"
+ id="text2680"
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Palatino;-inkscape-font-specification:Palatino"><tspan
+ x="200.39001"
+ y="140.75989"
+ id="tspan2682"
+ style="text-align:center;text-anchor:middle">5</tspan></text>
+ <text
+ x="237.05017"
+ y="140.75989"
+ id="text2684"
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Palatino;-inkscape-font-specification:Palatino"><tspan
+ x="237.05017"
+ y="140.75989"
+ id="tspan2686"
+ style="text-align:center;text-anchor:middle">z</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-start:url(#Arrow1Send);marker-end:url(#Arrow2Mend);stroke-opacity:1"
+ d="M 55.5,30.759895 L 140.5,30.759895"
+ id="path2688" />
+ <text
+ x="97.487534"
+ y="25.415398"
+ id="text4855"
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Palatino;-inkscape-font-specification:Palatino"><tspan
+ x="97.487534"
+ y="25.415398"
+ id="tspan4857"
+ style="text-align:center;text-anchor:middle">foldr f z</tspan></text>
+</svg>
--- /dev/null
+%include talk.fmt
+\section{How do you make Hardware from Haskell?}
+\frame
+{
+ \frametitle{So how do you make Hardware from Haskell?}\pause
+ \large{In three simple steps really:} \pause
+ \begin{itemize}
+ \item No Effort:\\
+ GHC API Parses, Typechecks and Desugars the Haskell code \pause
+ \item Hard: \\
+ Transform resulting Core, GHC's Intermediate Language,\linebreak to a normal form. Uses reduction rules. \pause
+ \item Easy: \\
+ Translate Normalized Core to synthesizable VHDL
+ \end{itemize}
+}\note[itemize]{
+\item Here is a quick insight as to how WE translate Haskell to Hardware
+\item Reduction rules are used to get a required normal form.
+\item Normal form already looks like hardware (components and lines)
+\item You can also use TH, like ForSyDe. Or traverse datastructures, like Lava?
+\item We're in luck with the GHC API update of 6.10 and onwards
+}
--- /dev/null
+%include talk.fmt
+\section{Introduction}
+\subsection{Hardware as we know it}
+\frame
+{
+\frametitle{Hardware}
+\begin{figure}
+\centerline{
+\includegraphics<1>[height=6cm]{figures/cpus/pmiphone_boardtopbig}
+\includegraphics<2>[height=6cm]{figures/cpus/Intel_core_i7}
+\includegraphics<3>[height=6cm]{figures/cpus/6600GT_GPU}
+\includegraphics<4>[height=6cm]{figures/cpus/Altera_StratixIV}
+}
+\label{img:chips}
+\end{figure}
+}
+\note[itemize]
+{
+\item Iedereen weet wel wat hardware is. Hier een paar voorbeelden.
+\item Binnenkant iPhone met veelvoud aan chips, Laatste Intel CPU, Nvidia Videochip, Altere FPGA
+}
+
+\frame
+{
+\frametitle{Transistor}
+\begin{figure}
+\centerline{
+\includegraphics<1>[height=6cm]{figures/transistor/hr-1sttransistor}
+\includegraphics<2>[height=6cm]{figures/transistor/worldsfastes}
+\includegraphics<3>[height=6cm]{figures/transistor/nehalem_432x315}
+}
+\label{img:chips}
+\end{figure}
+}
+\note[itemize]
+{
+\item Hardware is opgebouwd uit transistoren, simpele schakelaar
+\item Eerste transistor 60 jaar geleden, ter grootte van je hand
+\item Het word allemaal steeds kleiner
+\item Nu: Chip net iets groter dan je duim: 731 miljoen transistoren
+}
+
+\frame
+{
+\frametitle{Transistor Counts}
+\begin{itemize}
+\item Cell (Playstation 3): 241 Million
+\item Intel Core i7: 731 Million
+\item ATI HD5800: 2150 Million
+\item Nvidia GF100 (Expected Summer 2010): 2900 Million
+\end{itemize}
+}
+\note[itemize]
+{
+\item Aantal gebruikte transistoren wordt steeds groter
+}
+
+\frame
+{
+\frametitle{Designing Hardware}
+\centerline{Design with 4 transistors}
+\begin{columns}[c]
+\column{0.5\textwidth}
+\vspace{-0.5cm}
+\begin{figure}
+\centerline{\includegraphics[height=5cm, trim = 0 0 0 2.5cm, clip]{figures/schakelingen/NAND}}
+\end{figure}
+\column{0.5\textwidth}
+\begin{figure}
+\centerline{\includegraphics[height=5cm, trim = 0 4.5cm 0 0, clip]{figures/schakelingen/CMOS_NAND_Layout}}
+\end{figure}
+\end{columns}
+}
+\note[itemize]
+{
+\item NAND: Gaat na dat beide ingangen niet 1 zijn
+\item Een simpel hardware ontwerp met 4 transistoren
+\item Links een schematisch ontwerp, Rechts de layout van de metaal lagen
+}
+
+\frame
+{
+\frametitle{Designing Hardware}
+\vspace{0.5cm}
+\centerline{\Large This won't work for 730 million transistors!}
+\begin{figure}
+\centerline{\includegraphics[height=4cm]{figures/transistor/nehalem-core}}
+\end{figure}
+}
+
+\frame
+{
+\frametitle{Designing Hardware}
+\begin{itemize}
+\item We design hardware in the same format as software
+\item We make designs in plain text!
+\item Software: Programming Languages
+\item Hardware: Hardware Description Languages
+\end{itemize}
+}
+\note[itemize]
+{
+\item Harware designs worden gewoon in tekst opgeschreven.
+\item Maar wel in een special taal voor hardware
+\item Waar je voor software programmeer talen hebt,
+\item Heb je voor hardware zogeheette hardwarebeschrijvingstalen
+}
+
+\frame
+{
+\frametitle{Designing Hardware}
+\begin{itemize}
+\item Algorithmic / Behavioral Descriptions:
+\begin{itemize}
+\item Describe \emph{what} the Hardware does
+\item Relation between input and output
+\end{itemize}
+\item Structural Descriptions:
+\begin{itemize}
+\item Describe \emph{how} the Hardware does it
+\item Hierarchal composition
+\end{itemize}
+\end{itemize}
+}
+\note[itemize]
+{
+\item Algoritmische beschrijvingen beschrijven wat de Hardware moet doen, niet hoe die dat doet
+\item Structurele beschrijvingen beschrijven hoe de Hardware dingen doet
+\item In Structurele beschrijvingen worden componenten opgebouwd uit simpele schakelingen en/of andere componenten
+\item Graag willen wij algorithmische beschrijvingen maken, en de structurele beschrijving hier automatisch van afleiden
+}
+
+\frame
+{
+\frametitle{Why do we make Hardware?}
+\begin{itemize}
+\item We make hardware to solve problems
+\item The solutionss are often described as a set of mathematical equations\footnote{But what is the equation for a CPU?}
+\item `Holy Grail' Hardware Descriptions:
+\begin{itemize}
+\item Input: Set of Mathematical Equations
+\item Output: Hardware that is Provably correct, Fast , Small, Cheap to manufacture, and has a low Energy Usage
+\end{itemize}
+\end{itemize}
+}
+\note[itemize]
+{
+\item We maken hardware omdat we, soms vaag gedefineerde, problemen willen oplossen.
+\item Oplossingen, vooral in de signaalverwerking (video, muziek, TV, etc.), zijn beschreven als een verzameling van wiskundige formules
+\item Wat we dus graag zouden hebben, een zogenaamde heilige graal, is een programma aan welke we deze formules geven, en dat er dan automatisch super efficiente hardware uit komt.
+\item Maar... wat is de formule van een CPU/Processor? Misschien moet is een oplossingen in `normaal nederlands' soms een betere input voor zo'n programma?
+}
+
+\frame
+{
+\frametitle{Functional Languages}
+\begin{itemize}
+\item Functional programming languages allow us to specify programs that are close to a set of mathematical equations.
+\end{itemize}
+}
+\note[itemize]
+{
+\item Functionele talen liggen dicht bij de wiskunde
+}
+
+\frame
+{
+\frametitle{Functional Languages \& Hardware}
+\begin{itemize}
+\item When we want to calculate, 1 + 2 + 3, there is nothing that dictates that we should first calculate 1 + 2
+\item Like mathematical equations, Functional languages do not dictate an order when there is none. So everything can be calculated in parallel.
+\item In hardware, everything also happens in parallel: electrons flow through all the transistors every moment in time.
+\item IDEA: Use functional languages to describe hardware!
+\end{itemize}
+}
+\note[itemize]
+{
+\item In wiskundige formules is er vaak geen volgorde gedefineerd
+\item Dit is dus hetzelfde in functionele talen, wat betekent dat alles tegelijk/parallel kan worden uitgerekent.
+\item Bij `normale' programmeertalen is er vaak wel een volgorde
+\item In hardware gebeurt ook alles tegelijkertijd
+\item Het idee is dus om hardware te beschrijven in een functionele taal
+}
+
+% \frame
+% {
+% \frametitle{Mealy Machine}
+% \begin{figure}
+% \centerline{\includegraphics<1>[width=6.25cm]{mealymachine2}
+% \includegraphics<2>[width=6.25cm]{mealymachine2-func-red}
+% \includegraphics<3>[width=6.25cm]{mealymachine2-state-red}}
+% \label{img:mealymachine}
+% \end{figure}
+% \begin{beamercolorbox}[sep=-2.5ex,rounded=true,shadow=true,vmode]{codebox}
+% \begin{code}
+% run {-"{\color<2>[rgb]{1,0,0}"-}func{-"}"-} {-"{\color<3>[rgb]{1,0,0}"-}state{-"}"-} [] = []
+% run {-"{\color<2>[rgb]{1,0,0}"-}func{-"}"-} {-"{\color<3>[rgb]{1,0,0}"-}state{-"}"-} (i:inputs) = o:outputs
+% where
+% ({-"{\color<3>[rgb]{1,0,0}"-}state'{-"}"-}, o) = {-"{\color<2>[rgb]{1,0,0}"-}func{-"}"-} i {-"{\color<3>[rgb]{1,0,0}"-}state{-"}"-}
+% outputs = run {-"{\color<2>[rgb]{1,0,0}"-}func{-"}"-} {-"{\color<3>[rgb]{1,0,0}"-}state'{-"}"-} inputs
+% \end{code}
+% \end{beamercolorbox}
+% }
+% \note[itemize]{
+% \item A Mealy machine bases its output on the current state and the input
+% \item State is part of the function signature
+% \item Both the current state, and the updated State
+% \item The run function simulates a mealy machine for the provided number of inputs
+% }
+%
+% \frame
+% {
+% \frametitle{Haskell Description}
+% \begin{figure}
+% \centerline{\includegraphics[width=6.25cm]{mealymachine2-func-red}}
+% \end{figure}
+% \begin{beamercolorbox}[sep=-2.5ex,rounded=true,shadow=true,vmode]{codebox}
+% \begin{code}
+% func ::
+% InputSignal ->
+% State ->
+% (State, OutputSignal)
+% \end{code}
+% \end{beamercolorbox}
+% }
+% \note[itemize]{
+% \item In \clash{} you describe the logic part of the mealy machine
+% \item The state in the signature is turned into memory elements when translating to VHDL
+% }
--- /dev/null
+{-# LANGUAGE TemplateHaskell, TypeOperators, RecordWildCards, ScopedTypeVariables, TypeFamilies #-}
+module MultiplyAccumulate where
+
+import CLasH.HardwareTypes
+import CLasH.Translator.Annotations
+type Word = SizedInt D8
+
+initacc :: Word
+initacc = 0
+
+{-# ANN macc (InitState 'initacc) #-}
+{-# ANN macc TopEntity #-}
+macc :: (Word,Word) -> State Word -> (State Word, Word)
+macc (x, y) (State acc) = (State u, u)
+ where
+ u = acc + x * y
+
+{-# ANN program TestInput #-}
+program :: [(Word,Word)]
+program =
+ [ (4, 2) -- 4 * 2 + 0 = 8
+ , (1, 3) -- 1 * 3 + 8 = 11
+ , (2, 2) -- 2 * 2 + 11 = 15
+ ]
+
+run _ _ [] = []
+run func state (i:input) = o:out
+ where
+ (state', o) = func i state
+ out = run func state' input
--- /dev/null
+%include talk.fmt
+%if style == newcode
+\begin{code}
+{-# LANGUAGE TemplateHaskell #-}
+module Main where
+
+import qualified Prelude as P
+\end{code}
+%endif
+
+\section{Multiply-Accumulate}
+\subsection{Pure description}
+\frame
+{
+\frametitle{Multiply-Accumulate}
+Purely Functional Description:
+\begin{beamercolorbox}[sep=-2.5ex,rounded=true,shadow=true,vmode]{codebox}
+%if style == newcode
+
+%else
+\begin{code}
+macc (x,y) acc = (u, u)
+ where
+ u = acc + x * y
+\end{code}
+\end{beamercolorbox}
+}\note[itemize]{
+\item Purely functional design (that Jan showed you earlier).
+\item \emph{acc} is the current state. \emph{u} is the updated state and output.
+}
+%endif
+
+\subsection{Extra's to make it compile}
+\frame
+{
+\frametitle{Extra's to make it compile}
+{\clash} Description:
+\begin{beamercolorbox}[sep=-2.5ex,rounded=true,shadow=true,vmode]{codebox}
+\begin{code}
+{-"{\color<3>[rgb]{1,0,0}"-}import CLasH.HardwareTypes{-"}"-}
+{-"{\color<4>[rgb]{1,0,0}"-}import CLasH.Translator.Annotations{-"}"-}
+{-"{\color<3>[rgb]{1,0,0}"-}type Word = SizedInt D8{-"}"-}
+
+initacc :: {-"{\color<3>[rgb]{1,0,0}"-}Word{-"}"-}
+{-"{\color<5>[rgb]{1,0,0}"-}initacc = 0{-"}"-}
+
+ANN(macc (InitState {-"\ "-} `initacc))
+ANN(macc TopEntity)
+macc :: ({-"{\color<3>[rgb]{1,0,0}"-}Word{-"}"-},{-"{\color<3>[rgb]{1,0,0}"-}Word{-"}"-}) -> {-"{\color<2>[rgb]{1,0,0}"-}State{-"}"-} {-"{\color<3>[rgb]{1,0,0}"-}Word{-"}"-} -> ({-"{\color<2>[rgb]{1,0,0}"-}State{-"}"-} {-"{\color<3>[rgb]{1,0,0}"-}Word{-"}"-}, {-"{\color<3>[rgb]{1,0,0}"-}Word{-"}"-})
+macc (x, y) ({-"{\color<2>[rgb]{1,0,0}"-}State{-"}"-} acc) = ({-"{\color<2>[rgb]{1,0,0}"-}State{-"}"-} u, u)
+ where
+ u = acc + x * y
+\end{code}
+\end{beamercolorbox}
+}\note[itemize]{
+\item Stuff you need to add to make it compile in \clash{}.
+\item State wrapper, tells the compiler which argument is the state
+\item Type declarations. Top-level entity needs to be mono-morphic (and first-order).
+\item Annotation pragma's. The TopEntity pragma tells the compiler which entity is the top entity.
+\item The InitState pragma points to the initial state.
+}
+
+\begin{frame}[plain]
+ \vspace{-0.8em}
+ \begin{figure}
+ \centerline{\includegraphics[width=\paperwidth,trim=9mm 4cm 14mm 4cm, clip=true]{macc.png}}
+ \end{figure}
+\end{frame}
+\note[itemize]{
+\item We see the register and multiplier on the left
+\item The adder on the right
+}
+
+\subsection{Test input}
+\frame
+{
+\frametitle{Test input}
+Test program for the Multiply-Accumulate circuit:
+\begin{beamercolorbox}[sep=-2.5ex,rounded=true,shadow=true,vmode]{codebox}
+\begin{code}
+ANN(program TestInput)
+program :: [(Word,Word)]
+program =
+ [ (4, 2) -- 4 * 2 + 0 = 8
+ , (1, 3) -- 1 * 3 + 8 = 11
+ , (2, 2) -- 2 * 2 + 11 = 15
+ ]
+\end{code}
+\end{beamercolorbox}
+\begin{itemize}
+ \item VHDL Testbench is automatically generated due to the \emph{TestInput} annotation pragma.
+\end{itemize}
+
+}\note[itemize]{
+\item We can also generate VHDL Testbench
+}
+
+%if style == newcode
+\begin{code}
+run _ _ [] = []
+run func state (i:input) = o:out
+ where
+ (state', o) = func i state
+ out = run func state' input
+
+main :: IO ()
+main = do
+ let input = program
+ let istate = (State initacc)
+ let output = run macc istate input
+ mapM_ (\x -> putStr $ ((show x) P.++ "\n")) output
+ return ()
+\end{code}
+%endif
--- /dev/null
+%include talk.fmt
+\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
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.2"
+ width="349.68433"
+ height="198.21248"
+ id="svg2"
+ inkscape:version="0.46"
+ sodipodi:docname="mealymachine.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ sodipodi:version="0.32">
+ <metadata
+ id="metadata45">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1280"
+ inkscape:window-height="976"
+ id="namedview43"
+ showgrid="false"
+ inkscape:zoom="1.1906415"
+ inkscape:cx="58.518313"
+ inkscape:cy="99.106239"
+ inkscape:window-x="0"
+ inkscape:window-y="22"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="layer1" />
+ <defs
+ id="defs4">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 99.106239 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="349.68433 : 99.106239 : 1"
+ inkscape:persp3d-origin="174.84216 : 66.070826 : 1"
+ id="perspective47" />
+ <marker
+ refX="0"
+ refY="0"
+ orient="auto"
+ id="Arrow2Lstart"
+ style="overflow:visible">
+ <path
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(1.1,0,0,1.1,1.1,0)"
+ id="path3653"
+ style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
+ </marker>
+ <marker
+ refX="0"
+ refY="0"
+ orient="auto"
+ id="Arrow2Lend"
+ style="overflow:visible">
+ <path
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ id="path3656"
+ style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
+ </marker>
+ <marker
+ refX="0"
+ refY="0"
+ orient="auto"
+ id="Arrow1Lend"
+ style="overflow:visible">
+ <path
+ d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+ transform="matrix(-0.8,0,0,-0.8,-10,0)"
+ id="path3638"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" />
+ </marker>
+ <marker
+ refX="0"
+ refY="0"
+ orient="auto"
+ id="Arrow2Mstart"
+ style="overflow:visible">
+ <path
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="scale(0.6,0.6)"
+ id="path3659"
+ style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
+ </marker>
+ <marker
+ refX="0"
+ refY="0"
+ orient="auto"
+ id="Arrow2Mend"
+ style="overflow:visible">
+ <path
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="scale(-0.6,-0.6)"
+ id="path3662"
+ style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
+ </marker>
+ <marker
+ refX="0"
+ refY="0"
+ orient="auto"
+ id="Arrow2Lend-6"
+ style="overflow:visible">
+ <path
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ id="path3656-0"
+ style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
+ </marker>
+ </defs>
+ <g
+ transform="translate(-240.54796,-232.04137)"
+ id="layer1">
+ <path
+ d="m 499.34095,257.92691 32.88047,0"
+ id="path3910"
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend)" />
+ <text
+ x="248.02895"
+ y="262.5231"
+ id="text3712-5-7"
+ xml:space="preserve"
+ style="font-size:12px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Palatino;-inkscape-font-specification:Palatino Italic"><tspan
+ x="248.02895"
+ y="262.5231"
+ id="tspan3714-2-3"
+ style="font-size:16px">Inputs</tspan></text>
+ <text
+ x="535.7948"
+ y="262.5231"
+ id="text3712-99-0-7"
+ xml:space="preserve"
+ style="font-size:12px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Palatino;-inkscape-font-specification:Palatino Italic"><tspan
+ x="535.7948"
+ y="262.5231"
+ id="tspan3714-7-3-2"
+ style="font-size:16px">Outputs</tspan></text>
+ <path
+ d="m 291.80511,257.92691 36.06245,0"
+ id="path3910-4"
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend)" />
+ <text
+ x="64.700272"
+ y="-38.140511"
+ transform="translate(269.8848,231.7207)"
+ id="text5424"
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"><tspan
+ x="64.700272"
+ y="-38.140511"
+ id="tspan5426" /></text>
+ <path
+ d="m 229.45615,97.623991 32.88047,0 0,69.296469 -32.88047,0"
+ transform="translate(269.8848,231.7207)"
+ id="path7752"
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend-6)" />
+ <path
+ d="m 57.982757,166.92046 -36.062447,0 0,-69.296469 36.062447,0"
+ transform="translate(269.8848,231.7207)"
+ id="path7948"
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend-6)" />
+ <text
+ x="240.32921"
+ y="316.76682"
+ id="text3712-5-7-1"
+ xml:space="preserve"
+ style="font-size:12px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Palatino;-inkscape-font-specification:Palatino Italic"><tspan
+ x="240.32921"
+ y="316.76682"
+ id="tspan8173"
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;font-family:Palatino;-inkscape-font-specification:Palatino" /></text>
+ <text
+ x="240.32921"
+ y="327.37341"
+ id="text3712-5-7-3"
+ xml:space="preserve"
+ style="font-size:12px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Palatino;-inkscape-font-specification:Palatino Italic"><tspan
+ x="240.32921"
+ y="327.37341"
+ id="tspan3714-2-3-7"
+ style="font-size:16px">Present</tspan></text>
+ <text
+ x="248.05577"
+ y="340.65839"
+ id="text3712-5-7-3-7"
+ xml:space="preserve"
+ style="font-size:12px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Palatino;-inkscape-font-specification:Palatino Italic"><tspan
+ x="248.05577"
+ y="340.65839"
+ id="tspan3714-2-3-7-5"
+ style="font-size:16px">State</tspan></text>
+ <g
+ id="g2433">
+ <rect
+ style="fill:#f0f0f0;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:2, 1;stroke-dashoffset:0"
+ id="rect3716"
+ y="232.54137"
+ x="328.92822"
+ ry="5"
+ rx="5"
+ height="121.6148"
+ width="170.00002" />
+ <text
+ id="text2417"
+ y="285.46301"
+ x="413.71338"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Palatino;-inkscape-font-specification:Palatino"
+ xml:space="preserve"><tspan
+ style="text-align:center;text-anchor:middle"
+ y="285.46301"
+ x="413.71338"
+ id="tspan2419"
+ sodipodi:role="line">Combinatorial</tspan><tspan
+ style="text-align:center;text-anchor:middle"
+ id="tspan2421"
+ y="310.46301"
+ x="413.71338"
+ sodipodi:role="line">Logic</tspan></text>
+ </g>
+ <g
+ id="g2439">
+ <rect
+ style="fill:#f0f0f0;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:2, 1;stroke-dashoffset:0"
+ id="rect3716-8"
+ y="367.25348"
+ x="328.78696"
+ ry="4.3373775"
+ rx="5.0083094"
+ height="62.500351"
+ width="170.28253" />
+ <text
+ id="text2423"
+ y="392.66382"
+ x="413.95752"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Palatino;-inkscape-font-specification:Palatino"
+ xml:space="preserve"><tspan
+ style="text-align:center;text-anchor:middle"
+ id="tspan2427"
+ y="392.66382"
+ x="413.95752"
+ sodipodi:role="line">Memory</tspan><tspan
+ id="tspan2431"
+ style="text-align:center;text-anchor:middle"
+ y="417.66382"
+ x="413.95752"
+ sodipodi:role="line">Elements</tspan></text>
+ </g>
+ </g>
+</svg>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.0"
+ width="447.45831"
+ height="198.21246"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ sodipodi:docname="mealymachine2-func-red.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <metadata
+ id="metadata10676">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <sodipodi:namedview
+ inkscape:window-height="976"
+ inkscape:window-width="1280"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ guidetolerance="10.0"
+ gridtolerance="10.0"
+ objecttolerance="10.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base"
+ showgrid="false"
+ inkscape:zoom="1.4274587"
+ inkscape:cx="48.337652"
+ inkscape:cy="99.106232"
+ inkscape:window-x="0"
+ inkscape:window-y="22"
+ inkscape:current-layer="svg2" />
+ <defs
+ id="defs4">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 99.106232 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="380.3963 : 99.106232 : 1"
+ inkscape:persp3d-origin="190.19815 : 66.070821 : 1"
+ id="perspective10678" />
+ <marker
+ refX="0"
+ refY="0"
+ orient="auto"
+ id="Arrow2Lstart"
+ style="overflow:visible">
+ <path
+ d="M 8.7185878,4.0337352 L -2.2072895,0.01601326 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 L 8.7185878,4.0337352 z"
+ transform="matrix(1.1,0,0,1.1,1.1,0)"
+ id="path3653"
+ style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
+ </marker>
+ <marker
+ refX="0"
+ refY="0"
+ orient="auto"
+ id="Arrow2Lend"
+ style="overflow:visible">
+ <path
+ d="M 8.7185878,4.0337352 L -2.2072895,0.01601326 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 L 8.7185878,4.0337352 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ id="path3656"
+ style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
+ </marker>
+ <marker
+ refX="0"
+ refY="0"
+ orient="auto"
+ id="Arrow1Lend"
+ style="overflow:visible">
+ <path
+ d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z"
+ transform="matrix(-0.8,0,0,-0.8,-10,0)"
+ id="path3638"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" />
+ </marker>
+ <marker
+ refX="0"
+ refY="0"
+ orient="auto"
+ id="Arrow2Mstart"
+ style="overflow:visible">
+ <path
+ d="M 8.7185878,4.0337352 L -2.2072895,0.01601326 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 L 8.7185878,4.0337352 z"
+ transform="scale(0.6,0.6)"
+ id="path3659"
+ style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
+ </marker>
+ <marker
+ refX="0"
+ refY="0"
+ orient="auto"
+ id="Arrow2Mend"
+ style="overflow:visible">
+ <path
+ d="M 8.7185878,4.0337352 L -2.2072895,0.01601326 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 L 8.7185878,4.0337352 z"
+ transform="scale(-0.6,-0.6)"
+ id="path3662"
+ style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
+ </marker>
+ <marker
+ refX="0"
+ refY="0"
+ orient="auto"
+ id="Arrow2Lend-6"
+ style="overflow:visible">
+ <path
+ d="M 8.7185878,4.0337352 L -2.2072895,0.01601326 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 L 8.7185878,4.0337352 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ id="path3656-0"
+ style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
+ </marker>
+ </defs>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Lend);stroke-opacity:1"
+ id="path3910"
+ d="M 303.74721,25.885543 L 336.62768,25.885543" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Lend);stroke-opacity:1"
+ id="path3910-4"
+ d="M 96.211374,25.885543 L 132.27382,25.885543" />
+ <text
+ style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+ xml:space="preserve"
+ id="text5424"
+ y="-38.461178"
+ x="138.99133"><tspan
+ id="tspan5426"
+ y="-38.461178"
+ x="138.99133" /></text>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Lend-6);stroke-opacity:1"
+ id="path7752"
+ d="M 303.74721,97.303324 L 336.62768,97.303324 L 336.62768,166.59979 L 303.74721,166.59979" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Lend-6);stroke-opacity:1"
+ id="path7948"
+ d="M 132.27382,166.59979 L 96.211374,166.59979 L 96.211374,97.303324 L 132.27382,97.303324" />
+ <text
+ sodipodi:linespacing="100%"
+ style="font-size:12px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Palatino;-inkscape-font-specification:Palatino Italic"
+ xml:space="preserve"
+ id="text3712-5-7-1"
+ y="84.725449"
+ x="44.735474"><tspan
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;font-family:Palatino;-inkscape-font-specification:Palatino"
+ id="tspan8173"
+ y="84.725449"
+ x="44.735474" /></text>
+ <rect
+ width="170.00002"
+ height="121.6148"
+ rx="5"
+ ry="5"
+ x="133.33449"
+ y="0.5"
+ id="rect3716"
+ style="fill:#f0f0f0;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2, 1;stroke-dashoffset:0;stroke-opacity:1" />
+ <text
+ x="218.82019"
+ y="64.61879"
+ id="text2417"
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Palatino;-inkscape-font-specification:Palatino"><tspan
+ x="218.82019"
+ y="64.61879"
+ id="tspan2421"
+ style="text-align:center;text-anchor:middle;fill:#ff0000;fill-opacity:1">func</tspan></text>
+ <g
+ id="g2439"
+ transform="translate(-195.59374,-232.04137)">
+ <rect
+ style="fill:#f0f0f0;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:2, 1;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect3716-8"
+ y="367.25348"
+ x="328.78696"
+ ry="4.3373775"
+ rx="5.0083094"
+ height="62.500351"
+ width="170.28253" />
+ <text
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Palatino;-inkscape-font-specification:Palatino"
+ xml:space="preserve"
+ id="text2423"
+ y="406.94183"
+ x="413.11765"><tspan
+ style="text-align:center;text-anchor:middle"
+ id="tspan2431"
+ y="406.94183"
+ x="413.11765">state</tspan></text>
+ </g>
+ <text
+ x="45.722656"
+ y="31.532804"
+ id="text10741"
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Palatino;-inkscape-font-specification:Palatino"><tspan
+ x="45.722656"
+ y="31.532804"
+ id="tspan10743"
+ style="text-align:center;text-anchor:middle">(i : inputs)</tspan></text>
+ <text
+ x="394.05011"
+ y="31.217451"
+ id="text10745"
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Palatino;-inkscape-font-specification:Palatino"><tspan
+ x="394.05011"
+ y="31.217451"
+ id="tspan10747"
+ style="text-align:center;text-anchor:middle">(o : outputs)</tspan></text>
+</svg>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.0"
+ width="447.45831"
+ height="198.21246"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ sodipodi:docname="mealymachine2-state-red.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <metadata
+ id="metadata10676">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <sodipodi:namedview
+ inkscape:window-height="976"
+ inkscape:window-width="1280"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ guidetolerance="10.0"
+ gridtolerance="10.0"
+ objecttolerance="10.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base"
+ showgrid="false"
+ inkscape:zoom="1.4274587"
+ inkscape:cx="48.337652"
+ inkscape:cy="99.106232"
+ inkscape:window-x="0"
+ inkscape:window-y="22"
+ inkscape:current-layer="svg2" />
+ <defs
+ id="defs4">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 99.106232 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="380.3963 : 99.106232 : 1"
+ inkscape:persp3d-origin="190.19815 : 66.070821 : 1"
+ id="perspective10678" />
+ <marker
+ refX="0"
+ refY="0"
+ orient="auto"
+ id="Arrow2Lstart"
+ style="overflow:visible">
+ <path
+ d="M 8.7185878,4.0337352 L -2.2072895,0.01601326 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 L 8.7185878,4.0337352 z"
+ transform="matrix(1.1,0,0,1.1,1.1,0)"
+ id="path3653"
+ style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
+ </marker>
+ <marker
+ refX="0"
+ refY="0"
+ orient="auto"
+ id="Arrow2Lend"
+ style="overflow:visible">
+ <path
+ d="M 8.7185878,4.0337352 L -2.2072895,0.01601326 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 L 8.7185878,4.0337352 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ id="path3656"
+ style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
+ </marker>
+ <marker
+ refX="0"
+ refY="0"
+ orient="auto"
+ id="Arrow1Lend"
+ style="overflow:visible">
+ <path
+ d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z"
+ transform="matrix(-0.8,0,0,-0.8,-10,0)"
+ id="path3638"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" />
+ </marker>
+ <marker
+ refX="0"
+ refY="0"
+ orient="auto"
+ id="Arrow2Mstart"
+ style="overflow:visible">
+ <path
+ d="M 8.7185878,4.0337352 L -2.2072895,0.01601326 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 L 8.7185878,4.0337352 z"
+ transform="scale(0.6,0.6)"
+ id="path3659"
+ style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
+ </marker>
+ <marker
+ refX="0"
+ refY="0"
+ orient="auto"
+ id="Arrow2Mend"
+ style="overflow:visible">
+ <path
+ d="M 8.7185878,4.0337352 L -2.2072895,0.01601326 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 L 8.7185878,4.0337352 z"
+ transform="scale(-0.6,-0.6)"
+ id="path3662"
+ style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
+ </marker>
+ <marker
+ refX="0"
+ refY="0"
+ orient="auto"
+ id="Arrow2Lend-6"
+ style="overflow:visible">
+ <path
+ d="M 8.7185878,4.0337352 L -2.2072895,0.01601326 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 L 8.7185878,4.0337352 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ id="path3656-0"
+ style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
+ </marker>
+ </defs>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Lend);stroke-opacity:1"
+ id="path3910"
+ d="M 303.74721,25.885543 L 336.62768,25.885543" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Lend);stroke-opacity:1"
+ id="path3910-4"
+ d="M 96.211374,25.885543 L 132.27382,25.885543" />
+ <text
+ style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+ xml:space="preserve"
+ id="text5424"
+ y="-38.461178"
+ x="138.99133"><tspan
+ id="tspan5426"
+ y="-38.461178"
+ x="138.99133" /></text>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Lend-6);stroke-opacity:1"
+ id="path7752"
+ d="M 303.74721,97.303324 L 336.62768,97.303324 L 336.62768,166.59979 L 303.74721,166.59979" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Lend-6);stroke-opacity:1"
+ id="path7948"
+ d="M 132.27382,166.59979 L 96.211374,166.59979 L 96.211374,97.303324 L 132.27382,97.303324" />
+ <text
+ sodipodi:linespacing="100%"
+ style="font-size:12px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Palatino;-inkscape-font-specification:Palatino Italic"
+ xml:space="preserve"
+ id="text3712-5-7-1"
+ y="84.725449"
+ x="44.735474"><tspan
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;font-family:Palatino;-inkscape-font-specification:Palatino"
+ id="tspan8173"
+ y="84.725449"
+ x="44.735474" /></text>
+ <rect
+ width="170.00002"
+ height="121.6148"
+ rx="5"
+ ry="5"
+ x="133.33449"
+ y="0.5"
+ id="rect3716"
+ style="fill:#f0f0f0;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2, 1;stroke-dashoffset:0;stroke-opacity:1" />
+ <text
+ x="218.82019"
+ y="64.61879"
+ id="text2417"
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Palatino;-inkscape-font-specification:Palatino"><tspan
+ x="218.82019"
+ y="64.61879"
+ id="tspan2421"
+ style="text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1">func</tspan></text>
+ <rect
+ width="170.28253"
+ height="62.500351"
+ rx="5.0083094"
+ ry="4.3373775"
+ x="133.19322"
+ y="135.21211"
+ id="rect3716-8"
+ style="fill:#f0f0f0;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:2, 1;stroke-dashoffset:0;stroke-opacity:1" />
+ <text
+ x="217.52391"
+ y="174.90047"
+ id="text2423"
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Palatino;-inkscape-font-specification:Palatino"><tspan
+ x="217.52391"
+ y="174.90047"
+ id="tspan2431"
+ style="text-align:center;text-anchor:middle;fill:#ff0000;fill-opacity:1">state</tspan></text>
+ <text
+ x="45.722656"
+ y="31.532804"
+ id="text10741"
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Palatino;-inkscape-font-specification:Palatino"><tspan
+ x="45.722656"
+ y="31.532804"
+ id="tspan10743"
+ style="text-align:center;text-anchor:middle">(i : inputs)</tspan></text>
+ <text
+ x="394.05011"
+ y="31.217451"
+ id="text10745"
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Palatino;-inkscape-font-specification:Palatino"><tspan
+ x="394.05011"
+ y="31.217451"
+ id="tspan10747"
+ style="text-align:center;text-anchor:middle">(o : outputs)</tspan></text>
+</svg>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.0"
+ width="447.45831"
+ height="198.21246"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ sodipodi:docname="mealymachine2.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <metadata
+ id="metadata10676">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <sodipodi:namedview
+ inkscape:window-height="976"
+ inkscape:window-width="1280"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ guidetolerance="10.0"
+ gridtolerance="10.0"
+ objecttolerance="10.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base"
+ showgrid="false"
+ inkscape:zoom="1.4274587"
+ inkscape:cx="190.19815"
+ inkscape:cy="99.106232"
+ inkscape:window-x="0"
+ inkscape:window-y="22"
+ inkscape:current-layer="svg2" />
+ <defs
+ id="defs4">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 99.106232 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="380.3963 : 99.106232 : 1"
+ inkscape:persp3d-origin="190.19815 : 66.070821 : 1"
+ id="perspective10678" />
+ <marker
+ refX="0"
+ refY="0"
+ orient="auto"
+ id="Arrow2Lstart"
+ style="overflow:visible">
+ <path
+ d="M 8.7185878,4.0337352 L -2.2072895,0.01601326 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 L 8.7185878,4.0337352 z"
+ transform="matrix(1.1,0,0,1.1,1.1,0)"
+ id="path3653"
+ style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
+ </marker>
+ <marker
+ refX="0"
+ refY="0"
+ orient="auto"
+ id="Arrow2Lend"
+ style="overflow:visible">
+ <path
+ d="M 8.7185878,4.0337352 L -2.2072895,0.01601326 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 L 8.7185878,4.0337352 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ id="path3656"
+ style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
+ </marker>
+ <marker
+ refX="0"
+ refY="0"
+ orient="auto"
+ id="Arrow1Lend"
+ style="overflow:visible">
+ <path
+ d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z"
+ transform="matrix(-0.8,0,0,-0.8,-10,0)"
+ id="path3638"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" />
+ </marker>
+ <marker
+ refX="0"
+ refY="0"
+ orient="auto"
+ id="Arrow2Mstart"
+ style="overflow:visible">
+ <path
+ d="M 8.7185878,4.0337352 L -2.2072895,0.01601326 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 L 8.7185878,4.0337352 z"
+ transform="scale(0.6,0.6)"
+ id="path3659"
+ style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
+ </marker>
+ <marker
+ refX="0"
+ refY="0"
+ orient="auto"
+ id="Arrow2Mend"
+ style="overflow:visible">
+ <path
+ d="M 8.7185878,4.0337352 L -2.2072895,0.01601326 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 L 8.7185878,4.0337352 z"
+ transform="scale(-0.6,-0.6)"
+ id="path3662"
+ style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
+ </marker>
+ <marker
+ refX="0"
+ refY="0"
+ orient="auto"
+ id="Arrow2Lend-6"
+ style="overflow:visible">
+ <path
+ d="M 8.7185878,4.0337352 L -2.2072895,0.01601326 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 L 8.7185878,4.0337352 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ id="path3656-0"
+ style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
+ </marker>
+ </defs>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Lend);stroke-opacity:1"
+ id="path3910"
+ d="M 303.74721,25.885543 L 336.62768,25.885543" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Lend);stroke-opacity:1"
+ id="path3910-4"
+ d="M 96.211374,25.885543 L 132.27382,25.885543" />
+ <text
+ style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+ xml:space="preserve"
+ id="text5424"
+ y="-38.461178"
+ x="138.99133"><tspan
+ id="tspan5426"
+ y="-38.461178"
+ x="138.99133" /></text>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Lend-6);stroke-opacity:1"
+ id="path7752"
+ d="M 303.74721,97.303324 L 336.62768,97.303324 L 336.62768,166.59979 L 303.74721,166.59979" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Lend-6);stroke-opacity:1"
+ id="path7948"
+ d="M 132.27382,166.59979 L 96.211374,166.59979 L 96.211374,97.303324 L 132.27382,97.303324" />
+ <text
+ sodipodi:linespacing="100%"
+ style="font-size:12px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Palatino;-inkscape-font-specification:Palatino Italic"
+ xml:space="preserve"
+ id="text3712-5-7-1"
+ y="84.725449"
+ x="44.735474"><tspan
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;font-family:Palatino;-inkscape-font-specification:Palatino"
+ id="tspan8173"
+ y="84.725449"
+ x="44.735474" /></text>
+ <rect
+ width="170.00002"
+ height="121.6148"
+ rx="5"
+ ry="5"
+ x="133.33449"
+ y="0.5"
+ id="rect3716"
+ style="fill:#f0f0f0;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2, 1;stroke-dashoffset:0;stroke-opacity:1" />
+ <text
+ x="218.82019"
+ y="64.61879"
+ id="text2417"
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Palatino;-inkscape-font-specification:Palatino"><tspan
+ x="218.82019"
+ y="64.61879"
+ id="tspan2421"
+ style="text-align:center;text-anchor:middle">func</tspan></text>
+ <g
+ id="g2439"
+ transform="translate(-195.59374,-232.04137)">
+ <rect
+ style="fill:#f0f0f0;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:2, 1;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect3716-8"
+ y="367.25348"
+ x="328.78696"
+ ry="4.3373775"
+ rx="5.0083094"
+ height="62.500351"
+ width="170.28253" />
+ <text
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Palatino;-inkscape-font-specification:Palatino"
+ xml:space="preserve"
+ id="text2423"
+ y="406.94183"
+ x="413.11765"><tspan
+ style="text-align:center;text-anchor:middle"
+ id="tspan2431"
+ y="406.94183"
+ x="413.11765">state</tspan></text>
+ </g>
+ <text
+ x="45.722656"
+ y="31.532804"
+ id="text10741"
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Palatino;-inkscape-font-specification:Palatino"><tspan
+ x="45.722656"
+ y="31.532804"
+ id="tspan10743"
+ style="text-align:center;text-anchor:middle">(i : inputs)</tspan></text>
+ <text
+ x="394.05011"
+ y="31.217451"
+ id="text10745"
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Palatino;-inkscape-font-specification:Palatino"><tspan
+ x="394.05011"
+ y="31.217451"
+ id="tspan10747"
+ style="text-align:center;text-anchor:middle">(o : outputs)</tspan></text>
+</svg>
--- /dev/null
+\usepackage[english]{babel}
+\usepackage{xcolor}
+
+\newcommand{\clash}[0]{C$\lambda$asH}
\ No newline at end of file
--- /dev/null
+\section{Real Hardware Designs}
+\frame{
+\frametitle{Beyond trivial designs}
+\pause
+\begin{columns}[l]
+\column{0.5\textwidth}
+\vspace{-2.4em}
+\begin{figure}
+\includegraphics<2->[height=6.5cm]{reducer}
+\end{figure}
+\column{0.5\textwidth}
+\begin{itemize}
+ \item We implemented a reduction circuit in \clash{}\pause
+ \item Haskell and VHDL simulation match\pause
+ \item Synthesis completes without errors or warnings\pause
+ \item Around half the speed of handcoded and optimized VHDL
+\end{itemize}
+\end{columns}
+}\note[itemize]{
+\item Toys like the poly cpu one are good to give a quick demo
+\item But we used \clash{} to design 'real' hardware
+\item Reduction circuit sums the numbers in a row, of different length
+\item It uses a pipelined adder: multiple rows in pipeline, rows longer than pipeline
+\item We hope you see this is not a trivial problem
+\item Nice speed considering we don't optimize for it (only single example!)
+}
+
+\begin{frame}[plain]
+ \vspace{-0.8em}
+ \begin{figure}
+ \includegraphics[height=\paperheight]{reducerschematic}
+ \end{figure}
+\end{frame}
+\note[itemize]{
+\item Big part on the left is the input buffer
+\item Big part on the right is the buffer for partially reduced results
+\item In the middle is the control logic and the adder pipeline
+}
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.0"
+ width="201.18146"
+ height="331.65039"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ sodipodi:docname="reducer.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <metadata
+ id="metadata2461">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <sodipodi:namedview
+ inkscape:window-height="752"
+ inkscape:window-width="1280"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ guidetolerance="10.0"
+ gridtolerance="10.0"
+ objecttolerance="10.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base"
+ showgrid="false"
+ inkscape:zoom="1.1692589"
+ inkscape:cx="203.53735"
+ inkscape:cy="198.76943"
+ inkscape:window-x="20"
+ inkscape:window-y="42"
+ inkscape:current-layer="svg2"
+ showguides="false"
+ inkscape:guide-bbox="true">
+ <sodipodi:guide
+ orientation="0,1"
+ position="183.02191,85.524258"
+ id="guide3369" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="247.16511,-67.564164"
+ id="guide3383" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="330.97888,253.1518"
+ id="guide3387" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="142.82551,74.406105"
+ id="guide3389" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="267.69093,73.550862"
+ id="guide2589" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="129.14163,98.352897"
+ id="guide2591" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="366.04382,54.735525"
+ id="guide3986" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="279.66432,32.499218"
+ id="guide3988" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="423.34508,265.98044"
+ id="guide3990" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="360.91237,17.960094"
+ id="guide3992" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="293.34821,112.89202"
+ id="guide4547" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="304.46636,0.85524258"
+ id="guide4549" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="128.28639,-43.617372"
+ id="guide5113" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="52.169797,255.71753"
+ id="guide5135" />
+ </sodipodi:namedview>
+ <defs
+ id="defs4">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 130.26198 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="464.39673 : 130.26198 : 1"
+ inkscape:persp3d-origin="232.19836 : 86.841319 : 1"
+ id="perspective2463" />
+ <marker
+ refX="0"
+ refY="0"
+ orient="auto"
+ id="marker7141"
+ style="overflow:visible">
+ <path
+ d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z"
+ transform="matrix(-0.8,0,0,-0.8,-10,0)"
+ id="path6886"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" />
+ </marker>
+ <marker
+ refX="0"
+ refY="0"
+ orient="auto"
+ id="Arrow2Lstart"
+ style="overflow:visible">
+ <path
+ d="M 8.7185878,4.0337352 L -2.2072895,0.01601326 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 L 8.7185878,4.0337352 z"
+ transform="matrix(1.1,0,0,1.1,1.1,0)"
+ id="path3653"
+ style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
+ </marker>
+ <marker
+ refX="0"
+ refY="0"
+ orient="auto"
+ id="Arrow2Lend"
+ style="overflow:visible">
+ <path
+ d="M 8.7185878,4.0337352 L -2.2072895,0.01601326 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 L 8.7185878,4.0337352 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ id="path3656"
+ style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
+ </marker>
+ <marker
+ refX="0"
+ refY="0"
+ orient="auto"
+ id="Arrow1Lend"
+ style="overflow:visible">
+ <path
+ d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z"
+ transform="matrix(-0.8,0,0,-0.8,-10,0)"
+ id="path3638"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" />
+ </marker>
+ <marker
+ refX="0"
+ refY="0"
+ orient="auto"
+ id="Arrow2Mstart"
+ style="overflow:visible">
+ <path
+ d="M 8.7185878,4.0337352 L -2.2072895,0.01601326 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 L 8.7185878,4.0337352 z"
+ transform="scale(0.6,0.6)"
+ id="path3659"
+ style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
+ </marker>
+ <marker
+ refX="0"
+ refY="0"
+ orient="auto"
+ id="Arrow2Mend"
+ style="overflow:visible">
+ <path
+ d="M 8.7185878,4.0337352 L -2.2072895,0.01601326 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 L 8.7185878,4.0337352 z"
+ transform="scale(-0.6,-0.6)"
+ id="path3662"
+ style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
+ </marker>
+ <marker
+ refX="0"
+ refY="0"
+ orient="auto"
+ id="Arrow2Lend-6"
+ style="overflow:visible">
+ <path
+ d="M 8.7185878,4.0337352 L -2.2072895,0.01601326 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 L 8.7185878,4.0337352 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ id="path3656-0"
+ style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
+ </marker>
+ </defs>
+ <g
+ id="g5104"
+ transform="translate(-165.36236,-13.65666)">
+ <rect
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.79356492;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect3958"
+ y="204.87576"
+ x="305.18243"
+ height="117.37054"
+ width="42.200603" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path3960"
+ d="M 305.28565,219.25696 L 348.11969,219.25696" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path3962"
+ d="M 305.28565,234.37486 L 348.11969,234.37486" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path3964"
+ d="M 305.28565,252.01241 L 347.60004,252.01241" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path3966"
+ d="M 305.28565,268.81008 L 347.60004,268.81008" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path3968"
+ d="M 305.28565,287.28751 L 347.60004,287.28751" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path3970"
+ d="M 305.28565,304.08518 L 347.60004,304.08518" />
+ </g>
+ <rect
+ style="fill:#d1d1d1;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.96712011;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:7;stroke-dasharray:3.86848057, 3.86848057;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect3367"
+ width="70.447227"
+ height="154.261"
+ x="80.263023"
+ y="13.169964"
+ rx="8.4067678"
+ ry="6.583322" />
+ <text
+ style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+ xml:space="preserve"
+ id="text5424"
+ y="-35.001568"
+ x="55.534966"><tspan
+ id="tspan5426"
+ y="-35.001568"
+ x="55.534966" /></text>
+ <text
+ sodipodi:linespacing="100%"
+ style="font-size:12px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Palatino;-inkscape-font-specification:Palatino Italic"
+ xml:space="preserve"
+ id="text3712-5-7-1"
+ y="88.185059"
+ x="-38.720901"><tspan
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;font-family:Palatino;-inkscape-font-specification:Palatino"
+ id="tspan8173"
+ y="88.185059"
+ x="-38.720901" /></text>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Lend);stroke-opacity:1"
+ id="path5239"
+ d="M 81.802751,328.55988 L 81.802751,309.24257" />
+ <path
+ sodipodi:type="star"
+ style="fill:#c8008b;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path3349"
+ sodipodi:sides="5"
+ sodipodi:cx="170.23653"
+ sodipodi:cy="46.140846"
+ sodipodi:r1="9.3148832"
+ sodipodi:r2="4.6574416"
+ sodipodi:arg1="0.94677327"
+ sodipodi:arg2="1.5750918"
+ inkscape:flatsided="false"
+ inkscape:rounded="0"
+ inkscape:randomized="0"
+ d="M 175.67926,53.700194 L 170.21652,50.798245 L 164.72906,53.653157 L 165.8009,47.561035 L 161.38999,43.224362 L 167.51516,42.361172 L 170.27654,36.826049 L 172.99026,42.384691 L 179.10779,43.300469 L 174.65979,47.599088 L 175.67926,53.700194 z"
+ transform="matrix(0.8293389,0,0,0.8293389,19.551671,160.67782)" />
+ <rect
+ width="42.200603"
+ height="117.37054"
+ x="61.22271"
+ y="192.19754"
+ id="rect5119"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.79356492;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 61.325941,206.57875 L 104.15998,206.57875"
+ id="path5121"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ d="M 61.325941,221.69665 L 104.15998,221.69665"
+ id="path5123"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ d="M 61.325941,239.3342 L 103.64033,239.3342"
+ id="path5125"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ d="M 61.325941,256.13187 L 103.64033,256.13187"
+ id="path5127"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ d="M 61.325941,274.6093 L 103.64033,274.6093"
+ id="path5129"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ d="M 61.325941,291.40697 L 103.64033,291.40697"
+ id="path5131"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path5154"
+ d="M 82.742941,194.40043 C 85.989931,194.40043 88.622131,196.84462 88.622131,199.85968 C 88.622131,202.87473 85.989931,205.31892 82.742941,205.31892 C 79.495961,205.31892 76.863751,202.87473 76.863751,199.85968 C 76.863751,196.84462 79.495961,194.40043 82.742941,194.40043 z" />
+ <path
+ style="fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path5156"
+ d="M 82.742941,209.09839 C 85.989931,209.09839 88.622131,211.54258 88.622131,214.55764 C 88.622131,217.57269 85.989931,220.01688 82.742941,220.01688 C 79.495961,220.01688 76.863751,217.57269 76.863751,214.55764 C 76.863751,211.54258 79.495961,209.09839 82.742941,209.09839 z" />
+ <path
+ style="fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path5158"
+ d="M 82.742941,225.89606 C 85.989931,225.89606 88.622131,228.34025 88.622131,231.35531 C 88.622131,234.37036 85.989931,236.81455 82.742941,236.81455 C 79.495961,236.81455 76.863751,234.37036 76.863751,231.35531 C 76.863751,228.34025 79.495961,225.89606 82.742941,225.89606 z" />
+ <path
+ style="fill:#00ff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path5172"
+ d="M 159.71477,224.89284 C 162.96176,224.89284 165.59396,227.33703 165.59396,230.35209 C 165.59396,233.36714 162.96176,235.81133 159.71477,235.81133 C 156.46779,235.81133 153.83558,233.36714 153.83558,230.35209 C 153.83558,227.33703 156.46779,224.89284 159.71477,224.89284 z" />
+ <rect
+ style="fill:#0000ff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect3355"
+ width="9.6759653"
+ height="9.9783392"
+ x="-252.97298"
+ y="77.595314"
+ rx="0"
+ ry="0"
+ transform="matrix(0,-1,1,0,0,0)" />
+ <rect
+ style="fill:#0000ff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect3357"
+ width="9.6759653"
+ height="9.9783392"
+ x="-270.81305"
+ y="77.44413"
+ rx="0"
+ ry="0"
+ transform="matrix(0,-1,1,0,0,0)" />
+ <rect
+ style="fill:#0000ff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect3359"
+ width="9.6759653"
+ height="9.9783392"
+ x="-287.746"
+ y="77.44413"
+ rx="0"
+ ry="0"
+ transform="matrix(0,-1,1,0,0,0)" />
+ <rect
+ style="fill:#0000ff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect3361"
+ width="9.6759653"
+ height="9.9783392"
+ x="-303.77182"
+ y="77.44413"
+ rx="0"
+ ry="0"
+ transform="matrix(0,-1,1,0,0,0)" />
+ <g
+ id="g5115"
+ transform="translate(60.825926,8)">
+ <rect
+ width="42.179855"
+ height="123.64854"
+ x="33.89994"
+ y="27.224546"
+ id="rect5048"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.81431162;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 33.992775,43.794822 L 76.307175,43.794822"
+ id="path5066"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ d="M 33.992775,60.592492 L 76.307175,60.592492"
+ id="path5068"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ d="M 33.992775,78.550272 L 76.307175,78.550272"
+ id="path5070"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ d="M 33.992775,95.34795 L 76.307175,95.34795"
+ id="path5072"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ d="M 33.992775,114.14561 L 76.307175,114.14561"
+ id="path5074"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ d="M 33.992775,131.78316 L 76.307175,131.78316"
+ id="path5076"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ d="M 59.609225,141.66235 C 59.609225,144.90934 57.165035,147.54154 54.149975,147.54154 C 51.134925,147.54154 48.690735,144.90934 48.690735,141.66235 C 48.690735,138.41536 51.134925,135.78316 54.149975,135.78316 C 57.165035,135.78316 59.609225,138.41536 59.609225,141.66235 z"
+ id="path5188"
+ style="fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 59.609225,122.34503 C 59.609225,125.59201 57.165035,128.22422 54.149975,128.22422 C 51.134925,128.22422 48.690735,125.59201 48.690735,122.34503 C 48.690735,119.09804 51.134925,116.46584 54.149975,116.46584 C 57.165035,116.46584 59.609225,119.09804 59.609225,122.34503 z"
+ id="path5190"
+ style="fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ transform="matrix(0.8293389,0,0,0.8293389,-86.840225,67.325193)"
+ d="M 175.67926,53.700194 L 170.21652,50.798245 L 164.72906,53.653157 L 165.8009,47.561035 L 161.38999,43.224362 L 167.51516,42.361172 L 170.27654,36.826049 L 172.99026,42.384691 L 179.10779,43.300469 L 174.65979,47.599088 L 175.67926,53.700194 z"
+ inkscape:randomized="0"
+ inkscape:rounded="0"
+ inkscape:flatsided="false"
+ sodipodi:arg2="1.5750918"
+ sodipodi:arg1="0.94677327"
+ sodipodi:r2="4.6574416"
+ sodipodi:r1="9.3148832"
+ sodipodi:cy="46.140846"
+ sodipodi:cx="170.23653"
+ sodipodi:sides="5"
+ id="path3345"
+ style="fill:#c8008b;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:type="star" />
+ <path
+ transform="matrix(0.8293389,0,0,0.8293389,-87.154985,49.383745)"
+ d="M 175.67926,53.700194 L 170.21652,50.798245 L 164.72906,53.653157 L 165.8009,47.561035 L 161.38999,43.224362 L 167.51516,42.361172 L 170.27654,36.826049 L 172.99026,42.384691 L 179.10779,43.300469 L 174.65979,47.599088 L 175.67926,53.700194 z"
+ inkscape:randomized="0"
+ inkscape:rounded="0"
+ inkscape:flatsided="false"
+ sodipodi:arg2="1.5750918"
+ sodipodi:arg1="0.94677327"
+ sodipodi:r2="4.6574416"
+ sodipodi:r1="9.3148832"
+ sodipodi:cy="46.140846"
+ sodipodi:cx="170.23653"
+ sodipodi:sides="5"
+ id="path3347"
+ style="fill:#c8008b;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:type="star" />
+ <path
+ transform="matrix(0.8293389,0,0,0.8293389,-87.483525,-2.875064)"
+ d="M 175.67926,53.700194 L 170.21652,50.798245 L 164.72906,53.653157 L 165.8009,47.561035 L 161.38999,43.224362 L 167.51516,42.361172 L 170.27654,36.826049 L 172.99026,42.384691 L 179.10779,43.300469 L 174.65979,47.599088 L 175.67926,53.700194 z"
+ inkscape:randomized="0"
+ inkscape:rounded="0"
+ inkscape:flatsided="false"
+ sodipodi:arg2="1.5750918"
+ sodipodi:arg1="0.94677327"
+ sodipodi:r2="4.6574416"
+ sodipodi:r1="9.3148832"
+ sodipodi:cy="46.140846"
+ sodipodi:cx="170.23653"
+ sodipodi:sides="5"
+ id="path3353"
+ style="fill:#c8008b;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:type="star" />
+ <path
+ d="M 54.416235,63.559168 C 57.663225,63.559168 60.295425,66.003358 60.295425,69.018418 C 60.295425,72.033468 57.663225,74.477658 54.416235,74.477658 C 51.169255,74.477658 48.537045,72.033468 48.537045,69.018418 C 48.537045,66.003358 51.169255,63.559168 54.416235,63.559168 z"
+ id="path5170"
+ style="fill:#00ff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ transform="matrix(-0.2611717,-0.7422275,0.7352996,-0.2584341,-23.623005,120.69341)"
+ d="M 55.636801,130.50317 L 45.470684,130.58643 L 42.249997,120.9436 L 50.42562,114.90075 L 58.69912,120.80889 L 55.636801,130.50317 z"
+ inkscape:randomized="0"
+ inkscape:rounded="0"
+ inkscape:flatsided="true"
+ sodipodi:arg2="1.5626066"
+ sodipodi:arg1="0.93428811"
+ sodipodi:r2="6.9964643"
+ sodipodi:r1="8.6481056"
+ sodipodi:cy="123.54857"
+ sodipodi:cx="50.496445"
+ sodipodi:sides="5"
+ id="path3363"
+ style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:type="star" />
+ </g>
+ <path
+ sodipodi:type="star"
+ style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path3365"
+ sodipodi:sides="5"
+ sodipodi:cx="50.496445"
+ sodipodi:cy="123.54857"
+ sodipodi:r1="8.6481056"
+ sodipodi:r2="6.9964643"
+ sodipodi:arg1="0.93428811"
+ sodipodi:arg2="1.5626066"
+ inkscape:flatsided="true"
+ inkscape:rounded="0"
+ inkscape:randomized="0"
+ d="M 55.636801,130.50317 L 45.470684,130.58643 L 42.249997,120.9436 L 50.42562,114.90075 L 58.69912,120.80889 L 55.636801,130.50317 z"
+ transform="matrix(-0.2611717,-0.7422275,0.7352996,-0.2584341,82.279261,283.10401)"
+ inkscape:transform-center-x="-6.2032857"
+ inkscape:transform-center-y="-21.468548" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Lend);stroke-opacity:1"
+ d="M 81.802751,191.2191 L 81.802751,180.10094 L 102.32857,180.10094 L 102.32857,167.2723"
+ id="path2593" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Lend);stroke-opacity:1"
+ d="M 114.30196,12.4734 L 114.30196,0.5 L 200.68146,0.5 L 200.68146,247.66511 L 182.72137,247.66511"
+ id="path3994" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Lend);stroke-opacity:1"
+ d="M 139.104,247.66511 L 127.98585,247.66511 L 127.98585,167.2723"
+ id="path4551" />
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Palatino;-inkscape-font-specification:Palatino"
+ x="108.71951"
+ y="30.317303"
+ id="text5131"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan5133"
+ x="108.71951"
+ y="30.317303">+</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Palatino;-inkscape-font-specification:Palatino"
+ x="21.484766"
+ y="326.49414"
+ id="text5137"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan5139"
+ x="21.484766"
+ y="326.49414">Input</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Palatino;-inkscape-font-specification:Palatino"
+ x="37.734375"
+ y="72.487099"
+ id="text5141"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan5143"
+ x="37.734375"
+ y="72.487099"
+ style="text-align:center;text-anchor:middle">Adder</tspan><tspan
+ sodipodi:role="line"
+ x="37.734375"
+ y="97.487099"
+ id="tspan5145"
+ style="text-align:center;text-anchor:middle">Pipeline</tspan></text>
+</svg>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.0"
+ width="242.93935"
+ height="281.34985"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ sodipodi:docname="simpleCPU.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <metadata
+ id="metadata8394">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <sodipodi:namedview
+ inkscape:window-height="976"
+ inkscape:window-width="1280"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ guidetolerance="10.0"
+ gridtolerance="10.0"
+ objecttolerance="10.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base"
+ showgrid="false"
+ showguides="false"
+ inkscape:guide-bbox="true"
+ inkscape:zoom="1.5676238"
+ inkscape:cx="104.73389"
+ inkscape:cy="129.42526"
+ inkscape:window-x="0"
+ inkscape:window-y="22"
+ inkscape:current-layer="svg2">
+ <sodipodi:guide
+ orientation="0,1"
+ position="148.6326,135.23653"
+ id="guide8428" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="151.82214,148.6326"
+ id="guide8430" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="241.12928,163.94239"
+ id="guide8432" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="127.58163,179.8901"
+ id="guide8434" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="75.91107,140.33979"
+ id="guide8436" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="55.498009,76.548978"
+ id="guide8438" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="32.533316,112.27183"
+ id="guide8442" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="261.54234,48.481019"
+ id="guide8444" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="107.80648,40.826122"
+ id="guide8446" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="-61.239182,-8.9307141"
+ id="guide8450" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="140.9777,5.7411733"
+ id="guide8452" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="305.558,104.61694"
+ id="guide10638" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="57.411733,230.28484"
+ id="guide10706" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="160.11495,-9.5686222"
+ id="guide10732" />
+ </sodipodi:namedview>
+ <defs
+ id="defs4">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 130.45512 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="346.38412 : 130.45512 : 1"
+ inkscape:persp3d-origin="173.19206 : 86.970083 : 1"
+ id="perspective8396" />
+ <marker
+ refX="0"
+ refY="0"
+ orient="auto"
+ id="Arrow2Lstart"
+ style="overflow:visible">
+ <path
+ d="M 8.7185878,4.0337352 L -2.2072895,0.01601326 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 L 8.7185878,4.0337352 z"
+ transform="matrix(1.1,0,0,1.1,1.1,0)"
+ id="path3653"
+ style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
+ </marker>
+ <marker
+ refX="0"
+ refY="0"
+ orient="auto"
+ id="Arrow2Lend"
+ style="overflow:visible">
+ <path
+ d="M 8.7185878,4.0337352 L -2.2072895,0.01601326 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 L 8.7185878,4.0337352 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ id="path3656"
+ style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
+ </marker>
+ <marker
+ refX="0"
+ refY="0"
+ orient="auto"
+ id="Arrow1Lend"
+ style="overflow:visible">
+ <path
+ d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z"
+ transform="matrix(-0.8,0,0,-0.8,-10,0)"
+ id="path3638"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" />
+ </marker>
+ <marker
+ refX="0"
+ refY="0"
+ orient="auto"
+ id="Arrow2Mstart"
+ style="overflow:visible">
+ <path
+ d="M 8.7185878,4.0337352 L -2.2072895,0.01601326 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 L 8.7185878,4.0337352 z"
+ transform="scale(0.6,0.6)"
+ id="path3659"
+ style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
+ </marker>
+ <marker
+ refX="0"
+ refY="0"
+ orient="auto"
+ id="Arrow2Mend"
+ style="overflow:visible">
+ <path
+ d="M 8.7185878,4.0337352 L -2.2072895,0.01601326 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 L 8.7185878,4.0337352 z"
+ transform="scale(-0.6,-0.6)"
+ id="path3662"
+ style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
+ </marker>
+ <marker
+ refX="0"
+ refY="0"
+ orient="auto"
+ id="Arrow2Lend-6"
+ style="overflow:visible">
+ <path
+ d="M 8.7185878,4.0337352 L -2.2072895,0.01601326 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 L 8.7185878,4.0337352 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ id="path3656-0"
+ style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
+ </marker>
+ </defs>
+ <rect
+ style="fill:#f8f8f8;fill-opacity:1;stroke:#000000;stroke-width:2.24795771;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.49591536, 2.2479577;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect2581"
+ y="1.1239789"
+ x="19.283211"
+ ry="19.369015"
+ rx="5.6674428"
+ height="279.1019"
+ width="192.69307" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1.02451169px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Lend);stroke-opacity:1"
+ id="path3910"
+ d="M 173.94622,96.347535 L 241.57877,96.347535"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1.02451169px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Lend);stroke-opacity:1"
+ id="path3910-4"
+ d="M 0.51225585,81.677075 L 54.752223,81.677075"
+ sodipodi:nodetypes="cc" />
+ <text
+ style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+ xml:space="preserve"
+ id="text5424"
+ y="-16.516333"
+ x="31.446365"><tspan
+ id="tspan5426"
+ y="-16.516333"
+ x="31.446365" /></text>
+ <text
+ sodipodi:linespacing="100%"
+ style="font-size:12px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Palatino;-inkscape-font-specification:Palatino Italic"
+ xml:space="preserve"
+ id="text3712-5-7-1"
+ y="106.6703"
+ x="-62.809502"><tspan
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;font-family:Palatino;-inkscape-font-specification:Palatino"
+ id="tspan8173"
+ y="106.6703"
+ x="-62.809502" /></text>
+ <rect
+ style="fill:#d7d7d7;fill-opacity:1;stroke:#000000;stroke-width:1.00710821;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:2.0142165, 1.00710825;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect3716-8"
+ y="177.5472"
+ x="55.097267"
+ ry="6.2872772"
+ rx="3.504355"
+ height="90.597839"
+ width="119.14807" />
+ <rect
+ style="fill:#d7d7d7;fill-opacity:1;stroke:#000000;stroke-width:1.00710821;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:2.0142165, 1.00710825;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect2541"
+ y="32.92421"
+ x="55.097267"
+ ry="6.2872772"
+ rx="3.504355"
+ height="90.597839"
+ width="119.14807" />
+ <text
+ style="font-size:20.49023438px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Palatino;-inkscape-font-specification:Palatino"
+ xml:space="preserve"
+ id="text2417"
+ y="55.116043"
+ x="110.7226"
+ transform="scale(1.0246117,0.9759795)"><tspan
+ style="text-align:center;text-anchor:middle"
+ id="tspan2421"
+ y="55.116043"
+ x="110.7226">ALU</tspan></text>
+ <text
+ style="font-size:20.49023438px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Palatino;-inkscape-font-specification:Palatino"
+ xml:space="preserve"
+ id="text2545"
+ y="204.12898"
+ x="111.0265"
+ transform="scale(1.0246117,0.9759795)"><tspan
+ style="text-align:center;text-anchor:middle"
+ id="tspan2547"
+ y="204.12898"
+ x="111.0265">Registers</tspan></text>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1.02451169px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Lend);stroke-opacity:1"
+ id="path2567"
+ d="M 0.51225585,96.347535 L 54.752223,96.347535"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1.02451169px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Lend);stroke-opacity:1"
+ id="path2577"
+ d="M 0.51225585,239.22501 L 54.752223,239.22501"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1.02451169px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Lend);stroke-opacity:1"
+ id="path2579"
+ d="M 0.51225585,253.89547 L 54.752223,253.89547"
+ sodipodi:nodetypes="cc" />
+ <text
+ style="font-size:20.49023438px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Palatino;-inkscape-font-specification:Palatino"
+ xml:space="preserve"
+ id="text3393"
+ y="24.083792"
+ x="112.50774"
+ transform="scale(1.0246117,0.9759795)"><tspan
+ style="text-align:center;text-anchor:middle"
+ id="tspan3395"
+ y="24.083792"
+ x="112.50774">CPU</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.02451169px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Lend);stroke-opacity:1"
+ d="M 173.94622,96.347535 L 195.37436,96.347535 L 195.37436,132.70476 L 33.99372,168.42412 L 33.99372,223.91671 L 54.752223,223.91671"
+ id="path8448"
+ sodipodi:nodetypes="cccccc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.02451169px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Lend);stroke-opacity:1"
+ d="M 173.94622,239.22501 L 195.37436,239.22501 L 195.37436,168.42412 L 33.99372,132.70476 L 33.99372,109.7423 L 54.752223,109.7423"
+ id="path8456" />
+ <text
+ sodipodi:linespacing="125%"
+ style="font-size:12.29414082px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Palatino;-inkscape-font-specification:Palatino Italic"
+ xml:space="preserve"
+ id="text3712-5-7"
+ y="86.438271"
+ x="58.806686"
+ transform="scale(1.0246117,0.9759795)"><tspan
+ style="font-size:14.34316349px"
+ id="tspan3714-2-3"
+ y="86.438271"
+ x="58.806686">opcode</tspan></text>
+ <text
+ sodipodi:linespacing="125%"
+ style="font-size:12.29414082px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Palatino;-inkscape-font-specification:Palatino Italic"
+ xml:space="preserve"
+ id="text10702"
+ y="100.63336"
+ x="58.806686"
+ transform="scale(1.0246117,0.9759795)"><tspan
+ style="font-size:14.34316349px"
+ id="tspan10704"
+ y="100.63336"
+ x="58.806686">x</tspan></text>
+ <text
+ sodipodi:linespacing="125%"
+ style="font-size:12.29414082px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Palatino;-inkscape-font-specification:Palatino Italic"
+ xml:space="preserve"
+ id="text10708"
+ y="116.406"
+ x="58.806686"
+ transform="scale(1.0246117,0.9759795)"><tspan
+ style="font-size:14.34316349px"
+ id="tspan10710"
+ y="116.406"
+ x="58.806686">y</tspan></text>
+ <text
+ sodipodi:linespacing="125%"
+ style="font-size:12.29414082px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Palatino;-inkscape-font-specification:Palatino Italic"
+ xml:space="preserve"
+ id="text10712"
+ y="233.46362"
+ x="58.806686"
+ transform="scale(1.0246117,0.9759795)"><tspan
+ style="font-size:14.34316349px"
+ id="tspan10714"
+ y="233.46362"
+ x="58.806686">data_in</tspan></text>
+ <text
+ sodipodi:linespacing="125%"
+ style="font-size:12.29414082px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Palatino;-inkscape-font-specification:Palatino Italic"
+ xml:space="preserve"
+ id="text10716"
+ y="249.14868"
+ x="58.806686"
+ transform="scale(1.0246117,0.9759795)"><tspan
+ style="font-size:14.34316349px"
+ id="tspan10718"
+ y="249.14868"
+ x="58.806686">rdaddr</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Palatino;-inkscape-font-specification:Palatino"
+ x="-88.66777"
+ y="105.91186"
+ id="text10720"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan10722"
+ x="-88.66777"
+ y="105.91186" /></text>
+ <text
+ sodipodi:linespacing="125%"
+ style="font-size:12.29414082px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Palatino;-inkscape-font-specification:Palatino Italic"
+ xml:space="preserve"
+ id="text10724"
+ y="263.41202"
+ x="58.806686"
+ transform="scale(1.0246117,0.9759795)"><tspan
+ style="font-size:14.34316349px"
+ id="tspan10726"
+ y="263.41202"
+ x="58.806686">wraddr</tspan></text>
+ <text
+ sodipodi:linespacing="125%"
+ style="font-size:12.29414082px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Palatino;-inkscape-font-specification:Palatino Italic"
+ xml:space="preserve"
+ id="text10728"
+ y="248.85431"
+ x="113.71804"
+ transform="scale(1.0246117,0.9759795)"><tspan
+ style="font-size:14.34316349px"
+ id="tspan10730"
+ y="248.85431"
+ x="113.71804">data_out</tspan></text>
+ <text
+ sodipodi:linespacing="125%"
+ style="font-size:12.29414082px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Palatino;-inkscape-font-specification:Palatino Italic"
+ xml:space="preserve"
+ id="text10734"
+ y="101.80681"
+ x="121.31441"
+ transform="scale(1.0246117,0.9759795)"><tspan
+ style="font-size:14.34316349px"
+ id="tspan10736"
+ y="101.80681"
+ x="121.31441">alu_out</tspan></text>
+</svg>
--- /dev/null
+%include talk.fmt
+\section{Conclusion}
+
+\frame{
+\frametitle{Some final words}
+\begin{itemize}
+ \item Still a lot to do: translate larger subset of Haskell
+ \item Real world prototype designs can already be made in \clash{}
+% \item \clash{} is another great example of how to bring functional expressivity to hardware designs
+\end{itemize}
+}
+
+\frame{
+\vspace{6em}
+\begin{figure}
+\Huge{Thank you for listening}
+\end{figure}
+\vspace{5em}
+\centerline{\clash{} Clone URL:}
+\centerline{\url{git://github.com/christiaanb/clash.git}}
+}
+
+\frame
+{
+\frametitle{Complete signatures and Types}
+\begin{code}
+type Word = SizedInt D12
+type Instruction = ( Opcode, Word, RangedWord D9
+ , RangedWord D9 )
+
+registers ::
+ ( PositiveT s
+ , NaturalT (s :-: D1)
+ , (s :>: (s :-: D1)) ~ True )) =>
+ a -> RangedWord (s :-: D1) -> RangedWord (s :-: D1) ->
+ (RegState s a) ->
+ (RegState s a, a )
+\end{code}
+}
+
+\frame
+{
+\frametitle{Supported Functionality}
+\begin{itemize}
+\item Polymorphism
+\item Higher Order Functions
+\item Fixed-Size Vectors (Simulation)
+\item Ranged and Sized Integers (Simulation)
+\item Custom Datatypes
+\item Booleans
+\item Tuples
+\item Pattern Matching
+\item Guards
+\end{itemize}
+}
+
+\frame
+{
+\frametitle{Unsupported Functionality}
+\begin{itemize}
+\item Recursion
+\item Lists (Dynamic Length)
+\item Standard Haskell Types: Integer, Char, etc.
+\item Type Classes
+\item Monads
+\item And much much more...
+\end{itemize}
+}
--- /dev/null
+%include polycode.fmt
+
+%if style == newcode
+%format ANN(x) = "{-# ANN " x " #-}"
+%format CXT(x) = "(" x ")"
+%format ` = "''"
+%format ^^ = " "
+%else
+%format ANN(x) = "\{-\#\ \mathit{ANN}\ " x "\ \#-\}"
+%format CXT(x) = "(Some\ context...)"
+%format ` = "''"
+%format ^^ = "\; "
+%format :>: = "\ensuremath{>}"
+%format :<: = "\ensuremath{<}"
+%format :==: = "\ensuremath{\equiv}"
+%format :-: = "\ensuremath{-}"
+%format :+: = "\ensuremath{+}"
+%format :*: = "\ensuremath{*}"
+%format :<=: = "\ensuremath{\leq}"
+%format SPL(x) = "\$" ( x )
+%format QU(x) = "\llbracket " x "\rrbracket "
+%format QUd(x) = "[d|" x "\rrbracket "
+%format QUt(x) = "[t|" x "\rrbracket "
+%format ^^ = "\; "
+%format ** = "\ \mathit{**}\ "
+%endif
\ No newline at end of file
--- /dev/null
+rsync -avz --delete --stats --progress ~/Documents/msc_thesis/git/haskell09/vhdl baaijcpr@ewi630.ewi.utwente.nl:/home/studaid/baaijcpr/haskell09