Designtools: Beim FPGA-Entwurf ist Timing alles

Autor / Redakteur: Angela Sutton, Paul Owens * / Holger Heller

Vorhandene Tools und Techniken helfen Ihnen, Ihre Timing-Performance-Ziele auf effiziente Weise zu erreichen.

Anbieter zum Thema

Wenn Ihr FPGA-Entwurf die Timing-Performance-Ziele verfehlt, ist die Ursache häufig nicht offensichtlich. Die Lösung hängt nicht nur mit der Fähigkeit des FPGA-Implementierungstools zur Optimierung der Schaltung hinsichtlich Timing zusammen. Vielmehr kommt es auch auf die Erfahrung und Fähigkeit der Entwickler an, die Entwurfsziele zu Beginn präzise zu spezifizieren und Timing-Probleme im weiteren Verlauf zu diagnostizieren und zu isolieren.

Entwickler haben Zugriff auf diverse “Tipps und Tricks” zur Definition von Taktsignalen, zur korrekten Formulierung von Timing-Constraints mit Synopsys-Tools wie Synplify Premier, sowie zur Anpassung von Parametern, um die Performance-Ziele ihres Xilinx-FPGA-Entwurfs zu erreichen.

Es gibt mehrere Ansatzpunkte, darunter:

  • bessere Entwurfsvorbereitung: Vollständige und akkurate Timing-Constraints und Takt-Spezifikationen,
  • zeitsparende Entwurfstechniken: Sorgfältige RTL-Code-Entwicklung zwecks besserer Performance-Ergebnisse und Gruppierung der zeitkritischsten Blöcke des Entwurfs, um Iterationen bei späterer Anpassung des Entwurfs zu verkürzen,
  • Korrelation der Synthese- und Place&Route-Timingdaten, um die Quality-of-Results (QoR) bzgl. Timing zu verbessern und Timing-Closure zu erzielen.

Lassen Sie uns einen genaueren Blick auf einige dieser Techniken aller drei Kategorien werfen und untersuchen, wie sie eingesetzt werden können, um die Timing-Ziele zu erreichen.

Schritt 1: Bessere Entwurfsvorbereitung

Die größte Verbesserung entsteht durch die Spezifikation korrekter und vollständiger Entwurfsconstraints. Die Constraints kommunizieren dem Synthese-Tool ihre Entwurfsabsicht und die Performance-Ziele. Sobald die Synthese des Entwurfs abgeschlossen ist, werden diese Constraints zusammen mit der Information über kritische Pfade automatisch in die Place&Route-Tools der Vivado-Design-Suite übernommen, um auch in den Folgeschritten die Erfüllung der Timing-Bedingungen sicherzustellen.

Das Synthese-Tool kann Ihnen helfen, die anspruchsvolle Aufgabe der Definition der Synthese-Constraints zu erledigen. Auf Ihrer To-Do-Liste werden die folgenden Schritte stehen:

  • 1. Identifizierung der Taktsignale
  • 2. Identifizierung und Erstellung von Taktgruppen und Taktbeziehungen
  • 3. Erstellung der Takt-Constraints
  • 4. Definition der Constraints für Ein- und Ausgänge
  • 5. Definition von Multicycle- und False-Paths

Es ist zweckmäßig, anschließend zu überprüfen, dass Sie Ihren Entwurf adäquat und vollständig mit Constraints versehen haben, ohne dass es zu Overconstraining kam. Overconstraining führt zu längeren Synthese-Laufzeiten und möglicherweise zur Anzeige angeblicher kritischer Pfade, die in Wirklichkeit nicht kritisch sind. Stellen Sie sicher, dass Sie Multicycle- und False-Paths richtig spezifiziert und Constraints auf intern abgeleitete Taktsignale vergeben haben (define_path_delay, define_false_path).

Initiale Constraints-Datei für Vivado-Flows

Da die Definition von Constraints sehr aufwändig und abschreckend sein kann, bietet die Synthese-Software Unterstützung, indem sie ein initiales Constraints-Template mit grundlegenden Constraints und korrekter Syntax zur Verfügung stellt, welches als Startpunkt dienen kann. In der Synplify-Synthese-Software verwenden Sie beispielsweise die TCL-Utility zur Erstellung einer initialen FDC-Datei für ein bestimmtes Design (TCL: create_fdc_template). Bild 1 zeigt ein Beispiel einer bei diesem Ablauf generierten Constraints-Datei (.fdc). In diesem Beispiel können Sie erkennen, dass wichtige Punkte wie die Deklaration von Taktsignalen, Taktgruppen (Beziehung zwischen Taktsignalen) sowie Input-/Output-Delays berücksichtigt wurden.

