Hardware Reference
In-Depth Information
N
S
_
f
i
=
f
ij
(4.39)
j=1
(N
S
- Spaltenanzahl). Das Gesamtnetzwerk einer Zeile i ist genau dann ge-
sperrt (f
i
= 0), wenn die Eingabebits aller Spalten übereinstimmen. Ein Pull-
Up-Element erzeugt in diesem Fall den Vergleichswert v
i
= 1. Die Gesamtaus-
gabe besteht in der Regel aus zwei Informationseinheiten. Das ist zum einen
ein binäres Signal »hit«, das aktiviert wird, wenn das Suchmuster im Speicher
steht, und zum anderen die Adresse der ersten Zeile, in der das Suchmuster
gefunden wird.
Für die Modellierung eines synchronen Assoziativspeichers bietet sich ge-
nau wie für den FIFO im Vorabschnitt eine objektorientierte Modellierung
an. Das Modell der Speichermatrix und die Schreib- und die Lesemethode
unterscheiden sich nicht von der eines einfachen Schreib-Lese-Speichers und
seien wie die in Abschnitt 3.4.3 definiert:
subtype
tDaten
is
std_logic_vector(...
downto
0
);
type
tMem
is array
(natural
range
<>)
of
tDaten;
subtype
tAdr
is
tUnsigned(...
downto
0
);
function
read(Mem: tMem; adr: tAdr)
return
tDaten;
procedure
write(x: tDaten, adr: tAdr,
signal
Mem:
inout
tMem);
Zusätzlich benötigt das Modell eines Assoziativspeichers eine Suchmethode
zur Bestimmung der Adresse der ersten Speicherzeile, in der der Eingabewert
steht:
procedure
search(x: tDaten;
signal
adr:
out
tAdr;
signal
hit:
out
std_logic;
signal
Mem:
inout
tMem)
is
begin
for
idx
in
Mem'range
loop
if
Mem(idx)=x
then
hit <=
'1'
;
adr <= to_tUnsigned(idx, adr'length);
return
;
end if
;
end loop
;
hit <=
'0'
;
adr <= (
others
=>
'0'
);
end procedure
;
)WEB-Projekt:P4.4/AsRAM_pack.vhdl
Auch wenn der Vergleich in der Hardware parallel erfolgt, muss er im Simu-
lationsmodell sequenziell nachgebildet werden.