Перейти к содержанию
    

Реализация LookUp Table для видеовывода

Не стоит делить частоту на триггере и затем использовать её в качестве тактовой если потом надо перепривязывать назад к 50. Лучший вариант, когда всё работает от одной тактовой с разрешениями. Есть DLL, PLL и др. блоки предназначенные для этого

я бы сделал так:

 

Спасибо за ваш развёрнутый ответ :)

 

А как можно сделать палитру?

 

Мы должны считать с памяти слово (16 бит). Затем на одном такте его биты 0..7 загнать в индекс массива палитры, на другом такте биты 8..15 в палитру. И так по кругу.

 

Тоесть в палитровом режиме частота чтения в 2 раза меньше должна быть, но частота вывода останется таже - 12.5 МГц. На первом такте биты 0..7 на втором 8..15

 

тоесть:

 

данные на частоте 12.5 / 2 МГц:

 

SRAM_Address<=ReadAddr+1;

 

на первом такте 12.5 МГц:

 

Video_R<=Palette(conv_integer(SRAM_D_Reg(7 downto 0)))(14..10);
Video_G<=Palette(conv_integer(SRAM_D_Reg(7 downto 0)))(9..5);
Video_B<=Palette(conv_integer(SRAM_D_Reg(7 downto 0)))(4..0);

на втором такте 12.5 МГц:

 

Video_R<=Palette(conv_integer(SRAM_D_Reg(15 downto 8)))(14..10);
Video_G<=Palette(conv_integer(SRAM_D_Reg(15 downto 8)))(9..5);
Video_B<=Palette(conv_integer(SRAM_D_Reg(15 downto 8)))(4..0);

 

 

как оптимальнее и правильнее сделать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ещё вопрос по генерации адреса.

нужно удваивать строки. тогда адреса генерируются так: 0..319, 0..319, 320..639, 320..639, 640.....

 

делаю пока так:

 

if rising_edge(Clk) then

if PixelClockEn='0' then

if Blank='1' then

if F(conv_integer(V(0)))=153599 then

F(conv_integer(V(0)))<=(others => '0');

else

F(conv_integer(V(0)))<=F(conv_integer(V(0)))+1;

end if;

end if;

...

 

тоесть завёл массив из двух счётчиков и инкрементируем их по-очереди (номер 0-1 задается нулевым битом номера строки)

 

как можно быстрее и проще?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А как можно сделать палитру?

 

какая задача знакомая..... %)

 

зачем читать палитру с SRAM, которую туда кто то загрузил через FPGA, грузите сразу декодеры палитры и используйте их.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

какая задача знакомая..... %)

 

зачем читать палитру с SRAM, которую туда кто то загрузил через FPGA, грузите сразу декодеры палитры и используйте их.

 

вы наверное меня не поняли :)

 

загружаю палиру через регистры вовнутренние std_logic_vector'а

 

в SRAM'е палитры нет - просто из SRAM мы вычитываем слово(16 бит) - байты которых - код ццета - индекс массива палитры

 

памагите сзделать ;-)

 

гыыы... вот:

 

process(Clk)
begin
if rising_edge(Clk) then
  if PixelClockEn='0' then
   if Blank='1' then
    --Direct Color 16bpp R:G:B = 1:5:5:5
    if R_M(0)='0' then
     if R_P='0' then
      RGB<=VRAM0_D(14 downto 0);
     else
      RGB<=VRAM1_D(14 downto 0);
     end if;
    --Palette Color 8bpp
    else
     if R_P='0' then
      if R_M(1)='0' then                                --VGA
       if F(conv_integer(V(0)))(2)='0' then
        RGB<=R_RGB(conv_integer(VRAM0_D( 7 downto 0)));
       else
        RGB<=R_RGB(conv_integer(VRAM0_D(15 downto 8)));
       end if;
      else                                              --NTSC
       if F(0)(2)='0' then
        RGB<=R_RGB(conv_integer(VRAM0_D( 7 downto 0)));
       else
        RGB<=R_RGB(conv_integer(VRAM0_D(15 downto 8)));
       end if;
      end if;
     else
      if R_M(1)='0' then                                --VGA
       if F(conv_integer(V(0)))(2)='0' then
        RGB<=R_RGB(conv_integer(VRAM1_D( 7 downto 0)));
       else
        RGB<=R_RGB(conv_integer(VRAM1_D(15 downto 8)));
       end if;
      else                                              --NTSC
       if F(0)(2)='0' then
        RGB<=R_RGB(conv_integer(VRAM1_D( 7 downto 0)));
       else
        RGB<=R_RGB(conv_integer(VRAM1_D(15 downto 8)));
       end if;
      end if;
     end if;
    end if;
   end if;
  end if;
