Hardware Reference
In-Depth Information
dem Komma. Die restlichen fünf Bit sind Nachkommastellen. Bei einer Multi-
plikation addieren sich die Anzahlen der Vor- und der Nachkommastellen. Die
Produkte aus Koe
zienten- und Datenwerten haben zwölf Vorkomma- und
20 Nachkommastellen.
Die akkumulierten Werte sollen, um Wertebereichsüberläufe auszuschlie-
ßen, dreizehn Vorkommastellen erhalten (siehe hierzu auch Aufgabe 5.1). Die
Anzahl der Nachkommastellen muss nicht größer als die der Daten sein. Für
den akkumulierten Wert genügt entsprechend ein 18-Bit-Vektor:
subtype
tAkku
is
tSigned(
17
downto
0
);
Damit die Produkte ohne Konvertierung an den Akkumulator zugewiesen wer-
den können, sollen sie denselben Typ mit derselben gedachten Kommaposition
haben. Die Multiplikation ist entsprechend so umzudefinieren, dass zu dem
normal berechneten Produkt vorzeichenerweitert eine Vorkommastelle hin-
zugefügt und die fünfzehn niederwertigsten Nachkommastellen abgeschnitten
werden
4
:
function
mult(a, b: tDaten)
return
tAkku
is
constant
prod: tSigned(
2
*tDaten'length-
1
downto
0
):= a*b;
begin
return
prod(prod'high) & prod(prod'high
downto
tDaten'high);
end function
;
Für die Kontrolle, dass die geänderten Datendarstellungen und Operationen
das Eingabe-Ausgabe-Verhalten des Gesamtmodells nicht beeinträchtigen, sol-
len sich die Wertedarstellungen der Adressen, Daten und Koe
zienten nicht
von denen im ersten Modell unterscheiden. Das erfordert eine Anpassung der
Str-Funktionen zur Konvertierung in die Ausgabetexte. Für die Datendarstel-
lung wird der Wert der Daten durch 2
5
dividiert und mit sieben Zeichen und
einer Nachkommastelle dargestellt:
function
str_dat(x: tSigned)
return
string
is
begin
if
is_x(x)
then return
" XX"
;
else return
rechts(str(real(int(x))/(
2.0
**
5
),
1
),
7
);
end if
;
end function
;
)
WEB-Projekt:P5.2/FIR2_pack.vhdl
Die ganzzahlige Werterepräsentation der Koe
zienten wird durch 2
15
geteilt
und mit vier Nachkommastellen dargestellt:
4
Überladen des »*«-Operators scheidet hier aus, weil »tDaten« ein Untertyp und
kein eigener Typ ist. Der Wert von »tDaten'high« ist fünfzehn und der Wert von
»tProd'high« ist 31.