代写 MIPS compiler U ̈bung1 RAWiSe18/19 Die Kosten fu ̈r eine integrierte Schaltung sind durch folgende Beziehungen gegeben:

U ̈bung1 RAWiSe18/19 Die Kosten fu ̈r eine integrierte Schaltung sind durch folgende Beziehungen gegeben:
Kosten-pro-Die = Kosten-pro-Wafer (1) Dies-pro-Wafer × Ausbeute
Dies-pro-Wafer ≈ Waferfla ̈che Diefla ̈che
(2)
(3)
Ausbeute =
1
(1 + (Defektdichte × Diefla ̈che/α))α
Von diesen Beziehungen ist nur Gleichung 1 exakt. Gleichung 2 ist eine Approximation, da unvollsta ̈ndige Dies am Rande des Wafers nicht beru ̈cksichtigt werden. Gleichung 3 ist eine empirisch festgestellte Beziehung zwischen der Defektdichte (Defekte pro Fla ̈che), Diefla ̈che und Ausbeute. Der Wert fu ̈r α variiert von Technologie zu Technologie. Wir nehmen im folgenden α = 2 an.
Aufgabe 1 (Ausbeute)
Wie ha ̈ngen die Kosten-pro-Die – bei konstanter Waferfla ̈che und Defektdichte – von der Diefla ̈che ab? Hinweis: Untersuchen Sie folgende funktionale Abha ̈ngigkeit: Kosten-pro-Die = f(Diefla ̈chez)
Aufgabe 2 (Diekosten)
Nehmen Sie an, auf einem 8-inch Wafer befinden sich 165 Dies mit einer Gro ̈sse von 250 mm2. Ein Wafer kostet $ 1000. Die Defektdichte betra ̈gt 1 Defekt/cm2. Wie hoch sind die Kosten fu ̈r einen Die?
Aufgabe 3 (Break-Even)
Eine Firma plant die Herstellung eines neuen IC. Die Fixkosten fu ̈r Forschung und Ent- wicklung, Gera ̈te, etc., belaufen sich auf $ 500’000. Die Kosten zur Herstellung eines Wafers betragen $ 6’000. Ein Wafer kann in 1500 Dies zersa ̈gt werden. Die Die-Ausbeute wird mit 50% gescha ̈tzt. Die Dies werden in Geha ̈use verpackt und nochmals getestet, was pro IC $ 10 kostet. Die Test-Ausbeute wird mit 90% gescha ̈tzt. Der Verkaufspreis sollte 40% u ̈ber den Kosten liegen. Wie viele ICs mu ̈ssen verkauft werden, damit der break-even erreicht wird (Kosten = Verkaufserlo ̈s).
Seite 1 / 3

U ̈bung1 RAWiSe18/19 Aufgabe 4 (MIPS Codefragment 1)
Zu Beginn des folgenden MIPS Codefragments beinhalten die Register $a0 und $a1 die Eingabewerte a und b. Nach der Ausfu ̈hrung des Codefragments steht das Resultat im Register $v0. Kommentieren Sie den Code und beschreiben Sie, was berechnet wird.
add
loop: beq
add
subi
j
finish: addi
add
$t0, $zero, $zero
$a1, $zero, finish
$t0, $t0, $a0
$a1, $a1, 1
loop
$t0, $t0, -50
$v0, $t0, $zero
Aufgabe 5 (MIPS Codefragment 2)
Das folgende Codefragment verarbeitet zwei Felder A und B und berechnet ein Resultat im Register $v0. Jedes der Felder besteht aus 2500 Wo ̈rtern. Die Basisadressen der Felder A und B sind in den Registern $a0 und $a1 gespeichert, die La ̈ngen der Felder (jeweils 2500) in den Registern $a2 und $a3. Kommentieren Sie den Code und beschreiben Sie, was berechnet wird.
sll $a2, $a2, 2
sll $a3, $a3, 2
add $v0, $zero, $zero
add $t0, $zero, $zero
outer: add
lw $t4, 0($t4)
$t4, $a0, $t0
add $t1, $zero, $zero
inner: add
lw $t3, 0($t3)
bne $t3, $t4, skip
addi $v0, $v0, 1
skip: addi
bne $t1, $a3, inner
addi $t0, $t0, 4
bne $t0, $a2, outer
$t3, $a1, $t1
$t1, $t1, 4
Seite 2 / 3

U ̈bung1 RAWiSe18/19 Aufgabe 6 (Pseudoinstruktionen)
Pseudoinstruktionen sind Instruktionen, die zwar in Assemblerprogrammen vorkommen ko ̈nnen aber nicht Teil des MIPS Instruktionssatzes sind. Der MIPS Assembler setzt Pseudoinstruktionen in MIPS Instruktionen um. Je nach Pseudoinstruktion wird der As- sembler eine oder mehrere MIPS Instruktionen generieren. Oft ist fu ̈r die Umsetzung ein Hilfsregister notwendig. Dafu ̈r wird das Register $at reserviert. Setzen Sie die Pseudoin- struktionen in der folgenden Tabelle in eine minimale MIPS Instruktionsfolge um. In der Tabelle bedeutet KLEIN eine 16-Bit Konstante und GROSS eine 32-Bit Konstante.
Pseudoinstruktion
Bedeutung
move $t1, $t2
$t1 = $t2
clear $t0
$t0 = 0
li $t1, KLEIN
$t1 = KLEIN
li $t2, GROSS
$t2 = GROSS
beq $t1, KLEIN, L
if ($t1 = KLEIN) goto L
beq $t2, GROSS, L
if ($t2 = GROSS) goto L
ble $t3, $t5, L
if ($t3 <= $t5) goto L bgt $t4, $t5, L if ($t4 > $t5) goto L
addi $t0, $t2, GROSS
$t0 = $t2 + GROSS
lw $t5, GROSS($t2)
$t5 = Speicher[$t2 + GROSS]
Aufgabe 7 (U ̈bersetzung von Schleifen)
In der Vorlesung wurde die Umsetzung des C-Programms
while (save[i] == k)
i = i + 1;
in folgende MIPS Instruktionen diskutiert:
Loop:
sll $t1, $s3, 2
add $t1, $t1, $s6
lw $t0, 0($t1)
bne $t0, $s5, Exit
addi $s3, $s3, 1
j Loop
# $t1=4*i
# $t1= Adresse von save[i]
# $t0=save[i]
# if (save[i]!=k) goto Exit
# i=i+1
# goto Loop
Exit: …
Dieser Code benutzt eine bedingte Verzweigung und einen unbedingten Sprung pro Schlei- feniteration. Ein solcher Code wu ̈rde nur von einem sehr schlechten Compiler erzeugt werden.
(1) Optimieren Sie den MIPS Code derart, dass maximal eine Verzweigungs/Sprung- instruktion pro Schleifeniteration verwendet wird.
(2) Wieviele Instruktionen werden in der urspru ̈nglichen und in der optimierten Version beno ̈tigt, wenn die Bedingung in der while Schleife genau 19 mal ausgewertet wird?
Seite 3 / 3