Ich beschäftige mich gerade mit FPGAs, und wenn ich das richtig verstehe, verbinden Sie Logikgatter mithilfe von Code. Wenn ich also eine CPU in Verilog entwerfe, sollte sie einige Logikgatter miteinander verbinden und funktionieren. Aber woher weiß ich, wie schnell meine DIY-CPU laufen kann? Wovon hängt es ab?
fpga
cpu
homebrew-cpu
Uwe Keim
quelle
quelle
Antworten:
Die Geschwindigkeit eines Entwurfs ist durch verschiedene Dinge begrenzt. Am wahrscheinlichsten ist die Ausbreitungsverzögerung durch die kombinatorische Logik in Ihrem Entwurf, die als kritischer Pfad bezeichnet wird . Wenn Sie ein schnelles FPGA verwenden und Ihre HDL sehr sorgfältig schreiben, könnten Sie wahrscheinlich 700 MHz auf so etwas wie einem Virtex Ultrascale + erreichen. Auf einem FPGA der unteren Preisklasse, beispielsweise einem Spartan 6, entspricht ein vernünftiger Wert wahrscheinlich eher 250 MHz. Dies erfordert überall Pipelining, so dass Sie das absolute Minimum an kombinatorischer Logik zwischen zustandsbehafteten Komponenten (minimale Logikebenen), geringen Fan-Outs (minimale Belastung der Logikelemente) und keinen überlasteten Rattennestern (effiziente Routing-Pfade) haben.
Die Fabric-Logik verschiedener FPGAs weist unterschiedliche Zeitparameter auf. Schnellere, teurere FPGAs haben geringere Verzögerungen und können daher bei gleichem Design höhere Taktfrequenzen erzielen oder bei gleicher Frequenz ein komplexeres Design oder Design mit weniger Pipelining ausführen. Die Leistung innerhalb eines bestimmten Prozesses kann ähnlich sein. Beispielsweise werden Kintex Ultrascale und Virtex Ultrascale im selben Prozess hergestellt und weisen ähnliche Verzögerungen bei Zelle und Routing auf. Es ist unmöglich zu sagen, wie schnell ein bestimmtes Design sein wird, ohne es durch die Werkzeugkette zu führen und die Timing-Berichte der statischen Timing-Analyse zu betrachten.
Bedenken Sie beim Ausführen der Toolchain zur Bestimmung der maximalen Taktrate, dass die Tools zeitgesteuert sind: Sie werden versuchen, die angegebenen Zeiteinschränkungen zu erfüllen. Wenn keine zeitlichen Einschränkungen angegeben sind, kann das Ergebnis sehr schlecht sein, da die Werkzeuge nicht versuchen, das Design auf Geschwindigkeit zu optimieren. Im Allgemeinen müssen die Tools mehrmals mit unterschiedlichen Taktperiodeneinschränkungen ausgeführt werden, um die maximal erreichbare Taktfrequenz zu ermitteln.
Wenn Sie Ihr Design so optimieren können, dass der kritische Pfad nicht unbegrenzt ist, stoßen Sie auf Einschränkungen bei der Taktgenerierung und -verteilung (PLLs, DCMs, Taktpuffer und globale Taktnetze). Diese Grenzen sind in Teiledatenblättern zu finden, aber mit einem nicht trivialen Design ist es schwierig, an sie heranzukommen. Ich habe Sachen auf einer Virtex Ultrascale mit 500 MHz ausgeführt, aber dies waren nur eine Handvoll Zähler, um andere Komponenten mit Triggersignalen zu versorgen.
quelle
Sie synthetisieren Ihr Design in der Zieltechnologie (einem bestimmten FPGA) und lassen sich von den statischen Timing-Analysetools die minimale Taktperiode anzeigen.
Oder Sie fügen dem Entwurf zunächst Einschränkungen hinzu, und dann lassen Sie die Tools wissen, ob sie erfüllt sind oder nicht.
quelle
Die Geschwindigkeit, mit der Ihre CPU läuft, basiert auf Ihrer längsten Flop-to-Flop-Verzögerung in Ihrem synthetisierten Design. Die Verzögerung von Flop zu Flop umfasst Clock-to-Q, Routing, Logik / LUT und Flop-Setup-Zeit. Diese bilden zusammen den kritischen Pfad Ihres Timings, den Sie im Timing-Bericht überprüfen können, der vom Ort-und-Route-Tool ausgegeben wird.
Es gibt ganze Designdisziplinen, die sich mit der Erstellung von Architekturen befassen, die diese Verzögerung minimieren, um einen bestimmten Prozess optimal zu nutzen - Pipelining, parallele Ausführung, spekulative Ausführung usw. Es ist eine faszinierende Aufgabe, die es mit sich bringt, die letzte Unze Leistung aus einem FPGA (oder in diesem Fall einem ASIC) herauszuholen.
Die FPGA-Anbieter geben jedoch unterschiedliche Geschwindigkeitsstufen für ihre Teile an, die einer maximalen MHz-Rate entsprechen. Zum Beispiel ist ein -2 Xilinx Artix ungefähr ein '250 MHz'-Teil, obwohl es höhere Taktraten für Konstruktionen mit hoher Pipeline-Auslastung ermöglicht.
Wenn Sie mit den FPGA-Synthese- und Place-and-Route-Tools interagieren, müssen Sie Einschränkungen für Ihr Design festlegen. Diese geben dem Werkzeugfluss die Ziel-Flop-to-Flop-Verzögerung an, die Sie erreichen möchten. In Quartus (Altera) und Vivado (Xilinx) verwenden diese Einschränkungen eine Syntax namens SDC, die für Synopsys Design Constraints steht. Die DEZA kam ursprünglich aus der ASIC-Welt und wurde auch von der FPGA-Industrie übernommen. Lernen Sie die DEZA kennen - sie hilft Ihnen, die gewünschten Ergebnisse zu erzielen.
Altera und Xilinx verfügen über Online-Communities, die Hilfe bei der Verwendung der SDC-Syntax und vielen anderen Themen bieten.
Wenn Sie jedoch Wert auf Geschwindigkeit legen, sollten Sie ein FPGA in Betracht ziehen, das ein hartes CPU-Makro wie Zynq enthält.
quelle
Die CPU läuft nicht schneller als die globalen Uhren, so dass eine Obergrenze für die Geschwindigkeit festgelegt ist. Normalerweise werden Informationen zur maximalen Taktrate in FGPA-Datenblättern aufgeführt.
quelle