Forum: FPGA, VHDL & Co. Gated Clocks - was steckt dahinter?


von Chris (Gast)


Lesenswert?

Warum soll man eigentlich Gated Clocks vermeiden? Ich nutzte diese 
eigentliche immer um nen Takt freizugeben. Heute sagte mir mein Prof., 
dass dies nicht unbedingt optimal (sogar verboten??) sei. Ich meine zB. 
folgendes Konstrukt:

if (rising_edge(clk) and freigabe='1') then ...

von Klaus F. (kfalser)


Lesenswert?

Chris schrieb:
> Warum soll man eigentlich Gated Clocks vermeiden? Ich nutzte diese
> eigentliche immer um nen Takt freizugeben. Heute sagte mir mein Prof.,
> dass dies nicht unbedingt optimal (sogar verboten??) sei. Ich meine zB.
> folgendes Konstrukt:
>
> if (rising_edge(clk) and freigabe='1') then ...

Das ist noch kein Gated Clock sondern ein Clock Enable und ist zulässig.

Bei Gated Clocks hat man ein Und-Gatter in der Takt Leitung, z.B.
durch

> if (rising_edge(clk and freigabe)) then ...

Warum man sie nicht verwenden sollte :
- Durch das Und-Gatte in der Taktleitung wird das Taktsignal nochmals 
verzögert und die FFs schalten nicht mehr alle gleichzeitig.
- Es können beim Wegnehmen der Freigabe Glitches entstehen
- Die FPGA haben spezielle Leitungen für den Takt, von denen es nur eine 
geringe Anzahl gibt. Jeder zusätzliche Takt verschwendet diese 
Resourcen.

von P. K. (pek)


Lesenswert?

Gated Clocks werden an (Hoch)schulen eher als "des Teufels" angesehen, 
weil damit sehr viele Gefahren verbunden sind.

Auch ich hatte in der "freien" Industrie als allererstes sehen müssen, 
dass die ach so verbotenen gated clocks überall eingesetzt werden, wo 
low power ein Thema ist.

Bei FPGA kein Problem:

Im Kleinen (per FF): Clock enable benutzen (wie von Klaus beschrieben)
Im Grossen (CLK)   : Schauen ob die Clockbuffers gating zur Verfügung 
stellen (z.B: bei Stratix III ja). Diese Clockbuffers kümmern sich dann 
um die Probleme

Bei Chips/ASICs:

Da muss man sich in beiden Fällen um die Probleme selbst kümmern 
(Glitches auf der Clockleitung, Timing von Enables etc.)

von Falk B. (falk)


Lesenswert?

@  Peter K. (pek)

>Auch ich hatte in der "freien" Industrie als allererstes sehen müssen,
>dass die ach so verbotenen gated clocks überall eingesetzt werden, wo
>low power ein Thema ist.

>Bei FPGA kein Problem:

Wenn das mal kein Irrtum ist.

Taktung FPGA/CPLD

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Chris schrieb:
> folgendes Konstrukt:
>
> if (rising_edge(clk) and freigabe='1') then ...
Wie Klaus schon gesagt hat, ist das nur eine etwas ungewöhnliche 
Beschreibung eines Clock-Enables. Da gibts noch andere obskure 
Möglichkeiten:
 http://www.lothar-miller.de/s9y/categories/6-Clock-Enable

von bko (Gast)


Lesenswert?

Die ASIC-tools unterstützen mittlerweile das "clockgating" per Hand
oder synthetisieren solche "Clockgates" gar selbst.
Zum Beispiel wie hier auf der teuer Synopsys Seite beschrieben:
http://www.synopsys.com/tools/implementation/rtlsynthesis/pages/powercompiler.aspx

Aber auch Xilinx springt auf den Clockgate-Stromsparzug auf:
http://www.xilinx.com/support/documentation/white_papers/wp370_Intelligent_Clock_Gating.pdf

Wenn man sich an die Tool-Manuals hält, geht dies eigtl.
ganz gut.

von Lattice User (Gast)


Lesenswert?

Siehe auch Working with Gated Clocks  im
*Synopsys FPGA Synthesis Synplify Pro for Lattice User Guide* (S.220)

http://help.latticesemi.com/synpbase/doc/user_guide.pdf

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite



