Vorteil der Taktfreigabe gegenüber der Taktteilung

Ich habe ein FPGA-Design, das unterschiedliche Takte verwendet. Es gibt einen 100-MHz-Referenztakt, der von einem Oszillator bereitgestellt wird. Der Referenztakt wird in einem DCM (Xilinx FPGA) verwendet, um 3 verwandte Takte zu erzeugen, 100 MHz, 50 MHz und 10 MHz (kein Phasenversatz).
In solchen Situationen ist der Rat von Toolherstellern und Kollegen, nur einen Takt zu verwenden, den 100-MHz-Takt, und statt der anderen Takte Taktfreigaben zu erstellen, die nur jeden 5./10. Taktzyklus aktiv sind.
Was ist der Vorteil davon? Ja, es wird nur einen Takt geben und die Timing-Analyse wird einfacher, aber das ist ein Tool-Problem und sollte keine grundlegenden Designentscheidungen diktieren.
Besonders für ein Design mit hoher Geräteauslastung sehe ich Vorteile für geteilte Takte, da z. B. die 10-MHz-Taktdomäne eine viel einfachere Zeit hat, Timing Closure zu erreichen, und "mehr Raum" für die Platzierung und das Routing der Logik lässt die 100-MHz-Taktdomäne. Mit Clock Enables würde ich diesen Vorteil leichtfertig verschenken.

Dein letzter Absatz stimmt nicht wirklich. Sie würden der Timing-Analyse mitteilen, dass es sich um eine Uhr mit mehreren Zyklen handelt (dh bei Uhren alle n Zyklen), und solange Sie im Design nicht sowohl steigende als auch fallende Flanken verwenden (sowieso eine schlechte Idee), verlieren Sie nichts läuft bei 100 MHz + CE - es berücksichtigt die Taktfreigabe bei der Berechnung der zulässigen Verzögerungen.
@Tom: Wenn ich nur einen 100-MHz-Takt habe, wie definiere ich einfach Multicycle-Pfade für zB die gesamte Logik, die mit 10 MHz läuft? Denken Sie daran, alle Modulinstanzen einzuschränken, die mit der niedrigeren Taktfrequenz ausgeführt werden sollten? Wenn in einem oder mehreren Modulen ein CDC vorhanden ist, werden die Einschränkungen schnell an Zahl zunehmen und unübersichtlich werden (und somit eine Belastung darstellen, wenn auf eine andere Plattform migriert oder die Designhierarchie geändert wird).
Das hängt vom Timing-Tool ab. Mit TimeQuest können Sie Multi-Cycle-Pfade basierend auf allem angeben, was von einem bestimmten Clock-Enable-Register (nicht jedem Register einzeln) gesteuert wird. Sie müssten die Dokumentation Ihres Tools finden, um zu sehen, was es unterstützt.

Antworten (1)

Diese Methode hat mehrere Vorteile, die ich mir vorstellen kann:

  1. Clock Network - Erstens haben Sie nur eine Uhr statt drei. Dies bedeutet, dass es weniger Konkurrenz um globale und lokale Clock-Routing-Ressourcen gibt. Normalerweise gibt es nur eine kleine Anzahl von Taktbäumen mit niedrigem Versatz, sodass die Minimierung der Nutzungsanforderungen beim Routing helfen kann.

  2. ALM-Einschränkungen – Abhängig von der Struktur Ihrer ALMs/Logikblöcke können Sie möglicherweise jeden Block nur von einer einzigen Uhr takten – dh Sie können nicht zwei Register in zwei verschiedenen Taktdomänen im selben Block haben. Wenn dies bei Ihrem FPGA der Fall ist, könnte die Verwendung nur einer einzigen taktfähigen Taktdomäne ermöglichen, dass die Logik in einem Design mit einem hohen Prozentsatz verwendeter Blöcke dichter gepackt wird. Engeres Packen kann dann zu einer höheren Chance führen, das Timing einzuhalten, da alles näher beieinander liegt.

  3. Clock Domain Transfer – Eine weitere wichtige Überlegung betrifft den Wechsel zwischen Uhren. Wenn Sie Daten zwischen den Taktdomänen übertragen müssen, gibt es zwei Möglichkeiten.

    Wenn Sie keine Referenz zwischen den Uhren haben, wie dies der Fall wäre, wenn Sie die gesamte Uhr teilen (Sie wissen nicht, welche Flanke der schnellen Uhr der langsamen Uhr entspricht), muss Ihre Übertragung asynchron sein, was zusätzliche Kopfschmerzen mit sich bringt FIFOs für Daten und Synchronisiererketten für Steuersignale.

    Wenn Sie andererseits eine Taktfreigabe verwenden, um die Dinge zu verlangsamen, wissen Sie genau, wann sich die langsame und die schnelle Uhr schneiden werden - Sie wissen dies, indem Sie das Taktfreigabesignal überwachen. Wenn Sie beispielsweise Daten von Ihrer /10-Domäne in Ihre /1-Domäne übertragen möchten, benötigen Sie dafür keine FIFOs - Sie sagen einfach, dass das Taktaktivierungssignal auch ein gültiges Signal ist. Da es sich um den gleichen Takt handelt, ist keine Taktdomänenübertragung erforderlich.

    Es ist möglich, Domänenübertragungen von PLL-Uhren durchzuführen, wenn Sie die Taktflanken verfolgen können - zum Beispiel ist das Wechseln von einer /1 zu einer /2 und umgekehrt einfach, da Sie möglicherweise die schnellen und langsamen Uhren direkt vergleichen können, um sie zu synchronisieren . Dies hängt jedoch von der Struktur des FPGA ab - einige lassen es nicht einfach zu, dass die Takte eingespeist werden, um Tabellen als Dateneingaben nachzuschlagen.

  4. Wertvolle Ressourcen – In kleineren FPGAs sind PLLs rar gesät. Zum Beispiel haben Spartan-6 LX9 FPGAs, wenn ich mich richtig erinnere, nur zwei PLL-Sites! Idealerweise möchten Sie diese für Dinge wie externe Schnittstellen (LVDS, Speicher usw.) aufheben und sie nicht für die allgemeine Taktteilung verwenden. Warum eine wertvolle PLL nur für die ganzzahlige Taktteilung verwenden, wenn dies in allgemeiner Logik möglich ist.

    Darüber hinaus ist Ihre Division durch die Verwendung von Clock Enables einfach ein Zähler, der überall auf dem FPGA implementiert werden kann. PLLs hingegen befinden sich in bestimmten Bereichen. Angenommen, Sie benötigen eine lokale Uhr auf einer Seite des Chips, aber die einzige freie PLL befindet sich auf der anderen Seite. Sie müssen nicht nur eine entfernte PLL verwenden, sondern auch ein wertvolles globales Clock-Routing, um den Takt vollständig auf die andere Seite des Chips zu bringen, wo er lokal verwendet wird. Wenn Sie stattdessen einen Zähler für Taktfreigaben bauen, kann er direkt neben der Logik platziert werden, wodurch der Verbrauch wertvoller Ressourcen reduziert wird.

