Praktische Übungen zu Computertechnik 2. Versuchsprotokoll

Ähnliche Dokumente
Praktische Übungen zu Computertechnik 2. Versuchsprotokoll

Praktische Übungen zu Computertechnik 2. Versuchsprotokoll

Technische Informatik I - HS 18

Übungsblatt 7 Implementierung von Programmsteuerbefehlen in einer Befehlspipeline Abgabefrist: Mittwoch , 14:00 Uhr

Arithmetik, Register und Speicherzugriff. Grundlagen der Rechnerarchitektur Assembler 9

Experimentelle Hardwareprojekte. Projekt A-2: Befehlszähler eines RISC-Prozessors. Volker Dörsing 20. März 2014

Praktikum Grundlagen von Hardwaresystemen Sommersemester Versuch 6: Computergrafik und Sprites

Assembler am Beispiel der MIPS Architektur

Praktikum Grundlagen von Hardwaresystemen Sommersemester Versuch 6: Computergrafik und Sprites

Datenpfad einer einfachen MIPS CPU

Darstellung von Instruktionen. Grundlagen der Rechnerarchitektur Assembler 21

Musterlösungen Technische Informatik 2 (T2) Prof. Dr.-Ing. D. P. F. Möller

Grundlagen der Technischen Informatik

Computersysteme. Fragestunde

Lösungsvorschlag 10. Übung Technische Grundlagen der Informatik II Sommersemester 2009

Übungsblatt 6. Implementierung einer Befehlspipeline

Datenpfad einer einfachen MIPS CPU

Steuerwerk einer CPU. Einführung in die Technische Informatik Falko Dressler, Stefan Podlipnig Universität Innsbruck

Computersysteme. Serie 11

D.5 Versuchsreihe 5: Arithmetisch-Logische Einheit

Prinzipieller Aufbau und Funktionsweise eines Prozessors

Versuchsreihe 7. Registerfile. Registerfile + Programmzähler. HaPra Versuchsreihe 7 - Registerfile + Programmzähler. 32 Register à 32 Bit

13.2 Übergang zur realen Maschine

Grundlagen der Rechnerarchitektur

Zusammenfassung: Grundlagen der Informatik Zahlensysteme, b-adische Darstellung, Umrechnung Beispiel: Umrechnung von ( ) 10 ins Dualsystem

Datenpfad einer einfachen MIPS CPU

Hardware Praktikum 2008

Beispiel: A[300] = h + A[300]

EHP Einführung Projekt A

Teil 2: Rechnerorganisation

Datenpfad einer einfachen MIPS CPU

Grundlagen der Rechnerarchitektur. MIPS Assembler

Übung 7 Rechnerstrukturen

Vorlesung Rechnerarchitektur. Einführung

Testdokument (Universität Paderborn, Softwaretechnikpraktikum SS2006)

Mikrocomputertechnik

Integrierte Schaltungen

Übungen zur Vorlesung Technische Informatik I, SS 2002 Hauck / Guenkova-Luy / Prager / Chen Übungsblatt 5 Rechenwerke / Scheduling

Kap.3 Mikroarchitektur. Prozessoren, interne Sicht

b i Ergänzung zu Vollkonjunktionen (ohne Indizierung i = 0... n-1): q = a b a b q = a b q = a b a b a b

Lösungsvorschlag 9. Übung Technische Grundlagen der Informatik II Sommersemester 2009

32 Bit Konstanten und Adressierung. Grundlagen der Rechnerarchitektur Assembler 78

Notwendigkeit für andere Instruktionsformate

Das Attiny-Projekt Assemblieren 1


Technische Informatik 1 Übung 2 Assembler (Computerübung) Matthias Meyer

Übung Praktische Informatik II

RISC-Prozessoren (1)

Rechnerstrukturen 1: Der Sehr Einfache Computer

Programmieren von MiniRISC-Prozessor in Assemblersprache

Der von Neumann Computer

Grundlagen der Technischen Informatik. 12. Übung

D.7 Versuchsreihe 7: Datenpfad und Steuerwerk - Teil I

28. März Name:. Vorname. Matr.-Nr:. Studiengang

