Forum: FPGA, VHDL & Co. Datentyp umwandeln


von Mari G. (mariaa)


Lesenswert?

hallo,

wie kann man std-ulogic to  integer umwandeln ? und std-logic to 
u-logic umwandeln?
danke schön

von New I. (newie)


Lesenswert?

Hallo Mari,

STD_LOGIC_VECTOR nach INTEGER würde ich so machen:

signal SREG: std_ulogic_vector (N downto 0);
signal VALUE: integer range 0 to 2^(N+1);
...
...
VALUE <= CONV_INTEGER(SREG);

*********************************************************

STD_LOGIC_VECTOR nach STD_uLOGIC_VECTOR würde ich so machen:

signal SREG_A: std_logic_vector (N downto 0);
signal SREG_B: std_ulogic_vector (N downto 0);
...
...
SREG_B <= To_StduLogicVector(SREG_A);

*********************************************************


Gruss
Stanko

von Mari G. (mariaa)


Lesenswert?

vielen vielen dank..
Gruss und schönes wochenende

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


Lesenswert?

Ist Google kaputt?
Eine Suche mit "umwandlung std_logic_vector std_ulogic_vector" bringt 
z.B.
http://eesun.free.fr/DOC/vhdlref/refguide/language_overview/using_standard_logic/standard_logic_type_conversions.htm

Aber das steht zudem in jedem VHDL-Buch (wenn nicht: wirf es weg).

BTW:
Ich würde std_ulogic überhaupt nicht verwenden, die numeric.std Lib 
nehmen und das so machen:
1
library ieee;
2
use ieee.std_logic_1164.all;
3
use ieee.numeric_std.all;
4
:
5
signal vect: std_logic_vector (N downto 0);
6
signal int:  integer range 0 to 2^(N+1)-1;
7
:
8
:
9
vect <= std_logic_vector(to_unsigend(int,vect'length));
10
-- bzw.
11
int  <= to_integer(unsigned(vect));

von Josh (Gast)


Lesenswert?

> Ich würde std_ulogic überhaupt nicht verwenden
Warum nicht? so erkennt man doch Designfehler falls ein Signal mehrere 
Treiber hat?

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


Lesenswert?

> so erkennt man doch Designfehler falls ein Signal mehrere Treiber hat?
Was in der Schule alles erzählt wird...  :-/
Wer FPGAs beschreibt, hat gar keine Möglichkeit, mehrere Treiber auf ein 
Signal loszulassen. Tristate-Busse gibt es dort schon seit geraumer Zeit 
nicht mehr.
Das Thema hatten wir schon ausführlich im 
Beitrag "verschiedene Teile von std_Ulogic_vector aus mehreren Processen zuweisen"

Warum, das sollte man sich fragen, warum gibt es in der (genormten und 
empfohlenen) numeric.std Lib diese Definition:
1
  type UNSIGNED is array (NATURAL range <>) of STD_LOGIC;
2
  type SIGNED is array (NATURAL range <>) of STD_LOGIC;

von Duke Scarring (Gast)


Lesenswert?

Hier gibt es eine relativ umfassende Übersicht zur 
VHDL-Datentypumwandlung (zum Bookmarken empfohlen):

http://dz.ee.ethz.ch/support/ic/hdl/vhdlsources.en.html

Duke

von Duke Scarring (Gast)


Lesenswert?

@Lothar:
>Warum, das sollte man sich fragen, warum gibt es in der (genormten und
>empfohlenen) numeric.std Lib diese Definition:

Bei den Standardbibliotheke stellen sich mir auch manche Fragen (aber 
aus anderem Grund):

Warum gibt es die Funktionen MAX und MIN nur im Body?
Warum sind die Funktionen zum Rotieren (z.B. XROL) und Shiften für 
std_logic_vector nur im Body und nicht öffentlich?

Es gibt da so einige Sachen, die man immer mal gebrauchen könnte, die 
sogar schon da sind, aber so toll versteckt werden :-(

Duke

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


Lesenswert?

ULOGIC war in den Entwürfen zur numeric_std noch wesentlich umfassender 
enthalten, in der Release-Version gibt es davon nur noch die 
Auflösungstabelle.

Ich habe die numeric.std Typumwandlungen mal irgendwo grafisch 
aufbereitet gefunden, das Ganze überarbeitet und mir dort abgelegt: 
http://www.lothar-miller.de/s9y/categories/16-Numeric_Std

von Imili H. (Firma: ftf) (imi)


Lesenswert?

hallo ,
ich habe eine problem mit datentyp ,ich will integer in 
std_ulogic_vector umwandlen .ich habe das so gemacht:

........
port( d: std_ulogic_vector( 0 to 7);
.........
);

........
..........

Signal A :integer ;
.....
d(0 to 7)<=conv_std_logic_vector(A,Bits);

aber leider funktioniert nicht weil ich A unterschiedliche werte nehmen 
soll.

habe ich   das falsch gemacht?
danke schön.

von Mari G. (mariaa)


Lesenswert?

hallo ,
ich habe eine problem mit datentyp ,ich will integer in
std_ulogic_vector umwandlen .ich habe das so gemacht:

........
port( d: std_ulogic_vector( 0 to 7);
.........
);

........
..........

Signal A :integer ;
.....
d(0 to 7)<=conv_std_logic_vector(A,Bits);

aber leider funktioniert nicht weil ich A unterschiedliche werte nehmen
soll.

habe ich   das falsch gemacht?
danke schön.

von Mari G. (mariaa)


Lesenswert?

hallo ,
ich habe eine problem mit datentyp ,ich will integer in
std_ulogic_vector umwandlen .ich habe das so gemacht:

........
port( d: std_ulogic_vector( 0 to 7);
.........
);

........
..........

Signal A :integer ;
.....
d(0 to 7)<=conv_std_logic_vector(A,Bits);

aber leider funktioniert nicht weil ich A unterschiedliche werte nehmen
soll.

habe ich   das falsch gemacht?
danke schön.

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.