Цитата(penauch @ Nov 3 2009, 02:40)

CS - выбор кристалла ПЛИС (активный 0)
WE - разрешение записи (активный 0)
D0..D7 - данные
A0 - адрес (при обращении к регистрам должен быть 1, иначе увеличение адреса памяти (прикручена к ПЛИС))
Сколько времени проходит между готовностью данных, адреса и CS до фронта WE ?
Подозреваю, что к приходу фронта WE адрес и данные еще или уже не действительны.
Отражено ли это время в файле с констрейнами для статического анализа таймингов ?
Подозреваю, что проблема могла бы быть выявлена анализом таймингов при аккуратном вводе констрейнов.
Если переставить условие под CS внутрь условия с фронтом, то для знакомых мне FPGA синтезируется регистр с clock enable, а так я не уверен, что получится.
Подозреваю, что проблема усугубляется не оптимальным использованием ресурсов.
Код
process(reset, WE)
begin
if reset='1' then
VRAM_Address <= (others=>'0'); -- например.
elsif rising_edge(WE) then --если пришёл фронт WE данные должны защёлкнуться
if CS='0' then -- если CS=0 активен, то клок разрешается
if A0='1' then --если регистры
Register(7 downto 0)<=D(7 downto 0);
else -- если не регистры
VRAM_Address<=VRAM_Address+1; -- увеличиваем адрес памяти
end if;
end if;
end if;
end process;
Однако, я подозреваю, что это не вся схема и где-то есть еще какой-то клок, который с сигналом WE не синхронизирован, но использует Register и/или VRAM_Address. В этом случае глюки ожидаемы.