|
|
  |
Реализация LookUp Table для видеовывода, нечёткое изображеине |
|
|
|
Dec 15 2009, 22:57
|
Частый гость
 
Группа: Участник
Сообщений: 118
Регистрация: 13-09-09
Пользователь №: 52 331

|
Цитата(VasiaMVR @ Dec 15 2009, 22:15)  Не стоит делить частоту на триггере и затем использовать её в качестве тактовой если потом надо перепривязывать назад к 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); как оптимальнее и правильнее сделать?
|
|
|
|
|
Dec 16 2009, 04:25
|
Частый гость
 
Группа: Участник
Сообщений: 118
Регистрация: 13-09-09
Пользователь №: 52 331

|
Цитата(des00 @ Dec 16 2009, 07:17)  какая задача знакомая..... %)
зачем читать палитру с 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;
|
|
|
|
|
Dec 17 2009, 02:07
|
Частый гость
 
Группа: Участник
Сообщений: 118
Регистрация: 13-09-09
Пользователь №: 52 331

|
палитра не считается по формуле. всего 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 МГц Возможно , нечёткое изображение (когда используется палитра) из-за разных тактовых клоков
Сообщение отредактировал %-) - Dec 17 2009, 02:12
|
|
|
|
|
Dec 17 2009, 05:39
|
Частый гость
 
Группа: Участник
Сообщений: 118
Регистрация: 13-09-09
Пользователь №: 52 331

|
Цитата(des00 @ Dec 17 2009, 07:07)  в чем проблема заменить двухпортовую синхронную одноклоковую на двухпортовую синхронную двухкловую? в N-ый раз повторяю читайте хендбуки с www.altera.com, там все написано. Ответ на большинство ваших вопросов ищется в хендбуке за 10-15 минут + немного логики здравого смысла, но вы по прежнему прете в слепую на баррикады уповая на помощь форума, неправильно это. во-первых: синтезатор сам автоматом мне сделал такую память из M4K блоков (ему видней, значит так надо) во-вторых: что-то мы сомневаемся, что алтера изобилует экзамплами вга-контроллеров , особенно с применением колор-меппера в-третьих: почти весь OpenSource в 90% представляет собой г@вно, которое не работает либо работает не так в-четвртых: кроме нас думается никто в точности не знает что надо получить ;-)
|
|
|
|
|
Dec 17 2009, 06:15
|

Гуру
     
Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359

|
Цитата во-вторых: что-то мы сомневаемся, что алтера изобилует экзамплами вга-контроллеров , особенно с применением колор-меппера Да, вещь действительно уникальнейшая, потому примеров нет ниииигде. Цитата в-четвртых: кроме нас думается никто в точности не знает что надо получить ;-) Да на самом деле, господин des00 вам правду сказал насчет памяти. Сгенерируйте тогда это ОЗУ (и нафига двухпортовое?) в мегавизарде, да вставьте как модуль.
--------------------
Быть. torizin-liteha@yandex.ru
|
|
|
|
|
Dec 17 2009, 07:19
|
Частый гость
 
Группа: Участник
Сообщений: 118
Регистрация: 13-09-09
Пользователь №: 52 331

|
Цитата(des00 @ Dec 17 2009, 09:18)  "не зная броду, не суйся в воду" (с) Народная мудрость. Дальнейший разговор с вами, при такой вашей позиции, считаю бессмысленным и буду ставить в игнор. Желаю удачи %) напоминает разговор слепого с глухим. чесслово... ожидаю здравых ыслей по палитре - а мне подсовывают формулы??? в недоумении... тогда нах форум этот нужен вообще, если ответы можно в другом месте искать? толку ~0 Цитата(torik @ Dec 17 2009, 09:15)  Да на самом деле, господин des00 вам правду сказал насчет памяти. Сгенерируйте тогда это ОЗУ (и нафига двухпортовое?) в мегавизарде, да вставьте как модуль. неправда. двухпортовое озу просто необходимо - нужно одновременно и оперативно писать и вычитывать.
|
|
|
|
|
Dec 17 2009, 08:14
|
iBuilder©
   
Группа: Свой
Сообщений: 519
Регистрация: 14-07-04
Из: Минск
Пользователь №: 322

|
Цитата(%-) @ Dec 17 2009, 09:19)  напоминает разговор слепого с глухим. чесслово... Ну, то-же самое про Вас можно сказать. С одной стороны из Вас так и прёт непрофессионализм в этой области, с другой стороны вы упрямо доказываете что Вы правы. Причём безапеляционно. Осебенно это видно, если перечитать Ваши последние темы. Цитата(%-) @ Dec 17 2009, 09:19)  ожидаю здравых ыслей по палитре - а мне подсовывают формулы??? в недоумении... Да Вы сами не знаете что Вам нужно. Если-бы знали - не говорили-бы так. Зачем было ввязываться в проект, с такими знаниями. Цитата(%-) @ Dec 17 2009, 09:19)  тогда нах форум этот нужен вообще, если ответы можно в другом месте искать? толку ~0 Форум для того, что-бы обсуждать проблемы, делится опытом и знаниями. А не для того, что-бы вместе Вам писать проект. Вам надавали информации, по которой без напряга Ваш проект делается за время, меньшее чем Вы обсуждаете его тут, на форуме. Но это конечно если знать что и как делать. Цитата(%-) @ Dec 17 2009, 08:39)  во-первых: синтезатор сам автоматом мне сделал такую память из M4K блоков (ему видней, значит так надо) Синтезатор делает не больше чем Вы ему сказали, так что не расслабляйтесь. Цитата(torik @ Dec 17 2009, 10:29)  Хорошо, пусть так. Тогда хоть объясните что вы собрались записывать в память с палитрой? Я думал, что палитра - это массив констант, однопортовое ПЗУ. Адрес = номер цвета, а выход = нужное значение. Не вижу принципиальных проблем. Чего так настойчиво отказываться от предложенного выше. Через мегавизард хоть одно хоть двухпортовую память можно сделать... Как я понял, ему нужно то что Вы написали, но не ПЗУ, а ОЗУ, коды палитры могут в процессе работы перегружатся, они не константны.
|
|
|
|
|
Dec 17 2009, 16:07
|

я только учусь...
     
Группа: Модераторы
Сообщений: 3 447
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839

|
Цитата(%-) @ Dec 17 2009, 08:39)  во-первых: синтезатор сам автоматом мне сделал такую память из M4K блоков (ему видней, значит так надо)
во-вторых: что-то мы сомневаемся, что алтера изобилует экзамплами вга-контроллеров , особенно с применением колор-меппера синтезатор синтезирует то, что ВЫ ему дали на съедение... Мегавизар - генерирует в соответствии с Вашими параметрами(всякие галочки, ввод/выбор различных цифр), которые Вы установили. Ему все равно, что Вы там поставили...(единственно за чем Мегавизард следит так это чтобы не было перебора с ресурсами ПЛИС) Цитата(%-) @ Dec 17 2009, 10:19)  напоминает разговор слепого с глухим. чесслово...
ожидаю здравых мыслей по палитре - а мне подсовывают формулы??? в недоумении...
тогда нах форум этот нужен вообще, если ответы можно в другом месте искать? Значит Вы некорректно задаете вопрос или не полностью делитесь проблемой !!!почитай Вам будет интересно!!!ЗЫ прежде чем говорить что либо, подумай говорят помогает.
--------------------
If it doesn't work in simulation, it won't work on the board.
"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|