Forum: FPGA, VHDL & Co. std_logic_vector nach int


von Hans (Gast)


Lesenswert?

Hallo,

Ich möchte gerne Bits, die in einem std_logic_vector(31 downto 0) 
gespeichert sind, in eine Zahl wandeln. Diese möchte ich dann in einem 
Signal abspeichern. Hier mal kurz der bereits von mir verwendete Code 
(gekürzte)
1
LIBRARY ieee;
2
USE ieee.std_logic_1164.all;
3
use ieee.numeric_std.all;
4
5
6
PORT
7
( ...
8
data     : in  std_logic_vector(31 downto 0);
9
..
10
)
11
signal intervall : integer range 0 to 50000;
12
....
13
intervall <= to_integer(unsigned(data));

Ich bin mir sicher, dass er die Zeile mit der umwandlung erreicht, es 
wird dann nur nichts in die Variable geschrieben. Kann mir jemand sagen 
woran das liegt? Verwende ich die falschen Bibliotheken? Kann es sein, 
dass der Vector mit 32 Bit zu groß ist und die variable intervall auch 
mindestens 2^32 groß sein muss?

Bin für jede Hilfe dankbar!

von Rick D. (rickdangerus)


Lesenswert?

Sieht erstmal nicht verkehrt aus (außer das 2^32 nicht in die 50000 
passt). Hast Du Dir das mal im Simulator angeschaut?

Rick

von Hans (Gast)


Lesenswert?

Also wenn ich das simuliere, dann werden die angelegten Daten einfach 
nicht übernommen. Er erreicht die Zeile, die Typumwandlung haut nur 
einfahch nicht hin. Es kommt auch keine Fehlermeldung oder sowas.

von Martin (Gast)


Lesenswert?

hattest Du auch Input-Daten < 50000 dabei ?

von Hans (Gast)


Lesenswert?

Ja, ich habe an Leitung data(0) eine 1 angelegt.

von Roger S. (edge)


Lesenswert?

Und an den anderen 31 Leitungen hast du auch brav eine '0' oder '1' 
angelegt?

Cheers, Roger

von lkmiller (Gast)


Lesenswert?

>es wird dann nur nichts in die Variable geschrieben
Das ist keine Variable, du definierst es als Signal.
>signal intervall : integer range 0 to 50000;
Egal, das ist nur eine Spitzfindigkeit.


Aber: wird tatsächlich nichts geschrieben?
Oder hat das Signal nach der Zuweisung irgendeinen Wert?
Was ist der Eingangswert?

von Thomas H. (mac4ever)


Lesenswert?

Ich hab's auch mal versucht. Nix ... hatte x"fefefefe" in data 
geschrieben und intervall ist auf 0 geblieben ...
Ich hatte auch ein paar andere Konvertierungen versucht. Unter anderem 
std_logic_vector zu unsigned. Mein Signal vom Typ "unsigned" hatte einen 
undefinierten Zustand. Dabei habe ich mich an die Funktionen aus 
http://dz.ee.ethz.ch/support/ic/hdl/vhdlsources.en.html gehalten.
Simulator: ModelSim 6.2

von Mark (Gast)


Lesenswert?

@Hans
Du hast mit Sicherheit den data-Vektor nicht richtig belegt. Die 
Konvertierung geht so 100% OK, das kann jeder im Modelsim nachprüfen.
Natürlich sollten alle 32 bit 1 oder 0 sein ! (s.o.)

von Hans (Gast)


Lesenswert?

Was meinst du genau damit? Muss ich das vorher irgendwie initialisieren 
oder was meinst du?
Wie kann ich direkt bei der erstellung des Vektors sagen, dass alles auf 
0 gesetzt werden soll?

von Mark (Gast)


Lesenswert?

Wenn Du in der Testbench schreibst :

data <= x"0000000F";

dann spuckt der Simulator problemlos intervall=15 aus !

von Thomas H. (mac4ever)


Lesenswert?

Also ich glaube ModelSim wollte mich gestern verarschen. Hab das gleiche 
jetzt nochmal probiert und es geht. Komisches Stück Software :)

von Rick Dangerus (Gast)


Lesenswert?

Vielleicht vergessen vorher compile zu drücken? Passiert mir auch 
immer wieder :-)

Rick

von Thomas H. (mac4ever)


Lesenswert?

Ne, eigentlich nicht ... aber irgendwo werd' ich schon was vergessen 
haben :)

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.