Move hardware design sheet and remove transistor count sheet.
[matthijs/master-project/final-presentation.git] / introduction.lhs
1 %include talk.fmt
2 \section{Introduction}
3 \subsection{Hardware as we know it}
4 \frame
5 {
6 \frametitle{Hardware}
7 \begin{figure}
8 \centerline{
9 \includegraphics<1>[height=6cm]{figures/cpus/pmiphone_boardtopbig}
10 \includegraphics<2>[height=6cm]{figures/cpus/Intel_core_i7}
11 \includegraphics<3>[height=6cm]{figures/cpus/6600GT_GPU}
12 \includegraphics<4>[height=6cm]{figures/cpus/Altera_StratixIV}
13 }
14 \label{img:chips}
15 \end{figure}
16 }
17 \note[itemize]
18 {
19 \item Iedereen weet wel wat hardware is. Hier een paar voorbeelden.
20 \item Binnenkant iPhone met veelvoud aan chips, Laatste Intel CPU, Nvidia Videochip, Altere FPGA
21 }
22
23 \frame
24 {
25 \frametitle{Designing Hardware}
26 \centerline{Design with 4 transistors}
27 \begin{columns}[c]
28 \column{0.5\textwidth}
29 \vspace{-0.5cm}
30 \begin{figure}
31 \centerline{\includegraphics[height=5cm, trim = 0 0 0 2.5cm, clip]{figures/schakelingen/NAND}}
32 \end{figure}
33 \column{0.5\textwidth}
34 \begin{figure}
35 \centerline{\includegraphics[height=5cm, trim = 0 4.5cm 0 0, clip]{figures/schakelingen/CMOS_NAND_Layout}}
36 \end{figure}
37 \end{columns}
38 }
39 \note[itemize]
40 {
41 \item NAND: Gaat na dat beide ingangen niet 1 zijn
42 \item Een simpel hardware ontwerp met 4 transistoren
43 \item Links een schematisch ontwerp, Rechts de layout van de metaal lagen
44 }
45
46 \frame
47 {
48 \frametitle{Transistors}
49 \begin{figure}
50 \centerline{
51 \includegraphics<1>[height=6cm]{figures/transistor/hr-1sttransistor}
52 \includegraphics<2>[height=6cm]{figures/transistor/worldsfastes}
53 \includegraphics<3>[height=6cm]{figures/transistor/nehalem_432x315}
54 }
55 \label{img:chips}
56 \end{figure}
57 }
58 \note[itemize]
59 {
60 \item Hardware is opgebouwd uit transistoren, simpele schakelaar
61 \item Eerste transistor 60 jaar geleden, ter grootte van je hand
62 \item Het word allemaal steeds kleiner
63 \item Nu: Chip net iets groter dan je duim: 731 miljoen transistoren
64 }
65
66 \frame
67 {
68 \frametitle{Designing Hardware}
69 \vspace{0.5cm}
70 \centerline{\Large This won't work for 730 million transistors!}
71 \begin{figure}
72 \centerline{\includegraphics[height=4cm]{figures/transistor/nehalem-core}}
73 \end{figure}
74 }
75
76 \frame
77 {
78 \frametitle{Designing Hardware}
79 \begin{itemize}
80 \item We design hardware in the same format as software
81 \item We make designs in plain text!
82 \item Software: Programming Languages
83 \item Hardware: Hardware Description Languages
84 \end{itemize}
85 }
86 \note[itemize]
87 {
88 \item Harware designs worden gewoon in tekst opgeschreven.
89 \item Maar wel in een special taal voor hardware
90 \item Waar je voor software programmeer talen hebt,
91 \item Heb je voor hardware zogeheette hardwarebeschrijvingstalen
92 }
93
94 \frame
95 {
96 \frametitle{Designing Hardware}
97 \begin{itemize}
98 \item Algorithmic / Behavioral Descriptions:
99 \begin{itemize}
100 \item Describe \emph{what} the Hardware does
101 \item Relation between input and output
102 \end{itemize}
103 \item Structural Descriptions:
104 \begin{itemize}
105 \item Describe \emph{how} the Hardware does it
106 \item Hierarchal composition
107 \end{itemize}
108 \end{itemize}
109 }
110 \note[itemize]
111 {
112 \item Algoritmische beschrijvingen beschrijven wat de Hardware moet doen, niet hoe die dat doet
113 \item Structurele beschrijvingen beschrijven hoe de Hardware dingen doet
114 \item In Structurele beschrijvingen worden componenten opgebouwd uit simpele schakelingen en/of andere componenten
115 \item Graag willen wij algorithmische beschrijvingen maken, en de structurele beschrijving hier automatisch van afleiden
116 }
117
118 \frame
119 {
120 \frametitle{Why do we make Hardware?}
121 \begin{itemize}
122 \item We make hardware to solve problems
123 \item The solutionss are often described as a set of mathematical equations\footnote{But what is the equation for a CPU?}
124 \item `Holy Grail' Hardware Descriptions:
125 \begin{itemize}
126 \item Input: Set of Mathematical Equations
127 \item Output: Hardware that is Provably correct, Fast , Small, Cheap to manufacture, and has a low Energy Usage
128 \end{itemize}
129 \end{itemize}
130 }
131 \note[itemize]
132 {
133 \item We maken hardware omdat we, soms vaag gedefineerde, problemen willen oplossen.
134 \item Oplossingen, vooral in de signaalverwerking (video, muziek, TV, etc.), zijn beschreven als een verzameling van wiskundige formules
135 \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.
136 \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?
137 }
138
139 \frame
140 {
141 \frametitle{Functional Languages}
142 \begin{itemize}
143 \item Functional programming languages allow us to specify programs that are close to a set of mathematical equations.
144 \end{itemize}
145 }
146 \note[itemize]
147 {
148 \item Functionele talen liggen dicht bij de wiskunde
149 }
150
151 \frame
152 {
153 \frametitle{Functional Languages \& Hardware}
154 \begin{itemize}
155 \item When we want to calculate, 1 + 2 + 3, there is nothing that dictates that we should first calculate 1 + 2
156 \item Like mathematical equations, Functional languages do not dictate an order when there is none. So everything can be calculated in parallel.
157 \item In hardware, everything also happens in parallel: electrons flow through all the transistors every moment in time.
158 \item IDEA: Use functional languages to describe hardware!
159 \end{itemize}
160 }
161 \note[itemize]
162 {
163 \item In wiskundige formules is er vaak geen volgorde gedefineerd
164 \item Dit is dus hetzelfde in functionele talen, wat betekent dat alles tegelijk/parallel kan worden uitgerekent.
165 \item Bij `normale' programmeertalen is er vaak wel een volgorde
166 \item In hardware gebeurt ook alles tegelijkertijd
167 \item Het idee is dus om hardware te beschrijven in een functionele taal
168 }
169
170 % \frame
171 % {
172 % \frametitle{Mealy Machine}
173 % \begin{figure}
174 % \centerline{\includegraphics<1>[width=6.25cm]{mealymachine2}
175 % \includegraphics<2>[width=6.25cm]{mealymachine2-func-red}
176 % \includegraphics<3>[width=6.25cm]{mealymachine2-state-red}}
177 % \label{img:mealymachine}
178 % \end{figure}
179 % \begin{beamercolorbox}[sep=-2.5ex,rounded=true,shadow=true,vmode]{codebox}
180 % \begin{code}
181 % run {-"{\color<2>[rgb]{1,0,0}"-}func{-"}"-} {-"{\color<3>[rgb]{1,0,0}"-}state{-"}"-} [] = []
182 % run {-"{\color<2>[rgb]{1,0,0}"-}func{-"}"-} {-"{\color<3>[rgb]{1,0,0}"-}state{-"}"-} (i:inputs) = o:outputs
183 %   where
184 %     ({-"{\color<3>[rgb]{1,0,0}"-}state'{-"}"-}, o)  =   {-"{\color<2>[rgb]{1,0,0}"-}func{-"}"-} i {-"{\color<3>[rgb]{1,0,0}"-}state{-"}"-}
185 %     outputs                                         =   run {-"{\color<2>[rgb]{1,0,0}"-}func{-"}"-} {-"{\color<3>[rgb]{1,0,0}"-}state'{-"}"-} inputs
186 % \end{code}
187 % \end{beamercolorbox}
188 % }
189 % \note[itemize]{
190 % \item A Mealy machine bases its output on the current state and the input
191 % \item State is part of the function signature
192 % \item Both the current state, and the updated State
193 % \item The run function simulates a mealy machine for the provided number of inputs
194 % }
195
196 % \frame
197 % {
198 % \frametitle{Haskell Description}
199 % \begin{figure}
200 % \centerline{\includegraphics[width=6.25cm]{mealymachine2-func-red}}
201 % \end{figure}
202 % \begin{beamercolorbox}[sep=-2.5ex,rounded=true,shadow=true,vmode]{codebox}
203 % \begin{code}
204 % func :: 
205 %   InputSignal ->
206 %   State ->
207 %   (State, OutputSignal)
208 % \end{code}
209 % \end{beamercolorbox}
210 % }
211 % \note[itemize]{
212 % \item In \clash{} you describe the logic part of the mealy machine
213 % \item The state in the signature is turned into memory elements when translating to VHDL
214 % }