Forum: FPGA, VHDL & Co. Wert umwandeln


von Lars (Gast)


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..

von hans (Gast)


Lesenswert?

Schreib
1
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.

von Lars (Gast)


Lesenswert?

bin vor 1 min selber drauf gekommen :D

aber trotzdem danke für die schnelle antwort..

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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...

von Lars (Gast)


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?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Lars schrieb:
> @ lothar miller was genau meinst du mit numeric_std?
Such mal so:
http://www.mikrocontroller.net/search?query=numeric_std+std_logic_arith&forums[]=9&max_age=-&sort_by_date=1

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

von Günter (. (dl4mea)


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!

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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

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.