в общем смысл таков. использую Altera-DE на Cyclone-2, память SRAM ISSI 256kx16 10ns - видеобуффер
доступ к памяти такой:
SRAM_CS _|-|_|-|_|-|_|-|_|-|_|-|_|-|_|-|_|-|_|-|_|-| выбор чипа Clk
SRAM_OE _|-----|_|------|_|-----|_|--- строб чтения Clk or c(0)
SRAM_WE----|_|------|_|-----|_|-----|_ строб записи Clk or (not c(0))
тоесть когда считывается байт с памяти на экран, то писать нельзя и наоборот.
VHDL:
Код
process(Clk)
begin
if rising_edge(Clk) then
c<=c+1;
end if;
end process;
Port_CSWE<=Port_CS or Port_WE;
SRAM_CS<=Clk when (Port_CS='0' and Port_WE='0' and Port_A='1') else Clk or c(0);
SRAM_OE<=Clk or c(0);
process(Port_CS,Port_WE,Port_A,CPU_A,Port_D,Clk,c(0),V480(0),Pixel4Clock0,Pixel4Clock1,SRAM_D)
begin
if (Port_CS='0' and Port_WE='0' and Port_A='1') then
SRAM_A(16 downto 0)<=CPU_A;
SRAM_D<=Port_D;
SRAM_WE<=Clk or (not c(0));
else
if V480(0)='0' then
SRAM_A(16 downto 0)<=Pixel4Clock0(18 downto 2);
else
SRAM_A(16 downto 0)<=Pixel4Clock1(18 downto 2);
end if;
SRAM_D<="ZZZZZZZZZZZZZZZZ";
SRAM_WE<='1';
end if;
end process;
process(Port_A,Port_CSWE,CPU_A)
begin
if Port_A='1' then
if rising_edge(Port_CSWE) then
if CPU_A(16 downto 0)<76799 then
CPU_A<=CPU_A+1;
else
CPU_A<="00000000000000000";
end if;
end if;
end if;
end process;
process(VBlank,HBlank,c,SRAM_D,SRAM_WE,SRAM_CS,SRAM_OE,c,Clk)
begin
if (SRAM_OE='0' and SRAM_CS='0' and SRAM_WE='1') then
if (VBlank='1' and HBlank='1') then
Video_R<=SRAM_D(14 downto 11);
Video_G<=SRAM_D( 9 downto 6);
Video_B<=SRAM_D( 4 downto 1);
else
Video_R<="0000";
Video_G<="0000";
Video_B<="0000";
end if;
end if;
end process;
проблема в следующем - когда пишем данные в порт: Port_D[15..0], Port_A=1, Port_CS=0, Port_WE=0, то на экране возникает снег, который исчезает после прекращения записей.
Память пишется нормально и читается тоже - содержимое буфера выводится корректно.
Но портит всё снег
Помогите плиз советом или методами как не допускать снег ?
пробовал как Костян, написал - снег всёравно есть

process(Res,VBlank,HBlank,c,SRAM_D,SRAM_WE,SRAM_CS,SRAM_OE,c,Clk)
begin
if Clk='1' and Clk'event then
if (SRAM_OE='0' and SRAM_CS='0' and SRAM_WE='1') then
if (VBlank='1' and HBlank='1') then
Video_R<=SRAM_D(14 downto 11);
Video_G<=SRAM_D( 9 downto 6);
Video_B<=SRAM_D( 4 downto 1);
else
Video_R<="0000";
Video_G<="0000";
Video_B<="0000";
end if;
else
Video_R <= Video_R;
Video_G <= Video_G;
Video_B <= Video_B;
end if;
end if;
end process;