Захотелось мне расширить память на орельке за счет DIVGMX... Отключил буфер чтения с РУ5, немного доработал divgmx basic конфигурацию и в результате как бы все работает, тесты проходит, но все равно при чтении или записи памяти возникают ошибки. ПЗУ бейсика и DIVGMX - зашито в циклон, и отрабатывает нормально, без глюков. Т.е. на помехи по шине списать нельзя. А как только интенсивное обращение к SDRAM - все капец как плохо. Тактовый сигнал Z80 несинхронен по отношению к clk_bus в циклоне, но ведь все сигналы к нему приводятся, правда возникает задержка 35 нс. Неужели SDRAM иногда не успевает? Есть какие нибуть мысли?
Вот кусок кода, как сделано
selector <=
X"00" when (mreq_n_i = '0' and rd_n_i = '0' and a_i(15 downto 14) = "00" and divmmc_amap = '0' and divmmc_e3reg(7) = '0') else -- ROM #0000-#3FFF
X"01" when (mreq_n_i = '0' and rd_n_i = '0' and a_i(15 downto 13) = "000" and (divmmc_amap or divmmc_e3reg(7)) /= '0' and kb_fn(6) = '1') else -- DivMMC ESXDOS ROM #0000-#1FFF
X"02" when (mreq_n_i = '0' and rd_n_i = '0' and a_i(15 downto 13) = "001" and (divmmc_amap or divmmc_e3reg(7)) /= '0' and kb_fn(6) = '1') else -- DivMMC ESXDOS RAM #2000-#3FFF
X"12" when (mreq_n_i = '0' and rd_n_i = '0' and a_i(15 downto 14) /= "00") else -- other RAM
case selector is
when X"00" => BUS_D <= rom_do; BUS_NROMOE <= '1'; BUS_NIORQGE <= '0'; rom_a13 <= not a_i(13); rom_a14 <= a_i(13); -- ROM
when X"01" => BUS_D <= rom_do; BUS_NROMOE <= '1'; BUS_NIORQGE <= '0'; rom_a13 <= '0'; rom_a14 <= '0'; -- ROM DivMMC ESXDOS
when X"02" => BUS_D <= sdr_do; BUS_NROMOE <= '1'; BUS_NIORQGE <= '0'; -- SDRAM
when X"12" => BUS_D <= sdr_do; BUS_NROMOE <= '1'; BUS_NIORQGE <= '0'; -- SDRAM
Причем память DIVMMC - работала как положено до отключения РУ5, т.е. SDRAM DIVMMC подключалась вместо верхних 8 кб
ПЗУ, глюков при загрузке не замечено.





Ответить с цитированием
