From d514bd151f4bd5bbb5ae6828902a778222de9738 Mon Sep 17 00:00:00 2001 From: Christiaan Baaij Date: Mon, 31 Aug 2009 20:30:04 +0200 Subject: [PATCH] Added images --- Makefile | 3 +- PolyAlu.hs | 80 ++++--- PolyAlu.lhs | 95 ++++++--- beamerinnerthemecaes.sty | 30 ++- clash-haskell09.lhs | 2 +- cpualu.png | Bin 0 -> 14057 bytes cpucomplete.png | Bin 0 -> 15389 bytes cpuregisters.png | Bin 0 -> 17092 bytes demo.lhs | 14 +- introduction.lhs | 77 ++++--- mealymachine2-func-red.svg | 229 ++++++++++++++++++++ mealymachine2-state-red.svg | 225 ++++++++++++++++++++ mealymachine2.svg | 229 ++++++++++++++++++++ polyaluhardware-add.png | Bin 35812 -> 0 bytes polyaluhardware-reg.png | Bin 29931 -> 0 bytes polyaluhardware.png | Bin 29529 -> 0 bytes reducer.lhs | 20 +- reducer.svg | 379 +++++++++++++++++++++++++++++++++ reducerschematic.png | Bin 52057 -> 0 bytes simpleCPU.svg | 411 ++++++++++++++++++++++++++++++++++++ summary.lhs | 38 +--- 21 files changed, 1674 insertions(+), 158 deletions(-) create mode 100644 cpualu.png create mode 100644 cpucomplete.png create mode 100644 cpuregisters.png create mode 100644 mealymachine2-func-red.svg create mode 100644 mealymachine2-state-red.svg create mode 100644 mealymachine2.svg delete mode 100644 polyaluhardware-add.png delete mode 100644 polyaluhardware-reg.png delete mode 100644 polyaluhardware.png create mode 100644 reducer.svg delete mode 100644 reducerschematic.png create mode 100644 simpleCPU.svg diff --git a/Makefile b/Makefile index b03942e..84b4934 100644 --- a/Makefile +++ b/Makefile @@ -19,8 +19,9 @@ TEXSRCS = \ preamble.tex SVGFIGURES = \ - mealymachine.svg \ mealymachine2.svg \ + mealymachine2-func-red.svg \ + mealymachine2-state-red.svg \ simpleCPU.svg \ reducer.svg diff --git a/PolyAlu.hs b/PolyAlu.hs index 8752f95..a464ffb 100644 --- a/PolyAlu.hs +++ b/PolyAlu.hs @@ -2,65 +2,57 @@ {-# LANGUAGE TypeOperators, TypeFamilies, FlexibleContexts #-} module Main where -import qualified Prelude as P -{-# LINE 34 "PolyAlu.lhs" #-} import CLasH.HardwareTypes -{-# LINE 41 "PolyAlu.lhs" #-} import CLasH.Translator.Annotations -{-# LINE 56 "PolyAlu.lhs" #-} -type Op s a = a -> Vector s a -> a +import qualified Prelude as P +{-# LINE 51 "PolyAlu.lhs" #-} +type Op a = a -> a -> a +{-# LINE 58 "PolyAlu.lhs" #-} +type RegBank s a = + Vector (s :+: D1) a +type RegState s a = + State (RegBank s a) +{-# LINE 66 "PolyAlu.lhs" #-} +type Word = SizedInt D12 +{-# LINE 85 "PolyAlu.lhs" #-} type Opcode = Bit -{-# LINE 64 "PolyAlu.lhs" #-} -type RegBank s a = Vector (s :+: D1) a -type RegState s a = State (RegBank s a) -{-# LINE 72 "PolyAlu.lhs" #-} -type Word = SizedInt D12 -{-# LINE 89 "PolyAlu.lhs" #-} -primOp :: (a -> a -> a) -> Op s a -primOp f a b = a `f` a -{-# LINE 97 "PolyAlu.lhs" #-} -vectOp :: (a -> a -> a) -> Op s a -vectOp f a b = foldl f a b -{-# LINE 116 "PolyAlu.lhs" #-} alu :: - Op s a -> - Op s a -> - Opcode -> a -> Vector s a -> a + Op a -> Op a -> + Opcode -> a -> a -> a alu op1 op2 Low a b = op1 a b alu op1 op2 High a b = op2 a b -{-# LINE 139 "PolyAlu.lhs" #-} -registerBank :: - ((NaturalT s ,PositiveT (s :+: D1),((s :+: D1) :>: s) ~ True )) => (RegState s a) -> a -> RangedWord s -> - RangedWord s -> Bit -> ((RegState s a), a ) - -registerBank (State mem) data_in rdaddr wraddr wrenable = +{-# LINE 108 "PolyAlu.lhs" #-} +registers :: + ((NaturalT s ,PositiveT (s :+: D1),((s :+: D1) :>: s) ~ True )) => a -> RangedWord s -> + RangedWord s -> (RegState s a) -> (RegState s a, a ) +{-# LINE 116 "PolyAlu.lhs" #-} +registers data_in rdaddr wraddr (State mem) = ((State mem'), data_out) where - data_out = mem!rdaddr - mem' | wrenable == Low = mem - | otherwise = replace mem wraddr data_in -{-# LINE 167 "PolyAlu.lhs" #-} -{-# ANN actual_cpu TopEntity#-} -actual_cpu :: - (Opcode, Word, Vector D4 Word, RangedWord D9, - RangedWord D9, Bit) -> RegState D9 Word -> - (RegState D9 Word, Word) + data_out = mem!rdaddr + mem' = replace mem wraddr data_in +{-# LINE 138 "PolyAlu.lhs" #-} +type Instruction = (Opcode, Word, RangedWord D9, RangedWord D9) +{-# LINE 142 "PolyAlu.lhs" #-} +{-# ANN cpu TopEntity#-} +cpu :: + Instruction -> RegState D9 Word -> (RegState D9 Word, Word) -actual_cpu (opc, a ,b, rdaddr, wraddr, wren) ram = (ram', alu_out) +cpu (opc, d, rdaddr, wraddr) ram = (ram', alu_out) where - alu_out = alu (primOp (+)) (vectOp (+)) opc ram_out b - (ram',ram_out) = registerBank ram a rdaddr wraddr wren -{-# LINE 191 "PolyAlu.lhs" #-} + 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 :: [(Opcode, Word, Vector D4 Word, RangedWord D9, RangedWord D9, Bit)] +program :: [Instruction] program = - [ (Low, 4, copy (0), 0, 0, High) -- Write 4 to Reg0, out = 0 - , (Low, 3, copy (0), 0, 1, High) -- Write 3 to Reg1, out = 8 - , (High,0, copy (3), 1, 0, Low) -- No Write , out = 15 + [ (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 [] = [] @@ -73,6 +65,6 @@ main :: IO () main = do let input = program let istate = initstate - let output = run actual_cpu istate input + let output = run cpu istate input mapM_ (\x -> putStr $ ("(" P.++ (show x) P.++ ")\n")) output return () diff --git a/PolyAlu.lhs b/PolyAlu.lhs index 547f095..c0d196d 100644 --- a/PolyAlu.lhs +++ b/PolyAlu.lhs @@ -4,6 +4,8 @@ {-# LANGUAGE TypeOperators, TypeFamilies, FlexibleContexts #-} module Main where +import CLasH.HardwareTypes +import CLasH.Translator.Annotations import qualified Prelude as P \end{code} %endif @@ -12,12 +14,18 @@ import qualified Prelude as P \subsection{Introduction} \frame { -\frametitle{Small Use Case}\pause -TODO: Plaatje +\frametitle{Small Use Case} +\begin{columns}[l] +\column{0.5\textwidth} +\begin{figure} +\includegraphics[width=4.75cm]{simpleCPU} +\end{figure} +\column{0.5\textwidth} \begin{itemize} - \item Polymorphic, Higher-Order CPU\pause + \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 @@ -29,21 +37,36 @@ TODO: Plaatje \frame { \frametitle{Type definitions}\pause -TODO: Plaatje van de ALU +\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 \end{code} \end{beamercolorbox}\pause - +\vspace{2.5em} And some Register types: \begin{beamercolorbox}[sep=-2.5ex,rounded=true,shadow=true,vmode]{codebox} \begin{code} -type RegBank s a = Vector (s :+: D1) a -type RegState s a = State (RegBank s a) +type RegBank s a = + Vector (s :+: D1) a +type RegState s a = + State (RegBank s a) \end{code} -\end{beamercolorbox}\pause +\end{beamercolorbox} +%if style == newcode +\begin{code} +type Word = SizedInt D12 +\end{code} +%endif +\end{columns} }\note[itemize]{ \item The first type is already polymorphic in input / output type \item State has to be of the State type to be recognized as such @@ -53,6 +76,9 @@ type RegState s a = State (RegBank s a) \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} @@ -64,9 +90,6 @@ alu op1 op2 {-"{\color<2>[rgb]{1,0,0}"-}Low{-"}"-} a b = op1 a b alu op1 op2 {-"{\color<2>[rgb]{1,0,0}"-}High{-"}"-} a b = op2 a b \end{code} \end{beamercolorbox} -\begin{itemize} -\uncover<2->{\item We support Pattern Matching} -\end{itemize} }\note[itemize]{ \item Alu is both higher-order, and polymorphic \item Two parameters are "compile time", others are "runtime" @@ -77,24 +100,26 @@ alu op1 op2 {-"{\color<2>[rgb]{1,0,0}"-}High{-"}"-} a b = op2 a b \frame { \frametitle{Register Bank} -Make a simple register bank: -\begin{beamercolorbox}[sep=-2.5ex,rounded=true,shadow=true,vmode]{codebox} -TODO: Hide type sig +\begin{figure} +\includegraphics[width=5.25cm,trim=0mm 0.4cm 0mm 6.2cm, clip=true]{simpleCPU} +\end{figure} +%if style == newcode \begin{code} -registerBank :: +registers :: CXT((NaturalT s ,PositiveT (s :+: D1),((s :+: D1) :>: s) ~ True )) => a -> RangedWord s -> - RangedWord s -> Bool -> (RegState s a) -> ((RegState s a), a ) - -registerBank data_in rdaddr wraddr (State mem) = + RangedWord s -> (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} -\begin{itemize} -\uncover<2->{\item We support Guards} -\end{itemize} }\note[itemize]{ \item RangedWord runs from 0 to the upper bound \item mem is statefull @@ -108,21 +133,25 @@ registerBank data_in rdaddr wraddr (State mem) = \frametitle{Simple CPU} Combining ALU and register bank: \begin{beamercolorbox}[sep=-2.5ex,rounded=true,shadow=true,vmode]{codebox} -TODO: Hide Instruction type? +%if style == newcode +\begin{code} +type Instruction = (Opcode, Word, RangedWord D9, RangedWord D9) +\end{code} +%endif \begin{code} -type Instruction = (Opcode, Word, RangedWord D9, RangedWord D9) -> RegState D9 Word -> -{-"{\color<2>[rgb]{1,0,0}"-}ANN(actual_cpu TopEntity){-"}"-} -actual_cpu :: +{-"{\color<2>[rgb]{1,0,0}"-}ANN(cpu TopEntity){-"}"-} +cpu :: Instruction -> RegState D9 Word -> (RegState D9 Word, Word) -actual_cpu (opc, d, rdaddr, wraddr) ram = (ram', alu_out) +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) = registerBank alu_out rdaddr wraddr ram + 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. @@ -138,11 +167,11 @@ initstate :: RegState D9 Word initstate = State (copy (0 :: Word)) ANN(program TestInput) -program :: [(Opcode, Word, Vector D4 Word, RangedWord D9, RangedWord D9, Bit)] +program :: [Instruction] program = - [ (Low, 4, copy (0), 0, 0, High) -- Write 4 to Reg0, out = 0 - , (Low, 3, copy (0), 0, 1, High) -- Write 3 to Reg1, out = 8 - , (High,0, copy (3), 1, 0, Low) -- No Write , out = 15 + [ (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 [] = [] @@ -155,7 +184,7 @@ main :: IO () main = do let input = program let istate = initstate - let output = run actual_cpu istate input + let output = run cpu istate input mapM_ (\x -> putStr $ ("(" P.++ (show x) P.++ ")\n")) output return () \end{code} diff --git a/beamerinnerthemecaes.sty b/beamerinnerthemecaes.sty index 664af83..580fe3c 100644 --- a/beamerinnerthemecaes.sty +++ b/beamerinnerthemecaes.sty @@ -29,6 +29,34 @@ \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} @@ -51,7 +79,7 @@ \end{beamercolorbox} \fi \begin{beamercolorbox}[sep=4pt,center]{date} - \usebeamerfont{date}\insertdate + \usebeamerfont{date}\insertcommittee \end{beamercolorbox} % {\usebeamercolor[fg]{titlegraphic}\inserttitlegraphic\par} \vfill diff --git a/clash-haskell09.lhs b/clash-haskell09.lhs index 3f28819..ad01d4e 100644 --- a/clash-haskell09.lhs +++ b/clash-haskell09.lhs @@ -6,7 +6,7 @@ \title{\clash{}} \subtitle{From Haskell To Hardware} \author{Christiaan Baaij \& Matthijs Kooijman} -\author{Supervisor: Jan Kuper} +\committee{Supervisor: Jan Kuper} \date{September 3, 2009} \begin{document} diff --git a/cpualu.png b/cpualu.png new file mode 100644 index 0000000000000000000000000000000000000000..ed1baee7e5010081165305088709d48f893432b4 GIT binary patch literal 14057 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 literal 0 HcmV?d00001 diff --git a/cpuregisters.png b/cpuregisters.png new file mode 100644 index 0000000000000000000000000000000000000000..977afb668f02a0d7500f4c9df9ce9db2cb6b486d GIT binary patch literal 17092 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 literal 0 HcmV?d00001 diff --git a/demo.lhs b/demo.lhs index 0399cc8..61a5567 100644 --- a/demo.lhs +++ b/demo.lhs @@ -3,15 +3,23 @@ \frame{ \frametitle{Demo} \begin{itemize} - \item We will simulate the small CPU - \item Translate that CPU code to VHDL + \item Simulate the CPU description + \item Translate the CPU to VHDL \item Simulate the generated VHDL - \item See the hardware schematic of the synthesized VHDL \end{itemize} }\note[itemize]{ \item Will show video } +\frame{ +\frametitle{Generated Schematic} +\begin{figure} +\centerline{\includegraphics<1>[width=10cm]{cpucomplete} +\includegraphics<2>[width=10cm]{cpualu} +\includegraphics<3>[height=6cm]{cpuregisters}} +\end{figure} +} + % % \frame{ % \frametitle{How do we use \clash{}?} diff --git a/introduction.lhs b/introduction.lhs index e0a72ff..c7b0bca 100644 --- a/introduction.lhs +++ b/introduction.lhs @@ -15,70 +15,65 @@ { \item We are a Computer Architectures group, this has been a Masters' project, no prior experience with Haskell. \item \clash{} is written in Haskell, of course -\item \clash{} is currently meant for rapid prototyping, not verification of hardware desigs +\item \clash{} is currently meant for rapid prototyping, not verification of hardware designs \item Functional languages are close to Hardware \item We can only translate a subset of Haskell \item All functions are descriptions of Mealy Machines } -\subsection{Mealy Machine} -\frame -{ -\frametitle{What is a Mealy Machine again?} - \begin{figure} - \centerline{\includegraphics[width=10cm]{mealymachine}} - \label{img:mealymachine} - \end{figure} -} -\note[itemize]{ -\item Mealy machine bases its output on current input and previous state -\item: TODO: Integrate this slide with the next two. First, show the picture -with the mealyMachine type signature (and rename it to "func"). Then, show the -run function, without type signature. Focus is on correspondence to the -picture. -} +% \subsection{Mealy Machine} +% \frame +% { +% \frametitle{What is a Mealy Machine again?} +% \begin{figure} +% \centerline{\includegraphics[width=10cm]{mealymachine}} +% \label{img:mealymachine} +% \end{figure} +% } +% \note[itemize]{ +% \item Mealy machine bases its output on current input and previous state +% \item: TODO: Integrate this slide with the next two. First, show the picture +% with the mealyMachine type signature (and rename it to "func"). Then, show the +% run function, without type signature. Focus is on correspondence to the +% picture. +% } \frame { \frametitle{Haskell Description} +\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} -mealyMachine :: - InputSignals -> - {-"{\color<2>[rgb]{1,0,0}"-}State{-"}"-} -> - (State, OutputSignals) +run func {-"{\color<3>[rgb]{1,0,0}"-}state{-"}"-} [] = [] +run 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'{-"}"-} input \end{code} \end{beamercolorbox} -\begin{itemize} -\uncover<2->{\item Current state is part of the input} -\uncover<3->{\item New state is part of the output} -\end{itemize} } \note[itemize]{ \item State is part of the function signature \item Both the current state, as the updated State } -\subsection{Simulation} \frame { -\frametitle{Simulating a Mealy Machine} +\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} -run func {-"{\color<2>[rgb]{1,0,0}"-}state{-"}"-} [] = [] -run func {-"{\color<2>[rgb]{1,0,0}"-}state{-"}"-} (i:input) = o:out - where - ({-"{\color<3>[rgb]{1,0,0}"-}state'{-"}"-}, o) = func i {-"{\color<2>[rgb]{1,0,0}"-}state{-"}"-} - out = run func {-"{\color<3>[rgb]{1,0,0}"-}state'{-"}"-} input +func :: + InputSignal -> + State -> + (State, OutputSignal) \end{code} \end{beamercolorbox} -\begin{itemize} -\item State behaves like an accumulator -\item Input is a (normal) list of inputs, one for each cycle -\end{itemize} } -\note[itemize]{ -\item This is just a quick example of how we can simulate the mealy machine -\item It sort of behaves like MapAccumN -} - diff --git a/mealymachine2-func-red.svg b/mealymachine2-func-red.svg new file mode 100644 index 0000000..21a7d1b --- /dev/null +++ b/mealymachine2-func-red.svg @@ -0,0 +1,229 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + func + + + state + + (i : inputs) + (o : outputs) + diff --git a/mealymachine2-state-red.svg b/mealymachine2-state-red.svg new file mode 100644 index 0000000..0754f35 --- /dev/null +++ b/mealymachine2-state-red.svg @@ -0,0 +1,225 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + func + + state + (i : inputs) + (o : outputs) + diff --git a/mealymachine2.svg b/mealymachine2.svg new file mode 100644 index 0000000..251780c --- /dev/null +++ b/mealymachine2.svg @@ -0,0 +1,229 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + func + + + state + + (i : inputs) + (o : outputs) + diff --git a/polyaluhardware-add.png b/polyaluhardware-add.png deleted file mode 100644 index 83e4c6539123b56ae3a22ea6e2a5ad8b7a28b0ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35812 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 diff --git a/polyaluhardware-reg.png b/polyaluhardware-reg.png deleted file mode 100644 index 6a49453454f0727df18e9f41238bb76ca4910587..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29931 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 diff --git a/reducer.lhs b/reducer.lhs index 4d74c68..03c688c 100644 --- a/reducer.lhs +++ b/reducer.lhs @@ -2,13 +2,19 @@ \frame{ \frametitle{More than just toys} \pause -TODO: Plaatje van de reducer +\begin{columns}[l] +\column{0.5\textwidth} +\begin{figure} +\includegraphics<2->[width=5.5cm]{reducer} +\end{figure} +\column{0.5\textwidth} \begin{itemize} \item We implemented a reduction circuit in \clash{}\pause \item Simulation results in Haskell match VHDL simulation results\pause \item Synthesis completes without errors or warnings\pause - \item Around half speed of handcoded and optimized VHDL \pause + \item Around half 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 @@ -16,8 +22,8 @@ TODO: Plaatje van de reducer \item Nice speed considering we don't optimize for it (only single example!) } -\begin{frame}[plain] - \begin{centering} - \includegraphics[height=\paperheight]{reducerschematic.png} - \end{centering} -\end{frame} +% \begin{frame}[plain] +% \begin{centering} +% \includegraphics[height=\paperheight]{reducerschematic.png} +% \end{centering} +% \end{frame} diff --git a/reducer.svg b/reducer.svg new file mode 100644 index 0000000..39152bc --- /dev/null +++ b/reducer.svg @@ -0,0 +1,379 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/reducerschematic.png b/reducerschematic.png deleted file mode 100644 index 0d5f0a2a4e4e87f76c5d44e85a8695ab29921149..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 52057 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 diff --git a/simpleCPU.svg b/simpleCPU.svg new file mode 100644 index 0000000..d24d179 --- /dev/null +++ b/simpleCPU.svg @@ -0,0 +1,411 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ALU + Registers + + + + CPU + + + opc + a + b + data_in + rdaddr + + wraddr + data_out + alu_out + diff --git a/summary.lhs b/summary.lhs index 94b11b5..58feaa9 100644 --- a/summary.lhs +++ b/summary.lhs @@ -22,34 +22,18 @@ \frame { -\frametitle{Complete signature for registerBank} +\frametitle{Complete signatures and Types} \begin{code} -registerBank :: - ( NaturalT s +type Word = SizedInt D12 +type Instruction = ( Opcode, Word, RangedWord D9 + , RangedWord D9 ) + +registers :: + ( NaturalT s , PositiveT (s :+: D1) - , ((s :+: D1) :>: s) ~ True )) => - (RegState s a) -> a -> RangedWord s -> - RangedWord s -> Bit -> ((RegState s a), a ) + , ((s :+: D1) :>: s) ~ True )) => + a -> RangedWord s -> RangedWord s -> + (RegState s a) -> + (RegState s a, a ) \end{code} } - -\frame{ -\begin{figure} -\centerline{\includegraphics[width=12cm]{polyaluhardware}} -\label{img:mealymachine} -\end{figure} -} - -\frame{ -\begin{figure} -\centerline{\includegraphics[width=12cm]{polyaluhardware-reg}} -\label{img:mealymachine} -\end{figure} -} - -\frame{ -\begin{figure} -\centerline{\includegraphics[width=12cm]{polyaluhardware-add}} -\label{img:mealymachine} -\end{figure} -} -- 2.30.2