Ich habe immer noch Probleme mit dem Verständnis von VHDL und kann mir die Fehlermeldung : WARNING:Xst:1426 - The value init of the FF/Latch state_0 hinder the constant cleaning in the block quicksort. You should achieve better results by setting this init to 0. nicht erklären. Was mache ich bloß falsch ? (Siehe Anhang) Es soll ein Speicherbereich beschrieben werden. Bei jeder positiven Flanke sollen die Daten eingeschrieben werden, bei jeder negativen Flanke soll die Speicheradresse um eins erhöht werden. Hierzu habe ich einen Prozess "increment" definiert der bei einer fallenden Flanke die Adresse initialisieren und inkrementieren soll. Der zweite Prozess "state_machine" reagiert nicht auf den Initialisierungszustand "idle_state" der Zustandsmaschine. Dieser reagiert nur auf steigende Flanken. Da nach einer fallenden Flanke eine steigende folgt und der Zustand im Prozess "increment" nach der Initialisierung von "idle_state" auf "data_in_state" gesetzt wird sollte an dieser Stelle der Schreibvorgang erfolgen. Ist der Gedankengang totaler Blödsinn ? Kann man die beiden If-Abfragen auf fallende und steigende Flanke in einen Prozess packen ? Dank euch
@ Hans-Werner (Gast) >Was mache ich bloß falsch ? (Siehe Anhang) Das ist nur ein Hinweis, dass etwas ggf. besser optimiert werden könnte. Kann man hier ignorieren. >Bei jeder positiven Flanke sollen die Daten eingeschrieben werden, bei >jeder negativen Flanke soll die Speicheradresse um eins erhöht werden. Das ist Unsinn. Synchrone Logik arbeitet auf ein und derselben Flanke. Und was zur Hölle soll das?
1 | write_address_quicksort_internal <= std_logic_vector(to_unsigned(to_integer(unsigned(write_address_quicksort_internal)) + 1, address_width_quicksort)); |
So geht das eine "wenig" einfacher und übersichtlicher.
1 | write_address_quicksort_internal <= write_address_quicksort_internal + 1; |
>Ist der Gedankengang totaler Blödsinn ? Relativ ja. >Kann man die beiden If-Abfragen auf fallende und steigende Flanke in >einen Prozess packen ? Das schon mal gar nicht. Befass dich mal mit den Grundlagen synchroner Logik, z.B. SDRAM-Timing, der erste Abschnitt. MFG Falk
Und was zur Hölle soll das? Es wird ein std_logic_vector in einen integer konvertiert, eins addiert und danach in std_logic_vector zurück konvertiert. Wenn ich versuche zu einem std_logic_vector eins zu addieren kriege ich Fehlermeldungen.
Die Fehlermeldung siehst du hier. Und was zur Hölle soll das? Entity <ram> compiled. Entity <ram> (Architecture <ram_rtl>) compiled. ERROR:HDLParsers:808 - "E:/Programmieren/VHDL/EDA Design/Xilinx ISE Projekte/Quicksort/Quicksort.vhd" Line 186. + can not have such operands in this context. ERROR:HDLParsers:808 - "E:/Programmieren/VHDL/EDA Design/Xilinx ISE Projekte/Quicksort/Quicksort.vhd" Line 188. + can not have such operands in this context. Entity <quicksort> compiled.
@ Hans-Werner (Gast) >Es wird ein std_logic_vector in einen integer konvertiert, eins addiert >und danach in std_logic_vector zurück konvertiert. Wenn ich versuche zu >einem std_logic_vector eins zu addieren kriege ich Fehlermeldungen. Mit den normalen Bibliotheken ist das kein Problem. Die etwas universellere Variante ist
1 | library IEEE; |
2 | use IEEE.STD_LOGIC_1164.ALL; |
3 | use IEEE.NUMERIC_STD.ALL; |
damit muss man aber mit signed oder unsigned Vektoren arbeiten. Geht. Etwas politisch inkorrekt sind die alten, nicht streng genormten Bibliotheken.
1 | library ieee; |
2 | use ieee.std_logic_1164.all; |
3 | use ieee.std_logic_arith.all; |
4 | use ieee.std_logic_unsigned.all; |
Damit kann man auch mit std_logic_vector addieren etc. Aber nicht beide Varianten gleichzeitg nutzen! MFg Falk
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.