PageRenderTime 10ms CodeModel.GetById 1ms app.highlight 3ms RepoModel.GetById 1ms app.codeStats 0ms

/G1/rapport/backup

http://github.com/efs/Arkitektur-g-opgave-1
#! | 256 lines | 209 code | 47 blank | 0 comment | 0 complexity | 643ebc633dd9d740d5b707223246d595 MD5 | raw file
  1\documentclass[a4paper]{article}
  2
  3%Sprog stuff
  4\usepackage[utf8]{inputenc}
  5\usepackage[danish]{babel}
  6
  7%math stuff
  8\usepackage{amssymb}
  9\usepackage{amsmath}
 10
 11%table stuff
 12\usepackage{color}
 13\usepackage[table]{xcolor}
 14\definecolor{tableShade}{RGB}{245,245,245}
 15\usepackage{multirow}
 16\usepackage{booktabs}
 17
 18%graphic stuff
 19\usepackage{graphicx}
 20\usepackage[hang,small,bf]{caption}
 21\usepackage{tikz} %creating graphics
 22\usepackage{rotating}
 23
 24%header/footer
 25\usepackage{fancyhdr}
 26\usepackage{lastpage}
 27
 28\usepackage{mathpazo} % Palatino
 29
 30%\pagestyle{fancy}
 31%\lhead{}
 32%\chead{Maskinarkitektur - G1}
 33%\rhead{\today}
 34%\cfoot{\thepage\ af \pageref{LastPage}}
 35
 36%monospace font
 37\newcommand{\mono}[1]{{\ttfamily#1}}
 38
 39%Hrule
 40\newcommand{\HRule}{\rule{\linewidth}{0.5mm}}
 41
 42%misc
 43\usepackage{url}
 44\usepackage{pdfpages}
 45
 46%end of preamble
 47
 48
 49\title{Maskinarkitektur - G1}
 50\date{\today}
 51\author{Emil Fabricius Svansø\\
 52        Sebastian Paaske Tørholm\\
 53        Søren Dahlgaard}
 54
 55\begin{document}
 56
 57\maketitle
 58
 59\tableofcontents
 60
 61\newpage
 62
 63\section{4bit ALU}
 64
 65\begin{description}
 66\item [1-bit adder] Summen i denne er lavet med formlen $a$ XOR $b$ XOR $c$.
 67    Carry out er lavet som i Appendix C s. 28.
 68\item [Overflow] Dette er lavet ud fra tabellen på side 226 og opgave C.25.
 69    \begin{itemize}
 70    \item Hvis begge input er positive og output er negativt vil carry ud af
 71          den sidste 1-bit ALU være 0 mens Cin vil være 1. Dette er fordi både
 72          både $a$ og $b$ i den sidste ALU vil være 0. For at output skal være
 73          negativt, skal Cin altså være sat, men Cout vil ikke kunne blive sat.
 74    \item Hvis begge inputs er negative og output er positivt, vil carry ud af
 75          den sidste 1-bit ALU være 1, men Cin vil være 0. Dette er fordi både
 76          $a$ og $b$ er sat i den sidste ALU. Hvis output skal være positivt
 77          vil det være fordi Cout er 1 og der ikke er kommet noget fra Cin.
 78    \end{itemize}
 79\end{description}
 80
 81Vi har ikke lavet Carry-Lookahead funktionalitet, da det ikke kan betale sig
 82for blot fire bits.
 83
 84\section{Enkeltcyklusarkitektur}
 85
 86\subsection{Extender}
 87Vi har lavet et extenderkomponent, som kan både sign- og zero-extende.
 88
 89Vi har gjort det ved at have to konstanter på hhv. $0xffff$ og $0x0000$. Disse
 90er forbundet til en multiplexor, hvor vi vælger den rigtige konstant til at
 91sætte foran inputtet afhængig af to ting:
 92
 93\begin{itemize}
 94\item Hvis kontrolbitten er sat til $1$ skal der 0-forlænges. Vi vælger
 95      derfor 0-konstanten.
 96\item Hvis ikke kigger vi på tegn-bitten i inputtet og vælger udfra den.
 97\end{itemize}
 98
 99Dette gøres med en OR-gate, hvor fortegnet fra input er negeret.
100
101\begin{figure}[htbp]
102    \centering
103    \includegraphics[width=\textwidth]{Extender.png}
104    \caption{Kredslønsdiagram for extenderokmponenten.}
105    \label{Extender}
106\end{figure}
107
108
109\subsection{Control}
110
111Control-enheden er implementeret ved hjælp af en PLA, en sandhedstabel for
112PLAen kan se i tabel \ref{control}.
113
114\begin{table}[htbp]
115    \centering
116    \caption{Sandhedstabel for control-enheden}
117    \begin{tabular}{l c c c c c c c c c c c c c c c c c}
118    \toprule
119     {\bf Instruktion} & \multicolumn{6}{c}{\bf{Input}} &  & \multicolumn{10}{c}{\bf{Output}} \\
120     \cmidrule(r){1-1} \cmidrule(r){2-7} \cmidrule(r){9-18} 
121            & & & & & &  &   &   &   &   &   &   &   &   &   & \\
122            & & & & & &  &  & \multirow{3}{2mm}{\begin{sideways}\parbox{15mm}{RegDest}\end{sideways}} &
123                      \multirow{3}{2mm}{\begin{sideways}\parbox{15mm}{Branch}\end{sideways}} &
124                      \multirow{3}{2mm}{\begin{sideways}\parbox{15mm}{MemRead}\end{sideways}} &
125                      \multirow{3}{2mm}{\begin{sideways}\parbox{15mm}{MemToReg}\end{sideways}} &
126                      \multirow{3}{2mm}{\begin{sideways}\parbox{15mm}{ALUOp 1}\end{sideways}} &
127                      \multirow{3}{2mm}{\begin{sideways}\parbox{15mm}{ALUOp 0}\end{sideways}} &
128                      \multirow{3}{2mm}{\begin{sideways}\parbox{15mm}{MemWrite}\end{sideways}} &
129                      \multirow{3}{2mm}{\begin{sideways}\parbox{15mm}{ALUsrc}\end{sideways}} &
130                      \multirow{3}{2mm}{\begin{sideways}\parbox{15mm}{RegWrite}\end{sideways}} &
131                      \multirow{3}{2mm}{\begin{sideways}\parbox{15mm}{Extend}\end{sideways}} \\
132           & & & & & & &   &   &   &   &   &   &   &   &   & \\
133           & & & & & & &   &   &   &   &   &   &   &   &   & \\
134           & & & & & & &   &   &   &   &   &   &   &   &   & \\
135     \midrule
136           & 5 & 4 & 3 & 2 & 1 & 0 &   & 9 & 8 & 7 & 6 & 5 & 4 & 3 & 2 & 1 & 0\\
137     \midrule
138    R-type & 0 & 0 & 0 & 0 & 0 & 0 &   & 1 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 1 & 0\\
139    addiu  & 0 & 0 & 1 & 0 & 0 & 1 &   & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 1 & 1 & 0\\
140    andi   & 0 & 0 & 1 & 1 & 0 & 0 &   & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 1 & 1 & 1\\
141    ori    & 0 & 0 & 1 & 1 & 0 & 1 &   & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 1 & 1 & 1\\
142    slti   & 0 & 0 & 1 & 0 & 1 & 0 &   & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 1 & 1 & 0\\
143    beq    & 0 & 0 & 0 & 1 & 0 & 0 &   & 0 & 1 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0\\
144    sw     & 1 & 0 & 1 & 0 & 1 & 1 &   & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 1 & 0 & 0\\
145    lw     & 1 & 0 & 0 & 0 & 1 & 1 &   & 0 & 0 & 1 & 1 & 0 & 0 & 0 & l & 1 & 0\\
146    \bottomrule
147    \end{tabular}
148    \label{control}
149\end{table}
150
151\begin{itemize}
152\item {\bf RegDest} Bestemmer hvilket register der skal skrives til, hvis den
153ikke er sat bliver der skrevet til registret med adressen rt (bits 16-20), hvis
154den er sat bliver der skrevet til registet med adressen rd (bits 11-15). Denne
155er sat hvis der er tale om en I-type instruktion, hvor bits 11-15 er en del af
156immediate.
157\item {\bf Branch} Bestemmer om vi skal opdatere vores PC\footnote{Program
158                   Counter} med værdien vi beregner ud fra immediate (er kun
159                   sat ved \mono{beq}).
160\item {\bf MemRead} Angiver om der skal læses fra hukommelsen. Denne er kun sat
161                    hvis det er en \mono{lw} operation.
162\item {\bf MemToReg} Bestemmer om det er resultatet fra ALU'en eller fra
163                     hukommelsen der skal skrives til registeret. Denne er sat
164                     ved \mono{lw}.
165\item {\bf ALUOp} Bruges i ALU control. Se sektion \ref{sec:alu_control}.
166\item {\bf MemWrite} Angiver om der skal skrives til hukommelsen. Denne er sat
167                     i \mono{sw}.
168\item {\bf ALUsrc} Bestemmer om ALUen skal bruge outputtet fra registret eller
169bruge den forlængede immediate (bruges til I-type operationer).
170\item {\bf RegWrite} Sætter write enable på register banken.
171\item {\bf Extend} Bestemmer om Extenderen skal forlænge med nul eller
172                   fortegnet.
173
174\end{itemize}
175
176Vi har ikke brugt nogle X'er i vores PLA, men dette skyldes, at vi kun har
177implementeret en delmængde af MIPS, og de ville gøre det sværre at udvide med
178flere instruktioner.
179
180\subsection{ALU og immediate control}\label{sec:alu_control}
181ALU control'en er ligeledes opbygget med en PLA. Den tager yderligere et ekstra
182input. Vi har nemlig en ekstra control, der laver en I-type OpCode om til en
183instruction der passer til denne operation. f.eks. bliver OpCode $001001_2$
184svarende til \mono{addiu} lavet om til $10100001_2$ svarende til \mono{addu}.
185
186Denne kode fra vores Immediate PLA bliver brugt, hvis den ikke er $0$.
187
188Vores PLA for ALU kontrollen er sat op som set i tabel \ref{ALU-control}.
189
190\begin{figure}[htbp]
191    \centering
192    \includegraphics[width=\textwidth]{ALUControl.png}
193    \caption{Kredsløbsdiagram for ALU control.}
194    \label{ALUControl}
195\end{figure}
196
197\begin{table}[htbp]
198    \centering
199    \caption{Sandhedstabel for ALU control-enheden}
200    \begin{tabular}{l c c c c c c c c c c c c c}
201    \toprule
202    {\bf Instruktion} & \multicolumn{8}{c}{\bf Input} & & \multicolumn{4}{c}{\bf Output}\\
203    \cmidrule(r){1-1} \cmidrule(r){2-9} \cmidrule(r){11-14}
204                  & 7 & 6 & 5 & 4 & 3 & 2 & 1 & 0 &   & 3 & 2 & 1 & 0 \\ 
205    \midrule
206    {\mono sw/lw} & 0 & 0 & x & x & x & x & x & x &   & 0 & 0 & 1 & 0 \\
207    {\mono beq}   & 0 & 1 & x & x & x & x & x & x &   & 0 & 1 & 1 & 0 \\
208    {\mono addu}  & 1 & 0 & 1 & 0 & 0 & 0 & 0 & 1 &   & 0 & 0 & 1 & 0 \\
209    {\mono sub}   & 1 & 0 & 1 & 0 & 0 & 0 & 1 & 1 &   & 0 & 1 & 1 & 0 \\
210    {\mono and}   & 1 & 0 & 1 & 0 & 0 & 1 & 0 & 0 &   & 0 & 0 & 0 & 0 \\
211    {\mono or}    & 1 & 0 & 1 & 0 & 0 & 1 & 0 & 1 &   & 0 & 0 & 0 & 1 \\
212    {\mono slt}   & 1 & 0 & 1 & 0 & 0 & 1 & 1 & 0 &   & 0 & 1 & 1 & 1 \\
213    \bottomrule
214    \end{tabular}
215    \label{ALU-control}
216\end{table}
217
218
219\subsection{Generelt}
220
221\begin{description}
222\item [Function Pointer] Denne er implementeret med et enkelt register, der
223    bliver opdateret hver gang clocken bliver triggered. Den bliver opdateret
224    med en af to værdier. Enten lægges der fire til, så vi når til næste
225    instruktion. Ellers opdateres den med værdien fra vores \mono{branch}
226    beregning. Dette kun hvis kontrolsignalet er sat.
227\item [Register 0] Vi har lavet en anordning der gør, at man ikke kan skrive
228    til register 0. Vi gør dette ved kun at sætte \mono{WE} på registerbanken,
229    hvis \mono{rW} er forskellig fra $0$. Dette har vi opnået med en AND-gate
230    på \mono{rW} og \mono{RegWrite}.
231\item [Splitters] Vi har brugt en masse splitters til at splitte de forskellige
232    busser op. Dette indebære også splittere med ét output, som er svære at se
233    i Logisim.
234\item [Subcircuits] For at gøre vores diagram mere overskueligt har vi valgt at
235    putte de mest komplicerede og pladskrævende delkredsløb ind i deres egne
236    kredsløb. Dette indebærer bl.a. vores kontrol-PLA'er og vores extender.
237\item [Tunnels] For at gøre diagrammet yderligere overskueligt har vi brugt
238    tuneller til forskellige signaler. Dette er bl.a. clocken og to af
239    signalerne fra vores Control.
240\end{description}
241
242
243\subsection{Testprogram}
244Det testprogram vi har indlæst i vores kredsløb er en simpel fibonacci tal
245beregner. Den fungerer ved at gemme de to foregående tal i registrene
246\mono{\$t0} og \mono{\$t1}. Den lægger dem da sammen i register \mono{\$t3} og
247skriver det i hukommelsen. For at lave et loop har vi brugt \mono{beq}, hvor vi
248tester om $0=0$ (da vi ikke har en \mono{jump} instruktion). Yderligere har vi
249et register, \mono{\$t4}, der angiver hvor mange tal, der skal beregnes.
250
251Vi havde et andet testprogram, der testede \mono{slt} og \mono{lw}, men vi kan
252ikke have indlæst to programmer i kredsløbsfilen.
253
254
255\end{document}
256