Taktumschaltung mit Clock Gates

Ich arbeite an einem ASIC-Design und muss verschiedene Taktquellen für einen digitalen Block in verschiedenen Betriebsmodi verwenden.

Kann ich Clock-Gating in Kombination mit einem ODER-Gatter sicher verwenden , um den Takt wie im folgenden Diagramm zu erzeugen?

Schema

Wenn das in Ordnung ist, welche Einschränkungen benötigen die clk _enable Signale (dh störungsfrei, nicht überlappend, Timing in Bezug auf den jeweiligen clk , ...)?

Beachten Sie, dass die Clock-Gates einen D-Latch verwenden, der transparent ist, wenn der entsprechende clk LOW ist.

Antworten (3)

Die Ausgereiftheit Ihres Takt-Gatings hängt davon ab, wie stark die nachgeschaltete Logik auf einen schlechten Taktimpuls reagieren wird.

Zum Beispiel: Wenn die Downstream-Logik immer zurückgesetzt wird, nachdem die Uhren umgeschaltet haben, dann können Sie mit fast allem für Ihre Clock-Gating-Logik davonkommen.

Wenn Sie jedoch erwarten, dass die nachgeschaltete Logik weiterhin ordnungsgemäß funktioniert, wenn die Uhren umgeschaltet werden (ohne Zurücksetzen), muss Ihre Gatterlogik so konzipiert sein, dass Sie niemals zu kurze Taktimpulse haben, die Ihre Zeitbeschränkungen verletzen.

Die Gefahr bei kurzen Taktimpulsen, die gegen Ihre Zeitbeschränkungen verstoßen, besteht darin, dass eine Zustandsmaschine in einen ungültigen Zustand versetzt werden kann, von dem sie sich nicht erholen kann. Das ist wirklich einfach, also nimm es nicht als selbstverständlich hin, dass es dir nicht passieren wird.

Das Entwerfen einer guten Clock-Gating-/Switching-Logik, die keine kurzen Taktimpulse erzeugt, ist schwierig und erfordert normalerweise genaue Kenntnisse Ihres ASIC-Prozesses. Anstatt Ihre eigenen zu erfinden, schlage ich vor, dass Sie mit Ihrem ASIC-Haus oder demjenigen sprechen, von dem Sie Ihre ASIC-Bibliotheken erhalten haben. Die Chancen stehen sehr gut, dass sie bereits die Schaltung haben, die Sie benötigen.

Aktualisieren:

Das OP hat angegeben, dass die Clock Gates in den Schaltplänen aus der ASIC-Bibliothek stammen. Wenn diese Gates so konzipiert sind, dass sie keine Störungen verursachen (dh sie erzeugen niemals einen zu kurzen Impuls), besteht der einzige Trick darin, genügend Zeit zwischen dem Deaktivieren einer Uhr und dem Aktivieren der nächsten zu lassen. Auf diese Weise können Sie sauber zwischen Uhren wechseln und haben keine Uhrenstörungen.

Das Entwerfen der Logik dafür (ausreichend Zeit zwischen dem Deaktivieren/Aktivieren lassen) ist immer noch schwierig, aber nicht besonders schwierig. Auf einer Skala von 1-10 wäre dies eine 6. Das Entwerfen eines störungsfreien Clock-Gates wäre dagegen eine 10 oder sogar 12!

Das im Schaltplan gezeigte Clock Gate ist genau das: eine Zelle, die ich aus der ASIC-Bibliothek bekommen habe. Diese Zelle schaltet jedoch nur eine Uhr, was ich brauche, ist etwas, um ein paar Uhren umzuschalten. Meine Frage ist daher, ob diese ODER-Gatter-Lösung in Ordnung ist und welche Einschränkungen sie den Freigabesignalen auferlegt.
Ich habe gehört, dass das Problem viele verschiedene Namen hat: Metastabilität, Taktdomänengrenzen, Glitches, Plesiosynchronität. Ich glaube, es wurde nie gelöst. Ich denke, dass die einzige Lösung mit garantierter Integrität für das Überqueren von Taktdomänen das Wählen ist. Sagen wir serielle Kommunikationschips oder Ethernet.
@AllInOneBoat Wenn garantiert ist, dass die Takttore die Ausgabe nicht stören, können Sie genau das tun, was Sie gezeichnet haben, wenn Sie genügend Zeit zwischen dem Ausschalten einer Uhr vor dem Aktivieren der nächsten lassen.
@RocketSurgeon: Wenn das Umschalten korrekt durchgeführt wird, sollte es keine Bedenken hinsichtlich der Metastabilität geben, da die Uhren synchron gesteuert werden. Bei Verwendung der im Schaltplan gezeigten Clock-Gating-Zelle gibt es keine Störungen auf gated_clk . Es bleibt die Frage, ob die Kombination mehrerer davon mit einem ODER-Gatter a) störungsfrei funktionieren würde und b) welche Einschränkungen für die Freigabesignale erforderlich sind.
Stimme zu 99% zu. Die verbleibenden 0,99 % des Problems sind Rennbedingungen (das ist ein weiterer Name für das "gleiche" Problem).
@RocketSurgeon: Scheint, als hätte David gerade die Frage beantwortet - wie ich es verstehe, muss man sicherstellen, dass genügend Zeit vorhanden ist, in der alle Aktivierungssignale niedrig sind, bevor man den nächsten clk aktiviert, um die 0,99% zu eliminieren, von denen Sie sprechen. David, könnten Sie das bestätigen (vielleicht in die Antwort aufnehmen, damit ich es akzeptieren kann )?
@AllInOneBoat Ja, davon habe ich gesprochen. Ich habe meine Antwort ergänzt.

EEtimes hat einen Artikel , in dem es um störungsfreie Taktschaltkreise geht. Basierend auf diesem Artikel hat Young Rhoney auch einen guten Blog, 2x1 und Nx1 Clock Switching .

Wie bereits erläutert, besteht die Schlüsselidee zum störungsfreien Umschalten der Uhr darin, eine Uhr auszuschalten, bevor die andere eingeschaltet wird. Der Blog enthält auch eine Schaltung für die Nx1-Taktumschaltung.

Zusätzlich zu Davids Kommentaren: Es gibt Risiken nach kurzen Taktimpulsen. Sofern Sie keine eiserne Garantie für die Gültigkeit der Clock-Enable-Leitungen geben können, möchten Sie vielleicht die Clock-Enables durch den Ausgang eines Decoders steuern, um (zum Beispiel) zu vermeiden, dass mehrere Clock-Signale durch das OR überlagert werden. Wenn Sie garantieren können, dass sie die gleiche Frequenz und Phase haben, ist dies kein Problem, aber dann wäre es wahrscheinlich nicht sinnvoll, überhaupt mehrere Uhren zu haben.

Das Ansteuern der Taktfreigaben von einem Decoder könnte sie (mehr) störend machen ... wäre das nicht ein Problem an sich?