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 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);
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).