Übungen zu Grundlagen der Rechnerarchitektur und -organisation: Bonusaufgaben Übung 8 und Präsenzaufgaben Übung 9

Rechnerarchitektur. Marián Vajteršic und Helmut A. Mayer

Praktikumsprotokoll Mikrorechentechnik I Versuch

Name: Vorname: Matr.-Nr.: 4. a) RISC-Architekturen müssen zur Decodierung von Maschinenbefehlen stets ein mikroprogrammierbares Steuerwerk verwenden.

Microcomputertechnik

Assembler Programmierung Motivation. Informatik II SS 2004 Teil 4: Assembler Programmierung. Assembler vs. Maschinensprache

ARM-Cortex-M4 / Thumb-2-Befehlssatz Adressierungsarten und arithmetische Operationen

Mikroprozessortechnik. 03. April 2012

Weitere Arithmetik. Grundlagen der Rechnerarchitektur Assembler 33

Klausur "Informatik I" vom Teil "Rechnerstrukturen"

Daniel Betz Wintersemester 2011/12

Klausur "Informatik I" vom Teil "Rechnerstrukturen"

1 Rechnerstrukturen 1: Der Sehr Einfache Computer

Testprotokoll SWP12-10

SUB $2,$5,10 Zeile 1 LDO $5,$0,2*8 Zeile 2 OR $1,$2,$3 Zeile 3 SRU $1,$5,$1 Zeile 4.

24. Februar Name:. Vorname. Matr.-Nr:. Studiengang

Name : Klasse : Punkte : Note :

ALU ALU. ALU-Aufbau. Eine ALU (arithmetisch-logische Einheit) besteht in der Regel aus. Addierer. Logischer Einheit. Shifter

5.BMaschinensprache und Assembler

Offenbar hängt das Ergebnis nur von der Summe der beiden Argumente ab...

Prüfungsklausur 1608/1609 SS 2013 Aufgabenteil 1608

Vorsemesterkurs Informatik

Ziele sind das Arbeiten mit Funktionen (Modularisierung, Parameterübergabe), sowie - Reihentyp (Array)

, 2014W Übungsgruppen: Mo., Mi.,

7.1 a) Für die Übertragung der Nachricht mittels des Polynoms T(x) werden 40 Bit benötigt.

Vorstellung (Wdh. für die Neuen )

1 Aufgaben Wie funktioniert ein Computer. a) Welche Spannungen werden von PC-Netzteilen bereitgestellt? 5W, 12W,

6. Grundlagen der Programmierung

Prozessor HC680 fiktiv

Technische Informatik 1 Übung 5: Eingabe/Ausgabe (Computerübung) Georgia Giannopoulou, ETZ G & 18.

FAKULTÄT FÜR INFORMATIK

Kap.3 Mikroarchitektur. Prozessoren, interne Sicht

Mikroprozessor als universeller digitaler Baustein

Digitaltechnik und Rechnerstrukturen. 2. Entwurf eines einfachen Prozessors

Grundlagen der Technischen Informatik

A ProgrAmmer s Guide to KIM Programming

Assembler Integer-Arithmetik

JetControl 647 Versions Update von V3.53 auf V3.60

2. Computer (Hardware) K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16

Übungsblatt 5 Entwurf eines Mehrzyklen-Datenpfads Abgabefrist: Mittwoch , 10:00 Uhr

Kurzanleitung. Zeiterfassung. Version Datum 01/2017 Log. Adatis GmbH & Co. KG Seite 1 von 7

4. Mikroprogrammierung (Firmware)

Transkript:

Praktische Übungen zu Computertechnik 2 Versuchsprotokoll Versuch: A3 Befehlssatzerweiterung und Test eines RISC-Prozessors Versuchsdatum und -zeit: Donnerstag, 06. Mai 2010, 10-13 Uhr Betreuer: Andreas Reinsch Name, Studiengang, Mat.-Nr.: Ralf Wondratschek, B. Sc. Informatik, 112626 Email: ralf.wondratschek@uni-jena.de Name, Studiengang, Mat.-Nr.: Kerstin Gößner, B. Sc. Informatik, 114656 Email: kerstin.goessner@uni-jena.de Vom Betreuer auszufüllen: Vorbereitung/Kolloquium: Durchführung: Protokoll: Gesamtbewertung: 1

