Du befindest dich hier: FSI Informatik » Prüfungsfragen und Altklausuren » Hauptstudiumsprüfungen » Lehrstuhl 3 » CPU Entwurf mit VHDL 7,5 ECTS Prüfung 2022-08-11   (Übersicht)

CPU Entwurf mit VHDL 7,5 ECTS Prüfung 2022-08-11

Meta Information

  • Subject: CPU Entwurf mit VHDL 7,5 ECTS, SS 22
  • Date: 2022-08-11
  • Type of Exam: mündlich
  • Examiner: Philipp Holzinger, Beisitzer: Thomas Schlögl
  • Grade: 1.0
  • Undergone Preparation
    • Jede VL zusammengefasst und gelernt, Abbildungen versucht zu verstehen. Da ich in praktisch jeder VL war, war nichts überraschendes dabei. Es ging um die Fragen auf den Folien, die in der VL immer diskutiert wurden. Die Übungs VHDL Dateien nochmal anzuschauen hat auch nicht geschadet.
  • Evaluation
    • Sehr entspannte Atmosphäre, man hat sich geduzt. Hat sich wie ein kleiner Plausch angefühlt.
    • Meine Bewertung war super fair, ich stand zwischen 1,3 und 1,0 weil ich bei 2 Punkten ein bisschen geschwankt hatte. Mit der Argumentation in dubio pro reo haben mir die beiden Prüfer dann die 1,0 gegeben, was ich sehr fair fand. Ich hätte auch die (zugegeben: strenge) Begründung einer 1,3 nachvollziehen können.
    • Ich habe halt viel auch ohne Nachfrage erklärt, also versucht einen kleinen Vortrag zu halten. Ging super, Philipp hat mich unterbrochen, wenn er was nicht wissen wollte. Das kam aber kaum vor, also er hat mich wirklich ausreden lassen, was ich sehr erfrischend fand und was ich so noch nicht oft hatte. Wenn man z.B. in Kompilerbau mal ein bisschen weg von dem kam, was der Prüfer wissen wollte wurde man sofort mitten im Satz unterbrochen. (Auch verständlich angesichts der kurzen zur Verfügung stehenden Zeit).

Prüfung

1. Teil: VHDL

* Einstiegsfrage: Skizziere doch mal eine SingeCycleCPU.

Blatt und Stift genommen und skizziert, die Verbindungen ein bisschen erklärt.

* Frage: Wie wird das jetzt umgesetzt? Am Besten mal am Beispiel des Register Files aufzeigen.

Mit VHDL, Hardwarebeschreibungssprache. Es gibt taktsynchrone/sequentielle Teile, zu denen das RegFile gehört und kombinatorische Teile. Herangehensweise ist Denkweise auf dieser RTL Ebene und Umsetzung in taktsynchronen Prozessen bzw. kombinatorischen Prozessen oder Datenflussbeschreibung.

* Frage, um mich in die richtige Richtung zu lenken: Also wie genau ist so eine VHDL Datei aufgebaut, schreib mal was hin.

Ich habe dann eine VHDL Datei fürs RegFile geschrieben, mit kurzem Verweis auf Librarys, std_logic als 9 Wertige Logik mit Beispielen dazu (U,-,X). Dann entity und achritecture. In der Entity hatte ich ein paar Ports vergessen und dann im Laufe der architecture Entwicklung dann noch ergänzt, da hat mich Philipp zum Glück NICHT unterbrochen und mal machen lassen. Daduch konnte ich das schön ergänzen.

* Rückfrage zu Datentypen, Passen die so?

für Zugriff mit std_logic_vector Adresse muss man noch to_integer(unsigned(addr)) machen.

*Was muss dann noch passieren mit der VHDL Beschreibung?

Simulation, Synthese (architekturspezifische Netzliste) und Implementierung (Translation, Map , Place and Route genannt)

*Frage: Wie sieht denn das Ergebnis der Synthese für dein Register File aus?

FF-Arrays hingezeichnet, data_in mit decoder zu One Hot Codierung angedeutet und dann ver-und-et mit WE, das an den En Eingang der FFs. Ausgang zwei 32:1 MUX hingezeichnet mit je einer addr als Steuereingang. Erwähnt, dass solche MUXs als Baum aus 2:1 MUXs aufgebaut würden.

*Wie sieht es mit 1. Takt und 2. Ressourcenverbrauch aus, wenn wir 1. die Anzahl der Register auf 64 erhöhen oder 2. die Breite der Register auf 64 erhöhen.

Wahrscheinlich längste Antwort/Phase: 1. Takt: 1. verlängert kritischen Pfad, damit Takt ggf. langsamer. 2. hat keine Auswirkungen auf Takt, man braucht nur parallel mehr MUXE.
2. Ressourcenverbraucht: 1. Braucht 32 2:1 MUX zusätzlich, hängt an den MUX Baum also eine Ebene dran ⇒ Sind dann also doppelte so viele MUXs. 2. Wir brauchen dann 64 32:1 MUXS

Pipelining und IPC Steigerung

*Wovon hängt der Takt ab und wie bekommen wir den Takt schneller?

Vom längsten kritischen Pfad, durch Pipelining. stages eingezeichnet

*Probleme damit? Ists besser, wenn wir 10 Pipelinestufen verwenden?

Hazards und Latenzzeit bei Interrupts/Flushen der Pipeline. Grundsätzlich sind 10 besser, wenn wir alle Stufen gleich groß machen und die Hazard Behandlung hinbekommen.

* Hazards? Welche gibt es und Lösungen?

Strukturh., ⇒ Komponenten verdoppeln
Datah. ⇒ Kompiler oder in HW: Forewarding an der gezeichneten Pipeline erklärt und eingezeichnet
Controlh. ⇒ bei Sprüngen. Delay Slots, Kompiler oder Sprungentscheidung vorzeihen nur ganz kurz behandelt, hatten da schon nur noch 5 min Zeit

* Wie ist der IPC der Pipeline-CPU und wie bekommen wir den nach oben?

VLIW: IPC je nachdem, wie viele Befehle wir in einen Slot packen dürfen.
Multicores (kurz noch Multithreading erwähnt): IPC, wie Anzahl Cores.
Superskalarität: Da war die Zeit um, Philipp wollte das aber noch machen. Bin dann da etwas durcheinander gekommen und konnte nicht mehr sagen, woher der IPC Uplift kommt.
Philipp hat es mir dann erklärt: Es wird nicht nur die ALU vervielfacht sondern das Registerfile wird mächtiger und wir laden gleichzeitig mehrere Befehle. Wir können im RegFile dann mehrere gleichzeitig speichern und rausbekommen.