Timing-Constraints

1. Grundlagen
2. Typisches Fehlerbild bei Vernachlässigung von Timing-Constraints
3. Timing-Constraints zur Einhaltung der Setup- und Hold-Zeiten
4. Keine Metastabilität aber trotzdem ungültig

1. Grundlagen

Implementierungsprozess der digitalen Schaltungstechnik

Die digitalen Schaltungen eines FPGAs oder innerhalb des programmierbaren Teils eines SoC werden nicht programmiert, sondern sie werden zuerst mittels einer Beschreibungssprache, wie VHDL, Verilog, SystemC oder auch C beschrieben und dann durch entsprechende Werkzeuge synthetisiert. Die ausgeführte Beschreibung kann eine Verhaltensbeschreibung aber auch eine strukturelle Beschreibung sein.

Das Syntheseergebnis entspricht dann einer digitalen Schaltung, welche bereits technologiespezifisch sein kann. Als einfaches Beispiel sei die in Abbildung 1 gezeigte digitale Schaltung gegeben.

Typische digitale synchrone Schaltung
Abbildung 1: Digitale Schaltung innerhalb eines Taktbereichs (Takt A) mit drei Flipflops und einem kombinatorischem Anteil (logisches ODER)

In Abbildung 1 ist zu erkennen, dass sich die synthetisierte digitale Schaltung innerhalb eines Taktbereichs befindet, da die umgebenden Flipflops mit einem einzigen Takt (Takt A) versorgt werden. Diese damit synchrone Schaltung muss nun noch, durch einen weiteren Prozess, auf die eingesetzte Technologie des FPGA oder SoC abgebildet werden. Bei diesem Prozess werden innerhalb der programmierbaren Logik die dedizierten Ressourcen reserviert und miteinander verbunden (verdrahtet). Die benötigten Ressourcen sind nach Abbildung 1 drei Flipflops und ein logisches Oder. Der Verdrahtungsprozess nutzt ebenfalls dedizierte Verdrahtungsressourcen. Diese befinden sich innerhalb der programmierbaren Logik in vielfältig kombinierbarer Art. Während des gesamten Platzierungs- und Verdrahtungsprozesses hat das automatisierte Werkzeug unter anderem folgende wichtige Freiheitsgrade:

  • Es können die benötigten Ressourcen an verschiedenen Stellen innerhalb der programmierbaren Logik reserviert werden.
  • Es können für eine reservierte Ressourcenkombination verschiedene Verdrahtungsmöglichkeiten genutzt werden.

Das automatisierte Werkzeug muss nun die Platzierung und Verdrahtung unter Ausnutzung aller Freiheitsgrade durchführen und nicht nur sicherstellen, dass alles platziert und verdrahtet ist, sondern auch als wichtigsten Punkt, dass die für die jeweilige Technologie der programmierbaren Logik spezifischen Setup- und Hold-Zeiten der verwendeten Flipflops eingehalten werden. Dies geschieht unter der Berücksichtigung der gegebenen Signallaufzeiten inner halb der digitalen Schaltung bei allen Betriebsbedingungen.

Der Prozess zur Einhaltung der Setup- und Hold-Zeiten wird auch Timing-Closure genannt. Werden diese Zeiten nicht eingehalten, so kann die Datenübernahme eines Flipflops fehlschlagen und der Datenausgang metastabil werden.

Setup- und Hold-Zeiten von Flipflops

Damit ein Flipflop das am D-Eingang anliegenden Signal (Datum von einem Bit) an seinen Q-Ausgang (Datumsausgang) stabil übernehmen kann, muss das Eingangssignal eine gewisse Zeit vor einer eintreffenden Taktflanke (Setup-Zeit) und eine gewisse Zeit nach der selben Taktflanke (Hold-Zeit) stabil und gleich am D-Eingang anliegen. Ist dies nicht der Fall, so besteht eine nicht zu vernachlässigende Wahrscheinlichkeit, dass das betroffene Flipflop das Datum nicht stabil übernehmen kann. Der Datumsausgang kann dann metastabil (zwischenzeitlich stabil) werden. Abbildung 2 verdeutlicht die zeitlichen Anforderungen.

möglicher zeitlicher Versatz des Eingangssignals eines Flipflops zu seinem Taktsignal; (a) Eingangssignal ändert sich vor dem kritischen Zeitraum, eine logische 1 wird stabil übernommen; (b) Eingangssignal ändert sich während des kritischen Zeitraumes, es ist ungewiss welchen logischen Pegel das Flipflop übernimmt und wie lange eine mögliche Metastabilität exakt anhält; (c) Eingangssignal ändert sich nach dem kritischen Zeitraum, eine logische 0 wird stabil übernommen
Abbildung 2: möglicher zeitlicher Versatz des Eingangssignals eines Flipflops zu seinem Taktsignal;
(a) Eingangssignal ändert sich vor dem kritischen Zeitraum, eine logische 1 wird stabil übernommen;
(b) Eingangssignal ändert sich während des kritischen Zeitraumes, es ist ungewiss welchen logischen Pegel das Flipflop übernimmt und wie lange eine mögliche Metastabilität exakt anhält;
(c) Eingangssignal ändert sich nach dem kritischen Zeitraum, eine logische 0 wird stabil übernommen

