Hardware Reference
In-Depth Information
Schnittstellenparameter sind das les- und veränderbare Datenobjekt »pstr«
für das abzuräumende Band und der Ausgabeparameter »w« mit dem Ergeb-
niswert. Der Kernalgorithmus steckt im Prozeduraufruf von »get_sym(...)«,
der testet, ob eine der mit Leerzeichen abgeschlossenen Teilzeichenketten des
dritten Übergabeparameters am Bandanfang steht und wenn ja, diese ab-
räumt und die Tabellenposition zurückgibt (Idle7!0, Start7!1, ...). Aus der
Tabellenposition wird mit dem 'val-Attribut von »tZustand« der Rückgabe-
wert gebildet. Falls sich keines der vier Zeichenketten auf dem Band befindet,
ist der Statuswert von »pstr« nach dem Prozeduraufruf von »get_sym(...)«
ungleich »ok«. Der Lesezeiger wird auf den Aufrufwert zurückgesetzt, der Feh-
lerzeiger wird auf das erste unzulässige Zeichen gesetzt und dem Datenobjekt
»pstr.err_msg« wird ein Text mit der erwarteten Eingabe zugewiesen.
Die Str-Funktion für den eigenen Aufzählungstyp hat hier dieselbe Pro-
grammstruktur wie die Str-Funktion für boolean:
function
str(x: tZustand; fmt:character:=
'b'
)
return
string
is
begin
if
fmt=
't'
then return
"tZustand"
;
else return
tZustand'image(x);
end if
;
end function
;
)
WEB-Projekt:P3.3/AfgEA_pack.vhdl
Übergabeparameter sind das Datenobjekt, dessen Wert als Text dargestellt
werden soll, und das Formatzeichen »fmt«. Für »fmt='t' wird wie bei der
Vorbildfunktion die Typbezeichnung, hier »tZustand«, zurückgegeben. Sonst
wird der Wert des Image-Attributs, d.h. die Textdarstellung des Wertes, zu-
rückgegeben.
Lösung zu Aufgabe 3.11
Die Hexadezimalziffern seien als Tabelle vereinbart:
constant
HexTab:string:=
"0123456789ABCDEF"
;
Bei einem ungültigen Ausgabewert wird »XX« zurückgegeben. Sonst werden
die Tabellenwerte zum Zahlenwert des ersten und des nullten Halbbytes anein-
andergekettet und zurückgegeben. Vor dem indizierten Zugriff auf die Zeichen-
kette ist »1« zu addieren, weil der Indexbereich der Zeichenkette »HexTab«
mit »1« beginnt:
function
str_hex(x: tByte)
return
string
is
begin
if
is_x(x)
then return
"XX";
else return
HexTab(int(x(
7
downto
4
))+
1
)
& HexTab(int(x(
3
downto
0
))+
1
);
end if
;
end function
;
)WEB-Projekt:P3.3/AfgEA_pack.vhdl