Index of /~wa28ziqo/prüfungen/cpu

[ICO]NameLast modifiedSizeDescription
[PARENTDIR]Parent Directory  -  
README

CPU-Design in VHDL (7.5 ECTS) - Klausur 2024-08-01T13:40/14:20

Präludium

Ich bin 20 min vorher im 7. Stock des Turms. Es ist kein Aushang zur Klausur da, also mache ich mich auf die Suche. Ich finde Philipp in seinem Büro, die Tür ist offen. Er fragt, ob ich für die Klausur da bin. Ich bejahe. Er meint, ich solle noch kurz warten und weist auf den Stuhl zwischen Bespr.-Raum und Büro hin. Ich nehme Platz. 5-10 Minuten später kommt er nochmal vorbei, wir gehen in den Prüfungsraum.

Er fragt, ob das meine erste mdl. Klausur ist. Ja. Er erläutert den Ablauf, fragt ob 7.5 ECTS oder 5 ECTS und ob ich mich gesund fühle. Der Zweitprüfer trifft ein. Wir beginnen.

Erläutere Single-Cycle-CPU.

Ich frage, ob ich zeichnen soll. Ja.. Ich zeichne SC-CPU, muss ein paar mal Erweiterungen hinzufügen (z. B. immediate-register multiplexer). Währenddessen erläutern.

Welche Addressierungsart?

Ich überlege und komme zu nichts. # Vielleicht stelle ich die Frage anders, woher kommt denn die Speicheraddresse Ich bin etwas aus dem Konzept gebracht. Ich sage man hat speicherinstruktionen mit einem großen immediate, äh… nein, einem register und einem immediate offset Ja, weißt du wie das heißt

Ähm, Register-Register… Register Memory? Nein, es wäre register indirect…

Schreibe einen Programm-Counter in VHDL

Ich schreibe den Program Counter in VHDL und erkläre währenddessen. Fange mit Entity an, erläutere Vergleich mit Header in C. Prozess und Datenfluss verwendet. Korrekturen möglich (CLK erst bei Beginn des Prozesses hinzugefügt.)

Wo beginnt der Program Counter. “Oh, ein Reset wäre wünschenswert. Ich füge rst zu den std_logic-Signalen hinzu, füge ein if ein. Kurze Überlegung, ob vor oder nach normaler counter-logik

Ich entscheide mich für danach, damit der Counter bei 0 beginnt. Er scheint zufrieden.

Während Programmieren Frage Wie heißt die Library, aus der unsigned kommt?

ieee_ er unterbricht mich, meint ich müsste die Zahl nicht auswendig wissen.

Ich schreibe noch use ieee_… .all hin und weise auf die Funktion von .all hin.

Frage: Muss ich auch std_logic importieren. Meine Antwort: nein. Muss man aber.

Was macht std_logic.

Ich erkläre es als neunwertiger Wert mit den wichtigsten Werten 0, 1 und nenne dann U für undefiniert im Simulator, X für Konflikt. Er unterbricht mich, bevor ich Z nenne.

Welche Schritte von VHDL zu Hardware

Ich nenne Synthese, Implementierung mit Map, Translate, P&R. Er scherzt die Implementierung steht ja schon da. Ich erläutere, dass das Ergebnis der Synthese dort für das spezielle FPGA übersetzt wird.

Zeichne das Ergebnis der Synthese für den PC.

Ich zeichne ein Flip-Flop mit CLK, Multiplexer zwischen 4 und jmp_off getrieben von should_jmp. Frage ihn, ob ich genauer auf den Addierer eingehen soll. Nein, nur eine Box mit + drauf.

Ich möchte den Reset als MUX zwischen 0 und dem neuen Wert zeichnen. Ich sage Haben die FF einen eigenen RST. Er sagt, sie haben einen. Ich streiche den MUX durch und verkable den RST mit den FFs.

Mit welcher Taktfrequenz kann das betrieben werden?

Hängt vom kritischen Pfad ab.

Was ist der kritische Pfad

Der längste Pfad, hier vom Ausgang der Register bis zum Eingang, weil jede Komponente eine bestimmte Zeit benötigt.

In welcher Einheit wird er gemessen

Zeit, also Sekunden

Wie würde es sich auf die Taktfr. auswirken, wenn wir 16 oder 64 Bit hätten?

Ich überlege. Ich fange mit dem Multiplexer an, dann fällt mir auf, dass man nur mehr parallele Multiplexer braucht. Ich gehe zum Addierer über. Ich sage, wenn man einen RCA verwendet benötigt man länger.

Wie viel länger?

Ich nenne O(n)O(n) in der Anzahl der Bits.

Geht das schneller

Ich nenne die CARRY4-Blöcke im FPGA und den CLA. Ich beschreibe und fange mit pro Bit propagiert und generiert an, er meint, so genau wäre das nicht nötig.

Wie viel schneller ist der CLA?

Ich überlege kurz und nenne O(log(n))O(log(n)). Passt.

