Вот косячок. При mreq_n всегда равном 0, ram_oe1 тоже всегда ноль.
ram_oe1 <= '0' when (sel = '1' or (rd_n = '0' and mreq_n = '0')) else '1';
Я б сделал так: ram_oe1 <= not ram_we1; - на реале так прокатывало.