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: Sebastian Rachuj

Vorbereitung/Allgemeines

War eine super faire und entspannte Prüfung. Marc schubst einen in die richtige Richtung, wenn man gerade mal nicht auf die gewünschte Antwort kommt.

Fragen aus der Vorlesung wiederholen hilft extrem.

Prüfungsablauf

Was ist ein FPGA?

  • Programmierbare Hardware
  • Gut zum Prototyping, da mehrfach programmierbar

Warum FPGA und nicht Universalprozessor?

  • Auf individuell programmierbar - kann auf Spezialanwendung ausgelegt werden
  • Geringerer Energieverbrauch

Was ist VHDL?

  • Hardwarebeschreibungssprache

Was ist der Unterschied zu zB. C?

  • In C werden Anweisungen sequentiell abgearbeitet
  • In VHDL ist alles parallel, außer man bringt mit getakteten Prozessen eine Sequenz rein

Woraus ist ein VHDL Modul aufgebaut?

  • library – Bibliotheken/Packages einbinden
  • entity – Schnittstelle mit Ports
  • architecture
    • Strukturbeschreibung – Modul-/Hierarchiebeschreibung
    • Verhaltensbeschreibung – Datenfluss ↔ Prozesse
  • configuration – Zuordnung entity → architecture

Bitte die Schnittstelle für einen Multiplizierer für 16 bit Operanden und die architecture aufschreiben.

entity mul is
  port (a: in std_logic_vector(15 downto 0);
          b: in std_logic_vector(15 downto 0);
          o: out std_logic_vector (31 downto 0));
end mul;
 
architecture behav of mul is
  -- später hier: constant b: integer := 4 bzw. 5;
begin
process(a,b) begin
  0 <= a * b;
end process;
end behav;

Braucht man dafür einen Prozess?

  • Nein, ginge auch mit Datenflussbeschreibung

Streich mal den zweiten Eingang und ersetz den durch eine Konstante '4'. Wie wird das in Hardware abgebildet?

  • HW-Multiplizierer
  • Addierer
  • 4 = 2^2 ⇒ Shift, also Verkabelung

Wo finden wir denn solche Shifter noch in der CPU?

  • im PC
  • bei sign-extend von immediate für Sprünge

Jetzt ist die Konstante '5', wie sieht das jetzt aus?

  • keine Zweier-Potenz mehr
  • entweder Multiplizierer

Geht das nicht ressourcenschonender?

  • shift um 2 und a nocheinmal addieren

Skizzier mal eine Single-Cycle CPU.

  • alle Komponenten hingemalt und jeweils kurz erklärt was es tut, was Ein- und Ausgänge sind etc.

Schauen wir uns mal das Register-File genauer an. Wie viele Register will man denn?

  • Es kommt drauf an
  • Wie viel Speicher steht zu Verfügung
  • Viele Register → wenig lw/sw nötig, aber langer kritischer Pfad im RegFile Multiplexer
  • Wenig Register → kurzer kritischer Pfad im RegFile, aber öfter Speicheroperationen mit hoher Latenz nötig

Wie kann die use-Latency mit vielen Registern versteckt werden? (use latency wurde nochmal erklärt und dann ein Bsp. gegeben)

  for i in ...
    lw ti, a[i]
    add tx, ti, ti
  end for 
  • Latenz der lw kann etwas versteckt werden durch etwas loop-unrolling:
for i in .... i+= 3
  lw ti, a[i]
  lw ti+1, a[i+1]
  lw ti+2, a[i+2]
  
  add tx, ti, ti
  add ty, ti+1, ti+1
  add tz, ti+2, ti+2
end for;

Chef sagt so und so viele Register, dadurch ist der kritische Pfad aber nicht mehr akzeptabel. Wie löst du das Problem?

  • Pipelining
  • Einzelne Ebenen des Multiplexerbaums als Pipelinestufen

Was gibt es für potentielle Probleme beim Pipelining?

  • Struktur-Hazards
  • Daten-Hazards
  • Control-Hazards

Was kann hier auftreten?

  • es wäre gut gewesen, hier einfach alle 3 Typen einmal kurz zu diskutieren
  • Struktur-Hazards sind nur in Sonderfällen ein Problem (bei gleichzeitigem Rückschreiben und Lesen)
  • Daten-Hazards sind kein Problem
  • Control-Hazards müssen behandelt werden, falls falsche Instruktionen in der Pipeline sind

Wie viele Takte verliere ich im schlimmsten Fall bei einem Control-Hazard?

  • So viele, wie Pipelinestufen vor der Sprungentscheidung
  • also viele, wenn RegFile maximale Anzahl an Pipelinestufen beinhaltet

Kann die Sprung-Entscheidung schon früher getroffen werden?

  • frühestens nach der letzten Pipelinestufe des RegFiles, da dann erst die richtigen Register ausgewählt und die Inhalten bekannt sind

Wie könnte durch das Aufgeben von Flexibilität, doch schneller einer Sprung-Entscheidung getroffen werden?

  • spezielle Register definieren, in denen immer Sprung-Operanden stehen, die dann sofort ausgelesen werden können