Hardware Reference
In-Depth Information
procedure init( signal fifo: inout tFIFO) is
begin
fifo.lz <= 0;
fifo.sz <= 0;
fifo.leer <=true;
fifo.voll <=false;
end procedure ;
init
FIFO-
Objekt
)
WEB-Projekt:P3.4/FIFO_pack.vhdl
Die Schreibmethode übernimmt den Eingabewert nur, wenn der FIFO nicht
voll ist. Bei Übernahme wird das Flag »leer« gelöscht und nach der Übernah-
me die Adresse weitergeschaltet. Die Adressweiterschaltung erfolgt zirkular
mit Hilfe der Modulo-Operation. Nach der höchsten Adresse folgt die kleinste
Adresse:
function inc(x: tAdrIdx) return tAdrIdx is
begin
return (x+ 1 ) mod (tAdrIdx'high+ 1 );
end function ;
) WEB-Projekt:P3.4/FIFO_pack.vhdl
Wenn die Schreib-Adresse dabei die Lese-Adresse einholt, wird das Flag »voll«
gesetzt und der FIFO übernimmt bei nachfolgenden Schreiboperationen keine
weiteren Daten.
procedure write(x: tDaten; signal fifo: inout tFIFO) is
begin
if not fifo.voll then
fifo.Mem(fifo.sz) <= x;
fifo.leer <=false;
fifo.sz <= inc(fifo.sz);
if fifo.sz=fifo.lz then fifo.voll <=true; end if ;
end if ;
end procedure ;
write
x
FIFO-
Objekt
)WEB-Projekt:P3.4/FIFO_pack.vhdl
Die Lesemethode ist ähnlich aufgebaut. Sie hat statt des Eingabesignals das
Ausgabesignal als Übergabeparameter. Wenn der FIFO nicht leer ist, wird der
Wert, auf den der Lesezeiger zeigt, ausgegeben, das Flag »voll« gelöscht, der
Lesezeiger weitergestellt und, falls der Lesezeiger den Schreibzeiger eingeholt
hat, das Flag »leer« gesetzt.
procedure read( signal y: out tDaten; signal fifo: inout tFIFO) is
begin
if not fifo.leer then
y <= fifo.Mem(fifo.lz);
fifo.voll <=false;
fifo.lz <= inc(fifo.lz);
if fifo.lz=fifo.sz then fifo.leer <=true; end if ;
end if ;
end procedure ;
read x
FIFO-
Objekt
Web-Projekt:P3.4/FIFOpack.vhdl
 
Search WWH ::




Custom Search