Hallo,
ich benutze einen CPLD (XC95288XL von Xilinx) eigentlich nur in einem
kurzen Startmoment, danach wird er nur noch für eine Taktteilung von
48MHz auf 24MHz benötigt. Der CPLD wird ziemlich warm aber kann das
wirklich nur an der Taktteilung liegen?
Wie wird ein process mit der "Empfindlichkeitsliste" gehandhabt? Und
zwar habe ich da den Takt noch drin anschließend kommt jedoch eine
if-Anweisung die den Prozess umgeht...
Bsp:
proc_bsp : process (Takt)
begin
if (finish = '0') then
...
else
(default-values)
end if;
end process;
Kann durch diese Anweisung der CPLD auch "warm" werden?
Gruß
Bustle
sorry,
so ist es glaub besser...
proc_bsp : process (Takt)
begin
if (finish = '0') then
if (rising_edge (Takt)) then
sth <= not sth;
end if;
else
sth <= '0';
end if;
end process;
XST wird auch immer besser, wenn er das akzeptiert.
Wenn man das umschreibt in :
proc_bsp : process (Takt, finish)
begin
if (finish = '1') then
sth <= '0';
elsif (rising_edge (Takt)) then
sth <= not sth;
end if;
end process;
dann wird es die Beschreibung eines FF's mit Reset.
Dies wäre eigentlich die korrekte Form.
Wenn das der ganze Inhalt von deinem CPLD ist, dann sollte es eigenlich
nicht sehr warm werden. Mit finish auf 1 sollte auch das interne FF
nicht schalten und weniger Strom brauchen, aber im Gegensatz zu den
CoolRunner haben die 9500 doch einen beträchtlichen Ruhestrom.
Kontrolliere vielleicht nochmals ob Du nicht irgend einen Kurzschluß am
Ausgang hast. So viel ich mich erinnere gibt es auch eine Option im
Fitter, mit der man die unbenutzten FF in einen Low Power Mode bringen
kann.
Lauwarm darf Dein CPLD aber immer werden.
Die Option, um unbenutzte FF in einen Low Power Mode zu versetzen habe
ich im ISE nirgends gefunden.
Jedoch habe ich mal die Einstellung im Fitting für "Marcocell Power
Settings" auf "Low" gesetzt und ich denke dadurch etwas an Wärmeverlust
gut gemacht zu haben. Jedoch verwende ich intern einen 48MHz Takt. Kann
es da zu Problemen kommen?
Die ersten Tests zeigen keine Nebenwirkungen. Jedoch kenne ich die
Dauertests noch nicht.
Du mußt im UCF-File die 48 MHz als Takt angeben, dann können die Tools
berechnen ob das Timing korrekt ist oder nicht.
Wenn Du die "Marcocell Power Settings" auf "Timing Driven" setzt, dann
sollte der Fitter die Macro-Cell auf langsam (=Low Power) setzen wenn
dies vom Timing her möglich ist.
Insgesamt werden in meiner CPLD Logik 222 Makrozellen benötigt. Wenn ich
auf "Timing Driven" im Fitter umschalte, dann werden davon nur 6
Makrozellen in den "Low Power Modus" übernommen.
Um davon mehr Makrozellen in den "Low Power Modus" zu nehmen, muss ich
wahrscheinlich im ucf-File noch detailierter auf die einzelnen Signale
eingehen, oder?
Muss ich dann jedem (auch reine interne) Signale bei den ich glaub, dass
ein "Low Power Modus" sinnvoll ist, diese angeben?
so wie
NET "counter<20>" PWR_MODE = LOW;
...wäre ziemlich aufwendig
Nein, Du mußt im UCF File eventuell nur genauer angeben, welches Signal
mit welcher Frequenz arbeitet.
Wenn Dein ganzes Design mit 48 MHZ arbeitet, dann hat der Fitter
gefunden daß 216 eben volle Geschwindigkeit brauchen und nur 6 langsamer
arbeiten können. Wenn Du die Macrozelle trotzdem manuell auf langsam
stellst, dann sollte eigentlich der Fitter mit dem Timing nicht mehr
hinkommen.
hmm...
Die 48MHz brauche ich nur für zwei Dinge. Einmal leite ich sie
unverändert durch den CPLD durch und zum anderen Teile ich sie auf 24MHz
runter. Hinzu kommt noch ein 30MHz Takt den ich für die Anfangsphase
benötige.
Aber es gibt auch einige Logikblöcke im CPLD, welche mit Taktfrequenzen
unterhalb von 1MHz arbeiten (bis zu 0,7Hz zur Visualisierung).
...ach, was hier sein kann ist, dass ich diese Taktsignale nicht im ucf
angegeben hab, weil ich dachte, dass diese sowieso keine Engpässe
darstellen.
Ab welcher Taktfrequenz ist es den empfehlsenwert auf "High Power Modus"
zu schalten? Ich hab mal was von 20MHz in nem Datenblatt gelesen?!
Komisch ist momentan, das alles im "Low Power Modus" läuft. Die Frage
für mich ist hier nur, ob das zufällig ist und morgen wieder anders
aussehen kann...
Man kann keine Taktfrequenz angeben, ab der es den Standard Power Mode
braucht, weil es auch von der Durchlaufzeit durch die Produkt Terme und
durch die Verbindungsmatrix ankommt.
Wenn Du eine saubere Lösung willst, dann mußt Du die Frequenzen deiner
Clocks im UCF_File angeben und das Tool entscheiden lassen, ob genügend
Luft für Low Power Mode jeder einzelnen Macrozelle ist.
Jetzt habe ich auch die langsamen Frequenz aller verwendeten Clocks im
ucf angegeben.
Resultat ist aber etwas merkwürdig. Denn statt der vorhin 6 in den "Low
Power Modus" übernommen Makrozellen, werden jetzt nur noch 5 von den
ingesamt 222 übernommen...
Naja, ganz schlau werde ich jetzt daraus nicht aber wahrscheinlich
sollte ich auch zufrieden sein, wenn's läuft wenn ich alle 222
Makrozellen in den "Low Power Modus" nehme.
Danke für deine Hilfe Klaus.
@Bustle
Dein CPLD ist schon recht gross. Und er zieht auch ordentlich Strom,
wenn er nix tut. Siehe Datenblatt 1. Seite. Bei 0 (NULL) MHz zieht das
gute Stück bereits ~280mA und das bei 3.3V, macht ~1W. Er basiert eben
noch auf later GAL-Technologie. Wenn du fast alle Zellen in den
LOW-power Modus schaltest kommst du auf ~120mA (40mW). Nur die
Coolrunner und ähnliche Familien (MACH ZEro-Power Von Lattice z.B.)
brauchen nur dann Strom, wenn sie wirklich was machen.
MFG
Falk