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?
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
Tim
travisbartley
nurabha
travisbartley
nurabha
Wassilij