Lesenswert?

bko schrieb:
> Aber auch Xilinx springt auf den Clockgate-Stromsparzug auf:
Das ist kein Clock-Gating, bei dem ein Und-Gatter vor den Takteingang 
geschaltet wird, sondern es ist die sinnvolle Verwendung des 
Clock-Enables. Und genauso wird der entsprechende Eingang in allen 
Bildern auch genannt: CE.
M.E. wird in diesem Dokument ein Gated-Clock fälschlicherweise mit einem 
Clock-Enable gleichgesetzt.

Lattice User schrieb:
> Siehe auch Working with Gated Clocks  im
> *Synopsys FPGA Synthesis Synplify Pro for Lattice User Guide* (S.220)
Dort wird beschrieben, dass Gated-Clocks von der Toolchain automatisch 
in Clock-Enables umgewandelt werden.

Ein "richtiger" Gated-Clock mit Kombinatorik (z.B. Und-Gatter) vor dem 
Takteingang würde hier z.B. zwei Taktquellen haben und kuriose 
Ergebnisse zeigen:
1
             ______        ______        ______        _____
2
 clk   _____|      |______|      |______|      |______|
3
4
         ______________             ______    ________
5
 en    _|              |___________|      |__|        |_____
6
7
             ______                      _    _
8
gated  _____|      |____________________| |__| |______|_____
Kurz: als Takt unbrauchbar.

von bko (Gast)


Lesenswert?

ah ok, da hat mich bei Xilinx das
Marketinggeschwurble verwirrt.
Denn  bei ASICS ist >clockgating< Stand der Technik
und wird wie in dem Synopsys-Link beschrieben
umgesetzt. Der Enable für das Clockgate ist
aber Taktbezogen. Die ASIC Place&Route Tools können
damit umgehen - Hab ich selbst schon so durchgezogen.

von Lattice User (Gast)


Angehängte Dateien:

Lesenswert?

Lothar Miller schrieb:
> Kurz: als Takt unbrauchbar.

Das kommt davon wenn man "en" nicht einsynchronisiert grins


Ich habe ein wenig herumgespielt und ein Beispiel gefunden bei dem die 
Gated Clock Conversion von Synopsys nicht das erwartete Ergebniss 
liefert, und auch ein anderes als die Simulation.
1
module GatedClock(
2
  input wire Clock1,
3
  input wire Clock2,
4
  input wire Clock1Sel,
5
  input wire Clock2Sel,
6
  output wire Out1,
7
  output wire Out2
8
);
9
10
reg Out1Reg = 0;
11
wire Clock = Clock1 & Clock1Sel | Clock2 & Clock2Sel;
12
assign Out1 = Out1Reg;
13
always @(posedge Clock) Out1Reg <= ~Out1Reg;
14
15
reg Out2Reg = 0;
16
assign Out2 = Out2Reg;
17
always @(posedge Clock1) Out2Reg <= ~Out2Reg;
18
19
endmodule

Wenn Clock1Sel low und Clock2Sel high ist soll Out1 bei jder Flanke von 
Clock2 den Zustand ändern. Wie man aber im angehängten Bild sieht, 
werden beide Ausgänge mit Clock1 getaktet. (Clock für die FF ist rot)

PS: Wenn ich Out2 weglasse oder statt Clock1Sel und Clock2Sel ein 
ClockSel dessen Pegel zwischen Clock1 und Clock2 umschaltet verwende 
wird keine Gated Clock Conversion gemacht.

von Dosmo (Gast)


Lesenswert?

Lothar Miller schrieb:
> ...

Lothar, hast Du schon mal daran gedacht, ein FPGA/VHDL-Buch zu 
schreiben?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Dosmo schrieb:
> Lothar, hast Du schon mal daran gedacht, ein FPGA/VHDL-Buch zu schreiben?
Wenn mal ein langer, harter Winter kommt, könnten mir solche Gedanken 
kommen...  ;-)

von Duke Scarring (Gast)


Lesenswert?

Lothar Miller schrieb:
> Wenn mal ein langer, harter Winter kommt,
... dann heize ich immer den Lötkolben ein :o)

Duke

P.S. Ich würde mich auch als Lektor zur Verfügung stellen ;-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.