> DATA_OUT : in STD_LOGIC_VECTOR (10 downto 0);
der ist aber schon extrem ;-)
> signal ADDRA, ADDRB : STD_LOGIC_VECTOR (19 downto 0);
und der auch: das ist mal ein großer FIFO :-O
> Wenn empty oder full von 1 auf 0 runtergeht,
> dann soll data_valid für einen Takt auf 1 und danach
> wieder auf 0 gesetzt werden.
Viel zu umständlich.
Für einen FIFO verwendest du einfach einen Ringpuffer (in der Größe 2^n,
also 2, 4, 8,...32, 64, 128...), einen Schreib- und einen Lese-Zähler,
der gerade so den Index aufnehmen kann (Breite n). Wenn der
Schreibzähler = Lesezähler ist, ist der FIFO leer. Wenn Schreibzähler+1
= Lesezähler, dann ist der FIFO voll, weil der Schreibzähler den
Lesezähler quasi von unten her einholt.
Das wars.
Mein Tipp:
Sieh dir mal das Thema Ports genauer an.
Sieh dir mal an, wie andere das machen.
VHDL ist schon recht alt, da gibt es sogar schon Bücher dazu.
Siehst du den blauen Strich unter dem Wort VHDL? Klick da mal drauf.