Das sind nur die Gründe aus dem Kopf. Ich werde versuchen, noch mehr zu tun, und ich werde auch einige Argumente hinzufügen, "warum PLL für CE günstig ist".


Als Antwort auf Ihren letzten Punkt zum Timing. In der Praxis wirkt sich die Verwendung einer langsamen Uhr oder einer schnellen Uhr mit aktivierter Uhr nicht allzu sehr auf das Routing aus. In Ihren Entwürfen sollten wirklich alle Register die steigende Flanke eines Takts verwenden (oder alle die fallende Flanke verwenden), aber nicht mischen und anpassen (außer vielleicht in DDR-E / A-Puffer). Dadurch haben beide Takte immer noch gleichzeitig ihre sensiblen Flanken. Die schnelle Uhr hat n -mal mehr, aber die Uhr ist nicht aktiviert, also werden diese ignoriert.

Das heißt, Sie können Ihrem Timing-Analyse-Tool mitteilen, dass entweder der Takt mehrzyklisch ist – dh nur einer von n Zyklen gültig ist – oder Sie ihm mitteilen, dass es sich um einen langsameren Takt mit einem schmalen Arbeitszyklus handelt. Beide Methoden teilen dem Tool mit, dass es mehrere schnelle Taktperioden für die Einrichtung und Haltezeit in seinen Berechnungen zulassen kann (da sich die Registerwerte nicht ändern, wenn die Uhr nicht aktiviert ist).

OK, so wie ich es sehe, läuft es auf einen Kompromiss hinaus, entweder unter Verwendung globalerer Takt- und Routing-Ressourcen, falls eine Referenzuhr tatsächlich geteilt wird, oder unter Verwendung allgemeinerer Logik- und Routing-Ressourcen, um die Uhr zu generieren und zu verteilen ermöglicht. Abhängig von der Architektur und den knappen/reichlich vorhandenen Ressourcen können beide Techniken praktikable Lösungen sein. Vielen Dank, dass Sie etwas Licht auf einen Designaspekt der FPGA-Taktung geworfen haben, den viele Leute wie ein Mantra wiederholen, ohne wirklich objektive Argumente zu liefern.
Eine Sache, die ich für nützlich halten würde, aber ich habe sie noch nicht oft gesehen, wäre, alles, was von der primären Uhr läuft, z. B. an der steigenden Flanke der primären Uhr schalten zu lassen, und alle geteilten Uhren an der fallenden primären Uhr schalten zu lassen Rand. Sofern man nicht die Grenzen der Gerätegeschwindigkeit ausreizt, würde dies es Signalen ermöglichen, Taktdomänen ohne Verzögerung zu überqueren (Signale, die zwischen geteilten Domänen passieren, könnten ohne Verzögerung bereinigt werden, indem ein einzelnes Register verwendet wird, das durch die ansteigende Master-Taktflanke ausgelöst wird). Werden solche Techniken viel verwendet?