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?
Google halt! Allerdings wird dir weder dort noch hier keiner was sagen können, ohne Angabe vom verwendeten Code und Compiler.
Schüler schrieb: > Kann mir jemand sagen, wie ich den Fehler beheben kann, Ja, sicher.. > bzw. was von mir verlangt wird? Zeig mal deinen Code...
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
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; ...
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?
Schau Dir mal die äußere IF-ELSIF-Schleife an: Dort fehlt das ELSE, um vollständig zu sein.
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.
Es gibt also keine Zuweisung an AH ausserhalb des Zustandes A_1. Damit ist die beschreibung von AH UNVOLLSTÄNDIG die folge: ein Latch
> smatlok (Gast) 21:28 > Björn Cassens 21:28 > Silvia A. 21:28 Hähä, erster ;-)
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)?
Nein ist mir ehrlich gesagt nicht klar, sorry bin da auch noch nicht so bewandert...
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.
Also so helfen kannst du da grad nicht? würde das gern mal testen aber die synthese die schlägt ja immer fehl
Tja, ich fürchte vor'm probieren kommt das studieren. Das sind ja doch Grundlagen und keine Geheimnisse für die man Expertise braucht.
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... ;-)
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.