Forum: FPGA, VHDL & Co. Found 1-bit latch for signal


von Steffen (Gast)


Angehängte Dateien:

Lesenswert?

Moin,

ich bin grade dabei ein Projekt für die Uni zu machen und habe ein 
Problem mit Warnings.

WARNING:Xst:737 - Found 1-bit latch for signal <OUT_BUF_FULL>.
WARNING:Xst:737 - Found 16-bit latch for signal <A>.
WARNING:Xst:737 - Found 1-bit latch for signal <MB_DATA_OUT>.
WARNING:Xst:2734 - Property "use_dsp48" is not applicable for this 
technology.
WARNING:Xst:737 - Found 1-bit latch for signal <E_0>.
WARNING:Xst:737 - Found 1-bit latch for signal <E_1>.
WARNING:Xst:737 - Found 1-bit latch for signal <E_2>.
WARNING:Xst:737 - Found 1-bit latch for signal <E_3>.
WARNING:Xst:737 - Found 1-bit latch for signal <E_4>.
WARNING:Xst:737 - Found 1-bit latch for signal <E_5>.
WARNING:Xst:737 - Found 1-bit latch for signal <E_6>.
WARNING:Xst:737 - Found 1-bit latch for signal <E_7>.
WARNING:Xst:737 - Found 1-bit latch for signal <E_10>.
WARNING:Xst:737 - Found 1-bit latch for signal <E_8>.
WARNING:Xst:737 - Found 1-bit latch for signal <E_9>.

Ich weiß zwar das diese Warnings auftreten, wenn man die Signale nicht 
richtig Initalisiert - aber ich habe auch keine Idee wie und wo man das 
Sinnvoll tut..

Ich hoffe die Große des Codes schreckt nicht allzusehr ab.

Danke für Eure Hilfe

von Steffen (Gast)


Lesenswert?

Für allgemeine Anregungen zum Coding Style wäre ich auch dankbar!

von Gast (Gast)


Lesenswert?

Das warning soll Dir nur sagen, daß Du überlegen sollst, ob dieses 
Register wirklich nur ein Latch ist. Wenn es so sein soll, muss das 
nicht wegdesigned werden !

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

1
      if RESET = '0' then 
2
        KEY_DATA_IN_ZUSTAND <= Z_RESET after 20 ns;
3
      elsif(GeneratePseudoInput = '1') then
4
        KEY_DATA_IN_ZUSTAND <= Z_PSEUDO after 20 ns;
5
      elsif(GeneratePseudoInput = '0' and KEY_DATA_IN_ZUSTAND = Z_PSEUDO
6
and KEY_DATA_IN_FZUSTAND = Z_RESET) then
7
        KEY_DATA_IN_ZUSTAND <= KEY_DATA_IN_FZUSTAND after 20 ns;
8
      elsif  (KEY_CLK_IN = '0' and KEY_CLK_IN'event ) then
9
          KEY_DATA_IN_ZUSTAND <= KEY_DATA_IN_FZUSTAND after 20 ns;
10
      end if;

Ich fürchte du bist völlig auf dem Holzweg.
1. Es darf im Normalfall nur zwei Arten von Prozessen geben:
- kombinatorische: alle Signale in die sensitivity list, jedes Signal 
muss in jedem if-Zweig zugewiesen werden (sonst Latch), keine 
Taktflankenabfrage
- getaktete: nur clk und reset in die sensitivity list, maximal ein 
asynchroner Reset, nur eine Taktflankenabfrage
2. Man verwendet nur dann mehrere Takte im Design wenn es unbedingt 
notwendig ist
3. "after" ist nicht synthetisierbar

Schau dir mal http://www.vhdl-online.de an, insbesondere das Kapitel 
RTL-Style.

von Steffen (Gast)


Lesenswert?

Hallo Andreas,

danke für Deine Antwort, aber wie kann ich
1
      elsif(GeneratePseudoInput = '1') then
2
        KEY_DATA_IN_ZUSTAND <= Z_PSEUDO after 20 ns;
anders schreiben? Ich kann ja aus einem Anderen Prozess nicht darauf 
zugreifen? Oder meinst du einfach nur das Signal GeneratePseudoInput aus 
der sensitivity list?

von Falk B. (falk)


Lesenswert?

@ Steffen (Gast)

>anders schreiben? Ich kann ja aus einem Anderen Prozess nicht darauf
>zugreifen?

Zugreifen schon, aber eben nur lesen. Und nimm keine bit_vector, nimm 
std_logic_vector.

MfG
Falk

von Steffen (Gast)


Lesenswert?

@Frank

Ja klar, aber ich muss ja auch den Zustand irgendwie ändern...

Wieso Std_Logic_Vector? Dachte der große Vorteil bei bit_vector ist das 
ich keine probleme mit gleichzeitigem schreiben habe?

von Jan M. (mueschel)


Lesenswert?

Halte dich an die Regeln, die Andreas aufgeschrieben hat und weise jedes 
Signal in jedem Fall eines kombinatorischen Prozesses zu.

Du meinst die X und U in den Signalen? Naja, du hast vielleicht dann 
keine Probleme mit dem gleichzeitigen Schreiben, dafür der FPGA, wenn er 
versucht eine Leitung gleichzeit auf 0 und 1 zu ziehen...

von Falk B. (falk)


Lesenswert?

@ Steffen (Gast)

>@Frank

Warum verwechseln mich Dutzende Leute mit Frank?

>Ja klar, aber ich muss ja auch den Zustand irgendwie ändern...

Sicher, aber das kann immer nur ein Prozess. Für andere Sachen 
(Handshake whatever) braucht es dann mehrere Signale und Multiplexer.

>Wieso Std_Logic_Vector?

Weil man damit vor allem für die Simulation wihtige Werte darstllen 
kann, wie 'Z'; X , U etc.

> Dachte der große Vorteil bei bit_vector ist das
>ich keine probleme mit gleichzeitigem schreiben habe?

Nein.

MfG
Falk

von Steffen (Gast)


Lesenswert?

Erstmal vielen Dank für eure Antworten ich werde morgen bzw. am WE mal 
den Code überarbeiten.

@Falk

Sorry hab wohl mal wieder zu schnell gelesen...

von Steffen (Gast)


Lesenswert?

Moin,

ich habe das Problem gelöst. Das Problem war das ich nicht CLK - 
Synchron auf die Variablen zugegriffen habe und wenn man sich das 
Prinzip der huffmanschen Normalform mal ansieht wird das auch sehr 
schnell klar :)

Danke
Steffen

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.