реклама на сайте
подробности

 
 
> защёлка для сигналов RGB, помогите сделать
penauch
сообщение Oct 28 2009, 11:46
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 78
Регистрация: 12-10-09
Пользователь №: 52 902



не получается сделать защёлку для цветов R,G,B

есть синхросигнал
и сигнал поделённый на 4, тоесть счетчик 0,1,2,3,0,1,2,3...

когда сигнал=0 то с шины данных считывается биты в RGB

когда сигнал 1,2,3, то данные с шины не должны поступать, а использоваться защёлкнутые (когда сигнал=0) данные

код типа:

if count(1 downto 0)=0 then
R<=DataBus(3 downto 0);
G<=DataBus(7 downto 4);
B<=DataBus(11 downto 8);
end if;

даёт постоянную коммутацию DataBus на RGB, а надо чтобы оставалось защёлкнуто до тех пор пока снова count станет 0

как это сделать? 1111493779.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
penauch
сообщение Oct 28 2009, 13:41
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 78
Регистрация: 12-10-09
Пользователь №: 52 902



в общем смысл таков. использую 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, то на экране возникает снег, который исчезает после прекращения записей.

Память пишется нормально и читается тоже - содержимое буфера выводится корректно.

Но портит всё снег smile3046.gif

Помогите плиз советом или методами как не допускать снег ?

пробовал как Костян, написал - снег всёравно есть sad.gif

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;
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 05:49
Рейтинг@Mail.ru


Страница сгенерированна за 0.01379 секунд с 7
ELECTRONIX ©2004-2016