Inhaltsverzeichnis

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?

F: Wie ist eine normale VHDL-Datei aufgebaut?

F: Wann braucht man Konfigurationen?

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?

F: Muss ein Addierer verwendet werden?

F: Warum std_logic?

Funktionale Simulation

F: Wie funktioniert das?

FPGA

F: Warum FPGAs?

F: Warum funktioniert das?

F: Wie kommt VHDL auf das FPGA

CPU

Single Cycle CPU

F: Elemente einfacher CPU?

F: Auch ohne RegFile möglich (Frage kam vermutlich, weil ich „bei unserer CPU brauchen wir auch ein RegFile“ oder so ähnlich sagte)

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

F: Bitte die Lösung mit der Ebene Aufzeichnen

F: Sind die Busse überall gleich?

F: Was würde man noch pipelinen?

F: Gibt es da nicht Probleme mit dem Forwarding?

F: Addierer mit Pipeline aufzeichnen