www.mikrocontroller.net

Forum: FPGA, VHDL & Co. std_logic_vector nach int


Autor: Hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)
LIBRARY ieee;
USE ieee.std_logic_1164.all;
use ieee.numeric_std.all;


PORT
( ...
data     : in  std_logic_vector(31 downto 0);
..
)
signal intervall : integer range 0 to 50000;
....
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!

Autor: Duke Scarring (rickdangerus)
Datum:

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

Autor: Hans (Gast)
Datum:

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

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hattest Du auch Input-Daten < 50000 dabei ?

Autor: Hans (Gast)
Datum:

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

Autor: Roger Steiner (edge)
Datum:

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

Cheers, Roger

Autor: lkmiller (Gast)
Datum:

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

Autor: Thomas Hertwig (mac4ever)
Datum:

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

Autor: Mark (Gast)
Datum:

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

Autor: Hans (Gast)
Datum:

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

Autor: Mark (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn Du in der Testbench schreibst :

data <= x"0000000F";

dann spuckt der Simulator problemlos intervall=15 aus !

Autor: Thomas Hertwig (mac4ever)
Datum:

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

Autor: Rick Dangerus (Gast)
Datum:

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

Rick

Autor: Thomas Hertwig (mac4ever)
Datum:

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

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.