Inhaltsverzeichnis

CPU Entwurf mit VHDL

Prüfer: Marc Reichenbach
Beisitzer: Konrad Häublein

Vorbereitung/Allgemeines

Zur Vorbereitung bin ich die Folien mehrmals durchgegangen. Die Vorlesung beinhaltet gegen Ende ein kleines Projekt, welches ich mit meinem Partner vor der Prüfung bearbeitet hatte, was beim VHDL-Wiederholen durchaus hilfreich war. Ansonsten habe ich mir die CPU aus der Übung nochmal angesehen. Für die eigentliche Prüfung sind auch die Tafelskizzen und Ausführungen Marcs während der Vorlesung sehr wichtig, dementsprechend habe ich meine Mitschriften nochmals durchgearbeitet.

Prüfung mit Papier und Stift. Ich musste sowohl etwas VHDL schreiben als auch RTL-Schematik und eine minimale CPU skizzieren. Die Fragen wurden nur vom Prüfer gestellt. Marc schaut die ganze Zeit leicht kritisch, auch wenn man das Richtige sagt, davon darf man sich nicht verunsichern lassen. Die Atmosphäre war angenehm.

Prüfungsablauf

Die Prüfung war ungefähr 50/50 zwischen VHDL und CPU-Design aufgegliedert, allerdings hat Marc bei VHDL leicht überzogen. Generell war die Prüfung sehr ähnlich zum anderen Prüfungsbericht von diesem Semester.

VHDL

Allgemein

F: Was ist VHDL?

F: Synthesefähige Anteile. Wie beschreibe ich das?

F: Wie ist eine normale VHDL-Datei aufgebaut?

F: Bibliotheken. Was nutzt man denn da wichtiges, und braucht man eigentlich immer?

F: Bitte einen Zähler in VHDL schreiben.

	signal count : std_logic_vector(...); -- je nach breite
 
	process(clk, reset)
	begin
		if reset = '1' then -- asynchrones Reset
			count <= "00...";
		elsif clk'event and clk = '1' then -- wir wollen einen getakteten Speicher
			count <= count + 1;
		end if;
	end process;

F: Bitte die RTL dazu aufmalen.

    --------------------------------|
    |                               |
    |  |-----|        |----------|  |
    |--|     |        |          |  |
       |  +  |--------| Register |--|
  '1'--|     |        |          |
       |-----|   |---->          |
                 |    |          |
                 |    |----------|
                 |         |
                clk      reset

F: Wie schnell kann der Counter jetzt takten?

FPGA

F: Wie kommt VHDL auf das FPGA

Funktionale Simulation

F: Warum will man simulieren?

F: Wie funktioniert das?

CPU

F: Jetzt haben wir ja so einen Counter. Wofür ist der gut einsetzbar?

Single Cycle CPU

F: Elemente einfacher CPU? ( + hinmalen und grob „verdrahten“)

F: Auch ohne RegFile möglich?

F: Jeweils Datenpfade für folgende Anweisungen erklären:

add $1, $2, $3     # Allgemein
sw  $5, 16($4)     # Registerwert an ALU vorbeizuschleifen
add $4, $1, $2, $3 # Add mit drei Registern

F: Ist Instruktion drei möglich?

Pipelining

Aus Zeitgründen wurde der allgemeine Teil übersprungen (Stufen einzeichnen, o.Ä.).

F: Wir wollen die ALU pipelinen. Was muss man beachten

F: Wo kann in unserer CPU ein Strukturhazard auftreten?

F: Bitte die Lösung mit der Ebene Aufzeichnen

F: Wie würde man denn so einen Arbiter bauen

                            /------------\
         |----------------->|    idle    |<-------------------------------------|
         |                  \------------/                                      |
         |                       /  \                                           |
         |                      /    \                                          |
         |    i$req && !d$req  /      \ d$req                                   |
         |                    v        v                                        |
         |           /---------\      /---------\                               |
         |           | i$fetch |      | d$fetch |                               |
         |           \---------/      \---------/                               |
         |               ...              ...      <- Get the data from memory  |
         |           /---------\      /---------\                               |
         |           |  i$fin  |      |  d$fin  |                               |
         |           \---------/      \---------/                               |
         |                |                |                                    |
         |----------------|                |------------------------------------|