Fehler! Was tun?

Gast #2104773
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?
Gast #2104780
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
Gast #2104857
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;
Moderator (Firma: Titel) Persönliche Seite #2104928
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... :-/
Moderator (Firma: Titel) Persönliche Seite #2104936
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)?
Moderator (Firma: Titel) Persönliche Seite #2105227
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... ;-)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren