CS - выбор кристалла ПЛИС (активный 0)
WE - разрешение записи (активный 0)
D0..D7 - данные
A0 - адрес (при обращении к регистрам должен быть 1, иначе увеличение адреса памяти (прикручена к ПЛИС))
написал такое:
Код
process(CS,WE,A0)
begin
if CS='0' then -- если CS=0 активен
if rising_edge(WE) then --если пришёл фронт WE данные должны защёлкнуться
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;
begin
if CS='0' then -- если CS=0 активен
if rising_edge(WE) then --если пришёл фронт WE данные должны защёлкнуться
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;
Оно работает, но иногда глючит...
Шина хоста (со стороны CPU) имитируется портами PIOA контроллера AT91SAM7S64.
Связаны ли глюки с тем, что имитировать шину портами нежелательно из-за выбросов ?
или не так делаю?