Habe ein Problem, bin ein Neuling in dem Programmierbereich, habe ein
kleines Programm geschrieben und nun kommen Warnungen.
WARNING:Xst:737 - Found 4-bit latch for signal <AH>. Latches may be
generated from incomplete case or if statements. We do not recommend the
use of latches in FPGA/CPLD designs, as they may lead to timing
problems.
Kann mir jemand sagen, wie ich den Fehler beheben kann, bzw. was von mir
verlangt wird?
Naja, steht doch da: Du hast ein fünf Bit breites Latch an Signal AH
gebaut.
Weiter: Latches können aus unvollständigen CASE- oder IF-Anweisungen
resultieren. Wir raten von deren Einsatz ab, usw.
Da hier niemand Deinen Code kennt, kann da auch niemand mehr zu sagen.
BTW: Deine Überschrift ist falsch; es handelt sich ja um keinen Fehler,
sondern um eine Warnung.
Patrick
Die Angabe des Codes ist schon sehr dürftig. Aus diesem Post wird nichts
ersichtlich. Vor allem ist nicht nachvollziehbar, ob nun ein ELSE fehlt
oder nicht. Bitte poste deinen gesamten Code damit man nachvollziehen
kann was deine Hardware machen soll und vor allem wo mögliche
Fehlerquellen liegen könnten.
mfG
Also das ist der Teil der "AH" enthält danach kommt direkt noch eine
elsif abfrage, oder darf man keine zwei elsif abfragen in einer if
schleife haben?
naja also es folgt direkt danach nochmal ein elsif und noch ein else...
also
if reset = '1' then AH <= "0000";
elsif ZUSTAND = A_1 then
if (sw_3 & sw_2 & sw_1 & sw_0) >= 9 then
AH <= "1001";
else
AH <= sw_3 & sw_2 & sw_1 & sw_0;
end if;
elsif .....
else....
end if;
Schüler schrieb:> naja also es folgt direkt danach nochmal ein elsif und noch ein else...
davon weiß auch immernoch keiner ob in den "..." eine sichere Zuweisung
für AH erfolgt..
Schüler schrieb:> es folgt nichts mehr mit AH
joo, und was ist wenn "reset" = 0 und "Zustand" nicht A_1 ist? welches
signal soll dann AH zugewiesen werden? Dieser Fall ist in deinem
codeschnipsel nicht definiert, es wird also ein Latch gebaut.
Dann liegt der Fehler vermutlich am fehlendem ELSE zweig beim Reset -
aber ist nur geraten da ich halt nicht nachvollziehen kann was sonst
noch im Code steht.
Patrick schrieb:> BTW: Deine Überschrift ist falsch; es handelt sich ja um keinen Fehler,> sondern um eine Warnung.
Die sollte aber am besten als Fehler interpretiert werden!!!
Wenn ich ein Latch beschreibe, dann weiß ich was ich mache.
Aber Schüler weiß das nicht. Und insbesondere weiß ewr nichts von den
Gefahren von Latches, die über Kombinatorik (wie z.B. hier den ZUSTAND)
angesteuert werden.
Schüler schrieb:> naja also es folgt direkt danach nochmal ein elsif und noch ein else...> also>> if reset = '1' then AH <= "0000";> elsif ZUSTAND = A_1 then> if (sw_3 & sw_2 & sw_1 & sw_0) >= 9 then> AH <= "1001";> else> AH <= sw_3 & sw_2 & sw_1 & sw_0;> end if;
Mach dich mal zum Thema "Synchrones Design" schlau. Dann passiert sowas
nicht mehr.
Das hier ist auf jeden Fall schon mal Murks, und ich will jetzt den Rest
gar nicht mehr sehen...
BTW: ich habe den strammen Verdacht, dass die sw_X externe Signale
sind, die (natürlich) nicht einsynchronisiert wurden...
Wobei, wenn ich mirs recht überlege: in einem asynchronen Design (und
nur dort tauchen Latches auf) gibt es nichts zu synchronisieren... :-/
Schüler schrieb:> das ist ja dann im letzten teil gegeben,...> ...>> else AH <= AH;> end if;
Ja. Das ist jetzt ein explizites Latch. Bis vorhin war es noch
implizit...
Aber: willst du das wirklich? Brauchst du überhaupt ein Latch? Sind
dir die Konsequenzen klar? Ich zitiere:
>>> We do not recommend the use of latches in FPGA/CPLD designs,>>> as they may lead to timing problems.
Weißt du was das heißt? Woher die Probleme kommen (können)?
Schüler schrieb:> sorry bin da auch noch nicht so bewandert...
Ja, jeder fängt mal klein an... ;-)
Leih dir mal das Buch VHDL-Synthese von Reichardt&Schwarz (Deutsch) aus.
Oder eins vom Peter Ashenden (Englisch).
Dir wird ein ganzer Kronleuchter aufgehen.
Schüler schrieb:> würde das gern mal testen aber> die synthese die schlägt ja immer fehl
Wie wärs dann erst mal mit einer Simulation?
> würde das gern mal testen aber> die synthese die schlägt ja immer fehl
Sie schlägt nicht an diesem Latch fehl.
Oder, wenn das die einzige Warnung ist, dann bleibt der Synthese nichts
anderes übrig, denn du selber hast da ein Latch eingebaut. Was sollte
sie denn anderes machen?
> Also so helfen kannst du da grad nicht?
Ohne eine Aufgabenbeschreibung und/oder mindestens den VHDL-Code wohl
kaum, oder? Wie denn auch?
Also: poste deinen Code und lass ihn zerreissen... ;-)