Gliederung 1. Vorbereitung.. Seite 03 2. Vorgehensweise.. Seite 05 3. Erprobung. Seite 06 4. Schlussfolgerungen Seite 07 5. Anhang 5.1. Erweiterter Zustandsgraph.. Seite A1 5.2. VHDL Beschreibung für Ausgabefunktion. Seite A2 5.3. VHDL Beschreibung für Decoder 1.. Seite A3 5.4. VHDL Beschreibung für Zustandsüberführungsfunktion.. Seite A4 5.5. Assemblerprogramm.. Seite A5 5.6. Ausgabe des Terminals aus der funktionalen Simulation.... Seite A6 5.7. Debugger-Ergebnis Seite A8 Weiterhin sind noch die Quelltexte und das Assemblerprogramm aus dem Versuch angehangen 2

1. Vorbereitung Für diesen Versuch ist ein DLXJ-Prozessor (eine RISC-Prozessorarchitektur von Hennessy und Patterson abgewandelt in der Jenaer Version von Dr. Reinsch) gegeben. Der Prozessorkern kennt bereits einige arithmetisch-logische Befehle, zum Beispiel die Subtraktion SUB. Ziel dieses Projektes ist es, elf weitere Befehle hinzuzufügen (ADD, ADD.I, SUB.I, AND, AND.I, OR, OR.I, SLL, SLL.I, SRL und SRL.I). Dabei sind die neuen Befehle in das R-Typ und I-Typ Format zu unterscheiden. Das J-Typ Format, welches ausschließlich von Sprungbefehlen genutzt wird, ist dabei nicht vertreten. Der Maschinencode für drei der neuen Befehle in Hexadezimaldarstellung sieht wie folgt aus: 1. 0x50010003 Um diesen Code zu entschlüsseln, muss er erst in eine Binärdarstellung umgewandelt werden: 0x50010003 = 010100 00000 00001 0000000000000011 Am Opcode, dem ersten Teil von links der Binärdarstellung, erkennt man, dass es sich um den ADD.I Befehl handelt. In dem Fall steht im Rs1 Register eine Null (2. Teil der Binärdarstellung) und der Immediate beträgt Drei (letzter Teil). In das Rd Register, welches den zu speichernden Wert enthält und auf die Stelle 00001 adressiert ist, wird Drei geschrieben. Rd Rs1 + I a 11 0 + 11 2. 0x0021100c = 000000 00001 00001 00010 00000 001100 Da hier der Opcode gleich Null ist, handelt es sich um ein R-Typ Format. Um herauszubekommen, um welche Operation es sich genau handelt, muss die rr-func betrachtet werden (letzter Teil). Der 001100 ist eine logische Verschiebung nach links zu zuordnen (SLL). Das Rs1 Register wird dabei um so viel Stellen, wie im Rs2 Register stehen, nach links verschoben. In dem Fall wird die Drei aus der Adresse 00001 um 3 Stellen nach link geschoben. Aus der 11 wird eine 11000, welche in der Adresse 00010 gespeichert wird. Rd Rs1 log. links geschoben mit Rs2 11000 11 log. links geschoben mit 11 3. 0x00411809 = 000000 00010 00001 00011 00000 001001 3

