Цитата(BSV @ Nov 27 2009, 08:08)

Нужно в каждом цикле обращения выполнять операции с памятью по ТЕКУЩЕМУ адресу, а инкрементировать его ПОСЛЕ выполнения операции. Это обычная практика, тогда не будет проблем со времянками.
P.S. В Вашей теме про ПЛИС и процессор я уже писал, что запись по спаду строба записи - это неправильно, но Вы упорно продолжаете это делать...
ваш пример:
Код
process(AWEn)
begin
if (AWEn'event and AWEn = '1') then
if (CS='0' and A='0' and D(15 downto 12) = "0101") then
Y<=D(7 downto 0);
end if;
...
end if;
end process;
всё хорошо, но есть неуверенность, что в момент подымания AWE будет актуален A (возможно он изменится)
кстати, когда CS=1, то каким будет сигнал на линии A (адрес со стороны процессора) - последний или Z-состояние?
ниже времянка той памяти с которой идёт работа.
в момент поднятия WE, данные ещё актуальны. тогда какое мы имеем право изменять адрес во время фронта WE ? (rising edge?)
ведь он уже должен быть стабилен и актуален до поднятия CS.
прошу разъяснить если заблуждаюсь.
P.S. вот ещё что надумалось.
можно увеличивать адрес по rising_edge(CS). Приемущество в том что память защищена от записи в этот момент (Thold>0, WE=1)
исправил процесс. позже потестирую
Код
process(Port_CS,Port_A,Port_WE)
begin
--Register CS=0,WE=0
if Port_CS='0' then
if Port_WE='0' then
case Port_D(15 downto 12) is
when "1000" =>
R_M:=Port_D(2 downto 0);
when "1001" =>
if VBlank='0' then
R_P:=Port_D(0);
end if;
when "1010" =>
R_W:=Port_D(8 downto 0);
W2:='0'&R_W(8 downto 1);
X0:="010100000"-W2;
X1:="010011111"+W2;
X:=X0;
when "1011" =>
R_H:=Port_D(7 downto 0);
H2:='0'&R_H(7 downto 1);
Y0:="01111000"-H2;
Y1:="01110111"+H2;
Y:=Y0;
when others =>
null;
end case;
end if;
else
--VideoRAM CS=1,A ---|___
if rising_edge(Port_A) then
if X=X1 then
X:=X0;
if Y=Y1 then
Y:=Y0;
else
Y:=Y+1;
end if;
else
X:=X+1;
end if;
WriteAddress<=("101000000"*Y)+X;
end if;
end if;
end process;
в vhdl-коде решил Port_A превратить в CS для данных.
тоесть:
Port_CS=0 - разрешение пиать в регистры
Port_A=0 - разрешение увеличивать адрес памяти
Port_WE - разрешение записи (общий)
Сообщение отредактировал %-) - Nov 27 2009, 06:17
Эскизы прикрепленных изображений