Gated Clocks und Clock Enables in FPGA und ASICS

Bitte korrigieren Sie mich, wenn ich falsch liege. Ich habe im Allgemeinen gelesen, dass der Master-Takt für das Gating von FPGAs eine schlechte Designpraxis ist und dass man Master Clock & Clock Enable verwenden sollte, wenn die Schaltung einen geteilten Takt benötigt, und eine PLL zum Multiplizieren des Master-Takts verwendet.

Gelten die gleichen Prinzipien auch für ASIC-Designs?

Was sind die sicheren Designpraktiken, wenn die Schaltung einen geteilten oder multiplizierten Takt benötigt?

Ich bin ein bisschen verwirrt, Sie fragen nach Gating-Uhren in einem Satz und multiplizieren/dividieren sie in einem anderen, als ob sie dasselbe wären. Nach welcher fragst du eigentlich?
Ich denke, er fragt, was die besten Praktiken für das Clock-Gating in Designs mit geteilten oder multiplizierten Clocks sind.
@trav1s: Danke, dass du mich korrigiert hast. Verzeihen Sie meine verwirrende Frage. Ich möchte wissen, was sichere Designpraktiken sind, wenn man geteilte oder multiplizierte Takte im FPGA- und ASIC-Design benötigt?
Die Annahme ist also, dass die Uhren phasenstarr sind, richtig? Dann befinden sie sich in derselben Taktdomäne. Es ist eine gute Frage ...
@trav1s: Ja, deine Annahme ist richtig. Sie können davon ausgehen, dass wir nur eine Hauptuhr haben und dass wir daraus neue Uhren mit der gleichen Phase wie die Hauptuhr ableiten müssen.
Dies könnte für Sie nützlich sein: electronic.stackexchange.com/questions/19966/…

Antworten (2)

Um Ihre Frage zu beantworten, gelten nicht dieselben Richtlinien für ASICs, und Gated Clocks werden sehr häufig verwendet, um den Stromverbrauch zu reduzieren.

In FPGAs verfügen Taktsignale über dedizierte Routing-Ressourcen, die eine Lieferung der Takte mit geringem Versatz an ziemlich große Schaltungsbereiche gewährleisten. Wenn Sie versuchen, den Takt zu gaten, wird der Ausgang des Gatters wahrscheinlich gezwungen, normale Logiksignal-Routing-Ressourcen zu verwenden, was zu erheblichen Verzögerungen und großen Taktverzerrungen führen kann. FPGAs werden mit einigen Annahmen darüber entwickelt, wie das Logikdesign durchgeführt werden sollte, und eine dieser Annahmen ist, dass Sie Taktaktivierungssignale anstelle von Gating-Takten verwenden. Für gängige FPGAs ist der Stromverbrauch ohnehin enorm, so dass es wenig Motivation gibt, die Takte zu gaten.

ASICs sind ein ganz anderes Tier. Wenn Sie einen ASIC entwerfen, haben Sie die vollständige Kontrolle über die Gates und Drähte. Sie können sicher eine Gated Clock erstellen und sicherstellen, dass das Gated Clock-Signal richtig verteilt wird. Dies ist eine sehr verbreitete Technik zur Minimierung des Stromverbrauchs. Schauen Sie sich zum Beispiel einen modernen Mikrocontroller an und Sie werden sehen, dass Sie das Taktsignal für große Schaltungsteile wie einen UART per Software ein- und ausschalten können. Der Nachteil ist, dass ASIC-Designer sehr teure und ausgeklügelte Timing-Analysetools verwenden müssen, um dies richtig zu machen.

Kurze Antwort: Gated Clocks sind sehr schlecht.
Vermeiden Sie nach Möglichkeit die Verwendung mehrerer Uhren (sogenannte Uhrendomänen).
Recherchieren und implementieren Sie Clock-Domain-Crossing, wenn dies nicht möglich ist.
Erfahren Sie mehr über synchrone Uhrendomänen (verwandte Uhren) und asynchrone Uhrendomänen.
Erfahren Sie mehr über Metastabilität.

Lange Antwort:
Sie haben Recht, es wird dringend empfohlen, einen einzelnen Takt zu verwenden und dann Freigabesignale in Ihrem Design an Komponenten weiterzuleiten, die bedingt ein- oder ausgeschaltet werden sollten, anstatt den Takt zu steuern. Sie können auch ein Aktivierungssignal verwenden, wie Sie es vorgeschlagen haben, um einen Abschnitt effektiv mit einer niedrigeren Taktrate auszuführen - dazu später mehr.

