26 |
\and% |
\and% |
27 |
{\large Tomasz Poradowski} % |
{\large Tomasz Poradowski} % |
28 |
{\normalsize {\tt \(<\)batonik@batonik.net\(>\)}}} |
{\normalsize {\tt \(<\)batonik@batonik.net\(>\)}}} |
29 |
\title{{\Large Dokumentacja projektu} \\ \vspace{2mm} {\Huge SmArc} } |
\title{{\Large Dokumentacja projektu} \\ \vspace{2mm} {\Huge SmArc}} |
30 |
|
|
31 |
\date{\sf Politechnika Wrocławska, Wrocław, (c) 2002-2003} |
|
32 |
|
\date{ {\small {\tt http://savannah.gnu.org/projects/SmArc}} \\\vspace{1mm} |
33 |
|
{\sf Politechnika Wrocławska, Wrocław, (c) 2002-2003 }} |
34 |
\maketitle |
\maketitle |
35 |
|
|
36 |
\newcommand{\spasm}{{\it spasm}} |
\newcommand{\spasm}{{\it spasm}} |
39 |
\newcommand{\smarcgui}{{\it smarcgui}} |
\newcommand{\smarcgui}{{\it smarcgui}} |
40 |
\newcommand{\SmArc}{{\bf SmArc}} |
\newcommand{\SmArc}{{\bf SmArc}} |
41 |
\newcommand{\SmArcAs}{{\bf SmArcAs}} |
\newcommand{\SmArcAs}{{\bf SmArcAs}} |
42 |
|
\newcommand{\SPARC}{{\bf SPARCv8}} |
43 |
|
|
44 |
\section{Wstęp} |
\section{Wstęp} |
45 |
\label{sec:wstep} |
\label{sec:wstep} |
46 |
|
|
47 |
Wirtualna maszyna \SmArc\ powstała jako projekt akademicki, mający na |
Wirtualna maszyna \SmArc\ powstała jako projekt akademicki, mający na |
48 |
celu bliższe poznanie architektury oraz sposobu działania procesora |
celu bliższe poznanie architektury oraz sposobu działania procesora |
49 |
SPARC. \SmArc\cite{komorowski} (od {\it Small SPARC}) zawiera jego |
\SPARC. \SmArc\cite{komorowski} (od {\it Small SPARC}) zawiera jego |
50 |
wersję uproszczoną, jednakże wiernie oddaje ona realia i większość |
wersję uproszczoną, jednakże wiernie oddaje ona realia i większość |
51 |
aspektów projektowych oraz technologicznych zastosowanych w oryginale |
aspektów projektowych oraz technologicznych zastosowanych w oryginale |
52 |
(więcej informacji w specyfikacji SPARCv8\cite{SPARCv8}). |
(więcej informacji w specyfikacji \SPARC\cite{SPARCv8}). |
53 |
|
|
54 |
|
|
55 |
|
|
56 |
\section{Elementy \SmArc} |
\section{Elementy \SmArc} |
60 |
znajduje się w~dalszej części): |
znajduje się w~dalszej części): |
61 |
|
|
62 |
\begin{itemize} |
\begin{itemize} |
63 |
\item \vmachine\ - wirtulana maszyna oparta na uproszczonej wersji procesora |
\item \vmachine\ - wirtualna maszyna oparta na uproszczonej wersji procesora |
64 |
SPARC |
\SPARC |
65 |
\item \spasm\ - asembler programów napisanych w języku \SmArcAs\ (uproszczonej |
\item \spasm\ - asembler programów napisanych w języku \SmArcAs\ (uproszczonej |
66 |
wersji asemblera SPARC) |
wersji asemblera \SPARC) |
67 |
\item \despasm\ - deasembler plików wykonywalnych zapisanych w formacie maszyny |
\item \despasm\ - deasembler plików wykonywalnych zapisanych w formacie maszyny |
68 |
wirtualnej \SmArc |
wirtualnej \SmArc |
69 |
\item \smarcgui\ - interfejs graficzny wirtualnej maszyny \SmArc |
\item \smarcgui\ - interfejs graficzny wirtualnej maszyny \SmArc |
70 |
\item {\it loader} - moduł służacy do wczytania plików wykonywalnych \SmArc |
\item {\it loader} - moduł służący do wczytania plików wykonywalnych \SmArc |
71 |
\item {\it examples} - przykładowe programy źródłowe w języku \SmArcAs |
\item {\it examples} - przykładowe programy źródłowe w języku \SmArcAs |
72 |
\end{itemize} |
\end{itemize} |
73 |
|
|
85 |
\label{sec:elementy:vmachine} |
\label{sec:elementy:vmachine} |
86 |
|
|
87 |
\vmachine\ jest głównym modułem projektu \SmArc. Jest to uproszczony |
\vmachine\ jest głównym modułem projektu \SmArc. Jest to uproszczony |
88 |
model procesora SPARC o klasycznej strukturze potoku 5-stopniowego. |
model procesora \SPARC\ o klasycznej strukturze potoku 5-stopniowego. |
89 |
Symuluje wykonywanie programów z~dokładnością do mikrooperacji |
Symuluje wykonywanie programów z~dokładnością do mikrooperacji |
90 |
wykonywanych w jednym cyklu zegara. \vmachine\ umożliwia zaobserwować |
wykonywanych w jednym cyklu zegara. \vmachine\ umożliwia zaobserwować |
91 |
przepływ danych we wewnętrznych rejestrach procesora, w szczególności |
przepływ danych we wewnętrznych rejestrach procesora, w szczególności |
107 |
\label{sec:elementy:spasm} |
\label{sec:elementy:spasm} |
108 |
|
|
109 |
Program \spasm\ służy do tłumaczenia plików źródłowych napisanych w |
Program \spasm\ służy do tłumaczenia plików źródłowych napisanych w |
110 |
języku \SmArcAs\ (uproszczonej wersji asemblera SPARC) do kodu wykonywalnego |
języku \SmArcAs\ (uproszczonej wersji asemblera \SPARC) do kodu wykonywalnego |
111 |
(binarnego) w formacie maszyny wirtualnej \SmArc. \spasm\ jest uruchamiany |
(binarnego) w formacie maszyny wirtualnej \SmArc. \spasm\ jest uruchamiany |
112 |
z linii poleceń: |
z linii poleceń: |
113 |
|
|
230 |
\label{sec:elementy:example} |
\label{sec:elementy:example} |
231 |
|
|
232 |
W katalogu {\it examples} zawarte zostały poglądowe programy mające na |
W katalogu {\it examples} zawarte zostały poglądowe programy mające na |
233 |
celu pokazanie jednej lub więcej właściwości procesora SPARC. Niektóre z nich |
celu pokazanie jednej lub więcej właściwości procesora \SPARC. Niektóre z nich |
234 |
to zwykłe, typowe programy testowe. |
to zwykłe, typowe programy testowe. |
235 |
|
|
236 |
\begin{itemize} |
\begin{itemize} |
237 |
\item addloop.asm - pętla wykonywana zadaną ilość razy |
\item addloop.asm - pętla wykonywana zadaną ilość razy |
238 |
\item arith.asm - instrukcje arytmetyczne |
\item arith.asm - instrukcje arytmetyczne |
239 |
\item forward.asm - demonstracja {\it forwardingu} w procesorze SPARC |
\item forward.asm - demonstracja {\it forwardingu} w procesorze \SPARC |
240 |
\item load.asm - odczyt i zapis z/do pamięci danych |
\item load.asm - odczyt i zapis z/do pamięci danych |
241 |
\item logic.asm - operacje logiczne na rejestrach |
\item logic.asm - operacje logiczne na rejestrach |
242 |
\item loop.asm - instrukcje branch |
\item loop.asm - instrukcje branch |
243 |
\item memcpy.asm - kopiowanie danych |
\item memcpy.asm - kopiowanie danych |
244 |
\item procedure.asm - instrukcja call wywołanie fragmentu programu (procedury) |
\item procedure.asm - instrukcja call wywołanie fragmentu programu (procedury) |
245 |
\item stall.asm - demonstracja wystąpienia {\it stall} w procesorze SPARC |
\item stall.asm - demonstracja wystąpienia {\it stall} w procesorze \SPARC |
246 |
\end{itemize} |
\end{itemize} |
247 |
|
|
248 |
|
|
269 |
\item {\bf WB} ({\it Write Back}) - zapis wyniku w rejestrach programowych |
\item {\bf WB} ({\it Write Back}) - zapis wyniku w rejestrach programowych |
270 |
\end{itemize} |
\end{itemize} |
271 |
|
|
272 |
Każdy stopień potoku jest wyraźnie wyodrębiony. Fazy komunikują się |
Każdy stopień potoku jest wyraźnie wyodrębniony. Fazy komunikują się |
273 |
pomiędzy sobą za pomocą dwutaktowych (master-slave) rejestrów wewnętrzych. |
pomiędzy sobą za pomocą dwutaktowych (master-slave) rejestrów wewnętrznych. |
274 |
\vmachine\ pozwala zaobserwować przepływ danych pomiędzy |
\vmachine\ pozwala zaobserwować przepływ danych pomiędzy |
275 |
fazami udostępniając wartości poniższych rejestrów. |
fazami udostępniając wartości poniższych rejestrów. |
276 |
|
|
286 |
|
|
287 |
\subsubsection{Założenia \SmArc\ i vmachine} |
\subsubsection{Założenia \SmArc\ i vmachine} |
288 |
|
|
289 |
Architektura \SmArc\cite{komorowski} w stosunku architektury SPARC została |
Architektura \SmArc\cite{komorowski} w stosunku architektury \SPARC\ została |
290 |
w celach dydaktycznych uproszczona. Zrezygnowano z implementacji |
w celach dydaktycznych uproszczona. Zrezygnowano z implementacji |
291 |
poniższych: |
poniższych: |
292 |
|
|
297 |
\item wewnętrzne rejestry procesora {\bf Y, WIM, TBR}, częściowo {\bf PSR} |
\item wewnętrzne rejestry procesora {\bf Y, WIM, TBR}, częściowo {\bf PSR} |
298 |
\end{itemize} |
\end{itemize} |
299 |
|
|
300 |
W stosunku do specyfikacji SPARCv8\cite{SPARCv8} do listy instrukcji |
W stosunku do specyfikacji \SPARC\cite{SPARCv8} do listy instrukcji |
301 |
architektury \SmArc\ nie wchodzą: |
architektury \SmArc\ nie wchodzą: |
302 |
|
|
303 |
\begin{itemize} |
\begin{itemize} |
315 |
|
|
316 |
\vmachine\ implementuje wszystkie instrukcje, jakie generuje |
\vmachine\ implementuje wszystkie instrukcje, jakie generuje |
317 |
assembler \spasm\ (opis w rozdziale \ref{sec:zalozenia:spasm}). |
assembler \spasm\ (opis w rozdziale \ref{sec:zalozenia:spasm}). |
318 |
Instrukcje zrealizowane w wirtualnej maszynie \SmArc\ są zgodne z |
Instrukcje zrealizowane w wirtualnej maszynie \vmachine\ są zgodne z |
319 |
opisem zawartym w specyfikacji SPARCv8 \cite{SPARCv8}. |
opisem zawartym w specyfikacji \SPARC\cite{SPARCv8}. |
320 |
|
|
321 |
|
\vspace{1mm} |
322 |
|
|
323 |
|
Warto zwrócić uwagę także na pewne różnice (pomijając wymienione |
324 |
|
wyżej ograniczenia) pomiędzy specyfikacjami \SPARC\cite{SPARCv8} |
325 |
|
a \SmArc\cite{komorowski}. Podczas realizacji projektu postanowiliśmy |
326 |
|
w tych przypadkach zastosować się do specyfikacji \SPARC. |
327 |
|
\begin{itemize} |
328 |
|
\item w architekturze \SmArc\ odwołania do pamięci o wielkości bajta/półsłowa |
329 |
|
odnoszą się do najmniej znaczącego bajta/półsłowa danego słowa, |
330 |
|
natomiast w architekturze \SPARC\ można odwołać się do |
331 |
|
dowolnego bajta/półsłowa. Moduł \vmachine\ stosuje się |
332 |
|
do drugiej specyfikacji. |
333 |
|
\item w architekturze \SmArc\ rozkazy przesunięć bitowych mają składnie: |
334 |
|
\begin{center} |
335 |
|
{\it shiftop}\verb! r[src1], imm13, r[dst]! |
336 |
|
\end{center} |
337 |
|
gdzie: |
338 |
|
\[ R[dst]\, \leftarrow\, imm13\;\; \mathit{shiftop}\;\; R[src1] \] |
339 |
|
Natomiast w specyfikacji \SPARC: |
340 |
|
\begin{center} |
341 |
|
{\it shiftop}\verb! r[src1], r[src2]/imm13, r[dst]! |
342 |
|
\end{center} |
343 |
|
gdzie: |
344 |
|
\[ R[dst]\, \leftarrow\, R[src1]\;\; \mathit{shiftop}\;\; R[src2]/imm13 \] |
345 |
|
Różnica polega na zamianie znaczenia poszczególnych argumentów |
346 |
|
źródłowych oraz na zezwoleniu na użycie rejestru w drugim |
347 |
|
argumencie. Moduł \vmachine\ stosuje drugą konwencję. |
348 |
|
\end{itemize} |
349 |
|
|
350 |
|
\vspace{1mm} |
351 |
|
|
352 |
\noindent Inne założenia symulatora \vmachine: |
\noindent Inne założenia symulatora \vmachine: |
353 |
\begin{itemize} |
\begin{itemize} |
354 |
\item 32 okien rejestrów, czyli w sumie 520 |
\item 32 okien rejestrów, czyli w sumie 520 |
355 |
\item separacja pamięć na dane i instrukcje. Obie posiadają osobne |
\item separacja pamięć na dane i instrukcje (Harward). |
356 |
przestrznie adresowe. Pamięć instrukcji |
Obie posiadają osobne przestrzenie adresowe. Pamięć instrukcji |
357 |
jest tylko do odczytu (poprzez rejestr {\bf PC}), natomiast |
jest tylko do odczytu (poprzez rejestr {\bf PC}), natomiast |
358 |
dostęp danych jest poprzez instrukcje typu {\it load} i {\it store}. |
dostęp danych jest poprzez instrukcje typu {\it load} |
359 |
|
i {\it store}. |
360 |
\item odwołania do pamięci są zawsze trafione (nie obserwujemy procesu |
\item odwołania do pamięci są zawsze trafione (nie obserwujemy procesu |
361 |
zapełniania pamięci cache i związanym z tym wstrzymaniem potoku) |
zapełniania pamięci cache i związanym z tym wstrzymaniem potoku) |
362 |
\item 256Kb pamięci danych |
\item 256Kb pamięci danych oraz 256Kb pamięci instrukcji |
363 |
\item 256Kb pamięci instrukcji |
\item słowo rozkazowe o wartości 0 zatrzymuje symulator |
|
\item słowo rozkazowe o kodzie o wartości 0 zatrzymuje symulator |
|
364 |
(po zakończeniu działania instrukcji znajdujących się już w potoku) |
(po zakończeniu działania instrukcji znajdujących się już w potoku) |
365 |
\end{itemize} |
\end{itemize} |
366 |
|
|
454 |
|
|
455 |
Dokładniejsze informacje dotyczące składni, formatu słów |
Dokładniejsze informacje dotyczące składni, formatu słów |
456 |
rozkazowych i kodowania rozkazów można znaleźć w specyfikacji |
rozkazowych i kodowania rozkazów można znaleźć w specyfikacji |
457 |
SPARCv8 \cite{SPARCv8}. Tam również znajdują się rozkazy procesora |
\SPARC\cite{SPARCv8}. Tam również znajdują się rozkazy procesora |
458 |
SPARC, których implementacja \SmArc\ nie obejmuje (inne rozkazy |
\SPARC, których implementacja \SmArc\ nie obejmuje (inne rozkazy |
459 |
arytmetyczne, rozkazy korzystające z koprocesora, itp.) |
arytmetyczne, rozkazy korzystające z koprocesora, itp.) |
460 |
|
|
461 |
|
|
535 |
\item małe i duże litery są rozróżniane za wyjątkiem nazw symboli specjalnych, |
\item małe i duże litery są rozróżniane za wyjątkiem nazw symboli specjalnych, |
536 |
\item rozkazy są pisane wyłącznie małymi literami, |
\item rozkazy są pisane wyłącznie małymi literami, |
537 |
\item symbole specjalne zaczynają się od znaku procentu ({\tt \%}) |
\item symbole specjalne zaczynają się od znaku procentu ({\tt \%}) |
538 |
\item etykiety i nazwy zaczynaja się od litery; po etykiecie musi być |
\item etykiety i nazwy zaczynają się od litery; po etykiecie musi być |
539 |
dwukropek (:). |
dwukropek (:). |
540 |
\item liczby mogą być w zapisie dziesiętnym lub szesnastkowym; w zapisie |
\item liczby mogą być w zapisie dziesiętnym lub szesnastkowym; w zapisie |
541 |
szesnastkowym liczby muszą być poprzedzone znakiem zera i litery 'x' |
szesnastkowym liczby muszą być poprzedzone znakiem zera i litery 'x' |
612 |
\item gtk-devel, glade-devel |
\item gtk-devel, glade-devel |
613 |
\end{itemize} |
\end{itemize} |
614 |
|
|
615 |
Procedurę budowania \SmArc\ można wykonać na przykład w poniższy sposób: |
|
616 |
|
\noindent Procedurę budowania \SmArc\ można wykonać |
617 |
|
na przykład w poniższy sposób: |
618 |
|
|
619 |
\begin{verbatim} |
\begin{verbatim} |
620 |
$ tar xzf smarc-XX.tar.gz |
$ tar xzf smarc-XX.tar.gz |