Designtools: Beim FPGA-Entwurf ist Timing alles

Seite: 2/2

Anbieter zum Thema

Die Ausführung dieser grundlegenden Überprüfungen identifiziert potenzielle Fehler schon früh im Synthesezyklus und verbessert die Qualität der Resultate (Bild 2). Sobald der Syntheselauf zu Ende ist, analysieren Sie auf jeden Fall den Post-Synthesis-Timing-Report, da dieser wichtige Informationen enthalten kann. Für den Fall, dass Sie die Synplify-Software nutzen, zeigt beispielsweise ein “System Clock” unter der Starting-Clock-Sektion des Timing-Reports an, dass bei einigen der I/Os möglicherweise Constraints fehlen. Die Interface-Angabe in diesem Report bestätigt, ob dies der Fall ist oder nicht.

Schritt 2: RTL-Codierungsstile und Tuning kritischer Pfade

Um bessere Timing-Ergebnisse zu erzielen, empfehlen wir die Verwendung bestimmter Codierungsstile für Finite-State-Machines, RAMS, Math/DSP-Funktionen, Clock-Trees und Schieberegister, weil das Synthese-Tool dann eher in der Lage ist, daraus eine Implementierung abzuleiten, die FPGA-Basisblöcke nutzt.

Außerdem vermeiden diese Codierungsstile die Erzeugung unnötiger Logik wie Inferred-Latches, Read/Write-Check-Logik für RAMS und Logik, welche in DSP-Primitive integriert werden könnte. Es wurde schon viel darüber geschrieben, dass der Einsatz von Core-Generatoren innerhalb Ihres Synthese-Tools ein wichtiger und erwägenswerter Punkt ist. Beispielsweise enthält die Synplify-Software einen SynCore-IP-Wizard, der den erforderlichen RTL-Codierungsstil für Byte-Enabled-RAMs automatisch generiert. Auch andere IP-Generatoren wie der Xilinx-IP-Catalog, Synopsys’ Synphony-Model-Compiler oder Synopsys’ DesignWare coreTools und DesignWare Building Blocks können Ihnen helfen, die IP zu konfigurieren, viele DSP- und mathematischen Funktionen auszuführen und gute RTL-Codierungsstile umzusetzen. Falls Sie von Hand codieren, beachten Sie unbedingt die folgenden Empfehlungen:

Für Finite-State-Machines

  • Sehen Sie für Xilinx-Flows eine synchrone Reset-Funktion vor, um die Hardware nach Inbetriebnahme in einen gültigen Zustand zu versetzen, bzw. um die Hardware während des Betriebs zurücksetzen zu können,
  • Trennen Sie die sequenziellen von den rein kombinatorischen Blöcken,
  • Weisen Sie für alle möglichen aktuellen Zustände einen Folgezustand zu.

Für Block-RAMs

  • Setzen Sie synchrone RAMs ein, wann immer das möglich ist, weil diese im Allgemeinen mit höheren Taktfrequenzen betrieben werden können,
  • Platzieren Sie RAM-Code zwecks einfacherer Fehlersuche auf Netzlistenebene in einem separaten Modul,
  • Bevor Sie sich für den Einsatz eines RAMs mit einer spezifischen Reset-Bedingung, für Dual-Port- oder Byte-Enabled-RAMs, oder für asymmetrische RAMS entscheiden, beachten Sie den empfohlenen Codierungsstil und prüfen, ob Inferierbarkeit gegeben ist. Falls nicht, könnte die Netzliste am Ende mehr Steuerlogik erfordern,
  • Vermeiden Sie gleichzeitige Lese- und Schreibzugriffe mit der gleichen Adresse in einem Taktzyklus,
  • Sollten alle genannten Schritte fehlschlagen, so verwenden Sie ein Attribut (syn_ramstyle für Synplify-Software), um die Implementierung kleiner RAMs als Register zu erzwingen. Dadurch werden RAM-Ressourcen frei für den Einsatz in timing-kritischeren oder größeren RAMs.

Für DSP-Blöcke

Sie können diese Primitive verwenden, um Filter und mathematische Funktionen wie Zähler, Addierer, Multiplizierer, Subtrahierer und ähnliches zu implementieren.

  • Platzieren Sie DSP-Code zwecks einfacherer Fehlersuche auf Netzlistenebene in einem separaten Modul,
  • Falls alle anderen Methoden fehlschlagen, so verwenden Sie ein Attribut (syn_dspstyle für Synplify in Vivado-Design-Suite-Flows), um die Implementierung zu erzwingen.

Für SRLs

Sie können Schieberegister mittels des select_SRL-Xilinx-SRL-Primitives oder in Form diskreter Register implementieren.

  • Das Packen geschieht automatisch. Für Schieberegisterketten lässt die Synplify-Software zum Zwecke der Timing-Optimierung das letzte Register der Kette außerhalb des gepackten select_srl,
  • Falls alles andere fehlschlägt, so verwenden Sie das Attribut syn_srlstyle, um zu steuern, wie Ihre SRLs implementiert werden.

Für Clock-Trees

  • Weil Clock-Trees während der Synthese nicht automatisch erzeugt werden, wird empfohlen, dass Sie Phase-Locked-Loops (PLLs), Taktgeneratoren oder Takt-Multiplexer in Ihrem RTL-Code instanziieren,
  • Die Timing-Constraints auf dem Takteingang der PLL erzeugen automatisch abgeleitete Clock-Constraints auf den PLL-Output-Pins.