end if;
end process;

process(Clk)
begin
if rising_edge(Clk) then
  if PixelClockEn='0' then
   RGB_Reg<=RGB;
   if Blank='1' then
    Video_R<=RGB_Reg(14 downto 10);
    Video_G<=RGB_Reg( 9 downto  5);
    Video_B<=RGB_Reg( 4 downto  0);
   else
    Video_R<=(others => '0');
    Video_G<=(others => '0');
    Video_B<=(others => '0');
   end if;
  end if;
end if;
end process;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

люди!

памагите!

 

сроки поджимают, а мы(контора) до конца не сделали!

 

палитру подскажите как делать плиз...

 

--------------

пока такая идея: потактово - вычисление адреса, вычитывание байта, считывание палитры, выод на экран

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Палитра как рассчитывается? Если значений палитры немного, дык сделать таблицу перекодировки в ончип памяти. Если много, то надо знать формулу преобразования...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

палитра не считается по формуле.

 

всего 256 цветов - они хранятся в видеопамяти по 1 байту на 1 точку

 

этот байт - и есть номер(смещение) массива палитры. (массив хранит R,G,B в 15 битах)

 

описание массива палитры:

 

type R_RGB_Type is array(255 downto 0) of std_logic_vector(14 downto 0);
signal R_RGB:R_RGB_Type;

 

запись в регистры палитры:

 

*(short*)(BaseAddr+RegOffs)=0x7000|Color;
*(short*)(BaseAddr+RegOffs)=0x8000|(R<<10)|(G<<5)|B;

 

process(ClkPLL)
begin
if rising_edge(ClkPLL) then
...
   when "0111"=>                                         
      R_C:=D1(7 downto 0);

   when "1000"=>       
      if D1(15)='1' then
       R_RGB(conv_integer(R_C))<=D1(14 downto 0);
      end if; 
...

 

При синтезе массив палитры преобразуется в двухпортовую синхронную память, тактируемую ClkPLL (200МГц)

 

Вывод видеоданных на VGA происходит на другом клоке - Clk=50 МГц

 

Возможно , нечёткое изображение (когда используется палитра) из-за разных тактовых клоков

Изменено пользователем %-)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

При синтезе массив палитры преобразуется в двухпортовую синхронную память, тактируемую ClkPLL (200МГц)

Возможно , нечёткое изображение (когда используется палитра) из-за разных тактовых клоков

 

в чем проблема заменить двухпортовую синхронную одноклоковую на двухпортовую синхронную двухкловую? в N-ый раз повторяю читайте хендбуки с www.altera.com, там все написано. Ответ на большинство ваших вопросов ищется в хендбуке за 10-15 минут + немного логики здравого смысла, но вы по прежнему прете в слепую на баррикады уповая на помощь форума, неправильно это.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в чем проблема заменить двухпортовую синхронную одноклоковую на двухпортовую синхронную двухкловую? в N-ый раз повторяю читайте хендбуки с www.altera.com, там все написано. Ответ на большинство ваших вопросов ищется в хендбуке за 10-15 минут + немного логики здравого смысла, но вы по прежнему прете в слепую на баррикады уповая на помощь форума, неправильно это.

 

во-первых: синтезатор сам автоматом мне сделал такую память из M4K блоков (ему видней, значит так надо)

 

во-вторых: что-то мы сомневаемся, что алтера изобилует экзамплами вга-контроллеров , особенно с применением колор-меппера

 

в-третьих: почти весь OpenSource в 90% представляет собой г@вно, которое не работает либо работает не так

 

в-четвртых: кроме нас думается никто в точности не знает что надо получить ;-)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

во-вторых: что-то мы сомневаемся, что алтера изобилует экзамплами вга-контроллеров , особенно с применением колор-меппера

Да, вещь действительно уникальнейшая, потому примеров нет ниииигде.

 

в-четвртых: кроме нас думается никто в точности не знает что надо получить ;-)

Да на самом деле, господин des00 вам правду сказал насчет памяти. Сгенерируйте тогда это ОЗУ (и нафига двухпортовое?) в мегавизарде, да вставьте как модуль.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

