Hardware Reference
In-Depth Information
tDaten
tDaten
function
"+"(a, b: tDaten)
return
tDaten
is
constant
sum:real:=real(a)+real(b);
begin
if
a=tDaten'low
or
b=tDaten'low
or
(
abs
sum)>max_abs
then
return
tDaten'low;
-- Pseudo-Wert für ungültig
else return
tDaten(sum);
end if
;
end function
;
+
tDaten
tDaten
tDaten
function
"*"(a, b: tDaten)
return
tDaten
is
constant
prod:real:=real(a)*real(b);
begin
if
a=tDaten'low
or
b=tDaten'low
or
(
abs
prod)>max_abs
then
return
tDaten'low;
-- Pseudo-Wert für ungültig
else return
tDaten(prod);
end if
;
end function
;
*
tDaten
)
WEB-Projekt:P5.2/FIR1_pack.vhdl
Als Nächstes sind alle Register-Transfer-Funktionen aus Abb. 5.6 auf Be-
arbeitungsmethoden aufzuteilen. Eine in Hardware nachzubildende Bearbei-
tungsmethode sollte nur Operationen zusammenfassen, die im selben Zeit-
schritt ausgeführt werden. In der Initialisierungsphase wird in jedem Zeit-
schritt die Koe
zientenadresse um eins erhöht, die Datenadresse um eins
verringert und ein Eingabewert in den Datenspeicher geschrieben. Dieses Ver-
halten lässt sich mit einer Prozedur mit dem zu speichernden Datenwert als
Eingabeparameter sowie mit dem Datenspeicher und dem Pipeline-Objekt als
les- und veränderbare Signale beschreiben:
procedure
InitStep(x: tDaten;
signal
xRAM:
inout
tMem;
signal
pp:
inout
tPipeline)
is
begin
pp.cAdr <= (pp.cAdr+
1
)
mod
M;
pp.xAdr <= pp.xAdr-
1
;
xRAM(pp.xAdr) <= x;
end procedure
;
cAdr
1 ...M
−
1
xAdr
M
−
1M
−
2... 1
W(x
0
)W(x
1
)...W(x
M−2
)
xRAM
Die Register-Transfer-Operationen im Start- und im Normalzyklus sind
einander sehr ähnlich (Abb. 5.7). Die Koe
zientenadresse wird modulo-M
hochgezählt, das Koe
zientenregister übernimmt den adressierten Inhalt des
Koe
zientenspeichers und das Produktregister das berechnete Produkt. Für
die anderen Datenobjekte weicht die auszuführende Operation jeweils für eine
Koe
zientenadresse von der Standardoperation ab. Der Datenspeicher wird
bei Zählstand null beschrieben statt gelesen. Bei Zählstand zwei wird dem
Akkumulator das Produkt statt der Summe zugewiesen und beim höchstwer-
tigen Zählstand wird die Datenadresse nicht weitergezählt. Die in Abb. 5.7
mit einem grauen Dreieck gekennzeichneten Zuweisungen sind im Startzyklus