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

|
при передачи цвета напрямую в порт RGB, затем цап на резисторах - потом на кодер AD724 - на телевизоре изображение чёткое: Код if rising_edge(pixel_clock) then if Blank='1' then R<=SRAM_Data(14..10); G<=SRAM_Data(9 ...5); B<=SRAM_Dta(4..0); end if; end if; при выводе из Look-Up таблицы в порт RGB чёткость изображения понижается - оно как бы размыто - с небольшим трудом читаются символы матрицы 8x8: Код if rising_edge(pixel_clock) then if Blank='1' then R<=LookUpRED(conv_integer(SRAM_Data(14..10))); G<=LookUpGreen(conv_integer(SRAM_Data(9..5))); B<=LookUpBlue(conv_integer(SRAM_Data(4..0))); end if; end if; есть ли способ избавиться от размытости?
Сообщение отредактировал %-) - Dec 14 2009, 06:35
|
|
|
|
|
 |
Ответов
|
Dec 15 2009, 00:31
|
Частый гость
 
Группа: Участник
Сообщений: 118
Регистрация: 13-09-09
Пользователь №: 52 331

|
кстати, как правильно(синхронно) вычитывать данные из внешней SRAM на дисплей? Пока сделано так(для наглядности - код упрощён - нет обнулений по ограничению): Код process(Clk) --из 50 МГц получаем 25 мгц для пиксельклока begin if rising_edge(Clk) then PixelClock<=PixelClock+1; end if; end process;
process(PixelClock) --для увеличения адреса SRAM begin if rising_edge(PixelClock) then Address<=Address+1; end if; end process;
SRAM_CE<='0'; SRAM_OE<=PixelClock; --стробируем по пикслеьклоку. Квазисинхронный режим??? Для SRAM SRAM_A<=Address;
process(PixelClock) --выдаём данные на VGA порт begin if rising_edge(PixelClock) then if Blank='1' then -- кадр R<=SRAM_D(14 downto 10); -- считываем данные с SRAM G<=SRAM_D(9 downto 5); B<=SRAM_D(4 downto 0); else --бланк-интервалы - форсируем цвет в 0 R<="00000"; G<="00000"; B<="00000"; end if; end if; end process;
Blank<=HBlank and VBlank; -- =0 когда обратный ход луча(по строке или кадру), 1 - когда идёт отображение кадра
|
|
|
|
|
Dec 15 2009, 19:15
|
Участник

Группа: Участник
Сообщений: 44
Регистрация: 2-12-07
Из: Ростов-на-Дону
Пользователь №: 32 893

