mikrocontroller.net

Forum: FPGA, VHDL & Co. Clock-gating FPGA


Autor: na (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ 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

Autor: na (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ 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/pl...

>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

Autor: na (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gut, da werd ich das mal probieren. Danke soweit.

Autor: Fpga Kuechle (fpgakuechle) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ 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

Autor: Fpga Kuechle (fpgakuechle) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
gefunden!, steht im Abschnitt clock enable (?). werd mal den Artikel 
heute neu strukturieren.

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Volker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Volker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>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.

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Jan M. (mueschel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"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.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ 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

Autor: Volker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.