mikrocontroller.net

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


Autor: Hans-Werner (Gast)
Datum:
Angehängte Dateien:

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

Autor: Falk Brunner (falk)
Datum:

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

Autor: Hans-Werner (Gast)
Datum:

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

Autor: Hans-Werner (Gast)
Datum:

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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
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.
library ieee;
  use ieee.std_logic_1164.all;
  use ieee.std_logic_arith.all;
  use ieee.std_logic_unsigned.all;

Damit kann man auch mit std_logic_vector addieren etc.

Aber nicht beide Varianten gleichzeitg nutzen!

MFg
Falk

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.