Hardware Reference
In-Depth Information
Vor dem Anhängen an die Zeichenkette der Vorkommastellen wird diese »1«
abgeschnitten, indem das erste Zeichen weggelassen wird (Abb. 3.15).
function
str(x:real; m:positive:=2)
return
string
is
constant
z:positive:=10**m;
constant
i:integer:=integer(real(z)*x);
constant
snk:string(1
to
m+1):=str(z+abs(i
rem
z));
begin
return
str(i/z) & "," & snk(2
to
snk'length);
end function
;
Zahlenbeispiel
x=
−
25,7382...
m=2
z=100
i=
−
2574
snk=174
str(i/z)=”-25”
R¨uckgabewert:”-25”&','&”74”
Abb. 3.15. Konvertierung von real nach string mit m Nachkommastellen
Für Zeiten stellt das image-Attribut den Wert in Femtosekunden (1 fs =
10
15
s) dar. Auch das ist meist nicht so erwünscht. In der nachfolgenden
Prozedur wird die Maßeinheit in Abhängigkeit von der Größe des Wertes
gewählt. Dabei ist zu beachten, dass der Quotient aus zwei Zeitwerten eine
ganze Zahl mit einem Wertebereich von 2
31
bis 2
31
1 ist. Wenn der Quotient
zu groß ist, läuft der Wertebereich über. Beispielsweise ergibt (3 us)/fs nicht
wie erwartet 3 10
9
, sondern 3 10
9
2
32
= 1294967296. Deshalb werden
in der nachfolgenden Funktion die Zeitwerte größer 1µs nicht mehr durch fs,
sondern durch größere Zeitwerte dividiert:
function
str(t:time; m:natural:=2)
return
string
is
begin
if abs
(t)<
1 ps
then return
str(t/ ) &
" fs"
;
elsif abs
(t)<
1 ns
then return
str(
1.0E-3
*real(t/
fs
),m)&
" ps"
;
elsif abs
(t)<
1 us
then return
str(
1.0E-6
*real(t/
fs
),m)&
" ns"
;
elsif abs
(t)<
1 ms
then return
str(
1.0E-6
*real(t/ ),m)&
" us"
;
elsif abs
(t)<
1 sec
then return
str(
1.0E-6
*real(t/
ns
),m)&
" ms"
;
elsif abs
(t)<
1 min
then return
str(
1.0E-6
*real(t/
us
),m)&
" sec"
;
else return
str(
1.0E-6
*real(t/
60 us
),m) &
" min"
;
end if
;
end function
;
fs
ps
)
WEB-Projekt:Tuc/Ausgabe.vhdl
Eine Str-Funktion ist für alle eigenen Datentypen - Zahlentypen, Auf-
zählungstypen, physikalische Typen, Feld-Typen und Verbund-Typen -
zu programmieren, für die Simulationsausgaben erforderlich sind.
Die Entwicklung von Str-Funktionen ist eine gute Programmierübung. Denn
zum einen sind Str-Funktionen mit einer vernünftigen Ausgabedarstellung
nicht ganz einfach zu programmieren und zum anderen lassen sie sich gut
testen (siehe Web-Projekt »Tuc/Test_Ausgabe.vhdl«).