Das Problem ist glaube ich ein anderes:
Du hast
sram_adr : out STD_LOGIC_VECTOR (17 downto 0);
sram_io : inout STD_LOGIC_VECTOR (15 downto 0);
das geht beides raus an das SRAM.
Es ist klar, dass du an sram_adr immer einen Wert angelgst, weil es ist
ein out. Aber sram_io ist ein inout. Also da solltest du nicht die ganze
Zeit über einen Wert anlegen, sondern auch davon lesen.
Du musst also zwischen lesen und schreiben unterscheiden.
Ganz grob:
1 | sram_io <= daten_out when lesenschreiben = '0' else (others => 'Z');
|
2 | daten_in <= sram_io when lesenschreiben = '1';
|
daten_out sind std_logic_vector und zwar die Daten die geschrieben
werden sollen, daten_in ist auch std_logic_vector und zwar das Ziel in
das gelesen werden soll, also die Bits von sram_io übernommen werden
sollen.
lesenschreiben ist std_logic, also ein einzelnes Bit. Hier ist es '1'
wenn gelesen wird und '0' wenn geschrieben wird.