Forum: FPGA, VHDL & Co. hinder the constant cleaning in the block


von Hans-Werner (Gast)


Angehängte Dateien:

Lesenswert?

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

von Falk B. (falk)


Lesenswert?

@ 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

von Hans-Werner (Gast)


Lesenswert?

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.

von Hans-Werner (Gast)


Lesenswert?

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.

von Falk B. (falk)


Lesenswert?

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