
Сообщение от
Error404
"Моргать" CE это как-то не согласуется со схемой Ориона - там же ОЗУ всегда выбрано (Активно), а потребитель (ШД/видео) переключаются соответствющими выходными регистрами/буферами. Раз на запись с ШД хватается что-то не то (почему DRAM, в разы более медленные, кстати, так не хватали? Скорость то не на порядок выше) то я бы посмотрел в сторону того как работает буфер ШД, как вариант дополнительно в нужный момент защелкивать правильное состояние ШД латчем, а уже из него писать в ОЗУ. Чем щелкать СЕ дело не в дело, да еще и срезая запасы по времени обращения. Как такой вариант?
У меня ШД на память и так защёлкивается латчем (самописный аналог АП6, готового в кактусе не было):
Код:
-- altera vhdl_input_version vhdl_2008
library ieee;
use ieee.std_logic_1164.all;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity bidir_buf is
port (
A : inout std_logic_vector(7 downto 0);
B : inout std_logic_vector(7 downto 0);
AB : in std_logic;
OEn: in std_logic;
clk: in std_logic
);
end entity;
architecture rtl of bidir_buf is
begin
process (clk)
begin
if (rising_edge(clk)) then
if (OEn = '1') then
A <= (others => 'Z');
B <= (others => 'Z');
else
if (AB = '0') then
B <= (others => 'Z');
A <= B;
else
A <= (others => 'Z');
B <= A;
end if;
end if;
end if;
end process;
end rtl;
Тактирую я его очень высокой частотой (100МГц и более), так что он точно успевает.
Буду "ковырять" позже, попробую разные варианты...
А вот участок формирования сигналов для памяти.
MA16 - это МА16 из ПРОшки. MRDn, MWEn - чтение и запись для памяти, ест, формируются как в ПРОшке, только без различий по банкам - это формируется здесь, в зависимости от типа памяти (для 16 битной - MA16 выбирает половинку слова, а MA19 выбирает чип, для 8 битной - MA16 выбирает чип). clk_mem - тактирование для OnChipMemory, сейчас 250МГц.
- - - Добавлено - - -
По поводу памяти - есть Verilog/VHDL модель от производителя, можно понять внутреннюю логику работы. Как понимаю, она примерно одинакова для всех SRAM.
- - - Добавлено - - -
По записи - надо как минимум восходящий фронт WE делать более ранним, поскольку запись идёт именно по нему - а там адрес ещё защёлкнут старый, но на данных защёлка уже переключилась, из-за чего и возможен мусор.
Аналогично и с нисходящим фронтом WE - внутри защёлкнут адрес видео-ячейки, появляется WE и данные для записи, МС успевает их записать. Более медленная память просто не успевает этого сделать.
Всё это моё ИМХО, просьба поправить ошибки - выводы сделал на основании анализа кода модели памяти.