Wenn Sie im Rahmen von Vivado-Design-Suite-Flows Constraints spezifizieren, dann stellen Sie sicher, dass Sie die folgenden Schritte ausführen:

  • Definieren Sie alle primären Taktsignale an Input-Ports oder auf damit verbundenen Netzen,
  • Definieren Sie Taktsignale an Ouput-Pins von Black-Boxes, falls erforderlich,
  • Definieren Sie intern generierte Taktsignale auf Netzen,
  • Definieren Sie keine Gated-Clocks,
  • Geben Sie korrekte Clock-Constraints an: Vermeiden Sie Overconstraining und vergewissern Sie sich, dass nicht-verwandte, d. h. asynchrone Taktsignale separaten Clock-Groups zugewiesen werden,
  • Definieren Sie Timing-Ausnahmen wie False- und Multicycle-Paths.

Hinweis: In der Vivado-Design-Suite sollten Clock-Constraints so nah wie möglich bei der Taktquelle platziert werden, nicht auf dem BUFG, wie es im Rahmen von Xilinx-ISE-Design-Suite-Flows der Fall war.

Prüfen Sie Ihre Constraints auf Korrektheit

Wir empfehlen den Einsatz von vier Constraint-Verifikationstechniken während der Entwurfsvorbereitungsphase. Um Ihnen einen Eindruck von der Art lohnenswerter Constraint-Checks zu vermitteln, lassen Sie uns diejenigen, welche die Synplify-Software ausführt, näher betrachten.

Führen Sie zunächst einen “Syntax-Check” aus, d. h. eine rasche Überprüfung der Constraints einschließlich ihrer eingebetteten “get_XX”- und “all_XX”-Kommandos, um eventuelle Constraint-Syntaxfehler zu entdecken und zu korrigieren. Die Fehler erscheinen in einem Logfile, von wo aus sie über Hyperlinks zu einem Fehlerhandbuch verfolgt werden können, welches die Fehler erläutert und Korrekturvorschläge macht. Verwenden Sie dafür das Tcl-Kommando check_fdc_query. Machen Sie als Zweites einen “Synthese-Check”, um hardware-bezogene Fehler wie beispielsweise falsch codierte Flip-Flops aufzuspüren. Diese Fehler werden in einem separaten Logfile aufgelistet.

Führen Sie drittens eine „Schnellsynthese” durch, die Probleme mit Taktsignalen, einschließlich intern abgeleiteter Taktsignale, feststellen kann. Eine Schnellsynthese ermöglicht Ihnen die Überprüfung der Taktsignal-Spezifikation, weil sie sowohl Takt- als auch Timing-Reports erstellt, welche Probleme hinsichtlich der Taktspezifikationen aufzeigen. Manche Synthese-Tools erlauben Ihnen, die Schaltungssynthese in einem „Schnell-Modus“ auszuführen, in welchem bestimmte Optimierungsschritte zugunsten kürzerer Laufzeit deaktiviert sind. In der Synplify-Premier-Synthese-Software können Sie hierfür den folgenden Befehl verwenden (set_option –fast_synthesis 1).

Der Synthese-Compiler erstellt einen Synthese-Bericht mit einer Taktübersicht, welche auch Information über intern abgeleitete Taktsignale enthält. Dies ist sehr nützlich, um Taktsignale zu identifizieren und zu definieren sowie mit Constraints zu versehen. Führen Sie im vierten Schritt einen vollständigen Constraint-Check aus. Diese Überprüfung identifiziert Constraint-Probleme in Bezug auf Taktbeziehungen, Start- und Endpunkte ohne Constraints, asynchrone I/Os sowie I/Os ohne Constraints.

Ein vollständiger Constraint-Check überprüft auch die korrekte Anwendung von Constraints und Instanznamen. Beispielsweise meldet er Timing-Constraints, die auf nicht vorhandene oder ungültige Typen von Argumenten und Objekten angewandt werden. Das Tool erstellt dann einen detaillierten und mit Erläuterungen versehenen Bericht über nicht anwendbare Constraints und nicht auffindbare Instanzen, womit die Constraint-Datei dann korrigiert werden kann. Synplify-Synthese-Tools führen diese Arten von Überprüfungen automatisch während der Premap-Synthesephase durch. Sie können den Constraint-Check aber auch explizit zu Beginn der Synthese mit dem folgenden TCL-Befehl initiieren (TCL: project -run constraint_check).

Artikelfiles und Artikellinks

(ID:43140976)