Add presentation so far.
authorMatthijs Kooijman <matthijs@stdin.nl>
Thu, 10 Dec 2009 11:28:25 +0000 (12:28 +0100)
committerMatthijs Kooijman <matthijs@stdin.nl>
Thu, 10 Dec 2009 11:28:25 +0000 (12:28 +0100)
62 files changed:
Makefile [new file with mode: 0644]
PolyAlu [new file with mode: 0755]
PolyAlu.hs [new file with mode: 0644]
PolyAlu.lhs [new file with mode: 0644]
beamercolorthemecaes.sty [new file with mode: 0644]
beamerfontthemecaes.sty [new file with mode: 0644]
beamerinnerthemecaes.sty [new file with mode: 0644]
beamerouterthemecaes.sty [new file with mode: 0644]
beamerthemecaes.sty [new file with mode: 0644]
caes_presentation.cls [new file with mode: 0644]
christiaan/introduction.lhs [new file with mode: 0644]
christiaan/introduction.tex [new file with mode: 0644]
clash-haskell09.lhs [new file with mode: 0644]
cpualu.png [new file with mode: 0644]
cpucomplete.png [new file with mode: 0644]
cpuregisters.png [new file with mode: 0644]
demo.lhs [new file with mode: 0644]
figures/chameleonB.png [new file with mode: 0644]
figures/cpus/6600GT_GPU.jpg [new file with mode: 0644]
figures/cpus/Altera_StratixIV.jpg [new file with mode: 0644]
figures/cpus/Intel_core_i7.jpg [new file with mode: 0644]
figures/cpus/pmiphone_boardtopbig.jpg [new file with mode: 0644]
figures/schakelingen/CMOS_NAND_Layout.svg [new file with mode: 0644]
figures/schakelingen/NAND.PNG [new file with mode: 0644]
figures/schakelingen/ttl.gif [new file with mode: 0644]
figures/transistor/Replica-of-first-transistor.jpg [new file with mode: 0644]
figures/transistor/Transistorer_(croped).jpg [new file with mode: 0644]
figures/transistor/firsttransistor.gif [new file with mode: 0644]
figures/transistor/hr-1sttransistor.jpg [new file with mode: 0644]
figures/transistor/nehalem-core.jpg [new file with mode: 0644]
figures/transistor/nehalem_432x315.jpg [new file with mode: 0644]
figures/transistor/transistor_nano.jpg [new file with mode: 0644]
figures/transistor/worldsfastes.jpg [new file with mode: 0644]
fir.lhs [new file with mode: 0644]
fir0.png [new file with mode: 0644]
fir1.png [new file with mode: 0644]
fir2.png [new file with mode: 0644]
foldr.svg [new file with mode: 0644]
howdoesitwork.lhs [new file with mode: 0644]
introduction.lhs [new file with mode: 0644]
introduction.tex [new file with mode: 0644]
macc.hs [new file with mode: 0644]
macc.lhs [new file with mode: 0644]
macc.png [new file with mode: 0644]
matthijs/introduction.lhs [new file with mode: 0644]
matthijs/introduction.tex [new file with mode: 0644]
mealymachine.pdf [new file with mode: 0644]
mealymachine.svg [new file with mode: 0644]
mealymachine2-func-red.svg [new file with mode: 0644]
mealymachine2-state-red.svg [new file with mode: 0644]
mealymachine2.svg [new file with mode: 0644]
preamble.tex [new file with mode: 0644]
presentatie.tar.bz2 [new file with mode: 0644]
reducer.lhs [new file with mode: 0644]
reducer.svg [new file with mode: 0644]
reducerschematic.png [new file with mode: 0644]
simpleCPU.pdf [new file with mode: 0644]
simpleCPU.svg [new file with mode: 0644]
summary.lhs [new file with mode: 0644]
talk.fmt [new file with mode: 0644]
upload.sh [new file with mode: 0755]
ut_logos/ut_logo_blue.pdf [new file with mode: 0644]

