Prüfer: Marc Reichenbach
Beisitzer: Konrad Häublein
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.
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.
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?
F: Wie kommt VHDL auf das FPGA
F: Warum will man simulieren?
F: Wie funktioniert das?
F: Jetzt haben wir ja so einen Counter. Wofür ist der gut einsetzbar?
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?
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 | | | \---------/ \---------/ | | | | | |----------------| |------------------------------------|