Hardware Reference
In-Depth Information
T
1
x
y
FIFO
0
Rechner
1
Rechner
I
1
W leer
2
0
R
voll
1
0
1
W
0
I
T
I
R
a)
x
w1w2w3 w4w5w6
Eingabedaten
Ausgabedaten
Schreibsignal
Lesesignal
Initialisierungssignal
Flagsf¨urleerundvoll
b)
x
y
y
w1w2 w3
W
(voll)
4
3
2
1
0
w4
w3
R
I
w1
w1
w3
w2
w3
w4
w3
w4
F¨ullstand
w1w2w3
w2
w4
w3
w5
w6
w5
w6
w5
leer
voll
(leer)
Abb. 4.69. FIFO-Speicher a) Einsatz zur Kopplung von zwei Rechnern b) Funk-
tionsweise an einem Beispielablauf
-- Package-Vereinbarungen für ein FIFO-Modell
constant
N_Adr:positiv:=...;
-- Anzahl der Adressbits
subtype
tAdrIdx
is range
0
to
2
**N_Adr-
1
;
subtype
tDaten
is
...;
type
tSpeicher
is array
(tAdrIdx)
of
tDaten;
type
tFIFO
is record
Speicher: tSpeicher;
-- Speichermatrix
sz, lz : tAdrIdx;
-- Schreib- und Lesezeiger
leer, voll :boolean;
-- Statussignale
end record
;
procedure
init(
signal
fifo:
inout
tFIFO);
procedure
write(x: tDaten;
signal
fifo:
inout
tFIFO);
procedure
read(
signal
y:
out
tDaten; fifo:
inout
tFIFO);
)WEB-Projekt:P3.4/FIFO_pack.vhdl
Im folgenden Verhaltensmodell wird der FIFO in jedem Taktschritt genau
wie in Abb. 4.69 nur entweder beschrieben oder gelesen:
signal
x, y: tDaten;
signal
fifo: tFIFO;
...
if
init=
'1'
then
init(fifo);
elsif
rising_edge(T)
then
if
W=
'1'
and not
voll
then
write(x, fifo);
elsif
R=
'1'
and not
leer
then
read(y, fifo);
end if
;
end if
;
Da in keinem Takt auf mehrere Speicherplätze zugegriffen wird, würde die
Synthese für den Blockspeicher des FIFO-Objekts einen 1-Port-Speicher wäh-
len. Bei einer geringfügigen Modifikation, die ein zeitgleiches Lesen und Schrei-
ben nicht mehr ausschließt,