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«).
 
Search WWH ::




Custom Search