mikrocontroller.net

Forum: FPGA, VHDL & Co. Wert umwandeln


Autor: Lars (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen stehe gerade vor einem kleinen Problem umd finde nichts 
gescheites im I-net... hoffe mir kann einer weiter helfen..

ich will den Wert 3.000.000 mit einem Eingangswert (Vector 25 bit groß) 
vergleichen

hab geplant das so zu machen
MAX_VAL <= conv_std_logic_vector(3000000,25);

habe das im Process drin stehen, aber weil ich das im process drin 
stehen habe wird der Wert erst mit einem Takt verzögert benutzt..

deswegen wollte ich das jetzt als Signal definieren
signal MAX_VAL   : integer range 0 to 16777215 := 3000000;
das ist aber jetzt ein integer und kann dem Ausgangsvector nicht 
zugewiesen werden wie löse ich das?
wie kann ich die 3.000.000 ine einen vector wandeln?

vielen dank shconmal für die hilfe..

Autor: hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schreib
MAX_VAL <= conv_std_logic_vector(3000000,25);
doch einfach außerhalb des Process-Blocks. Ist ja sowieso ne Konstante. 
Hat also nichts im Prozeß zu suchen.

Autor: Lars (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
bin vor 1 min selber drauf gekommen :D

aber trotzdem danke für die schnelle antwort..

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lars schrieb:
> habe das im Process drin stehen, aber weil ich das im process drin
> stehen habe wird der Wert erst mit einem Takt verzögert benutzt..
Das kommt nicht einen Takt verzögert, weil du es in einem Prozess stehen 
hast, sondern weil dieser Prozess getaktet ist. Sowas nennt sich 
Latency...

> hoffe mir kann einer weiter helfen..
Zeig doch mal deinen Code (als Anhang mit Endung .vhd).

EDIT:
> conv_std_logic_vector
Nimm besser gleich die numeric_std, nicht die alten Synopsys-Libs...

Autor: Lars (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab jetzt doch noch ein Problem was den counter angeht ich möchte ihn 
mit 10.000.000 initialisieren und immer wieder bei abbruch des counter 
auf die 10.000.000 zurück setzen

so initialisiere ich ihn ja mit 0 ich könnte ihn natürlich mit "00..." 
initialisieren
signal count : std_logic_vector (24 downto 0) := (others => '0');

es gibt aber auch die möglichkeit einem vector so einen wert zu zuweisen
MAX_VAL <= conv_std_logic_vector(10000000,25);

funktioniert das wenn ich das wenn ich das wie folgt mache?

signal MAX_VAL : std_logic_vector (24 downto 0) := 
conv_std_logic_vector(16000000,25);

oder macht man das so nicht?

und @ lothar miller was genau meinst du mit numeric_std?

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lars schrieb:
> @ lothar miller was genau meinst du mit numeric_std?
Such mal so:
http://www.mikrocontroller.net/search?query=numeri...

Und du findest:
Beitrag "IEEE.STD_LOGIC_ARITH.ALL obsolete"
Beitrag "Re: std_logic_vector auf integer umwandeln"
Beitrag "Re: Ganze Zahl in Ziffern zerlegen"

Und hier eine Übersicht:
http://www.lothar-miller.de/s9y/archives/14-Numeric_Std.html

> funktioniert das wenn ich das wenn ich das wie folgt mache?
> signal MAX_VAL : std_logic_vector (24 downto 0) :=
> conv_std_logic_vector(16000000,25);
Eingentlich ja, aber es kommt darauf an, ob MAX_VAL überhaupt ein 
speicherndes Signal ist (vermutlich schon, denn den max Wert soll ja 
festgahlten werden).
Aber wie gesagt, ich würde das mit der numeric_std so schreiben:
 signal MAX_VAL : std_logic_vector (24 downto 0) :=
 std_logic_vector(to_unsigned(16000000,25));
Denn dann weiß ich sicher, dass das ganze ein unsigned Wert ist, und muß 
nicht vertrauen, dass irgendwo die
use IEEE.STD_LOGIC_UNSIGNED.ALL;
eingebunden wurde...

BTW:
> ich möchte ihn mit 10.000.000 initialisieren
> :
> funktioniert das wenn ich das wenn ich das wie folgt mache?
> signal MAX_VAL : std_logic_vector (24 downto 0) :=
> conv_std_logic_vector(16000000,25);
Nein, denn 16000000 /= 10000000    :-o

Autor: Günter (dl4mea) (dl4mea)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lothar Miller schrieb:
> Und hier eine Übersicht:
> http://www.lothar-miller.de/s9y/archives/14-Numeric_Std.html

... die Diagramme habe ich mir ausgedruckt und einlaminiert. Sowie die 
"VHDL Quick Reference Card". Liegen immer am Arbeitstisch.

Danke dir, Lothar!

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Günter (dl4mea) schrieb:
> Danke dir, Lothar!
De nada ;-)

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.