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 ...
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.
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.)
@ 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
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
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.
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
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.
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.
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.
Lothar Miller schrieb: > ... Lothar, hast Du schon mal daran gedacht, ein FPGA/VHDL-Buch zu schreiben?
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... ;-)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.