Es handelt sich wieder um ein R-Typ Format. Am rr_func Bitfelt erkennt man, dass es ein logical OR ist. Dabei wird der Wert von der Adresse 00010 bitweise mit logischem OR mit der Adresse 00001 verknüpft und anschließend in der Adresse 00011 abgelegt. Rd Rs1 OR Rs2 11011 11000 OR 00011 Allgemein kann man sagen: bei einem R-Typ Format werden zwei Quellregister Rs1 und Rs2 adressiert und ein Zielregister Rd. Am Opcode kann noch nicht festgestellt werden, um welche arithmetische Funktion es sich handelt, das geschieht erst mit dem rr_func Bitfeld (Register-Register-ALU Operation). Rd Rs1 rr_func Rs2 Bei dem I-Typ Format handelt es sich um einen Datentransportbefehl. Am Opcode wird erkannt, dass es sich um einen I-Typ handelt und auch bereits um welche Funktion. Das Rd Register enthält das zu ladende oder speichernde Wort. Des Weiteren gibt es nur ein Quellregister Rs1. Der zweite Wert ist der 16 Bit lange Immediate-Wert, der im Befehl enthalten ist. Über das IR kommt der Wert entweder auf den S1 oder S2 Bus. Rd Rs1 op. I Die Steuerung unterscheidet zwischen den Befehlstypen. Der Decoder 1 entschlüsselt den entsprechenden Befehl aus dem Opcode. Bei einem R-Typ Format entscheidet das rr_func Bitfeld, welche ALU-Operation an das Schaltwerk weitergeleitet wird. Wird im Decoder 1 ein I-Typ Format festgestellt, so decodiert der Decoder 2 die Datentransport-Operation weiter aus. Implementiert man die elf neuen Befehle aus der Aufgabenstellung, müsste der Prozessor nur um fünf neue Zustände erweitert werden (siehe Seite A1). Das liegt daran, dass die Zustandsübergänge nur angeben, wie der Befehl abgearbeitet wird. An der ALU liegen der S1 und S2 Bus an, dabei spielt es keine Rolle, von wem das Signal auf den Bussen stammt. Somit braucht man für die I-Typ Befehle keine neuen Zustände. Zwar müssen nur fünf weiter Zustände hinzugefügt werden, trotzdem kann ein und derselbe Zustand verschiedene Datenquellen haben, zum Beispiel bei ADD und bei ADD.I. Bei R-Typ Befehlen dienen als Quellen die Register A und B, welche mit den Steuersignalen /a_out_en bzw. /b_out_en die Daten auf den S1 Bus bzw. den S2 Bus legen. Wird im Decoder 3 ein I-Typ Befehl erkannt, so liegt nicht das Register B als Datenquelle am S2 Bus, sondern der Immediate des IR. Dabei nimmt das Signal rd_s2_addr_sel die Unterscheidung vor, welche Quelle nun anliegt. Als Datensenke dient das C 4

Register, in welches mit dem Signal c_latch_en das Datum eingeschrieben wird. Die genaue Implementierung der elf neuen Befehle findet man im Anhang auf Seite A2, A3 und A4. Dabei handelt es sich allerdings nur um die Änderungen, die später bei der Durchführung an die richtige Stelle eingefügt werden müssen (die genauen Quelltexte findet man Notfalls nochmal am Ende des Anhangs). Auch haben wir ein Assembler Programm vorbereitet (siehe Seite A5)(wir haben auch den Quelltext aus dem Versuch angefügt, allerdings druckten wir nur die falsche Version aus und vergaßen die korrekte auszudrucken). Dazu setzten wir die Vorlage mit den entsprechenden Ergebnissen fort. Die Ergebnisse, die dabei rauskommen sollen, wenn alles richtig funktioniert, stehen als Kommentare dahinter. Auch haben wir am Ende eine Endlosschleife gesetzt, damit der Prozessor nicht abstürzt. Er wird immer wieder erneut zu demselben Jump-Befehl springen. 2. Vorgehensweise Um den DLXJ-Prozessor die elf Befehle hinzuzufügen, müssen zuerst die entsprechenden VHDL-Dateien geändert werden. Dazu werden die Befehle aus der Vorbereitung an die entsprechenden Stellen eingefügt. Mit dem passenden Skript dlxj_analyze_for_funcsim werden die Dateien übersetzt. Danach wird das Assemblerprogramm, welches bereits in der Vorbereitung angefertigt wurde, editiert und assembliert. Anschließend kann die funktionale Simulation durchgeführt werden mit dem Skript dlxj_simulate_function. Hier wird unteranderem überprüft, ob alle zusätzlichen Befehle fehlerfrei funktionieren und ob die Ergebnisse aus dem Assemblerprogramm mit den vorher handschriftlich berechneten Werten übereinstimmen. Verlief die funktionale Simulation ohne Unstimmigkeiten, so können die elf Befehle in den DLXJ-Prozessor implementiert werden. Nachdem der FPGA konfiguriert und das Testprogramm ebenfalls übertragen wurde, kann mit Hilfe des Debuggers das Testprogramm getestet werden. 5

