www.mikrocontroller.net

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


Autor: Schüler (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Hans (Gast)
Datum:

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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Schüler (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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;

 ...

Autor: Björn Cassens (bjoernc) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Schüler (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Guru (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>darf man keine zwei elsif abfragen in einer if schleife haben?

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

Autor: Patrick (Gast)
Datum:

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

Autor: Schüler (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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;

Autor: Einer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So etwas nennt man beratungsresistent.

Autor: smatlok (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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..

Autor: Schüler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
es folgt nichts mehr mit AH

Autor: smatlok (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Björn Cassens (bjoernc) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Silvia A. (silvia)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: smatlok (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> smatlok (Gast) 21:28
> Björn Cassens 21:28
> Silvia A. 21:28

Hähä, erster ;-)

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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... :-/

Autor: Schüler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das ist ja dann im letzten teil gegeben,...
...

else AH <= AH;
end if;

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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)?

Autor: Schüler (Gast)
Datum:

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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Schüler (Gast)
Datum:

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

Autor: Guru (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.