Abbildung 2 zeigt die drei möglichen Zeitbereiche, in denen sich das Eingangssignal eines Flipflops ändern kann. Abbildung 2 (b) zeigt dabei den kritischen Bereich. Sollte sich das Eingangssignal in diesem ändern, so ist in einem gewissen zeitlichen Rahmen unsicher, welches Datum das Ausgangssignal zeigt, wie lange es benötigt um wieder stabil anzuliegen und überhaupt welches das letztendlich stabile Ausgangssignal sein wird. Selbstverständlich ist dieser Vorgang stark technologieabhängig.

Fakt ist aber, dass solch ein metastabiles Ausgangssignal verheerende Folgen für die im Datenpfad folgende digitale Schaltung haben kann. Es könnten zum Beispiel die im Datenpfad folgenden Flipflops vollkommen falsche Werte übernehmen, da die Glitches (auch Hazards genannt) der eingeschlossenen kombinatorischen Logik noch nicht ausgeklungen sind. Oder die folgenden Flipflops werden ebenfalls metastabil. Dummerweise ist die Auftrittswahrscheinlichkeit dieser Fehler recht gering aber groß genug, um eine digitale Schaltung bemerkbar in falsche oder ungeplante Zustände zu versetzen, weil die Fehlervoraussetzungen mehrere Millionen Mal pro Sekunde vorliegen können und dies gilt nur für ein einzelnes Flipflop.

2. Typisches Fehlerbild bei Vernachlässigung von Timing-Constraints

Das konkrete durch Metastabilität verursachte Fehlerbild einer digitalen Schaltung aus Sicht der Applikation ist leider sehr spezifisch. Aber es gibt folgende typische Anzeichen, welche Indizien für diese Fehlerklasse sind:

  • Ein fehlerhaftes Verhalten tritt nur manchmal also zufällig auf.
  • Es kann auch zusammenhängende Zeitperioden geben, in denen das fehlerhafte Verhalten gar nicht auftritt, obwohl nichts geändert wurde. Danach tritt der Fehler wieder häufiger auf.
  • Nach einer kleinen Änderung am FPGA-Design, an einer Stelle, welche das Fehlerbild gar nicht betreffen sollte und erneuter Synthese, tritt das fehlerhafte Verhalten häufiger auf oder ist kurzfristig nicht erkennbar.
  • Die Häufigkeit des Fehlers ist von der Temperatur des Schaltkreises abhängig. Einfach ausgedrückt, funktioniert es morgens aber abends wieder nicht mehr.
  • Wird eine andere Platine für einen Kreuztausch zur Fehlersuche eingebaut, welche das gleiche FPGA-Design beinhaltet, kann die Fehlerhäufigkeit eine ganz andere Größenordnung haben.
    Wenn das fehlerhafte Verhalten während der Entwicklungsphase nach dem Tausch häufiger auftritt, wäre dies sogar GUT. Es könnte auch passieren, dass das fehlerhafte Verhalten nach dem Tausch bei wenigen Prototypen unbemerkt selten auftritt und dann während der Serienproduktion beim Kunden häufiger, wenn mehrere Hundert Stück oder mehr pro Jahr produziert werden. Das ist ganz SCHLECHT!

Vor allem beim letzten Indiz ist offensichtlich, dass dieser Zustand inakzeptabel für Entwicklungskosten, Entwicklungszeiten und den Ruf einer Firma ist. Aus diesem Grund sollten diese Fehlerursachen vermeiden werden.

3. Timing-Constraints zur Einhaltung der Setup- und Hold-Zeiten

Um die Anforderungen an die Setup- und Hold-Zeiten eines jeden einzelnen Flipflops einer digitalen Schaltung sicherzustellen, werden die sogenannten Timing-Constraints (zeitliche Randbedingungen oder Vorgaben) verwendet. Die konkrete Ausführung dieser Constraints variiert danach, welche Datenpfade zwischen welchen digitalen Schaltungen behandelt werden müssen. Hier unterscheidet man in der Praxis vier mögliche Fälle anhand der Lage der Daten-Quell- und Ziel-Schaltung. Diese sind:

  1. Quell- und Ziel-Schaltung befinden sich im gleichen Taktbereich und sind demzufolge synchron. Zu diesem Fall zählen auch Situationen in denen die Taktfrequenzen der Quell- und Ziel-Schaltung zwar unterschiedlich sind, aber ihre zeitliche Beziehung zueinander trotzdem vollständig bekannt ist.
  2. Die Quell-Schaltung befindet sich außerhalb der programmierbaren Logik und die Ziel-Schaltung innerhalb. Da es sich hier folglich aus Sicht der programmierbaren Logik um Dateneingänge handelt, wird mit den entsprechenden Timing-Constraints das sogenannte Input-Timing spezifiziert. Die zeitliche Beziehung der jeweiligen Taktbereiche ist vollständig bekannt.
  3. Die Quell-Schaltung befindet sich innerhalb der programmierbaren Logik und die Ziel-Schaltung außerhalb. Hier handelt es sich im Umkehrschluss aus Sicht der programmierbaren Logik um Datenausgänge. Deshalb wird mit den entsprechenden Timing-Constraints das sogenannte Output-Timing spezifiziert. Die zeitliche Beziehung der jeweiligen Taktbereiche ist hier ebenfalls vollständig bekannt.
  4. Quell- und Ziel-Schaltung befinden sich in unterschiedlichen Taktbereichen, welche zueinander als asynchron anzusehen sind. Das heißt die zeitliche Beziehung der Taktbereiche ist nicht vollständig bekannt.

Für jeden genannten Fall sind entsprechende Timing-Constraints einsetzbar, um es dem automatischen Platzierungs- und Verdrahtungsprozess überhaupt erst zu ermöglichen die notwendigen Setup- und Hold-Zeiten einzuhalten. Werden diese Constraints nicht angegeben, so wird der betroffene Fall vom Platzierungs- und Verdrahtungsprozess im Allgemeinen auch nicht berücksichtigt oder es werden automatisiert Annahmen getroffen, um den Prozess abzuschließen zu können, welche nicht korrekt sein müssen. In dieser Situation kommt es meistens bei der realen Implementierung auf der Platine zu Setup- und Hold-Zeitverletzungen, welche dem automatisierten Entwicklungswerkzeug ohne weiteres nicht bekannt sein müssen.

Aus diesem Grund ist es wichtig die Timing-Constraints und ihre Wirkungen im Detail zu kennen und anzuwenden bevor eine digitale Schaltung in programmierbarer Logik zur Nutzung freigegeben wird. Dies gilt unabhängig davon, ob die Entwicklung der digitalen Schaltung von höherer Abstraktionsebene aus einer Softwareentwicklungsumgebung aus erfolgt oder direkt in der Entwicklungsumgebung für FPGAs oder SoC erfolgt. Zur Anwendung der Timing-Constrints werden beispielsweise von der Firma Xilinx die „Xilinx Design Constraints“ (XDC) angeboten. Dies sind Kommandos, welche auf der Tcl-Semantik basieren.

Beispielsweise ist es für den 1. Fall bereits ausreichend wirksam, alle Taktfrequenzen innerhalb der programmierbaren Logik und deren Beziehung untereinander zu spezifizieren. Für den 2. und 3. Fall können zur Spezifikation die entsprechenden Constraints zum Input- und Output-Timing verwendet werden. Der 4. Fall ist ein eher spezieller Fall. Zur Behandlung von asynchronen Schaltungen machen die speziellen Constraints zur Spezifikation der Taktbereichsbeziehungen nur wenig Sinn. Trotzdem gibt es Ansätze, welche es durch den geschickten Einsatz von Timing-Constraints und den entsprechenden Synchonisierungsstufen (siehe Abbildung 3) ermöglichen, Daten zwischen asynchronen Schaltungen besonders effizient mit geringer Latenzzeit bei maximalem Durchsatz zu übertragen. Die Latenzzeit ist dabei geringer als die von den FIFO-Generatoren der üblichen Hersteller erreichte Latenzzeit, weil die Schaltung speziell an die Anwendung angepasst ist.

Synchronisierungsstufe zur Synchronisation des Datensignals C' aus dem Taktbereich "Takt A" in den Taktbereich "Takt B"
Abbildung 3: Synchronisierungsstufe zur Synchronisation des Datensignals C' aus dem Taktbereich "Takt A" in den Taktbereich "Takt B"

4. Keine Metastabilität aber trotzdem ungültig

Obwohl man als sorgsamer Entwickler mithilfe der Timing-Constraints die Wahrscheinlichkeit metastabiler Flipflop-Zustände auf ein praktisch vernachlässigbares Maß reduzieren kann, so heißt dies leider noch nicht, dass alle Signale gültig sein müssen. Ein typischer Fall einer solchen Situation ist beispielsweise das Synchronisieren eines asynchronen Busses der Breite >1 auf eine digitale Schaltung.

Synchronisationsstufen wie in Abbildung 3 für jede einzelne Leitung bewirkten zwar ein stabiles Signal im Inneren der Schaltung, doch können die nun synchronen Daten des Busses (siehe Ausgang D in Abbildung 3) zeitweise ungültig sein. Ungültige Daten, welche von einer verarbeitenden Schaltung als gültig angenommen werden, können natürlich auch ein Grund für schwerwiegende Probleme sein.

Um dies zu vermeiden gibt es ebenfalls in der programmierbaren Logik von FPGAs und SoCs realisierbare Schaltungstechniken, welche in Kombination mit Timing-Constraints eine Datenbereitstellung mit minimaler Latenzzeit bei höchstem Durchsatz ermöglichen.