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
 
Search WWH ::




Custom Search