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
> 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?
hallo Lothar, eigentlich nur für Testbench-Zwecke. danke für deine hilfe. nicole
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
Mit
1 | TYPID’image(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
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
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); |
>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
> 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.