isa cmp: init
authorBernhard Urban <lewurm@gmail.com>
Wed, 13 Oct 2010 17:25:32 +0000 (19:25 +0200)
committerBernhard Urban <lewurm@gmail.com>
Wed, 13 Oct 2010 17:25:32 +0000 (19:25 +0200)
1_isacmp/.gitignore [new file with mode: 0644]
1_isacmp/8051.tex [new file with mode: 0644]
1_isacmp/Makefile [new file with mode: 0644]
1_isacmp/arm.tex [new file with mode: 0644]
1_isacmp/avr.tex [new file with mode: 0644]
1_isacmp/common.sty [new file with mode: 0644]
1_isacmp/isa_cmp.tex [new file with mode: 0644]
1_isacmp/ppc.tex [new file with mode: 0644]
1_isacmp/spear2.tex [new file with mode: 0644]

diff --git a/1_isacmp/.gitignore b/1_isacmp/.gitignore
new file mode 100644 (file)
index 0000000..8454fbb
--- /dev/null
@@ -0,0 +1,11 @@
+*.aux
+*.log
+*.dvi
+*.pdf
+*.toc
+*.out
+*.ps
+*.bbl
+*.blg
+*.lof
+*.lot
diff --git a/1_isacmp/8051.tex b/1_isacmp/8051.tex
new file mode 100644 (file)
index 0000000..5c9c158
--- /dev/null
@@ -0,0 +1 @@
+\section{8051}
diff --git a/1_isacmp/Makefile b/1_isacmp/Makefile
new file mode 100644 (file)
index 0000000..64419cb
--- /dev/null
@@ -0,0 +1,19 @@
+SHELL := bash
+
+FILES = isa_cmp.tex 8051.tex arm.tex avr.tex common.sty Makefile ppc.tex spear2.tex
+TARGET = isa_cmp.pdf
+
+PDFGEN = pdflatex --jobname=$(basename $@) $<
+
+all: $(TARGET)
+
+$(TARGET): $(FILES)
+       $(PDFGEN)
+       $(PDFGEN)
+       $(PDFGEN)
+
+
+.PHONY: clean html
+
+clean:
+       rm -fr *.aux *.log *.dvi *.pdf *.toc *.out
diff --git a/1_isacmp/arm.tex b/1_isacmp/arm.tex
new file mode 100644 (file)
index 0000000..419a95b
--- /dev/null
@@ -0,0 +1 @@
+\section{ARM}
diff --git a/1_isacmp/avr.tex b/1_isacmp/avr.tex
new file mode 100644 (file)
index 0000000..4ce9ec1
--- /dev/null
@@ -0,0 +1 @@
+\section{AVR}
diff --git a/1_isacmp/common.sty b/1_isacmp/common.sty
new file mode 100644 (file)
index 0000000..37ddffb
--- /dev/null
@@ -0,0 +1,24 @@
+\usepackage{graphicx}
+\usepackage{amsmath}
+\usepackage{hyperref}
+\usepackage{url}
+\usepackage[latin1]{inputenc}
+\usepackage{listings}
+
+\newcommand{\insertemail}[1]{\href{mailto:#1}{#1}}
+
+\newcommand{\longcomment}[1]{}
+
+\newcommand{\addauthor}[3]{
+       #1 {\small (#2)}\\{\small\insertemail{#3}}
+}
+
+\newcommand{\allauthors}{
+       \author{
+               \addauthor{Markus Hofst\"atter}{07xxxxx}{markus.manrow@gmx.at}\and
+               \addauthor{Martin Perner}{07xxxxx}{martin@perner.cc}\and
+               \addauthor{Stefan Rebernig}{07xxxxx}{stefan.rebernig@gmail.com}\and
+               \addauthor{Manfred Schwarz}{0725898}{e0725898@student.tuwien.ac.at}\and
+               \addauthor{Bernhard Urban}{0725771}{lewurm@gmail.com}
+       }
+}
diff --git a/1_isacmp/isa_cmp.tex b/1_isacmp/isa_cmp.tex
new file mode 100644 (file)
index 0000000..a4dce43
--- /dev/null
@@ -0,0 +1,22 @@
+\documentclass[a4paper,12pt]{scrartcl}
+\usepackage{common}
+\begin{document}
+\allauthors
+
+\title{Instruction Set Comparison}
+\titlehead{Vienna University of Technology \hfill WS~2010}
+\subject{Computer Architecture Labor\"ubung}
+\date{\today}
+\publishers{Gruppe 1}
+
+\maketitle
+\tableofcontents
+\newpage
+
+\input{avr}
+\input{arm}
+\input{ppc}
+\input{8051}
+\input{spear2}
+
+\end{document}
diff --git a/1_isacmp/ppc.tex b/1_isacmp/ppc.tex
new file mode 100644 (file)
index 0000000..79cd18d
--- /dev/null
@@ -0,0 +1 @@
+\section{PowerPC}
diff --git a/1_isacmp/spear2.tex b/1_isacmp/spear2.tex
new file mode 100644 (file)
index 0000000..0b453b6
--- /dev/null
@@ -0,0 +1,60 @@
+\section{Spear2}\r
+Die Spear2-Architektur wurde an der TU-Wien entwickelt und versuchte dadurch ein relativ einfaches\r
+Design ohne Lizenzkosten verfügbar zu machen. Daher fällt der Kern der Architektur\r
+relativ simple als RISC-Architektur aus.\r
+\subsection{Einsatzgebiet}\r
+Die Spear2-Architektur beschreibt einen Softcore-Prozessor, d.h. dieser kann den eigenen Bedürfnissen\r
+angepasst werden. Einerseits kann zwischen einer 16/32-Bit Architektur gewählt werden, andererseits besteht\r
+die Möglichkeit eigene oder dritte Module an den internen oder AMBA-Bus anzuschließen. Somit sind\r
+viele der in der GRLIB enthaltenen Module kompatibel.\r
+Der Grund warum ARM heutzutage in vielen ES eingesetzt wird, besteht in der Flexibilität. Oftmals\r
+werden einfach nicht viele I/O-Pins oder eben rechenleistung benötigt, wie sie Hardcore-Architekturen\r
+anbieten. Hier versucht sich die Spear2-Architektur ebenfalls einzureihen. Somit bleibt dem\r
+Entwickler die Wahl, welchen Algorithmus er in Hardware und welchen Software implementieren möchte.\r
+\subsection{Conditional Instructions und Jumps}\r
+Alle Abhängigkeiten werden von der Hardware überprüft und entsprechend behandelt. D.h.\r
+im ISA-Level müssen keine Abhängigkeiten berücksichtigt werden. Im Falle von CI wird entweder\r
+ein NOP-eingefügt (bzw. Ctrl-Signale deaktiviert) oder die Instruktion wird normal behandelt.\r
+Alle Conditional- und Jump Tests passiern in der Decode-Stufe und die eigentliche Ausführung wird in der Exec-Stage\r
+abgeschlossen, wobei Ctrl-Signale an die Decode-Stufe zurückgeführt werden. Es wurden keine\r
+Stalls oder ähnliches eingeführt, damit die Programm Execution\r
+\subsection{Ziele}\r
+Das Ziel dieser Architektur besteht darin eine große Flexibilität zu bieten. Dadurch kann die Spear2-Architektur\r
+dem Einsatzgebiet angepasst werden. D.h. falls notwendig kann z.B. ein FFT oder eine Multiplikation der Architektur\r
+hinzugefügt werden um mehr Performance zu erreichen. Falls Schnittstellen an die Umgebung fehlen, können\r
+diese als Erweiterungsmodule implementiert werden. Somit kann der Spear2 relativ klein gehalten werden (Cost, Performance)\r
+und eine höhere Taktrate erzielen als eine Hardcore-Architektur. Außerdem ist SW leichter zu warten und verstehen, dies\r
+wiederrum verkürzt die Etwicklungszeit. Dennoch wird ein Fixedfunction-Core bessere Ergebnisse erzielen, wenn sich\r
+die Funktionalität des Softcore-Prozessors nicht mehr von diesem unterscheidet.\r
+Da aber die ISA relativ begrenzt ist (add, sub, comp, load, store,...), wird die Programmgröße (fixed OP-Code) natürlich\r
+bei komplexen Operationen wachsen. Dennoch ist der OP-Code mit 16-Bit relativ klein.\r
+\r
+Damit auf Extension-Module oder Speicher schnell zugegriffen werden kann (Stackoperation), gibt es sogenannte Framepointer.\r
+Dieser lädt ein Wort von der dort hinterlegten Adresse und zählt ein Offset hinzu. Somit können wortweise Zugriffe\r
+innerhalb von einem Zyklus erfolgen.\r
+\subsection{Wünsche}\r
+Prinzipiell ist diese ISA eine sehr kompakte und elegante Form einer RISC-Architektur, dennoch wäre z.B. ein dedizierter Stackpointer\r
+wünschenswert gewesen, da bei verschachtelten Subroutine-Calls die Software die Rücksprungadresse speichern muss. Für\r
+einen Stackähnlichen Betrieb kann natürlich ein Framepointer herangezogen werden. Dennoch wächst dadurch der Code.\r
+\subsection{Listing}\r
+Register r14 wird für die Rücksprungadresse verwendet, r0 für den Rückgabewert und r1-r4 für die Argumente.\r
+r5-r8 wird für temporäre Register verwendet (Caller-Save).\r
+\begin{lstlisting}[caption=Spear2 Code]{Spear2-Code}\r
+ldli r0, 0   #sum=0\r
+ldli r5,-20  #Framepointer X\r
+ldli r6, 0   #i=0\r
+stw r2, r5   #fpx -> &arr[0]\r
+\r
+cmp_eq r1, r6 #for\r
+jmpi_ct, 4    #i<len\r
+\r
+ldfpx r7,0   #arr[i]\r
+add r0, r7   #sum+=arr[i]\r
+addi r6, 1   #i++\r
+\r
+jmpi -5      #for end\r
+rts\r
+\end{lstlisting}\r
+Man erkennt, dass innerhalb der Schleife 6 Instruktionen ausgeführt werden (inkl. Bedingungen). Ein Jump bewirkt\r
+einen Flush in der Decode-Stufe. Also wird jump zu einem jump+nop. Also solange die Schleife exekutiert wird, ergibt sich eine\r
+Laufzeit von 7 Zyklen.\r