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




Custom Search