05.07.2013 Aufrufe

VHDL Kompakt - CES

VHDL Kompakt - CES

VHDL Kompakt - CES

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

5. Sequenzielle Beschreibungen<br />

5.2 Unterprogramme<br />

<strong>VHDL</strong> beinhaltet sowohl Prozeduren (mehrere Return-Werte via Parameter) als auch Funktionen<br />

(sie liefern genau einen Wert zurück) als Unterprogramme. Die Funktionen werden<br />

beispielsweise zur Typkonvertierung oder als Auflösungsfunktion benutzt, siehe Abschnitt<br />

6.3, Seite 44).<br />

Deklaration<br />

Typischerweise werden Unterprogramme innerhalb des entsprechenden Kontexts definiert,<br />

also in einer architecture oder lokal in dem benutzenden process. Um Unterprogramme<br />

im Entwurf mehrfach zu nutzen, sollten sie in einem <strong>VHDL</strong>-Package deklariert werden. Dabei<br />

müssen die Deklarationen (wie auch das Package) in Kopf und ” Body“ unterteilt werden,<br />

ein Beispiel folgt auf Seite 63.<br />

Variablen<br />

In Unterprogrammen können zwar lokale Variablen deklariert und benutzt werden, deren<br />

Werte sind aber nur bis zum Verlassen des Unterprogramms definiert — im Gegensatz zu<br />

Variablen im process, die einem lokalen Speicher entsprechen!<br />

Function hat (meistens) mehrere Parameter und gibt genau einen Wert zurück — entspricht<br />

damit einem Ausdruck.<br />

36<br />

Syntax<br />

function 〈functionId〉 [ 〈parameter declaration〉 ] return 〈typeId〉; nur Kopf<br />

function 〈functionId〉 [ 〈parameter declaration〉 ] return 〈typeId〉 is<br />

[ 〈local declarations〉 ]<br />

begin<br />

〈sequential statements〉 mit return<br />

end [function] [ 〈functionId〉 ];<br />

〈parameter declaration〉 ::=<br />

( [ 〈class〉 ] 〈formal list〉 : [in] 〈typeId〉 [:= 〈expression〉 ]{ ;<br />

[ 〈class〉 ] 〈formal list〉 : [in] 〈typeId〉 [:= 〈expression〉 ]} )<br />

〈class〉 ::= constant|signal|file Okjektklasse<br />

Die Objektklasse wird meist nicht benötigt und deshalb weggelassen, wie auch die<br />

Richtung, die bei Funktionen immer in ist. Der Anweisungsteil muss so aufgebaut<br />

sein, dass immer eine return-Anweisung erreicht wird, diese muss allerdings nicht<br />

zwangsläufig die letzte Anweisung sein. wait-Anweisungen sind in Funktionen nicht<br />

erlaubt.<br />

In dem Beispiel wird ein Bitvektor in eine Integer Zahl umgerechnet, dabei wird der<br />

Vektor als vorzeichenlose Zahl, mit MSB. . . LSB, interpretiert.

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!