Forum: FPGA, VHDL & Co. integer to string


von nicole_kik (Gast)


Lesenswert?

hi Leute,
vielleicht hat ja jemand einen guten Rat für mich. Also, folgendes 
Problem:

Habe ein Integer-Signal

signal test : integer range 0 to 31;

Nun möchte ich aus diesem Integer ein entsprechendes String-Signal 
bauen.

z.B.
test <= 28;

Das entsprechende string-signal soll dann so aussehen: "28"

Wie bekomme ich das hin ?

vielen dank für eure hilfe :-)
nicole

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


Lesenswert?

> Das entsprechende string-signal soll dann so aussehen: "28"
> Wie bekomme ich das hin ?
Brauchst du das "nur" für eine Testbench-Ausgabe oder soll das auf einem 
FPGA (z.B. für RS232 oder ein LCD) synthetisiert werden?

von nicole_kik (Gast)


Lesenswert?

hallo Lothar,

eigentlich nur für Testbench-Zwecke.


danke für deine hilfe.

nicole

von nicole_kik (Gast)


Lesenswert?

die ausgabe in einem report ist mir klar:

assert false report "string representation is " integer'image(test) 
severity note;


aber wie mache ich das über ein Signal des Typs string, also
z.B.: signal ls_str : string(1 to ?) ?

danke,
nicole

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


Lesenswert?

Mit
1
TYPIDimage(expr)
also z.B.
1
signal str : string(1 to 100);
2
str <= integer'image(wert);
erhältst du einen String von wert.

Hier eine praktische Anwendung:
1
LIBRARY ieee;
2
:
3
use std.textio.all;
4
:
5
  tb : process
6
  variable l : line;
7
  begin
8
    for i in -128 to 127 loop
9
      write(l, "i: " & integer'image( i) & ht);
10
      writeline(output, l);
11
    end loop;
12
  end process;
13
:

>> signal ls_str : string(1 to ?)
Numm einfach den Datentyp line, dann brauchst du keine Länge ;-)
http://www.velocityreviews.com/forums/t21647-string-declaration.html

von nicole_kik (Gast)


Lesenswert?

hi lothar,

danke für deine antwort. Aber welche Länge müsste ich denn verwenden, 
wenn
ich sie tatsächlich benötige ?

Wenn ich wie in deinem Beispiel den Integer-Wert 100 als String "100" 
ausgeben möchte, müssten es dann nicht drei Zeichen sein, also (1 to 3) 
?
Das scheint aber nicht zu funktionieren.

lg,
nicole

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


Lesenswert?

Ok, da fehlt was, du brauchst einen range für den String:
1
   str(integer'image(wert)'range) <= integer'image(wert);
2
   write(OUTPUT, str);

von nicole_kik (Gast)


Lesenswert?

>Ok, da fehlt was, du brauchst einen range für den String:
>str(integer'image(wert)'range) <= integer'image(wert);
>write(OUTPUT, str);

Lothar, danke für deine Hilfe. Wie wird denn das Signal "str" denn dann 
deklariert ?

So vielleicht ?

signal str : string(integer'image(wert)'range);

lg,
nicole

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


Lesenswert?

> So vielleicht ?
> signal str : string(integer'image(wert)'range);
Das geht nur, wenn der wert schon vorher bekannt ist, denn wert kann 
als integer ja 1 Stelle haben (z.B. 0...9) oder auch 8 (z.B. 12345678). 
Dehalb: mach den string lang genug z.B. (0 to 100). Oder besser: 
verwende line

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.