FPGA-CPUs, wie finde ich die maximale Geschwindigkeit?

14

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?

Uwe Keim
quelle
12
@KingDuken Ich bin neugierig auf die Alternative zu Verilog zum Entwerfen von CPU, die Sie im Sinn haben (nicht VHDL, nehme ich an :))?
Eugene Sh.
1
@KingDuken Das ist nicht das Problem, das ich habe. Ich habe meine CPU und ihre Architektur bereits auf einem Steckbrett erstellt und möchte sie auf ein FPGA portieren. Meine Frage ist, wie kann ich berechnen, wie hoch die maximale Taktfrequenz für meine CPU sein würde, was begrenzt sie?
4
Vielleicht möchten Sie Google "statische Timing-Analyse"
The Photon
14
@KingDuken Als jemand, der zwei CPUs entworfen hat, ist es nicht wirklich so zeitaufwendig. Sie können einen arbeitenden Prozessor in 1-2 Monaten haben, wenn Sie wissen, was Sie tun.
user110971
2
@KingDuken Unterhaltsame Tatsache: Sun / Oracle hat den Verilog-Quellcode für seine UltraSPARC T1- und T2-Prozessoren veröffentlicht. Ich habe zufällig mehrere persönlich gesehen, und alle haben funktioniert. Zu Ihrer Information, sie haben sogar SPECint_rate2006 gewonnen! : D Das zeigt deutlich, wie unmöglich es ist, CPUs in Verilog oder anderen HDLs zu entwerfen. Ich habe es selbst ein paar Mal als Hobby gemacht, und es ist wirklich nichts Unmögliches (wenn man es einmal geschafft hat, wie immer)
Richard the Spacecat

Antworten:

28

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.

alex.forencich
quelle
22

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.

Dave Tweed
quelle
Was würde dazu führen, dass die Bedingungen nicht erfüllt werden? Was begrenzt die Uhrzeit? Ist es von dem von mir verwendeten FPGA abhängig oder ist es für die gesamte FPGA-Familie gleich (oder für jedes existierende FPGA?)
3
Dies hängt von der Geschwindigkeit des FPGA ab und davon, wie viel kombinatorische Logik Sie zwischen die FFs in Ihrem Entwurf einfügen.
Dave Tweed
9
@ appmaker1358, haben Sie versucht, das Datenblatt für ein FPGA zu lesen? Die Geschwindigkeitsangabe ist einer der wichtigsten Parameter, die im Datenblatt genannt werden.
Das Photon
2
Die Geschwindigkeit wird durch den längsten Zeitpfad begrenzt, der die längste Ausbreitungsverzögerung durch die Logik und das Routing zwischen zwei zustandsbehafteten Elementen (Flip-Flops, RAMs usw.) darstellt. Unterschiedliche FPGAs haben unterschiedliche Timing-Parameter, und daher erzielt ein Design auf verschiedenen FPGAs unterschiedliche Geschwindigkeiten. Es gibt einige Teile des FPGAs, die jedoch frequenzbegrenzt sind - Taktverteilungskomponenten und PLLs haben normalerweise Grenzen, aber es ist schwierig, HDL zu schreiben, das denen für nicht-triviale Designs nahe kommt.
alex.forencich
3
Außerdem müssen Sie immer Zeiteinschränkungen hinzufügen. Die Platzierung und das Routing berücksichtigen die Einschränkungen und bemühen sich, diese zu erfüllen. Wenn Sie keine Einschränkungen hinzufügen, werden die Tools keine großen Anstrengungen unternehmen und Sie erhalten keine sehr optimistische Zahl.
alex.forencich
13

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.

hacktastisch
quelle
-2

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.

Spannungsspitze
quelle