Forum: FPGA, VHDL & Co. Fehler! Was tun?


von Schüler (Gast)


Lesenswert?

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?

von Hans (Gast)


Lesenswert?

Google halt!
Allerdings wird dir weder dort noch hier keiner was sagen können, ohne 
Angabe vom verwendeten Code und Compiler.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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...

von Patrick (Gast)


Lesenswert?

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

von Schüler (Gast)


Lesenswert?

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;

 ...

von Björn C. (bjoernc) Benutzerseite


Lesenswert?

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

von Schüler (Gast)


Lesenswert?

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?

von Guru (Gast)


Lesenswert?

>darf man keine zwei elsif abfragen in einer if schleife haben?

http://if-schleife.de/ :-)

von Patrick (Gast)


Lesenswert?

Schau Dir mal die äußere IF-ELSIF-Schleife an: Dort fehlt das ELSE, um 
vollständig zu sein.

von Schüler (Gast)


Lesenswert?

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;

von Einer (Gast)


Lesenswert?

So etwas nennt man beratungsresistent.

von smatlok (Gast)


Lesenswert?

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..

von Schüler (Gast)


Lesenswert?

es folgt nichts mehr mit AH

von smatlok (Gast)


Lesenswert?

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.

von Björn C. (bjoernc) Benutzerseite


Lesenswert?

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.

von Silvia A. (silvia)


Lesenswert?

Es gibt also keine Zuweisung an AH ausserhalb des Zustandes A_1. Damit 
ist die beschreibung von AH UNVOLLSTÄNDIG die folge: ein Latch

von smatlok (Gast)


Lesenswert?

> smatlok (Gast) 21:28
> Björn Cassens 21:28
> Silvia A. 21:28

Hähä, erster ;-)

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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... :-/

von Schüler (Gast)


Lesenswert?

das ist ja dann im letzten teil gegeben,...
...

else AH <= AH;
end if;

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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)?

von Schüler (Gast)


Lesenswert?

Nein ist mir ehrlich gesagt nicht klar, sorry bin da auch noch nicht so 
bewandert...

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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.

von Schüler (Gast)


Lesenswert?

Also so helfen kannst du da grad nicht? würde das gern mal testen aber 
die synthese die schlägt ja immer fehl

von Guru (Gast)


Lesenswert?

Tja, ich fürchte vor'm probieren kommt das studieren.
Das sind ja doch Grundlagen und keine Geheimnisse für die man Expertise 
braucht.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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
Noch kein Account? Hier anmelden.