hallo, wie kann man std-ulogic to integer umwandeln ? und std-logic to u-logic umwandeln? danke schön
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
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)); |
> Ich würde std_ulogic überhaupt nicht verwenden
Warum nicht? so erkennt man doch Designfehler falls ein Signal mehrere
Treiber hat?
> 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; |
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
@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
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
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.