www.mikrocontroller.net

Forum: FPGA, VHDL & Co. integer to string


Autor: nicole_kik (Gast)
Datum:

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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

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

Autor: nicole_kik (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo Lothar,

eigentlich nur für Testbench-Zwecke.


danke für deine hilfe.

nicole

Autor: nicole_kik (Gast)
Datum:

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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

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

Hier eine praktische Anwendung:
LIBRARY ieee;
:
use std.textio.all;
:
  tb : process
  variable l : line;
  begin
    for i in -128 to 127 loop
      write(l, "i: " & integer'image( i) & ht);
      writeline(output, l);
    end loop;
  end process;
:

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

Autor: nicole_kik (Gast)
Datum:

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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

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

Autor: nicole_kik (Gast)
Datum:

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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

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

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.