Wie funktioniert das Clock Gating in RTL?

8

Ich habe ein paar Latch und Logik in meinem Design getaktet. Ich habe nicht viel Erfahrung in Synthese und Platz & amp; Route. Was ist der richtige Weg um Clock-Gating in RTL zu implementieren?

Beispiel1:

%Vor%

Beispiel2: Ich stolperte in ein RTL-Beispiel, während ich etwas über gute Praktiken im RTL-Clock-Gating recherchierte. In diesem Beispiel wurde der obige Code wie folgt implementiert:

%Vor%

Was ist der Zweck der Verwendung einer benutzerdefinierten Clock-Gating-Zelle? Hat das Werkzeug Schwierigkeiten in der Synthese, wenn clk direkt in einem always_comb-Block mit einem anderen enable-Signal "and" -ediert wird? Ich habe das Gefühl, dass die Verwendung einer speziellen Takt-Gating-Zelle eine Standardmethode für das generierte Gated-Clock-Signal ist. Ich versuche zu verstehen, warum das so ist.

    
newbie 27.07.2014, 04:30
quelle

1 Antwort

9

Was ist der richtige Weg, um Clock-Gating in RTL zu implementieren?

Das Clock-Gating-Signal sollte nur dann umschalten, wenn der Latch geschlossen ist, sonst besteht die Gefahr von Störungen und Metastabilitäten. Bei einem aktiven Hoch-Latch sollte das Gating-Signal bei der fallenden Flanke des Takts umschalten. Steigende Flanke für aktive Low-Latches.

Normalerweise würde ein Flanken-empfindlicher Flop latch_update_en enthalten, um Rauschen auf dem Gating-Signal zu verhindern.

%Vor%

Zur Erinnerung: Wenn Sie nur einen Latch haben: Flankentrigger Flops sind nur Master / Slave-Latches

%Vor%

Hat das Werkzeug Schwierigkeiten in der Synthese, wenn clk direkt in einem always_comb-Block mit einem anderen enable-Signal "und" -ediert wird?

Die meisten Synthesen haben Probleme mit der direkten UND-Verknüpfung einer Taktung. Es ist nicht immer intuitiv, wie das Gating verwendet werden sollte. Ein Synthesizer hat oft viele AND-Gatter in der Bibliothek zur Auswahl, von denen jedes verschiedene Variationen in Bezug auf Verdrehen, Versatz und Laden aufweist, die sehr auf Eingabekombinationen beruhen. Obwohl funktionell das gleiche ist, wird A & B andere Zeitergebnisse erhalten als B & A .

Durch das Instanziieren einer expliziten Zelle aus der Bibliothek des Synthesizers werden die Möglichkeiten, das Verhalten zu kennen und zu antizipieren, eingeschränkt. Eine vordefinierte Takttastzelle weist auch Attribute auf, die von dem Synthesizer verwendet werden. Attribute umfassen Timing-Informationen zum Ausgleichen des Taktbaums (Pufferplatzierung im Entwurf zum Verwalten von Lasten und Parasiten).

Einige Synthesizer unterstützen das Setzen von Attribut-Tags in RTL (zB // synthesis attributes oder (* attributes *) ), anstatt eine Zelle explizit instanziieren zu müssen. Es gibt keinen Standard dafür. Lesen Sie dazu in Ihrem Benutzerhandbuch nach.

Was ist der Zweck der Verwendung einer benutzerdefinierten Clock-Gating-Zelle?

Die benutzerdefinierte Zelle ist eine per-definierte Zelle in der Synthese-Bibliothek mit bekannten Timing-Informationen, Lastverteilung und anderen Attributen. Mit dieser Information weiß der Synthesizer, wo und wie die Pufferverzögerung im Taktbaum hinzugefügt oder kalibriert werden soll. Dies stellt sicher, dass der nicht gesteuerte Flop die Taktflanke vor dem gegatterten Flop nicht sieht.

%Vor%

Ohne die Anleitung könnte der Gated Flop einen verzögerten Takt bekommen. Der Skew würde dazu führen, dass die falschen Daten abgetastet werden.

%Vor%     
Greg 28.07.2014, 20:41
quelle

Tags und Links