Sie befinden sich hier: Termine » Prüfungsfragen und Altklausuren » Hauptstudiumsprüfungen » Lehrstuhl 3 » CPU Entwurf mit VHDL   (Übersicht)

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.

-- 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;

F: Bitte die RTL dazu aufmalen.

 --------------------------------|
 |                               |
 |  |-----|        |----------|  |
 |  |     |        |          |  |
 |--|  +  |--------| Register |--|
    |     |        |          |
    |-----|   |---->          |
              |    |          |
              |    |----------|
              |         |
             clk      reset

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:

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

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