во-первых: синтезатор сам автоматом мне сделал такую память из M4K блоков (ему видней, значит так надо)

 

"не зная броду, не суйся в воду" (с) Народная мудрость. Дальнейший разговор с вами, при такой вашей позиции, считаю бессмысленным и буду ставить в игнор. Желаю удачи %)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

"не зная броду, не суйся в воду" (с) Народная мудрость. Дальнейший разговор с вами, при такой вашей позиции, считаю бессмысленным и буду ставить в игнор. Желаю удачи %)

 

напоминает разговор слепого с глухим. чесслово...

 

ожидаю здравых ыслей по палитре - а мне подсовывают формулы??? в недоумении...

 

тогда нах форум этот нужен вообще, если ответы можно в другом месте искать?

 

толку ~0

 

 

Да на самом деле, господин des00 вам правду сказал насчет памяти. Сгенерируйте тогда это ОЗУ (и нафига двухпортовое?) в мегавизарде, да вставьте как модуль.

 

неправда.

 

двухпортовое озу просто необходимо - нужно одновременно и оперативно писать и вычитывать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

неправда.

 

двухпортовое озу просто необходимо - нужно одновременно и оперативно писать и вычитывать.

 

Хорошо, пусть так. Тогда хоть объясните что вы собрались записывать в память с палитрой? Я думал, что палитра - это массив констант, однопортовое ПЗУ. Адрес = номер цвета, а выход = нужное значение. Не вижу принципиальных проблем. Чего так настойчиво отказываться от предложенного выше. Через мегавизард хоть одно хоть двухпортовую память можно сделать...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

напоминает разговор слепого с глухим. чесслово...
Ну, то-же самое про Вас можно сказать. С одной стороны из Вас так и прёт непрофессионализм в этой области, с другой стороны вы упрямо доказываете что Вы правы. Причём безапеляционно. Осебенно это видно, если перечитать Ваши последние темы.

ожидаю здравых ыслей по палитре - а мне подсовывают формулы??? в недоумении...
Да Вы сами не знаете что Вам нужно. Если-бы знали - не говорили-бы так. Зачем было ввязываться в проект, с такими знаниями.

тогда нах форум этот нужен вообще, если ответы можно в другом месте искать?

толку ~0

Форум для того, что-бы обсуждать проблемы, делится опытом и знаниями. А не для того, что-бы вместе Вам писать проект.

Вам надавали информации, по которой без напряга Ваш проект делается за время, меньшее чем Вы обсуждаете его тут, на форуме.

Но это конечно если знать что и как делать.

во-первых: синтезатор сам автоматом мне сделал такую память из M4K блоков (ему видней, значит так надо)
Синтезатор делает не больше чем Вы ему сказали, так что не расслабляйтесь.

 

Хорошо, пусть так. Тогда хоть объясните что вы собрались записывать в память с палитрой? Я думал, что палитра - это массив констант, однопортовое ПЗУ. Адрес = номер цвета, а выход = нужное значение. Не вижу принципиальных проблем. Чего так настойчиво отказываться от предложенного выше. Через мегавизард хоть одно хоть двухпортовую память можно сделать...
Как я понял, ему нужно то что Вы написали, но не ПЗУ, а ОЗУ, коды палитры могут в процессе работы перегружатся, они не константны.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

во-первых: синтезатор сам автоматом мне сделал такую память из M4K блоков (ему видней, значит так надо)

 

во-вторых: что-то мы сомневаемся, что алтера изобилует экзамплами вга-контроллеров , особенно с применением колор-меппера

синтезатор синтезирует то, что ВЫ ему дали на съедение...

Мегавизар - генерирует в соответствии с Вашими параметрами(всякие галочки, ввод/выбор различных цифр), которые Вы установили. Ему все равно, что Вы там поставили...(единственно за чем Мегавизард следит так это чтобы не было перебора с ресурсами ПЛИС)

 

 

напоминает разговор слепого с глухим. чесслово...

 

ожидаю здравых мыслей по палитре - а мне подсовывают формулы??? в недоумении...

 

тогда нах форум этот нужен вообще, если ответы можно в другом месте искать?

Значит Вы некорректно задаете вопрос или не полностью делитесь проблемой

 

!!!почитай Вам будет интересно!!!

 

ЗЫ прежде чем говорить что либо, подумай говорят помогает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...