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
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 !
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.
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?
@ 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
@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?
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...
@ 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
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...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.