diff --git a/Makefile b/Makefile
new file mode 100644 (file)
index 0000000..79b8aac
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,49 @@
+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
diff --git a/PolyAlu b/PolyAlu
new file mode 100755 (executable)
index 0000000..f75d928
Binary files /dev/null and b/PolyAlu differ
diff --git a/PolyAlu.hs b/PolyAlu.hs
new file mode 100644 (file)
index 0000000..1cb8579
--- /dev/null
@@ -0,0 +1,70 @@
+{-# 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 ()
diff --git a/PolyAlu.lhs b/PolyAlu.lhs
new file mode 100644 (file)
index 0000000..1379407
--- /dev/null
@@ -0,0 +1,192 @@
+%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
diff --git a/beamercolorthemecaes.sty b/beamercolorthemecaes.sty
new file mode 100644 (file)
index 0000000..48617c5
--- /dev/null
@@ -0,0 +1,42 @@
+%%
+%% 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>
diff --git a/beamerfontthemecaes.sty b/beamerfontthemecaes.sty
new file mode 100644 (file)
index 0000000..c39300d
--- /dev/null
@@ -0,0 +1,30 @@
+%%
+%% 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>
diff --git a/beamerinnerthemecaes.sty b/beamerinnerthemecaes.sty
new file mode 100644 (file)
index 0000000..a9d495b
--- /dev/null
@@ -0,0 +1,92 @@
+%%
+%% 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>
diff --git a/beamerouterthemecaes.sty b/beamerouterthemecaes.sty
new file mode 100644 (file)
index 0000000..f579437
--- /dev/null
@@ -0,0 +1,241 @@
+%%
+%% 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>
diff --git a/beamerthemecaes.sty b/beamerthemecaes.sty
new file mode 100644 (file)
index 0000000..bb71e86
--- /dev/null
@@ -0,0 +1,40 @@
+%%
+%% 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>
diff --git a/caes_presentation.cls b/caes_presentation.cls
new file mode 100644 (file)
index 0000000..61ff482
--- /dev/null
@@ -0,0 +1,51 @@
+%%\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
diff --git a/christiaan/introduction.lhs b/christiaan/introduction.lhs
new file mode 100644 (file)
index 0000000..bfa3494
--- /dev/null
@@ -0,0 +1,7 @@
+%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
diff --git a/christiaan/introduction.tex b/christiaan/introduction.tex
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/clash-haskell09.lhs b/clash-haskell09.lhs
new file mode 100644 (file)
index 0000000..efcd034
--- /dev/null
@@ -0,0 +1,25 @@
+\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}
diff --git a/cpualu.png b/cpualu.png
new file mode 100644 (file)
index 0000000..ed1baee
Binary files /dev/null and b/cpualu.png differ
diff --git a/cpucomplete.png b/cpucomplete.png
new file mode 100644 (file)
index 0000000..dd138b2
Binary files /dev/null and b/cpucomplete.png differ
diff --git a/cpuregisters.png b/cpuregisters.png
new file mode 100644 (file)
index 0000000..977afb6
Binary files /dev/null and b/cpuregisters.png differ
diff --git a/demo.lhs b/demo.lhs
new file mode 100644 (file)
index 0000000..740a38e
--- /dev/null
+++ b/demo.lhs
@@ -0,0 +1,39 @@
+\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}
+% }
diff --git a/figures/chameleonB.png b/figures/chameleonB.png
new file mode 100644 (file)
index 0000000..ad6cf8a
Binary files /dev/null and b/figures/chameleonB.png differ
diff --git a/figures/cpus/6600GT_GPU.jpg b/figures/cpus/6600GT_GPU.jpg
new file mode 100644 (file)
index 0000000..b0ef25e
Binary files /dev/null and b/figures/cpus/6600GT_GPU.jpg differ
diff --git a/figures/cpus/Altera_StratixIV.jpg b/figures/cpus/Altera_StratixIV.jpg
new file mode 100644 (file)
index 0000000..e002dd2
Binary files /dev/null and b/figures/cpus/Altera_StratixIV.jpg differ
diff --git a/figures/cpus/Intel_core_i7.jpg b/figures/cpus/Intel_core_i7.jpg
new file mode 100644 (file)
index 0000000..8ce1179
Binary files /dev/null and b/figures/cpus/Intel_core_i7.jpg differ
diff --git a/figures/cpus/pmiphone_boardtopbig.jpg b/figures/cpus/pmiphone_boardtopbig.jpg
new file mode 100644 (file)
index 0000000..b19d4df
Binary files /dev/null and b/figures/cpus/pmiphone_boardtopbig.jpg differ
diff --git a/figures/schakelingen/CMOS_NAND_Layout.svg b/figures/schakelingen/CMOS_NAND_Layout.svg
new file mode 100644 (file)
index 0000000..0c9d79e
--- /dev/null
@@ -0,0 +1,220 @@
+<?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
diff --git a/figures/schakelingen/NAND.PNG b/figures/schakelingen/NAND.PNG
new file mode 100644 (file)
index 0000000..04aeb19
Binary files /dev/null and b/figures/schakelingen/NAND.PNG differ
diff --git a/figures/schakelingen/ttl.gif b/figures/schakelingen/ttl.gif
new file mode 100644 (file)
index 0000000..b730845
Binary files /dev/null and b/figures/schakelingen/ttl.gif differ
diff --git a/figures/transistor/Replica-of-first-transistor.jpg b/figures/transistor/Replica-of-first-transistor.jpg
new file mode 100644 (file)
index 0000000..14482f6
Binary files /dev/null and b/figures/transistor/Replica-of-first-transistor.jpg differ
diff --git a/figures/transistor/Transistorer_(croped).jpg b/figures/transistor/Transistorer_(croped).jpg
new file mode 100644 (file)
index 0000000..f6db50c
Binary files /dev/null and b/figures/transistor/Transistorer_(croped).jpg differ
diff --git a/figures/transistor/firsttransistor.gif b/figures/transistor/firsttransistor.gif
new file mode 100644 (file)
index 0000000..0808116
Binary files /dev/null and b/figures/transistor/firsttransistor.gif differ
diff --git a/figures/transistor/hr-1sttransistor.jpg b/figures/transistor/hr-1sttransistor.jpg
new file mode 100644 (file)
index 0000000..9832fe6
Binary files /dev/null and b/figures/transistor/hr-1sttransistor.jpg differ
diff --git a/figures/transistor/nehalem-core.jpg b/figures/transistor/nehalem-core.jpg
new file mode 100644 (file)
index 0000000..8925f6c
Binary files /dev/null and b/figures/transistor/nehalem-core.jpg differ
diff --git a/figures/transistor/nehalem_432x315.jpg b/figures/transistor/nehalem_432x315.jpg
new file mode 100644 (file)
index 0000000..7e12b6e
Binary files /dev/null and b/figures/transistor/nehalem_432x315.jpg differ
diff --git a/figures/transistor/transistor_nano.jpg b/figures/transistor/transistor_nano.jpg
new file mode 100644 (file)
index 0000000..372466c
Binary files /dev/null and b/figures/transistor/transistor_nano.jpg differ
diff --git a/figures/transistor/worldsfastes.jpg b/figures/transistor/worldsfastes.jpg
new file mode 100644 (file)
index 0000000..8611d37
Binary files /dev/null and b/figures/transistor/worldsfastes.jpg differ
diff --git a/fir.lhs b/fir.lhs
new file mode 100644 (file)
index 0000000..f8d6959
--- /dev/null
+++ b/fir.lhs
@@ -0,0 +1,22 @@
+\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
diff --git a/fir0.png b/fir0.png
new file mode 100644 (file)
index 0000000..71782b8
Binary files /dev/null and b/fir0.png differ
diff --git a/fir1.png b/fir1.png
new file mode 100644 (file)
index 0000000..7fdb772
Binary files /dev/null and b/fir1.png differ
diff --git a/fir2.png b/fir2.png
new file mode 100644 (file)
index 0000000..8541aba
Binary files /dev/null and b/fir2.png differ
diff --git a/foldr.svg b/foldr.svg
new file mode 100644 (file)
index 0000000..fd9235e
--- /dev/null
+++ b/foldr.svg
@@ -0,0 +1,528 @@
+<?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>
diff --git a/howdoesitwork.lhs b/howdoesitwork.lhs
new file mode 100644 (file)
index 0000000..4c26ca5
--- /dev/null
@@ -0,0 +1,21 @@
+%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
+}
diff --git a/introduction.lhs b/introduction.lhs
new file mode 100644 (file)
index 0000000..1c9eef8
--- /dev/null
@@ -0,0 +1,229 @@
+%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
+% }
diff --git a/introduction.tex b/introduction.tex
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/macc.hs b/macc.hs
new file mode 100644 (file)
index 0000000..f1f6d50
--- /dev/null
+++ b/macc.hs
@@ -0,0 +1,30 @@
+{-#  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
diff --git a/macc.lhs b/macc.lhs
new file mode 100644 (file)
index 0000000..7bf988e
--- /dev/null
+++ b/macc.lhs
@@ -0,0 +1,114 @@
+%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
diff --git a/macc.png b/macc.png
new file mode 100644 (file)
index 0000000..0535e4b
Binary files /dev/null and b/macc.png differ
diff --git a/matthijs/introduction.lhs b/matthijs/introduction.lhs
new file mode 100644 (file)
index 0000000..b8f01b9
--- /dev/null
@@ -0,0 +1,6 @@
+%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
diff --git a/matthijs/introduction.tex b/matthijs/introduction.tex
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/mealymachine.pdf b/mealymachine.pdf
new file mode 100644 (file)
index 0000000..d293e47
Binary files /dev/null and b/mealymachine.pdf differ
diff --git a/mealymachine.svg b/mealymachine.svg
new file mode 100644 (file)
index 0000000..0606504
--- /dev/null
@@ -0,0 +1,270 @@
+<?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>
diff --git a/mealymachine2-func-red.svg b/mealymachine2-func-red.svg
new file mode 100644 (file)
index 0000000..21a7d1b
--- /dev/null
@@ -0,0 +1,229 @@
+<?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>
diff --git a/mealymachine2-state-red.svg b/mealymachine2-state-red.svg
new file mode 100644 (file)
index 0000000..0754f35
--- /dev/null
@@ -0,0 +1,225 @@
+<?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>
diff --git a/mealymachine2.svg b/mealymachine2.svg
new file mode 100644 (file)
index 0000000..251780c
--- /dev/null
@@ -0,0 +1,229 @@
+<?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>
diff --git a/preamble.tex b/preamble.tex
new file mode 100644 (file)
index 0000000..20c6a89
--- /dev/null
@@ -0,0 +1,4 @@
+\usepackage[english]{babel}
+\usepackage{xcolor}
+
+\newcommand{\clash}[0]{C$\lambda$asH}
\ No newline at end of file
diff --git a/presentatie.tar.bz2 b/presentatie.tar.bz2
new file mode 100644 (file)
index 0000000..2276a1e
Binary files /dev/null and b/presentatie.tar.bz2 differ
diff --git a/reducer.lhs b/reducer.lhs
new file mode 100644 (file)
index 0000000..09e2ad8
--- /dev/null
@@ -0,0 +1,38 @@
+\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
+}
diff --git a/reducer.svg b/reducer.svg
new file mode 100644 (file)
index 0000000..eeb39b3
--- /dev/null
@@ -0,0 +1,553 @@
+<?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>
diff --git a/reducerschematic.png b/reducerschematic.png
new file mode 100644 (file)
index 0000000..637a546
Binary files /dev/null and b/reducerschematic.png differ
diff --git a/simpleCPU.pdf b/simpleCPU.pdf
new file mode 100644 (file)
index 0000000..b2ff166
Binary files /dev/null and b/simpleCPU.pdf differ
diff --git a/simpleCPU.svg b/simpleCPU.svg
new file mode 100644 (file)
index 0000000..d5baee3
--- /dev/null
@@ -0,0 +1,411 @@
+<?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>
diff --git a/summary.lhs b/summary.lhs
new file mode 100644 (file)
index 0000000..1ad3cca
--- /dev/null
@@ -0,0 +1,68 @@
+%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}
+}
diff --git a/talk.fmt b/talk.fmt
new file mode 100644 (file)
index 0000000..0cf1757
--- /dev/null
+++ b/talk.fmt
@@ -0,0 +1,26 @@
+%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
diff --git a/upload.sh b/upload.sh
new file mode 100755 (executable)
index 0000000..d9c8a57
--- /dev/null
+++ b/upload.sh
@@ -0,0 +1 @@
+rsync -avz --delete --stats --progress ~/Documents/msc_thesis/git/haskell09/vhdl baaijcpr@ewi630.ewi.utwente.nl:/home/studaid/baaijcpr/haskell09
diff --git a/ut_logos/ut_logo_blue.pdf b/ut_logos/ut_logo_blue.pdf
new file mode 100644 (file)
index 0000000..b8088fd
Binary files /dev/null and b/ut_logos/ut_logo_blue.pdf differ