Hardware Reference
In-Depth Information
...
AkkuF
cAdr
cROM
cDat
s y
y
s
+1
ROMa y
s y
y
s
xRAM
xAdr
RAMy
xDat
s y
a
a+b
a
−
b
s
y
M3
10
00
11
x
a
w
a
A2D
M2
b
M1
Masken
AR
OF
EX(Add/Sub)
Pipelinestufen
AR
OF
EX
cAdrKoe
zientenadresse
xAdrDatenadresse
A2D
cROMKoe
zientenspeicherAkkuFAkku-Register0bis11
xRAMBildausschnittsspeicher
xDat
cDatKoe
zientenwert
Datenwert
Adressrechnung
Operandenlesen
Ausf¨uhrung
2D-Adressrechnung
Abb. 5.14. Speicherhierarchie und Verarbeitungswerke für die Berechnung der
Übereinstimmungsmaße
subtype
tFilterIdx
is
natural
range
0
to
N_Mask-
1
;
type
tKoeff
is array
(tFilterIdx)
of
tOperation;
Der Akkumulator muss wie die Daten einen Bitvektortyp zur Darstellung
vorzeichenbehafteter Zahlen haben und soll, um Wertebereichsüberläufe aus-
zuschließen, vier Bit breiter als ein Datenregister sein
6
:
constant
cDatenbreite:natural:= ...;
subtype
tDaten
is
tSigned(cDatenbreite-
1
downto
0
);
subtype
tAkku
is
tSigned(cDatenbreite+
3
downto
0
);
Die Funktion zur Berechnung des Folgewertes für einen einzelnen Akkumula-
tor ist
function
FilterAdd(Akku: tAkku; x: tDaten; s: tOperation)
return
tAkku
is
begin
case
s
is
when
add =>
return
Akku+x;
when
sub =>
return
Akku-x;
when others
=>
return
Akku;
end case
;
end function
;
)
WEB-Projekt:P5.3/POI_pack.vhdl
Alle Akkumulatoren zusammen bilden ein Feld:
type
tAkkFeld
is array
(tFilterIdx)
of
tAkku;
Die auf das gesamte Akkumulatorfeld anzuwendende Methode ist eine Itera-
tion über alle Akkumulatoren mit der auf den einzelnen Akkumulator anzu-
wendenden Funktion:
6
Der sechzehnfache Wertebereich genügt, weil keine der Filtermasken mehr als
sechzehn Koe
zienten ungleich null enthält.