VHDL-Forum - Anfänger

Frage zu FIFO

Frage zu FIFO

Hallo zusammen! Ich arbeite mit VHDL erst seit ein paar Wochen und hab folgendes Problem: Ich hab code für einen FIFO geschrieben und in Modelsim läuft alles genauso wie es soll. Bei der Synthese gibt es auch keine Fehlermeldungen aber dort wird deutlich, dass ich meinen FIFO sehr umständlich geschrieben haben muss. Meine Frage ist jetzt, wie kann ich die Performance verbessern?
Hier mein Problem:
Delay: 10.886ns (Levels of Logic = 34)
Source: difference_2 (FF)
Destination: empty_sig_BRB0 (FF)

Von dem signal difference bis zu empty gibt es 34 (!!!) logiclevel?!?! das is doch viel zu viel oder?

Ich lasse alles in einem Prozess erledigen weil ich nicht weiß wie ich das anders hinbekommen kann. Wie könnte ihc das ändern?

if (reset = '1') then
write_address <= 0;
read_address <= 0;
difference := 0;
next_write_address := 0;
full_sig <= '0';
empty_sig <= '1';
next_read_address := 0;

full <= full_sig;
empty <= empty_sig;

data_out <= (others => '0');


elsif (clock = '1' and clock'event) then

if write_request = '1' and full_sig = '0' then
next_write_address := next_write_address + 1;
difference := difference + 1;
data (write_address) <= data_in;
end if;

if read_request = '1' and empty_sig = '0' then
data_out <= data(read_address);
next_read_address := next_read_address + 1;
difference := difference - 1;
end if;

full_sig <= '0';
empty_sig <= '0';

if difference = fifo_depth then
full_sig <= '1';
end if;

if difference = 0 then
empty_sig <= '1';
end if;

full <= full_sig;
empty <= empty_sig;

write_address <= (next_write_address mod fifo_depth);
read_address <= (next_read_address mod fifo_depth);

end if;

end process;

Re: Frage zu FIFO

Alles in einem Process ist nicht so gut. Google mal nach Fifo und VHDL da findest du sehr viele Vorschläge wie man so etwas gut aufbaut. Viele aktuelle FPGAs haben fifos als hard-IP eingebaut (z.B. Xilinx).