Was kann man noch tun, um die Taktfrequenz zu verbessern?

Pipelining.

Erkläre

Ich führe die SC-CPU an, bei der dinge in einem Schritt passieren und nenne, wie man sie in Schritte zerlegen könnte.

Was ist so eine Stufe, wie sollte man sie wählen

Eine wäre z. B. EX

Nein, woraus besteht sie

Register und die HW, die man vorher hatte, also z. B. die ALU.

Und wie sollte man sie wählen

So dass sie alle gleich lang brauchen

Vorschlag: CPU mit 100 Pipelinestufen

Nein, weil Hazards.

Welche Hazards gibt es

Wie sehen genau Control Hazards aus

Sprünge, man muss die Pipeline flushen.

Was kann man dagegen tun. Vorteile Nachteile?

Branch Delay Slot, ich erläutere. Vorteil: Einfach für den CPU-Designer. Nachteil: Unflexibel, falls man längere Pipeline möchte. Performance wird evtl. nicht ganz ausgenutzt.

Was noch

Branch Prediction: Ich nenne Always-Taken, Not-Taken und die BHT.

In welchen Stufen kann man die Branches frühestens und spätestens behandeln. Vorteile Nachteile?

Wenn man keine Extra-Hardware verwendet frühestens EX

Aber das könnten wir ja

Dann nach ID/OF, wenn man einen Extra Vergleicher baut.

Und wo spätestens

Äh, so spät wie man will eigentlich. Hier wird es holprig.

Ok, wenn man dann korrigiert. Aber ab wo spätestens wenn man nichts korrigiert.

Mir fällt es ein. Dann bevor etwas geschrieben wurde.

Er: Was?

Ich: Register

Er: Ja.

Ich: Oder memory.

Also bleiben IF, ID/OF und EX. Vorteile Nachteile?

Je früher man es macht, desto weniger falsche Instruktionen in der Pipeline. Dafür auch weniger information. Bei EX kann man z. B. die ALU verwenden, bei ID/OF braucht man eigene Vergleicher und bei IF müsste man sogar den Wert extra aus den Registern holen.

Also welches ist schneller für Taktfrequenz?

Ich überlege und rede um den heißen Brei herum, indem ich die Abwägung von vorher nenne. Er stellt mir die Frage nochmal sehr bestimmt. Ich nenne und begründe: Später, da man nicht die Extra HW auf dem Crit-Path hat

Das ist zufriedenstellend.

Er meint: Letztes Thema

Instructions per Cycle. Wie viele schafft die CPU hier, wie kann man es verbessern.

1 IPC, Verbesserung: VLIW, also man macht doppelt so große Instruktionen und arbeitet zwei auf einmal ab, also Superskalarität.

Ok, am Diagramm von vorhin, was müsste man größer bauen?

Hier wechsle ich mental zwischen nn-fach größer und einfach verdoppelt hin und her. Ich nenne den inst-mem und die ALU, die man verdoppeln müsste und Register. Er fragt, wie viele Ports man an den Registern braucht. 2nn lesen, nn schreiben.

Und wie viel Perf kostet das speziell in den Registern?

Ich muss überlegen. Ich nenne zuerst die One-Hot-Decoder, die man verdoppeln bzw. ver n-fachen müsste. Nach etwas überlegen fällt mir ein, dass man den zu schreibenden Wert multiplexen muss.

Ich nenne 32 Bit breite 2:1-MUXe. Er fragt Wie viele?. Ich sage 32. Richtig.

Was kann man noch machen.

Ich erläutere ein bisschen zu Superskalarität mit einem Beispiel, dass man zwei ALU-Instruktionen hintereinander hat.

Wir sind fertig, leicht überzogen.

Ich möchte meine Tasche mitnehmen, er weißt mich darauf hin, das er mich gleich nocheinmal hereinbitten würde. Sie besprechen ein paar Minuten lang, er nennt mir die Minute.

Er meint, er hätte mir ein paar mal Hinweise geben müssen, aber dass ich auf viele Dinge alleine gekommen wäre und generell Ahnung hätte, was ich tue.

Die Atmosphäre war insgesamt sehr entspannt, auch wenn ich mal Hilfestellung brauchte ging es danach gut wieder voran. Gute Prüfung, kann ich empfehlen.

Abschluss

Ich gehe, bitte den nächsten herein, sage ihm die Note und wünsche ihm Viel Glück und setze mich anstelle von ihm auf den Stuhl. Beim schreiben dieses Protokolls grüßt mich Tobias Baumeister. Große Klausur voraus, Nein, gerade bestanden, ich schreibe Protokoll, Ach, du hast wegen der 1.0 geschrien. Glückwunsch. Ich schreibe weiter.

Der nächste kommt heraus, er meint, er wurde zu Automaten gefragt, was er schwierig fand. Er bestand trotzdem. Ich beglückwünsche ihn.

Die übernächste kommt vorbei, ich weise sie zum Raum und wünsche ihr viel Glück.