3. Erprobung Nachdem wir unseren Arbeitsplatz vorbereiteten und alle VHDL-Dateien mit dem Skript dlxj_analyze_for_funcsim_all übersetzten, fügten wir den VHDL- Beschreibungen ir_cecode_i-behaviour.vhd, fsm_next-dataflow.vhd und fsm_output-dataflow.vhd die zusätzlichen Befehle aus der Vorbereitung (siehe Anhang) hinzu. Nach einer erneuten Analyse mit dem Skript und korrigierten Syntaxfehlern, editierten und assemblierten wir unser vorbereitetes Assemblerprogramm (siehe Seite A5). Da dies problemlos funktionierte, setzten wir mit der funktionalen Simulation mit Hilfe des Skriptes dlxj_simulate_function fort. Die Ergebnisse der zusätzlich implementierten Befehle findet man im Anhang auf Seite A6 und A7. Auch hier wurden alle Ergebnisse korrekt ausgegeben. Als die funktionale Simulation komplett abgeschlossen war, implementierten wir die zusätzlichen Befehle in den DLXJ-Prozessor mit dem Skript dlxj_make_fpga und konfigurierten ihn mit dlxj_configure_fpga. Das gleiche Testprogramm aus der Vorbereitung übertrugen wir in den Programmspeicher des Prozessors mit dlxj_program_rom. Danach starten wir den Debugger und testeten unser Programm. Den einzigen Befehl, den wir dazu brauchten, war der n1 Befehl. Er hat zur Folge, dass der nächste Befehl ausgeführt und disassembliert wird. So war es auch möglich, die einzelnen Zustände und Registerinhalten anzeigen zu lassen. Besonders wichtig war uns das R4 Register, wo die Ergebnisse eingetragen und ausgegeben wurden. Bei nicht jedem ausgeführten Befehl hat sich die Ausgabe geändert, die Ergebnisse wurden allerdings in folgender Reihenfolge ausgegeben: 2000.0000 0000.0002 0000.00001 0000.0001 0000.0002 0000.0004 0000.0001 0000.0007 0000.0005 0000.000A 0000.0004 0000.0002 0000.0001 Vergleicht man diese Zahlen mit den Ausgaben des Terminals aus der funktionalen Simulation, so stimmen sie wieder überein. Im Debugger sieht man die Ergebnisse, die mit sw.i zero(r31), r4 im Assemblerprogramm ausgegeben werden. Damit eine neue Ausgabe erscheinte, musste man den n1 Befehl im Debugger auch genau so oft eingeben, wie die Anzahl der anderen Befehle zwischen den sw.i Befehlen. Deshalb sieht man zum Beispiel die Zahl 6 im Debugger auch nicht, die aber in der funktionalen Simulation angezeigt wird (siehe erster Befehl auf Seite A7). Gab man weitere n1 Befehle im Debugger ein, so erschien keine neue Ausgabe, da das Programm sich in der Endlosschleife am Ende befand. Das Ergebnis findet man auch nochmal auf Seite A8. 6

4. Schlussfolgerungen Bei einer guten Vorbereitung und intensiven Auseinandersetzung mit der Aufgabenstellung, war die Durchführung des Projektes nicht mehr so schwierig. Die vorbereiteten Quelltexte mussten nur noch eingefügt werden. Kleine Fehler beim Einfügen behinderten den Fluss, da man lange nach ihnen suchen musste, konnten aber gelöst werden. Die neuen Befehle funktionierten auch genau so, wie es vorhergesehen war. Auch die Benutzung des Debuggers bereitete keine weiteren Probleme und verwunderliche Störungen traten im ganzen Projekt auch nicht auf. Insgesamt erfüllte das Ergebnis unsere Erwartungen. 7