|
Цитата(%-) @ Dec 15 2009, 03:31)  кстати, как правильно(синхронно) вычитывать данные из внешней SRAM на дисплей? Не стоит делить частоту на триггере и затем использовать её в качестве тактовой если потом надо перепривязывать назад к 50. Лучший вариант, когда всё работает от одной тактовой с разрешениями. Есть DLL, PLL и др. блоки предназначенные для этого я бы сделал так: Код process(Clk) --из 50 МГц получаем !!!разрешение!!! 25 мгц для пиксельклока begin if rising_edge(Clk) then PixelClock_en<=PixelClock_en+1; --зачем +1 ??? можно просто not PixelClock_en end if; end process;
process(Clk) --для увеличения адреса SRAM begin if rising_edge(Clk) then if PixelClock_en='0' then Address<=Address+1; end if; end if; end process;
SRAM_CE<='0'; --SRAM_OE<=PixelClock; --стробируем по пикслеьклоку. Квазисинхронный режим??? -- если нужно постоянно читать, можно вообще SRAM_OE<='0' на время чтения и не дергать лишний раз буфера, кроме этого сокращается время на чтение см ниже. --SRAM_A<=Address; -- вот это интересней см ниже -- чтение из SRAM Есть следующие задержки --1. от CLK до выходных ножек ПЛИС. Если так вывести, то задержка будет меняться от разводки, можно (вообще-то нужно) задать макс. значение (для Xilinx см OFFSET OUT) --2. от ADDR SRAM до DATA SRAM см datasheet на SDRAM. --3. от ножек ПЛИС до регистров. задать макс. значение (для Xilinx см OFFSET IN) -- Сумма трех задержек меньше периода тактовой, в данном случае 40нс, что много (смотря сколь-ко логики нагородить на данных) и можно не ставить дополнительные регистры в ножках, но все-же лучше так -- Единственно, если стробировать SRAM_OE для 2. максимальное из (ADDR -> DATA) и ((ОЕ -> DATA) + 20 нс).
process(Clk) begin if rising_edge(Clk) then if PixelClock_en='0' then SRAM_A<=Address+1; --не забудь поставить атрибут, что-бы синтез не выкинул одинаковые регистры. Можно без +1, тогда атрибут не нужен, но будет дополнительная задержка на такт. end if; SRAM_OE<=not PixelClock_en; --не забудь поставить атрибут, что-бы синтез не выкинул одинаковые регистры. end if; end process;
--process(PixelClock) --выдаём данные на VGA порт --begin -- if rising_edge(PixelClock) then -- if Blank='1' then -- кадр -- R<=SRAM_D(14 downto 10); -- считываем данные с SRAM -- G<=SRAM_D(9 downto 5); -- B<=SRAM_D(4 downto 0); -- else --бланк-интервалы - форсируем цвет в 0 -- R<="00000"; -- G<="00000"; -- B<="00000"; -- end if; -- end if; --end process;
--Blank<=HBlank and VBlank; -- =0 когда обратный ход луча(по строке или кадру), 1 - когда идёт отображение кадра
-- регистр один на вход и выход, лучше добавить ещё один.
process(Clk) --выдаём данные на VGA порт begin if rising_edge(Clk) then if PixelClock_en='0' then SRAM_D_reg<=SRAM_D; if Blank='1' then -- кадр R<=SRAM_D_reg(14 downto 10); -- считываем данные с SRAM G<=SRAM_D_reg(9 downto 5); B<=SRAM_D_reg(4 downto 0); else --бланк-интервалы - форсируем цвет в 0 R<="00000"; G<="00000"; B<="00000"; end if; Blank<=HBlank and VBlank; -- задерживаем на такт, другие выходные сигналы тоже задержать. end if; end if; end process; где-то так.
|
|
|
|
Сообщений в этой теме
%-) Реализация LookUp Table для видеовывода Dec 14 2009, 06:34 SM хрень какая-то. Констрейны выполняются? Слаков нет... Dec 14 2009, 06:41 %-) Цитата(SM @ Dec 14 2009, 09:41) хрень как... Dec 14 2009, 06:49  SM Цитата(%-) @ Dec 14 2009, 09:49)... Dec 14 2009, 06:51   %-) Цитата(SM @ Dec 14 2009, 09:51) Хотя разн... Dec 14 2009, 06:56    Builder Цитата(%-) @ Dec 14 2009, 09:56)... Dec 14 2009, 07:49     SM Цитата(Builder @ Dec 14 2009, 10:49) появ... Dec 14 2009, 08:01     %-) Цитата(Builder @ Dec 14 2009, 10:49) Учит... Dec 14 2009, 22:58      Builder Цитата(%-) @ Dec 15 2009, 00:58)... Dec 15 2009, 05:47       %-) Цитата(Builder @ Dec 15 2009, 08:47) А во... Dec 15 2009, 06:33        des00 Цитата(%-) @ Dec 15 2009, 00:33)... Dec 15 2009, 06:52        Builder Цитата(%-) @ Dec 15 2009, 08:33)... Dec 15 2009, 11:18 SM Короче - пока есть слаки, нет никакого смысла зали... Dec 14 2009, 06:57  %-) Цитата(VasiaMVR @ Dec 15 2009, 22:15) Не ... Dec 15 2009, 22:57   des00 Цитата(%-) @ Dec 15 2009, 16:57)... Dec 16 2009, 04:17    %-) Цитата(des00 @ Dec 16 2009, 07:17) какая ... Dec 16 2009, 04:25 %-) ещё вопрос по генерации адреса.
нужно удваивать ст... Dec 16 2009, 02:53 %-) люди!
памагите!
сроки поджимают, а мы(кон... Dec 16 2009, 06:23 torik Палитра как рассчитывается? Если значений палитры ... Dec 16 2009, 12:21 %-) палитра не считается по формуле.
всего 256 цветов... Dec 17 2009, 02:07 des00 Цитата(%-) @ Dec 16 2009, 20:07)... Dec 17 2009, 04:07  %-) Цитата(des00 @ Dec 17 2009, 07:07) в чем ... Dec 17 2009, 05:39   des00 Цитата(%-) @ Dec 16 2009, 23:39)... Dec 17 2009, 06:18    %-) Цитата(des00 @ Dec 17 2009, 09:18) ... Dec 17 2009, 07:19     Builder Цитата(%-) @ Dec 17 2009, 09:19)... Dec 17 2009, 08:14     DmitryR Цитата(%-) @ Dec 17 2009, 10:19)... Dec 18 2009, 08:54      %-) Цитата(DmitryR @ Dec 18 2009, 11:54) когд... Dec 19 2009, 05:44   Maverick Цитата(%-) @ Dec 17 2009, 08:39)... Dec 17 2009, 16:07    Builder Цитата(Maverick @ Dec 17 2009, 18:07) ... Dec 17 2009, 16:17    %-) Цитата(Maverick @ Dec 17 2009, 19:07) ... Dec 17 2009, 23:02 torik Цитатаво-вторых: что-то мы сомневаемся, что алтера... Dec 17 2009, 06:15 torik Цитатанеправда.
двухпортовое озу просто необходим... Dec 17 2009, 07:29 torik Многие ли захотят Вам помогать
Да и нечем, похож... Dec 18 2009, 05:57
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|