Du befindest dich hier: FSI Informatik » Prüfungsfragen und Altklausuren » Hauptstudiumsprüfungen » Lehrstuhl 3 » CPU Entwurf mit VHDL   (Übersicht)

no way to compare when less than two revisions

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.


pruefungen:hauptstudium:ls3:cpu-2015-08 [27.08.2015 11:53] (aktuell) – angelegt Rachus
Zeile 1: Zeile 1:
 +====== CPU Entwurf mit VHDL ======
 +
 +**Prüfer:** Marc Reichenbach\\
 +**Beisitzer:** Carsten Demel
 +
 +===== Vorbereitung/Allgemeines =====
 +
 +Als Vorbereitung habe ich das wichtigste aus Folien und Mitschrift zusammengefasst, sowie die von Marc während der Vorlesung als prüfungsrelevant bezeichnete Abschnitte wiederholt und versucht daraus Übungsaufgaben zum Üben abzuleiten.
 +
 +Während der Prüfung bekommt man Stifte und Papier und soll öfters auch einmal etwas aufmalen. Die Bereiche VHDL und CPU wurden jeweils zu 15 Minuten abgefragt. Alle Fragen kamen von Marc. Die Atmosphäre ist sehr angenehm und die Prüfung im Allgemeinen sehr fair.
 +
 +===== Prüfungsablauf =====
 +
 +Eigentlich bereitet Marc die Studenten während der Vorlesung recht gut auf die Prüfung vor, aber hier trotzdem einmal der Ablauf.
 +
 +==== VHDL ====
 +
 +=== Allgemein ===
 +
 +**F:** Was ist VHDL?
 +  * Hardwarebeschreibungssprache
 +  * Signale sind Verbindungen
 +  * Beschreibung des funktionalen Verhaltens
 +  * Struktur-, Datenfluss-, Prozessbeschreibung
 +
 +**F:** Wie ist eine normale VHDL-Datei aufgebaut?
 +  * Bibliotheken
 +  * Entity-Beschreibung ("Schnittstelle")
 +  * Architektur ("funktionales Verhalten")
 +  * Konfiguration ("Auswahl einer bestimmten Architektur")
 +
 +**F:** Wann braucht man Konfigurationen?
 +  * Mehrere Architekturbeschreibungen, z.B. für unterschiedliche Anforderungen
 +
 +**F:** Bitte Counter in VHDL schreiben.
 +
 +<code VHDL>
 +-- Drumherum durfte man weglassen
 +process(clk, reset)
 +begin
 + if reset = '1' then -- asynchrones Reset
 + pc <= (others => '0');
 + elsif clk'event and clk = '1' then -- wir wollen einen getakteten Speicher
 + pc <= pc + 1;
 + end if;
 +end process;
 +</code>
 +
 +**F:** Bitte die RTL dazu aufmalen.
 +
 +<code>
 + --------------------------------|
 +                               |
 +  |-----|        |----------|  |
 +  |            |          |  |
 + |--|  +  |--------| Register |--|
 +    |            |          |
 +    |-----|   |---->          |
 +              |    |          |
 +              |    |----------|
 +              |         |
 +             clk      reset
 +</code>
 +
 +**F:** Wie schnell kann der Counter jetzt takten?
 +  * Abhängig von der Geschwindigkeit des Addierers
 +  * -> kritischer Pfad
 +
 +**F:** Muss ein Addierer verwendet werden?
 +  * Nein, es reicht "Counter"
 +  * Bit flippen, wenn alle Bits rechts davon '1'
 +
 +**F:** Warum std_logic?
 +  * Mehrwertige Logik für Simulationen (nicht nur '1', '0'), z.B. auch 'U' für undefined
 +  * Nicht alle Werte in Hardware möglich
 +
 +=== Funktionale Simulation ===
 +
 +**F:** Wie funktioniert das?
 +  * Kompilierung
 +  * Elaboration
 +  * Initialisierung
 +  * Ausführung
 +    * Testbench*Stimuli
 +    * Ereignislisten an Signalen mit Timestamps für die Ereignisse/Transaktionen
 +    * Deltazyklen zur Lösung paralleler Zuweisungen, da CPUs sequentiell
 +
 +=== FPGA ===
 +
 +**F:** Warum FPGAs?
 +  * mehrfache Neukonfiguration möglich -> Prototyping
 +  * bei Antifuse beispielsweise nicht möglich (Fehler u.U. nicht behebbar)
 +
 +**F:** Warum funktioniert das?
 +  * SRAM
 +
 +**F:** Wie kommt VHDL auf das FPGA
 +  * Synthese ("VHDL -> RTL")
 +  * Implementierung (besonders der Unterschied zwischen Mapping und Place & Root wurde gefordert)
 +    * Translation (vgl. Elaborierung oben: "Verbinden mehrerer RTLs")
 +    * Mapping (Welche Elemente für z.B. ein AND -> LUTs)
 +    * Place & Root (Welche LUT des FPGAs und wie zu verbinden)
 +
 +==== CPU ====
 +
 +=== Single Cycle CPU ===
 +
 +**F:** Elemente einfacher CPU?
 +  * Program Counter
 +  * Instruction Memory
 +  * Register File
 +  * ALU
 +  * Data Memory
 +  * + Decoder, Additionswerke für PC und Branches, ...
 +  * siehe Folien ;)
 +
 +**F:** Auch ohne RegFile möglich (Frage kam vermutlich, weil ich "bei unserer CPU brauchen wir auch ein RegFile" oder so ähnlich sagte)
 +  * Ja, man könnte auch SRAM/BRAM verwenden
 +  * 32 Einträge für jedes Register
 +  * Registeradresse als Speicheradresse verwenden
 +  * Falls nicht genügend Ports für gleichzeitiges mehrfaches Lesen von 2 Registern -> Takten
 +
 +**F:** Jeweils Datenpfade für folgende Anweisungen erklären:
 +<code Assember>
 +add $1, $2, $3 # Allgemein
 +lw  $5, 16($4) # Adresse von ALU aus Register und Immediate berechnet
 +sw  $5, 16($4) # Registerwert an ALU vorbeizuschleifen
 +</code>
 +
 +=== Pipelining ===
 +
 +**F:** Bitte Pipelinestufen einzeichnen (sehr leicht!)
 +
 +**F:** Wo kann hier ein Strukturhazard auftreten
 +  * Instruction Memory und Data Memory identisch
 +  * Lösung: Stalls oder auf Ebene weiter darunter (z.B. Caches) verschieben
 +
 +**F:** Bitte die Lösung mit der Ebene Aufzeichnen
 +  * I$, D$, Arbiter, L2-$, RAM
 +
 +**F:** Sind die Busse überall gleich?
 +  * Dachte zuerst, dass der Unterschied onChip vs. offChip Bus (Cache vs RAM) oder so gemeint war, das war aber nicht der Fall
 +  * CPU -> Mem: Adresse, Read, Write, Data
 +  * Mem -> CPU: Data, Hit/Valid/Ready
 +  * "Homogene Speicherarchitektur"
 +
 +**F:** Was würde man noch pipelinen?
 +  * ALU
 +
 +**F:** Gibt es da nicht Probleme mit dem Forwarding?
 +  * Barrel-Shifter -> Großer Multiplexer, Ergebnis wäre erst ganz am Ende vorhanden (nach allen Stufen)
 +
 +**F:** Addierer mit Pipeline aufzeichnen
 +  * Zwei halb so große Addierer mit Pipelineregister
 +  * Forwarding von Register zu Addierer
 +