Die Idee besteht darin, die Anzahl von Taktdomänen zu minimieren und die Anzahl von Taktdomänenkreuzungen zu minimieren. Dies gilt absolut für ASICs genauso wie für FPGAs und sogar diskrete Logikschaltungen.

Wenn die gesamte Logik mit demselben Takt (ohne Taktgatter) ausgeführt wird, wird die gesamte Logik gleichzeitig aktualisiert (mit einer winzigen Verzögerung, die als Taktversatz bezeichnet wird).

Das ist großartig, weil Sie sicher sein können, dass alle Eingänge zu allen Ihren Registern mit genügend Zeit richtig eingerichtet wurden, um für die nächste Uhr gültig zu sein, und Sie wissen, dass alle Registerausgänge gültig sein werden, nachdem die Uhr auftritt. Dies sind die Grundlagen eines synchronen Designs.

Wenn Sie zwei verwandte Ereignisse haben, die auf verschiedenen Uhren auftreten, besteht das Risiko, dass die Daten bei der Übertragung beschädigt werden können, selbst wenn sie eng miteinander verbunden sind (wie ein Register, das von einem anderen Register, aber von einer torgesteuerten Uhr liest). Dies wird als Metastabilität bezeichnet.

Wenn Sie mehr als eine Uhr benötigen, definieren Sie sorgfältig, was auf jeder Taktdomäne und jedem Gerät geschehen soll, was die Kommunikationsanforderungen sind. Müssen Sie Daten in beide Richtungen senden oder müssen Sie nur Daten von der schnelleren Uhr zur langsameren Uhr senden? Oder vielleicht die langsamere Uhr zur schnelleren? Wie viele Daten muss ich senden und wie oft sollte ich sie senden?

Für jeden dieser Fälle gibt es eine Cross-Clock-Domain-Lösung, und jede Lösung ist etwas anders. Glücklicherweise müssen Sie das Rad nicht neu erfinden (obwohl Sie es wahrscheinlich neu schreiben müssen)

FPGA 4 Fun hat eine großartige Einführung dazu:
http://www.fpga4fun.com/CrossClockDomain.html

Es scheint, als sollte man in vielen Fällen ziemlich einfach garantieren können, dass zwei Taktdomänen niemals irgendwo nahe beieinander eine aktive Taktflanke haben. Beispielsweise könnte eine Taktdomäne auf die ansteigende Flanke eines Haupttakts reagieren und eine andere Taktdomäne auf jede fallende Flanke des Haupttakts reagieren, die auftritt, wenn ein bestimmter Ausgang von der ersten Domäne gesetzt wird. Die zulässige Ausbreitungsverzögerung beim Übergang zwischen Domänen wäre viel geringer als innerhalb einer Domäne, aber welche Probleme gäbe es sonst?
Das ist ein Beispiel für synchrone Uhrendomänen, bei denen die beiden Uhren miteinander in Beziehung stehen. Dann brauchen Sie nur noch Hin-von-Einschränkungen mit der Mindestzeit zwischen gültigen Flanken, in diesem Fall die Hälfte der Periode (wenn die Uhr ein Tastverhältnis von 50 % hat).
Ich frage mich, warum ich nicht von einem solchen Ansatz höre, der schrecklich oft verwendet wird? Ich würde denken, dass es in so etwas wie einem ARM einfacher wäre, den Großteil eines Subsystems nicht zu takten, wenn es nichts Nützliches zu tun hat, wenn periphere Subsysteme von einem Takt betrieben werden, der gegenphasig zum Haupttakt ist die Haupt-CPU will nicht mit ihr sprechen. Wenn zB ein UART nichts zu tun hat, sollte es nicht notwendig sein, die meisten seiner Register während jedes Zyklus zu takten. Takten Sie einfach einen Eingangssynchronisierer an denselben Taktflanken wie die Haupt-CPU und takten Sie den UART auf ...
... diese gegenphasigen Zyklen, bei denen entweder die CPU mit dem UART sprechen möchte, sich der Ausgang des Synchronisierers geändert hat oder der UART weiß, dass etwas Nützliches passiert. Auf vielen taktenden Chips trägt der UART merklich zum Stromverbrauch bei; Es scheint, dass es durch Gating des Taktgebers möglich sein sollte, den größten Teil dieser Kosten zu eliminieren, ohne einen anderen Nachteil zu haben, als vielleicht einen zusätzlichen Wartezustand bei Registerlese- und/oder -schreibvorgängen hinzufügen zu müssen.