Beruflich Dokumente
Kultur Dokumente
ag
Einführung in die Rechnerarchitektur
Klausur: IN0004 / Endterm Datum: Montag, 13. Februar 2023
Prüfer: Prof. Dr. Martin Schulz, Prof. Dr. Robert Wille Uhrzeit: 08:00 – 10:00
hl
sc
A1 A2 A3 A4 A5 A6 A7 A8 A9 A 10 A 11
I
or
II
sv
Bearbeitungshinweise
• Diese Klausur umfasst 28 Seiten mit insgesamt 11 Aufgaben.
Bitte kontrollieren Sie jetzt, dass Sie eine vollständige Angabe erhalten haben.
ng
• Schreiben Sie weder mit roter / grüner Farbe noch mit Bleistift. Es darf kein Tipp-Ex benutzt werden!
Eingaben mit Bleistift werden nicht bewertet!
• Schalten Sie alle mitgeführten elektronischen Geräte vollständig aus, verstauen Sie diese in Ihrer
Tasche und verschließen Sie diese.
– Seite 1 / 28 –
1 Teil 1: Allgemeine Fragen
Aufgabe 1 Datenstrukturen (2 Punkte)
0 a) Auf welche für die Rechnerarchitektur zentrale Datenstruktur wird nach dem LIFO Prinzip zugegriffen?
1
ag
0 b) Nennen Sie die zwei Operationen, mit denen üblicherweise auf einen LIFO Speicher zugegriffen werden
1 kann um Daten zu lesen & zu schreiben.
Push / Pop
hl
Aufgabe 2 Adressformen (4 Punkte)
sc
0 a) Wo liegen bei einer Maschine mit Nulladressform die Operanden?
1
0 c) Erläutern Sie einen Vorteil einer Machine mit Dreiaddressform mit Speicher/Speicher-Modell:
1
0 d) Erläutern Sie einen Nachteil einer Machine mit Dreiaddressform mit Speicher/Speicher-Modell:
1
Komplexe ISA und/oder Implementierung, lange Befehle, lange Dekodierzeiten, viele Speicherzugriffe,
Lö
langsam
– Seite 2 / 28 –
2 Teil 2: x86 Architektur und Assembler
Aufgabe 3 Hangman (26 Punkte)
In dieser Aufgabe sollen die Bestandteile des Spiels „Hangman” entwickelt werden, bei dem Wörter erraten
werden müssen. Das Program nutzt Funktionen, die unabhängig voneinander entwickelt werden sollen. Das
Spiel wird nur mit den 26 Kleinbuchstaben des englischen Alphabets gespielt [a-z].
• find_char - um den Index des ersten Erscheinens eines Chars im String zu finden
– Eingabe 1: Char (in AL)
– Eingabe 2: nullterminierter String (in EDX)
ag
– Ausgabe: Index des ersten Erscheinens dieses Zeichens in dem String; sonst -1
• append_char - hängt den eingegebenen Charakter an das Ende des Strings
– Eingabe 1: Char (in AL)
– Eingabe 2: nullterminierter String (in EDX)
hl
• copy_letter_in - sucht mithilfe von find_char alle Indizes, an denen der Char im String vorkommt.
Setzt den Buchstaben an diesen Indizes im String auf das Zeichen.
– Eingabe 1: Char (in AL)
sc
– Eingabe 2: nullterminierter Quellstring (in ESI)
– Eingabe 2: nullterminierter Zielstring (in EDI)
a) Im ersten Teilproblem soll eine Funktion namens find_char entwickelt werden. Ihre Eingaben sind ein 0
or
Zeichen und ein null-terminierter String. Die Funktion gibt den Index des ersten Vorkommens dieses Zeichens 1
im String zurück oder -1, wenn das Zeichen nicht vorhanden ist. Verwenden Sie die vorgegebenen Labels: 2
3
• ENDLOOP_FAIL, wenn das Zeichen nicht gefunden wird, 4
5
sv
FIND_CHAR:
; AL: Buchstabe Eingabe
; EDX: String Pointer Eingabe
; ECX: Counter
; EAX: Ausgabe
Lö
push ECX
mov ECX, 0
LOOPHEAD_SEARCH:
;die Schleife für die Suche des Chars muss hier darunter sein
– Seite 3 / 28 –
cmp byte [EDX+ECX], 0
je ENDLOOP_FAIL
cmp byte [EDX+ECX], AL
je ENDLOOP_FOUND
inc ECX
jmp LOOPHEAD_SEARCH
ENDLOOP_FAIL:
ag
mov EAX, -1
pop ECX
ret
hl
ENDLOOP_FOUND:
sc
pop ECX
ret or
sv
ng
su
Lö
– Seite 4 / 28 –
b) Wir wollen die geratenen Buchstaben im Auge behalten. Zu diesem Zweck implementieren wir eine 0
Funktion namens append_char, die jedes Mal aufgerufen wird, wenn ein neuer Buchstabe getippt wird. Diese 1
Funktion nimmt das Zeichen und den null-terminierten String guessed als Eingabe und fügt den geratenen 2
Buchstaben an das Ende des Strings guessed an. String guessed muss nach dem Hinzufügen des Zeichens 3
4
wieder ein nullterminierter String sein. 5
Das eigentliche Anhängen des Buchstabens an den String muss nach dem Sprung auf ENDLOOP_APPEND 6
realisiert werden. Der Sprung sollte erfolgen, wenn der richtige Ort gefunden wird. 7
Information zur Aufrufkonvention: Alle Register sollen nach Beenden der Routine unverändert sein. Für die
Ein- und Ausgabeparameter der Funktionen müssen die in den Kommentaren des Codes angegebenen
Register verwendet werden.
Der Einfachheit halber gehen wir davon aus, dass genügend Speicherplatz vorhanden ist um beliebig viele
ag
Chars an das Ende des Strings hinzufügen zu können. Das heißt es muss kein Speicher neu alloziert
werden.
hl
;append_char
; input: Char und nullterminierter String
; action: hängt den Charakter an das Ende des Strings an
sc
APPEND_CHAR:
; AL: Buchstabe Eingabe
; EDX: String Pointer Eingabe
or
push EDX
sv
LOOPHEAD_PLACING:
;die Schleife für das Finden der Stelle zum Hinzufügen des Chars muss hier sein.
inc EDX
jmp LOOPHEAD_PLACING
su
Lö
– Seite 5 / 28 –
ENDLOOP_APPEND:
ag
hl
sc
or
sv
ng
su
Lö
– Seite 6 / 28 –
c) Nachdem Buchstaben richtig erraten werden, wollen wir diese schön darstellen können und zwar in der 0
richtigen Position im String. Dazu nehmen wir einen String display, der genau so groß wie der Quellstring 1
ist, jedoch mit “_” Charaktern gefüllt. Nach jedem erfolgreichen Erraten wird der Charakter an allen entspre- 2
chenden Stellen, an denen es im Quellstring vorkommt, durch den richtigen Charakter ersetzt. 3
4
Zu diesem Zweck implementieren wir eine Funktion namens copy_letter_in, die jedes Mal aufgerufen wird, 5
wenn ein neuer Buchstabe richtig erraten wird. Diese Funktion nimmt den Charakter, den null-terminierten 6
String display und den Quellstring als Eingaben und ersetzt das “_” durch diesen Charakter an den 7
entsprechenden Stellen. 8
9
• Nach dem Einsetzen an allen Stellen sollte auf FINISHED gesprungen werden, wo gesicherte Werte
freigegeben werden sollen und das Fuktionsende implementiert werden soll.
ag
Information zur Aufrufkonvention: Alle Register sollen nach Beenden der Routine unverändert sein. Für die
Ein- und Ausgabeparameter der Funktionen müssen die in den Kommentaren des Codes angegebenen
Register verwendet werden.
hl
; AUFGABE TEIL 3 ---------------------------------------------------------------
;copy_letter_in
sc
; input: Char und null-terminierte Quell- und Zielstrings
; action: sucht alle Indizes, an denen das Zeichen in dem Quellstring vorkommt,
setzt den Buchstaben an diesen Indizes in dem Zielstring auf das Zeichen.
COPY_LETTER_IN:
; AL: Letter Eingabe
or
; ESI: String Pointer Eingabe Quellstring
; EDI: String Pointer Eingabe display
push EAX
sv
push EBX
push ECX
push EDX
mov BL, AL
mov ECX, 0
ng
LOOPHEAD:
;Hinweis: find_char muss benutzt werden
;Hinweis: achten Sie darauf, in welchen Registern die Eingangsargumente
; der find_char Funktion abgelegt werden
su
CMP EAX, -1
JE FINISHED
LEA EDX, [ECX + EAX]
MOV [EDI + EDX], BL
LEA ECX, [ECX + EAX + 1]
JMP LOOPHEAD
– Seite 7 / 28 –
FINISHED:
FINISHED:
pop EDX
pop ECX
pop EBX
pop EAX
ret
ag
hl
sc
or
sv
ng
su
Lö
– Seite 8 / 28 –
3 Teil 3: Caches und Parallelisierung
Aufgabe 4 Caching (23 Punkte)
a) Welche beiden Speicherzugriffsmuster helfen beim Caching von Daten? Beschreiben Sie diese knapp. 0
1
2
Räumliche Lokalität: Zugriff auf ein Datum erhöht Wahrscheinlichkeit auf Zugriff nahegelegener Daten.
Zeitliche Lokalität: Zugriff auf ein Datum erhöht Wahrscheinlichkeit auf Zugriff desselben Datums in
der Zukunft.
ag
hl
b) Was ist eine Miss-Penalty in Bezug auf Caching? 0
1
sc
Die zusätzlich von der Speicherhierarchie benötigte Antwortzeit, wenn ein Cache-Miss auftritt.
or
c) Wie ist die Hit-Rate definiert und welchen Wertebereich hat sie? 0
1
2
sv
Anzahl an Cache-Hits
Anzahl Speicherzugriffen
œ [0, 1]
ng
d) Was sagt die durchschnittliche Speicherzugriffszeit (Average Memory Access Time) aus? 0
Definieren sie die Speicherzugriffszeit zusätzlich Anhand von Hit/Miss-Raten und Latenzen. 1
2
su
– Seite 9 / 28 –
Sie haben ein Programm mit 109 Instruktionen, dass auf einem 16-bit in-order Prozessor “MUC1” mit
einer Frequenz von 3 GHz läuft. Der Prozessor braucht durchschnittlich 3 Zyklen pro Instruktion (exklusive
Speicherzugriff) und pro Instruktion fallen durchschnittlich 1.5 Speicherzugriffe an. Es gibt einen 16B Cache
mit einer Latenz von 10 ns und Cachezeilenlänge 2 Byte. Der Arbeitsspeicher ist 2 GB groß und hat eine
Miss-Latenz von 50 ns. Messungen ergeben, dass der Cache beim Ausführen des Programms 3 ◊ 108 Hits
erzeugt.
ag
hl
sc
0 f) Berechnen Sie die durchschnittliche Speicherzugriffszeit (Average Memory Access Time).
1
2
3◊108 Hits
Speicherzugriffe = 20% Hit-Rate
1.5 Instruktion ◊109 Instruktionen
ns ns ns
20% ◊ 10 Zugriff + 80% ◊ 50 Zugriff = 42 Zugriff
or
sv
CPI
CPU Time = IC ◊ + Memory Access Rate ◊ Average Memory Access Time
f
1 2
= 109 ◊ 3◊3109 + 1.5 ◊ 42 ns
= 1 + 1.5 ◊ 42 = 64 s
Lö
– Seite 10 / 28 –
Den “MUC1” Prozessor gibt es jeweils in einer Ausführung mit Direct-Mapped Cache, einem 4-fach Assozia-
tivem Cache und einem Voll-Assoziativen Cache.
h) An wie vielen Stellen im jeweiligen Cache kann die Addresse 0x08 auftauchen? 0
1
2
1 4 8
ag
i) Wie viele Bits werden jeweils für Tag, Index und Offset Benötigt? 0
1
2
3
Direct Mapped 4-fach Assoziativ Voll-Assoziativ
hl
Tag 12 14 15
sc
Index 3 1 0
Offset 1 1 1
or
Je für Direct Mapped, 4-fach Assoziativ und Voll-Assoziativ richtig.
Nennen Sie jeweils einen Vorteil und einen Nachteil für jede Bauart.
sv
j) Direct Mapped: 0
1
k) n-Fach Assoziativ: 0
1
su
l) Vollassoziativ: 0
1
– Seite 11 / 28 –
0 m) Nennen sie 2 Cacheersetzungsstrategien und beschreiben sie jeweils einen Nachteil.
1
2
Je für Nennung, für Nachteil
Random: Keine Berücksichtigung von Lokalität
FIFO: Keine Berücksichtung von Nutzungsfrequenz
LFU: Neue Blöcke werden bevorzugt eliminiert
...
ag
hl
sc
or
sv
ng
su
Lö
– Seite 12 / 28 –
Aufgabe 5 Amdahl’s Gesetz (5 Punkte)
Gehen Sie in der folgenden Aufgabe von idealer Parallelisierung aus (keine Overheads).
Sie haben ein Programm, dass auf dem 2-core Supercomputer MUC2Duo 6 Sekunden Ausführungszeit hat.
Sie lassen dasselbe Programm auf dem neueren 4-core iMUC laufen und messen eine Ausführungszeit von
5 Sekunden.
ag
5 = ts +
4
tp
1=
4
4 = tp
hl
4
6 = ts +
2
ts = 4
sc
or p = 0.5
b) Wie schnell würde dieses Problem auf dem 1-core SteinzeitMUC laufen? 0
1
tp 4
sv
t = ts + =4+
1 1
t =8
ng
su
c) Wie schnell würde dieses Problem auf dem Œ-core HyperMUC laufen? 0
1
4
4+ = 4s = t
Œ
Lö
– Seite 13 / 28 –
4 Teil 4: Schaltungsentwurf und RISC-V Architektur
Aufgabe 6 Wahrheitstabelle (7 Punkte)
0 Prüfen oder widerlegen Sie die folgende Aussage mittels einer Wahrheitstabelle.
1
2 (a+c )·b =(b +c )+a
3
4
5
6
7
a b c a+c (a+c ) (a + c) · b b +c (b +c )+a (b + c) + a
ag
0 0 0 1 0 0 1 1 0
0 0 1 1 0 0 1 1 0
0 1 0 1 0 0 0 1 0
0 1 1 1 0 0 1 1 0
1 0 0 0 1 0 1 1 0
hl
1 0 1 1 0 0 1 1 0
1 1 0 0 1 1 0 0 1
1 1 1 1 0 0 1 1 0
sc
or
sv
ng
su
Lö
– Seite 14 / 28 –
Aufgabe 7 Wellenformen (5 Punkte)
Die folgende Wellenform zeigt die beiden Eingänge (D und Clk ) eines negativ flankengesteuerten D-Flipflops. 0
Vervollständigen Sie die folgende Wellenform. 1
Es sind zwei Kopien der selben Wellenform angegeben falls Sie einen Fehler ausbessern wollen. Geben Sie 2
daher explizit an welche Wellenform korrigiert werden soll. 3
4
5
ag
hl
sc
or
sv
ng
su
Lösung:
Lö
– Seite 15 / 28 –
Aufgabe 8 Single-Cycle RISC-V Prozessor (15 Punkte)
Betrachten Sie das Schaltbild des single-cycle RISC-V Prozessors in Abbildung 8.1.
0 a) Vervollständigen Sie die Belegung der Kontrollsignale des Steuerwerks für die angegebenen Befehle in
1 der untenstehenden Tabelle. Geben Sie don’t cares explizit mit X an. Es ist ausreichend bei ALUControl die
2 Funktion (ADD, SUB, ...) anzugeben. Nehmen Sie weiterhin an, dass das Extend-Bauteil wie folgt gesteuert
3 wird:
4
5 Befehlstyp ImmSrc
I 00
S 01
B 10
ag
J 11
Eine Befehlsreferenz für RISC-V Befehle finden Sie in Abbildung 8.4 auf Seite 19.
hl
ORI
BEQ
sc
SUB
LW
or
JAL
Lösung:
sv
ORI 0 0 00 0 OR 1 00 1
BEQ 1 0 XX 0 SUB 0 10 0
ng
SUB 0 0 00 0 SUB 0 XX 1
LW 0 0 01 0 ADD 1 00 1
JAL X 1 10 0 XXX X 11 1
su
0 b) Der Instruktionssatz des Prozessor soll um den Befehl blt (branch if less than) erweitert werden. Der Befehl
1 blt rs1, rs2, imm vergleicht zwei Register rs1, rs2 und führt einen Sprung aus falls rs1 < rs2. Die Sprung-
2 adresse berechnet sich aus dem Vorzeichenerweiterten Immediate und dem PC als PC + signext(imm).
3 Erweitern Sie den Datenpfad des Prozessors mit möglichst wenig Logik, sodass der Befehl blt unterstützt
Lö
4
5
wird. Tragen Sie auch die Werte aller Kontrollsignale des Steuerwerks an die entsprechenden Signale im
6 Schaltbild ein. Geben Sie don’t cares explizit mit X an.
7 Nehmen Sie an, dass die ALU die folgenden Befehle unterstützt:
8
9
ALUControl Instruction
10
000 (Add) ALUResult = SrcA + SrcB
001 (Sub) ALUResult = SrcA - SrcB
101 (Set Less Than) ALUResult = 1 if SrcA < SrcB else ALUResult = 0
011 (Or) ALUResult = SrcA ‚ SrcB (Bitweises Oder)
010 (And) ALUResult = SrcA · SrcB (Bitweises Und)
Es sind zwei Kopien des Prozessors beigelegt, falls Sie einen Fehler ausbessern wollen. Geben Sie daher
explizit an welches Schaltbild korrigiert werden soll.
– Seite 16 / 28 –
Lö
s
un
gs
– Seite 17 / 28 –
vo
rs
ch
la
g
Abbildung 8.1: Schaltbild des Single-Cycle RISC-V Prozessors
Lö
s
un
gs
– Seite 18 / 28 –
vo
rs
ch
la
Abbildung 8.2: Kopie des Schaltbilds des Single-Cycle RISC-V Prozessors
g
Lö
s
un
gs
– Seite 19 / 28 –
vo
rs
ch
la
g
Abbildung 8.3: Single-Cycle RISC-V Prozessor erweitert um BLT
RISC-V Instruction Set Summary
31:25 24:20 19:15 14:12 11:7 6:0 • imm: signed immediate in imm11:0
funct7 rs2 rs1 funct3 rd op R-Type • uimm: 5-bit unsigned immediate in imm4:0
imm11:0 rs1 funct3 rd op • upimm: 20 upper bits of a 32-bit immediate, in imm31:12
I-Type
• Address: memory address: rs1 + SignExt(imm11:0)
imm11:5 rs2 rs1 funct3 imm4:0 op S-Type
• [Address]: data at memory location Address
ag
imm12,10:5 rs2 rs1 funct3 imm4:1,11 op B-Type • BTA: branch target address: PC + SignExt({imm12:1, 1'b0})
imm31:12 rd op U-Type • JTA: jump target address: PC + SignExt({imm20:1, 1'b0})
imm20,10:1,11,19:12 rd op J-Type • label: text indicating instruction address
fs3 funct2 fs2 fs1 funct3 fd op R4-Type • SignExt: value sign-extended to 32 bits
5 bits 2 bits 5 bits 5 bits 3 bits 5 bits 7 bits • ZeroExt: value zero-extended to 32 bits
• csr: control and status register
Figure B.1 RISC-V 32-bit instruction formats
hl
Table B.1 RV32I: RISC-V integer instructions
op funct3 funct7 Type Instruction Description Operation
0000011 (3) 000 – I lb rd, imm(rs1) load byte rd = SignExt([Address]7:0)
0000011 (3) 001 – I lh rd, imm(rs1) load half rd = SignExt([Address]15:0)
sc
0000011 (3) 010 – I lw rd, imm(rs1) load word rd = [Address]31:0
0000011 (3) 100 – I lbu rd, imm(rs1) load byte unsigned rd = ZeroExt([Address]7:0)
0000011 (3) 101 – I lhu rd, imm(rs1) load half unsigned rd = ZeroExt([Address]15:0)
0010011 (19) 000 – I addi rd, rs1, imm add immediate rd = rs1 + SignExt(imm)
0010011 (19) 001 0000000* I slli rd, rs1, uimm shift left logical immediate rd = rs1 << uimm
0010011 (19) 010 – I slti rd, rs1, imm set less than immediate rd = (rs1 < SignExt(imm))
or
0010011 (19) 011 – I sltiu rd, rs1, imm set less than imm. unsigned rd = (rs1 < SignExt(imm))
0010011 (19) 100 – I xori rd, rs1, imm xor immediate rd = rs1 ^ SignExt(imm)
0010011 (19) 101 0000000* I srli rd, rs1, uimm shift right logical immediate rd = rs1 >> uimm
0010011 (19) 101 0100000* I srai rd, rs1, uimm shift right arithmetic imm. rd = rs1 >>> uimm
0010011 (19) 110 – I ori rd, rs1, imm or immediate rd = rs1 | SignExt(imm)
sv
0010011 (19) 111 – I andi rd, rs1, imm and immediate rd = rs1 & SignExt(imm)
0010111 (23) – – U auipc rd, upimm add upper immediate to PC rd = {upimm, 12'b0} + PC
0100011 (35) 000 – S sb rs2, imm(rs1) store byte [Address]7:0 = rs27:0
0100011 (35) 001 – S sh rs2, imm(rs1) store half [Address]15:0 = rs215:0
0100011 (35) 010 – S sw rs2, imm(rs1) store word [Address]31:0 = rs2
0110011 (51) 000 0000000 R add rd, rs1, rs2 add rd = rs1 + rs2
ng
0110011 (51) 000 0100000 R sub rd, rs1, rs2 sub rd = rs1 — rs2
0110011 (51) 001 0000000 R sll rd, rs1, rs2 shift left logical rd = rs1 << rs24:0
0110011 (51) 010 0000000 R slt rd, rs1, rs2 set less than rd = (rs1 < rs2)
0110011 (51) 011 0000000 R sltu rd, rs1, rs2 set less than unsigned rd = (rs1 < rs2)
0110011 (51) 100 0000000 R xor rd, rs1, rs2 xor rd = rs1 ^ rs2
0110011 (51) 101 0000000 R srl rd, rs1, rs2 shift right logical rd = rs1 >> rs24:0
0110011 (51) 101 0100000 R sra rd, rs1, rs2 shift right arithmetic rd = rs1 >>> rs24:0
su
1100011 (99) 101 – B bge rs1, rs2, label branch if ≥ if (rs1 ≥ rs2) PC = BTA
1100011 (99) 110 – B bltu rs1, rs2, label branch if < unsigned if (rs1 < rs2) PC = BTA
1100011 (99) 111 – B bgeu rs1, rs2, label branch if ≥ unsigned if (rs1 ≥ rs2) PC = BTA
1100111 (103) 000 – I jalr rd, rs1, imm jump and link register PC = rs1 + SignExt(imm), rd = PC + 4
1101111 (111) – – J jal rd, label jump and link PC = JTA, rd = PC + 4
*
Encoded in instr31:25, the upper seven bits of the immediate field
– Seite 20 / 28 –
Aufgabe 9 Pipelinekonflikte (15 Punkte)
Gegeben ist der RISC-V Prozessor mit fünfstufiger Pipeline (fetch, decode, execute, memory, writeback ) aus
Abbildung 9.1. Wird ein Register von einem Befehl geschrieben, so ist der geschriebene Wert erst nach der
writeback Stufe verfügbar. Sprünge werden in der execute Stufe getätigt.
Auf dem Prozessor wird folgendes Programmfragment ausgeführt:
s1: add t4, t2, t1
s2: andi t3, t2, 4
s3: sub t4, t1, t5
s4: addi t1, t3, 15
s5: xor t2, t4, t3
s6: sw t1, 5(t3)
ag
s7: lw t2, 0(t1)
a) Geben Sie alle Datenabhängigkeiten im Programm an, die den Befehl s5 betreffen und klassifizieren Sie 0
diese entsprechend. Nutzen Sie dafür die folgende Tabelle. 1
2
hl
Art der Abhängigkeit Betroffene Befehle Betroffenes Register 3
4
5
sc
or
• WAR s5, s1 (Register t2)
• WAR s5, s2 (Register t2)
sv
Hinweis: Um Ihnen Zeit zu ersparen, ist die Satzvorlage hier ein paar mal abgedruckt. Die Anzahl der 3
4
abgedruckten Vorlagen hat keinen Zusammenhang mit der Anzahl der Konflikte. 5
Data Hazard in Zeitschritt ___ zwischen ___ und ___. ___ wird in ___ gelesen, aber ___ wurde von ___ 6
noch nicht geschrieben. 7
Data Hazard in Zeitschritt ___ zwischen ___ und ___. ___ wird in ___ gelesen, aber ___ wurde von ___ 8
Lö
– Seite 21 / 28 –
Data Hazard in Zeitschritt ___ zwischen ___ und ___. ___ wird in ___ gelesen, aber ___ wurde von ___
noch nicht geschrieben.
Hinweis: Die untenstehende Tabelle kann bei der Bearbeitung der Aufgabe zu Hilfe gezogen werden (sie
fließt nicht in die Benotung mit ein).
Zeitschritt F D E M W
1 s1
ag
4
hl
6
sc
8
10
or
11
12
sv
13
14
15
ng
16
• Data Hazard in Zeitschritt 5 zwischen s2 und s4. t3 wird in s4 gelesen, aber t3 wurde von s2 noch
nicht geschrieben.
su
• Data Hazard in Zeitschritt 6 zwischen s2 und s5. t3 wird in s5 gelesen, aber t3 wurde von s2 noch
nicht geschrieben.
• Data Hazard in Zeitschritt 6 zwischen s3 und s5. t4 wird in s5 gelesen, aber t4 wurde von s3 noch
nicht geschrieben.
Lö
• Data Hazard in Zeitschritt 7 zwischen s4 und s6. t1 wird in s6 gelesen, aber t1 wurde von s4 noch
nicht geschrieben.
• Data Hazard in Zeitschritt 8 zwischen s4 und s7. t1 wird in s7 gelesen, aber t1 wurde von s4 noch
nicht geschrieben.
– Seite 22 / 28 –
Lö
s
un
gs
– Seite 23 / 28 –
vo
rs
ch
Abbildung 9.1: Schaltbild des pipelined RISC-V Prozessors
la
g
Aufgabe 10 Logikminimierung (10 Punkte)
0 a) Bestimmen Sie alle Primimplikanten von f mit einer der in der Vorlesung vorgestellten Methoden.
1
2 Lösung mit K-Maps:
3 a1 a0
ag
4 a3 a2
00 01 11 10
5
6 00 1 0 1 1
7
01 0 0 1 0
hl
11 0 1 1 1
10 1 0 1 1
Lösung mit Quine-McCluskey
sc
MT a b c d X MT a b c d X MT a b c d X
0 0 0 0 0 X 0, 2 0 0 - 0 X 0, 2, 8, 10 - 0 - 0
0, 8 - 0 0 0 X
2 0 0 1 0 X 2, 3, 10, 11 - 0 1 -
8 1 0 0 0 X 2, 3 0 0 1 - X 3, 7, 11, 15 - - 1 1
or
2, 10 - 0 1 0 X
3 0 0 1 1 X 10, 11, 14, 15 1 - 1 -
8, 10 1 0 - 0 X
10 1 0 1 0 X
3, 7 0 - 1 1 X
7 0 1 1 1 X
3, 11 - 0 1 1 X
sv
11 1 0 1 1 X
10, 11 1 0 1 - X
13 1 1 0 1 X
10, 14 1 - 1 0 X
14 1 1 1 0 X
7, 15 - 1 1 1 X
15 1 1 1 1 X
11, 15 1 - 1 1 X
13, 15 1 1 - 1
ng
14, 15 1 1 1 - X
su
Lö
– Seite 24 / 28 –
Primimplikantentafel:
Primimplikant a b c d 0 2 3 7 8 10 11 13 14 15 Essentiell?
0, 2, 8, 10 - 0 - 0 x x x x X
2, 3, 10, 11 - 0 1 - x x x x
3, 7, 11, 15 - - 1 1 x x x x X
10, 11, 14, 15 1 - 1 - x x x x X
13, 15 1 1 - 1 x x X
Primimplikanten: cd , ac , abd , b̄ d̄ , b̄c
ag
hl
sc
or
b) Geben Sie ein Minimalpolynom für f an. 0
1
sv
2
f (a, b, c, d) = cd + ac + abd + b̄ d̄ 3
ng
su
Lö
– Seite 25 / 28 –
Aufgabe 11 Binäre Entscheidungsdiagramme (8 Punkte)
ag
x2
x̄1 x3
x1
x3
hl
x3
sc
0 1
Da der Fehler vermutlich des öfteren gemacht wird, hier die Musterlösung für den BDD mit Variablen-
ordnung x1 < x2 < x3 . Falls hier alles korrekt ist, werden trotzdem 6 Punkte vergeben.
or
(x1 · x2 + x̄1 · x̄2 ) · x3 + x̄1 · x3
x1
sv
x2 x3
x2
x3
ng
x3
0 1
su
Lö
– Seite 26 / 28 –
Zusätzlicher Platz für Lösungen. Markieren Sie deutlich die Zuordnung zur jeweiligen Teilaufgabe.
Vergessen Sie nicht, ungültige Lösungen zu streichen.
ag
hl
sc
or
sv
ng
su
Lö
– Seite 27 / 28 –
ag
hl
sc
or
sv
ng
su
Lö
– Seite 28 / 28 –