Guten Morgen, Ich habe ein etwas umfangreicheres Projekt, bei dem es sich anbietet, etwas Strom zu sparen. Das activity level ist sehr hoch, die Stromaufnahme ebenso und der FPGA (Virtex IIP) wird leicht warm. Nun will ich ein paar Komponenten zeitweise abschalten, per clock-gating und operand isolation. Allerdings sind clocks mit Kombinatorik verbunden ja nicht gerade empfehlenswert, richtig? Wie setzt man clock-gating im FPGA praktisch um, ohne sich damit einen Haufen Probleme zu machen? MfG na
@ na (Gast) >ja nicht gerade empfehlenswert, richtig? Wie setzt man clock-gating im >FPGA praktisch um, ohne sich damit einen Haufen Probleme zu machen? Unter anderem so. Taktung FPGA/CPLD MFG Falk
Danke sehr, da hatte ich noch gar nicht geschaut. Das beschreibt ja soweit erstmal das Problem, welches ich vermeiden will. An das clock enable hatte ich auch schon gedacht, wollte das aber wegen der extra notwendigen Verdrahtung zu jedem einzelnen FF nicht auf diese Weise umsetzen. Der derived clock wird wohl eine akzeptable Variante sein. Allerdings nur, solange ich wirklich alle Schaltungsteile damit versorge, da es sonst wieder zu Verschiebungen kommt, oder?
@ na (Gast) >An das clock enable hatte ich auch schon gedacht, wollte das aber wegen >der extra notwendigen Verdrahtung zu jedem einzelnen FF nicht auf diese >Weise umsetzen. Moderne FPGAs haben TONNENWEISE Verdrahtungsresourcen, da sollte es wenig Problem geben. Allerdings ist die Stromeinsparung nicht ganz so hoch wie beim echten Clock Gating, weil bei hohen Taktfrequenzen die Taktverteilung schon ordentlich Strom zieht. Siehe hier http://www.geocities.com/jacquesmartini/digital/pldpower/pld_power_measurement.html >Der derived clock wird wohl eine akzeptable Variante sein. Allerdings >nur, solange ich wirklich alle Schaltungsteile damit versorge, da es >sonst wieder zu Verschiebungen kommt, oder? Jain. Du kann schon Teile deines Designs damit laufen lassen, allerdings muss man die Übergänge zwischen den Takten mit Respekt behandeln. Am besten man betrachtet sie als asychron und verwendet zur Kopplung asychrone FIFOs und verwendet auch sonstige Massnahmen wie bei asynchronen Signalen (Abtastung etc.) MFG Falk
na wrote: > Danke sehr, da hatte ich noch gar nicht geschaut. > Hm, fehlt da der Hinweias auf die glitchfreien Takt-multiplexer BUFGMUX ? Ist der in den neuen versionen abhanden gekommen? Damit kann man stressfrei Takte abschalten, Xilinx promotet das zum Stromsparen.
@ Fpga Kuechle (fpgakuechle) >Hm, fehlt da der Hinweias auf die glitchfreien Takt-multiplexer BUFGMUX >? >Ist der in den neuen versionen abhanden gekommen? Nee, ist drin. Einfach mal CTRL-F und BUFGMUX eingeben. MFG Falk
gefunden!, steht im Abschnitt clock enable (?). werd mal den Artikel heute neu strukturieren.
Dazu passt gut eine Frage die ich schon länger habe: Im Artikel ist das Clock Enable als If-Abfrage im synchronen Prozess. Wir haben hier ein Design, in dem das Clock Enable in der if-Bedingung für das synchrone Abarbeiten steht, der Prozess schaut also so aus: if Reset = '0' then ... elsif Clk'EVENT and Clk = '1' and CE_signal = '1' then ... ... end if; Macht das irgendeinen Unterschied für das Synthesetool oder ist es äquivalent zu dem Code im Artikel?
Aber sicher macht das einen Unterschied.
> elsif Clk'EVENT and Clk = '1' and CE_signal = '1' then
genau so sollte man das nicht machen, hier wird das Clocksignal mit
"Kombinatorik" verschaltet.
Anders im Artikel, hier wird nach der Synthese der Dateneingang des oder
der FF mit dem Freigabesignal beschaltet.
>Anders im Artikel, hier wird nach der Synthese der Dateneingang des oder >der FF mit dem Freigabesignal beschaltet. sorry, hab mich verschrieben, es sollte "CE-Eingang" statt Dateneingang heißen.
Es ist ja auch das Ziel dieses Konstrukts, dass die CE-Eingänge der FF's mit dem CE_signal beschalten werden. Ist das Synthesetool zu "blöd", das daraus abzuleiten? Logisch ist es ja äquivalent, der Simulator sollte sich auch mit beiden Varianten gleich verhalten. Warum schafft es das Synthesetool nicht, aus so einer if-Bedingung abzuleiten, dass es das CE_signal an die CE-Eingänge der FF's in dem Prozess legt?
"Warum?" ist eine Frage, die man bei den Synthesetools besser nicht stellt... Logisch sind beide Varianten natürlich gleich, zur Sicherheit würde ich aber immer zwei getrennte Abfragen benutzen.
@ Matthias (Gast) >mit dem CE_signal beschalten werden. Ist das Synthesetool zu "blöd", das >daraus abzuleiten? Mehr oder weniger. >sich auch mit beiden Varianten gleich verhalten. Warum schafft es das >Synthesetool nicht, aus so einer if-Bedingung abzuleiten, dass es das >CE_signal an die CE-Eingänge der FF's in dem Prozess legt? Keine Ahnung. Ist am Ende aber egal. Schreibs hin wie es Das Synthesetool haben will und gut is. MFG Falk
hab mich da gerade an einen anderen Thread erinnert, da hatten wir das schon mal. Es kommt also auch auf das jeweilige Synthese-Tool an, manche machen das, ander wieder nicht. Beitrag "Suche Befehl eine einzelne Flanke" Gruß Volker
Ok, es ist also mehr ein "Auf Nummer Sicher"-gehen als dass Synthese-Tools diesen Zusammenhang einfach nicht erkennen könnten oder es andere Gründe gibt, die dagegen sprechen. Ich hab mir gerade im FPGA Editor angeschaut, was xst aus diesem Code gemacht hat, der hat wie intendiert das Signal an die CE-Eingänge geführt. Insofern mehr eine Frage der Portabilität zwischen verschiedenen Synthesetools. Andererseits: Wie kann ich sicher sein, dass ein beliebiges Synthesetool die Syntax mit einer eigenen If-Abfrage für das CE-Signal richtig macht? Im Prinzip muss ich mein Tool kennen damit ich weiß, ob ich das gewünschte erreiche.
@ Matthias (Gast) >Synthesetools. Andererseits: Wie kann ich sicher sein, dass ein >beliebiges Synthesetool die Syntax mit einer eigenen If-Abfrage für das >CE-Signal richtig macht? Indem du das CE in eine eigene If Abfrage schreibst. > Im Prinzip muss ich mein Tool kennen damit ich >weiß, ob ich das gewünschte erreiche. Das gilt immer bei Compilern, speziell bei VHDL und wenn es darum geht, optimale Schaltungsstrukturen für die Zieltechnologie zu erzeugen. Rein formal und logisch ist das Ergebnis immer gleich. MfG Falk
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.