\documentclass{article}
\usepackage[swedish]{babel}
\usepackage{fullpage}
\usepackage[utf8]{inputenc}
\author{Erik Lindström \and Emil Nielsen \and Elisabeth Svensson}
\title{TSEA43: Mikrodator}
\begin{document}
\maketitle
\pagebreak
\tableofcontents
\pagebreak
\section{Inledning}
Denna rapport behandlar bygget av en mikroprogrammerad dator.
Målet med datorn är att kunna exekvera enklare program skrivna
 i assembler. Stöd för in- och utdata ska finnas via en
 seriell koppling mot till exempel en terminal. Bygget
 av datorn är huvudmomentet I kursen Digital konstruktion,
TSEA43, som ges av ISY vid LiTH.


\section{Apparaten}
Mikrodatorn kan användas till att exekvera enkla till mer avancerade program skrivna i assembler. Vid uppstart exekveras det första programmet som är placerat i datorns primärminne. Programmet vi skrivit läser in ett tecken från en terminal som är ansluten via seriekommunikationsenheten (UART), adderar en etta och skickar sedan tillbaka detta tecknet till terminalen. Detta kan liknas vid ett enkelt caesarchiffer med statisk förskjutning i ett steg. Dock bör påpekas att apparaten ej kan förskjuta i motsatt riktning utan att det endast är ett envägschiffer som utförs. Operationen utförs utan att vagnretur måste skickas och datorn skickar omedelbart tillbaka resultatet.

Apparatens tilltänkta syfte är att hantera addition samt subtraktion av positiva heltal inom det slutna intervallet 0-99. Detta är vad vi har designat apparaten efter, men den är i själva verket generell kan användas till mycket mer. Före användning av apparaten måste terminalen datorn ansluts till konfigureras för att arbeta på hastigheten 115200 bits/sek.

\section{Teori}
Vi hade en dröm. En vision.!!1

\subsection{Programmet}
De tecken som läses in via UART:ens RS232-anslutning skickas i ASCII-format. Apparaten tolkar talen som godtyckliga bitströmmar av längd 8. Apparaten adderar talet 1 (ett) till bitströmmen och skickar omedelbart tillbaka talet via seriekommunikationsenheten.

\subsection{Skriv- och läsminne}
Minnet är uppdelat i två delar, ett läsminne och ett skrivminne. Läsminnet är bra för data som är fixt i apparaten och aldrig behöver användas. RAM-minnet är givetvis bra att ha då assemblerprogrammeraren enbart har en ackumulator till sitt förfogande. På så vis kan programmeraren ändå lagra undan data temporärt alternativt skriva självmodifierande kod.

\subsection{Adressrymd}
Ordlängden i apparaten är 8 bitar. Adressrymden är 16 bitar, varav 13 används. Adressregistret är uppdelat i två delar om 8 bitar vardera, för att kunna ladda in adresser från vår 8 bitar breda buss. Genom att använda HIGHLOW-signalen väljer vi vilken av dessa två som ska kopplas mot bussen. 

\subsection{RS232}
Kommunikationen sker via en RS232-anslutning mot en UART. UART:en är ansluten till datorns buss. Denna hårdvara har vi inte framställt själva utan den finns given på databladsservern Vanheden och är skriven av vår handledare Anders Nilsson.

\subsection{Instruktionsuppsättning}
I tabell \ref{tab:instruktioner} återges de instruktioner vår dator hanterar,
inklusive adressmoder för dessa.
\begin{table}
\centering
\begin{tabular}{r|l}
Instruktion & Adressmod \\
\hline
IN/OUT & Underförstådd\\
LDA & Absolut\\
STA & Absolut\\
CMP & Omedelbar\\
ADD & Omedelbar, absolut\\
SUB & Omedelbar, absolut\\
BRA & Omedelbar\\
BNE & Omedelbar\\
AND & Omedelbar\\
ROL & Underförstådd
\end{tabular}
\caption{Tabell över assemblerinstruktioner.}\label{tab:instruktioner}
\end{table}

\section{Hårdvaran}
Vi valde att blanda hårdvara och mjukvara i vår apparat. I bild ?? skildras hårdvaran i ett blockschema. Hårdvaran är uppdelad i huvudsakligen tre delar.


Minnesdelen (återges i figur ??) innehåller en styrenhet för minnesmodulerna som slussar ut rätt saker på bussen från minnet, baserat på om läsning önskas från RAM- eller ROM-minnet. Valet av dessa baseras på vilken adress som adressregistret innehåller. Minneskapslarnas in- \& utgångar är direktkopplade till minnesenheten och funktionen kan liknas vid en multiplexer. Styrenheten i minnesdelen hanterar även adressregistret samt programräknaren.

Mikromaskinen som vi ser i samma figur skickar ut styrsignaler tillsamtliga enheter som bestämmer vad skickas ut och läsas in till respektive från bussen. Den gör detta genom att läsa från mikrominnet som ligger internt i enheten. Vid instruktionshämtning utförs en hämtfas som hämtar in hela instruktionen, inklusive operander, vilken baseras på den aktuella adressmoden hos instruktionen som hämtas in. 

Den sista delen av mikrodatorn är den aritmetiska enheten, ALU:n, som utför beräkningar. Till denna enhet går ett par styrsignaler från mikromaskinen som avgör vilken sorts aritmetisk operation som skall äga rum. Bland dessa finns exempelvis möjlighet att bara ladda ackumulatorn, som är ALU:ns interna register, med innehåll i bussen, eller att tömma ackumulatorn på innehåll. Aritmetiken som finns att tillgå är att addera samt subtrahera värdet på databussen till ackumulatorns innehåll.

Börja med ett översiktligt blockschema, gå vidare till mera detaljerade blockschemor.
Beskriv sedan hur de olika blocken fungerar. Tänk på läsbarheten och växla mellan figurer och text.
Den här typen av text är ganska "grafisk", då nästan varje mening syftar in i en figur. Var därför noga 
med att text och figurer stämmer överens.

\section{Slutsatser}
De senaste tre dagarna har vi bott i Muxen och jobbat på högvarv utan sömn. Kanske borde vi ha planerat vårt arbete något bättre för att slippa obekväm arbetstid och hög stressnivå.

Kursen har varit oerhört lärorik och har givit förståelse för sammanhanget mellan mikrodator- och assemblermodell  i en dator och god vana för arbete med detta.


\appendix
\section{VHDL-kod}



\section{Kopplingsschema}
\begin{figure}
  \centering
  \includegraphics{schema2}
  \caption{Blockschema till mikrodatorn.}
\end{figure}

\begin{table}


\end{table}

\section{Övriga listor}
\end{document}