Um die Clock-Constraints besser überprüfen zu können, verwenden Sie einen Schematic-Viewer. Beispielsweise kann Synplify’s HDL-Analyst-Tool einen Filter auf den Clock-Tree anwenden, der Ihnen erlaubt, die Clock-Trees und Clock-Constraints zu begutachten und zu debuggen (Bild 3).

Besser Performance des kritischen Pfades durch Modularisierung

Normalerweise sind manche Teile des Designs nicht ganz so zeitkritisch wie andere. Sie werden besonders die Teile anpassen und inkrementell verbessern müssen, welche das Timing-Ziel noch nicht in ausreichendem Maße erreichen. Eine der Techniken, die zwecks rascherer Anpassungen in der RTL- und Netzlistenphase angewandt werden können, besteht darin, kritische Pfade in einem einzelnen Block oder Subprojekt zu isolieren.

Nachfolgende Iterationen zur inkrementellen Optimierung können sich dann auf diese Blöcke beschränken. Ferner lassen sich die Vivado-Place&Route-Tools anweisen, die betroffenen Elemente in größerer Nähe zueinander zu platzieren, um die Timing-Sicherheit weiter zu erhöhen. Zu den während der Synthese zur Verfügung stehenden Möglichkeiten, Modularität zu schaffen, gehören:

  • Spezifizieren Sie bereits vor der Synthese eine RTL-Partition (in der Synplify-Software “Compile Point” genannt) oder legen Sie ein hierarchisches Subprojekt an,
  • Nach der Synthese besteht die Möglichkeit, unter Verwendung eines hierarchischen Design-Management-Flows genau jenen Teil des Designs als ein Subprojekt zu isolieren und zu exportieren, welcher die Timing-Ziele verfehlt. Beheben Sie das Problem und importieren Sie das Ergebnis anschließend zurück in das Gesamt-Design,
  • Hinweis der Synthese-Software an das Vivado-Place&Route-Tool, dass der kritische Pfad vollständig auf demselben Die eines Multi-SLR-Bausteins wie z. B. des Virtex-7-2000T-FPGA zu platzieren ist, um Cross-SLR-Delays zu vermeiden.

Schritt 3: Erzielung finaler Timing-Closure

Normale Timing-Reports lassen sich sowohl nach der Synthese als auch nach Placement&Routing generieren (Bild 4). Beispielsweise erlaubt die Synplify-Software, mit einem TCL-Kommando (report_timing) einen Report bzgl. spezieller interessanter Punkte oder Elemente im Design zu erstellen. Zur weiteren Verbesserung der Timingergebnisse empfehlen wir, dass Sie die Post-Synthesis- und Post-P&R-Resultate vergleichen, insbesondere die Zeitreserven für gegebene Start- und Endpunkte von kritischen Pfaden. In der Synplify-Premier-Synthese-Software lassen sich hierfür die Post-Synthesis- und P&R-Timing-Reports unmittelbar nebeneinander darstellen.

Das Korrelationstool führt einen Eins-zu-Eins-Vergleich bzgl. der Endpunkte, der Startpunkte und der erforderlichen Taktperiodendauern durch. Die Angaben beziehen sich auf den Takt des jeweiligen Endpunktes. Pfade, deren Pre- und Post-P&R-Timing innerhalb des spezifizierten “Slack-Margin”-Kriteriums nicht gut korrelieren, werden als “Korrelations-Mismatches” gemeldet, so dass Sie gezielt weitere Schritte einleiten können. Eine typische Folgeaktion wäre die Spezifikation sogenannter “Route”-Constraints im Synthese-Tool, welche die Timing-Pfad-Constraints lediglich während der Synthesephase verschärfen. Hier ist ein Beispiel:

FDC-Constraint-Eingabe-Datei für die Synthese (set_clock_route_delay {c:clka} 1.4). Diese Constraints veranlassen die Synthese, die Timing-Performance der spezifizierten Pfade mit höherem Aufwand zu verbessern, so dass sich eine bessere Korrelation und bessere Resultate ergeben. Das Schöne an der Timing-Korrelationsfunktionalität ist, dass Sie genau die Pfade ansehen können, welche Probleme verursachen. Es ist beispielsweise auch möglich, die Anzahl der Pfade, die Ihnen pro Endpunkt angezeigt werden sollen, zu verändern. Sie können nach bestimmten Taktsignalen oder Instanzen, welche Sie näher interessieren, suchen und die damit verbundenen Timing-Pfade anzeigen lassen. Taktsignale werden auch verglichen und angezeigt, um die Timing-Korrelation zu unterstützen (Bild 5).

Wie Sie sehen können, sind bestimmte Schritte auszuführen, um in Ihrem Vivado-Design-Suite-Flow innerhalb einer vernünftigen Zeitspanne eine bessere Timing-Performance zu erzielen. Die von uns erläuterte Methodik ermöglicht, Probleme mit der Takt- und Constraint-Spezifikation frühzeitig aufzudecken und zu beseitigen. Außerdem bietet sie vielfältige Techniken zur Abstimmung und Korrelation des Zeitverhaltens Ihres Designs und des RTL-Codes, damit die Timing-Closure schnell erreicht wird.

* Angela Sutton ist Staff Product Marketing Manager FPGA

* Paul Owens ist Corporate Applications Engineer FPGA, Synopsys.

Artikelfiles und Artikellinks

(ID:43140976)