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

 
 
 
Reply to this topicStart new topic
> BMP 16 бит, вывод на экран через ПЛИС
torik
сообщение Dec 24 2007, 14:17
Сообщение #1


Гуру
******

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



Вот какие дела: быть плата простенькая отладочная Циклон2стартеркит... Создал простенький проект, который изображение из флеша выводит на экран монитора, при этом ЦАП всего 4 бита на цвет. VGA RGB короче. Изображение загружаю с компьютера, предварительно сохраняя в формате BMP "X1 R4 G4 B4".
Проблема - при выводе на экран монитора искажаются цвета довольно заметно. В файле нет bitmap-а...

Подскажите, пожалуйста, когда я при сохранении в фотошопе выбираю
BMP "X4 R4 G4 B4', "R5 G6 B5", "X1, R5, G5, B5", то это простой RGB или все-таки цветоразностный?

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

Простите, что немного оффтоп

Собственно, что обсуждалось на форуме:

http://www.xilinx.com/bvdocs/appnotes/xapp283.pdf
ftp://ftp.xilinx.com/pub/applications/xapp/xapp283.zip

это методы перекодировки, в том числе таблицей.

Итого, остаются вопросы:
- какой же там формат
- чем состряпать такую таблицу чтоб не писать руками.


--------------------
Быть. torizin-liteha@yandex.ru
Go to the top of the page
 
+Quote Post
Flood
сообщение Dec 24 2007, 17:20
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 702
Регистрация: 8-06-06
Пользователь №: 17 871



Это все простые RGB форматы. Цветоразностные обычно имеют в названии буквы Y и U.
Корректный 16 битный цвет - это только RGB565.
RGB555 - 15-и битный. Старший бит не используется.
Цифры после букв указывают количество бит на цвет в "упакованном" 16-битном слове.

Чтобы использовать непакованный BMP в качестве чистого битмапа (RAW), от него нужно отрезать заголовок. Сколько именно байт - как раз в заголовке и указано. Также там есть вся информация о формате - размеры, упаковка (индексный, прямой цвет или компрессия), и тд. Формат заголовка смотреть в MSDN или Windows SDK Help.
Go to the top of the page
 
+Quote Post
torik
сообщение Dec 24 2007, 17:55
Сообщение #3


Гуру
******

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



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


--------------------
Быть. torizin-liteha@yandex.ru
Go to the top of the page
 
+Quote Post
rv3dll(lex)
сообщение Dec 25 2007, 06:16
Сообщение #4


Полное ничтожество
*****

Группа: Banned
Сообщений: 1 991
Регистрация: 20-03-07
Из: Коломна
Пользователь №: 26 354



Цитата(torik @ Dec 24 2007, 20:55) *
формат файла я знаю. заголовок просто убираю.
Почему цвета искажаются не понимаю, потому и подумал на цветоразностные.


ты на цап на этот смотрел??? посмотри на схему и всё встанет на свои места.
там даже не R-2R
Go to the top of the page
 
+Quote Post
torik
сообщение Dec 25 2007, 07:20
Сообщение #5


Гуру
******

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



Мдя, действительно. Ну ничего, потом попробую на TFT панели, когда она придет...

Там другую проблему надо решать нафиг, откуда-то данные выскакивают левые, словно память SDRAM неустойчиво читается.

Как-то можно покрутить фазовый сдвиг PLL не перекомпилируя весь проект в Quartus-е?


--------------------
Быть. torizin-liteha@yandex.ru
Go to the top of the page
 
+Quote Post
torik
сообщение Dec 26 2007, 18:43
Сообщение #6


Гуру
******

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



И все-таки подскажите, как мне оперативно поменять фазу одного из выходов PLL не перекомпилируя проект в квартусе?
Это необходимо, чтобы настроить сдвиг фазы для SDRAM


--------------------
Быть. torizin-liteha@yandex.ru
Go to the top of the page
 
+Quote Post
rv3dll(lex)
сообщение Dec 27 2007, 05:34
Сообщение #7


Полное ничтожество
*****

Группа: Banned
Сообщений: 1 991
Регистрация: 20-03-07
Из: Коломна
Пользователь №: 26 354



Цитата(torik @ Dec 26 2007, 21:43) *
И все-таки подскажите, как мне оперативно поменять фазу одного из выходов PLL не перекомпилируя проект в квартусе?
Это необходимо, чтобы настроить сдвиг фазы для SDRAM


врят-ли

а какой контроллер памяти для видео используете?
Go to the top of the page
 
+Quote Post
torik
сообщение Dec 27 2007, 06:19
Сообщение #8


Гуру
******

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



Использую стандартный альтеровский контроллер SDRAM, в SOPC Builder. PLL фазу покрутил тупо перекомпиляцией несколько значений и сделал вывод, что она у меня была выбрана правильно.
При неправильно выбранной фазе данные из памяти вообще не читаются (да и не грузятся процессором), а у меня другой глюк - пропадание данных случайным образом раз в секунду, две.
Тогда, пытаясь добиться каких либо изменений, поменял рассчет адреса чтения.

Было:
Код
assign    address_0 = (SW[8] == 1'b0) ? address_0_w : address_0_r;                                

always    @(posedge CLOCK_50_f) address_0_r = (VGA_VS == 1'b1) ?
        (((read_n == 1'b0)&&(waitrequest == 1'b0)) ? address_0_r + 2'd2 : address_0_r + 2'd0) : 24'h000000;


Стало:
Код
assign    address_0 = (SW[8] == 1'b0) ? address_0_w : address_0_r;                                

always    @(posedge CLOCK_50_f) address_0_r = (VGA_VS == 1'b1) ?
        (((read_n == 1'b0)&&(waitrequest == 1'b0)) ? address_0_r + 2'd2 : address_0_r + 2'd0) : start_adr;

wire            [23:0]    start_adr;
assign start_adr = (SW[1] == 1'b0) ? ((SW[0] == 1'b1) ? 24'hC00000 : 24'h000000) : 24'h810000;

address_0 - то что подается на модуль билдера, а address_0_r соответсвенно адрес чтения.
Иными словами, численное значение 24'h000000 я заменил на wire start_adr... В результате картинка стала стабильной.

Почему это повлияло так сильно, чем отличается использование wire от просто константы, поясните?


--------------------
Быть. torizin-liteha@yandex.ru
Go to the top of the page
 
+Quote Post
rv3dll(lex)
сообщение Dec 27 2007, 11:16
Сообщение #9


Полное ничтожество
*****

Группа: Banned
Сообщений: 1 991
Регистрация: 20-03-07
Из: Коломна
Пользователь №: 26 354



к сожалению я не знаю что за язык (сам пишу на vhdl и ввиде схем)
Go to the top of the page
 
+Quote Post
dvladim
сообщение Dec 27 2007, 20:45
Сообщение #10


Знающий
****

Группа: Свой
Сообщений: 654
Регистрация: 24-01-07
Из: Воронеж
Пользователь №: 24 737



А что же вы хотите? В этих двух кусках кода, описана разная логика. В зависимости от значения SW[1] и SW[0].

Сообщение отредактировал den_realan - Dec 27 2007, 20:48
Go to the top of the page
 
+Quote Post
sazh
сообщение Dec 28 2007, 11:07
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804



Цитата(torik @ Dec 27 2007, 09:19) *
always @(posedge CLOCK_50_f) address_0_r = (VGA_VS == 1'b1) ?
address_0 - то что подается на модуль билдера, а address_0_r соответсвенно адрес чтения.
Иными словами, численное значение 24'h000000 я заменил на wire start_adr... В результате картинка стала стабильной.

Почему это повлияло так сильно, чем отличается использование wire от просто константы, поясните?


Константа wire описывается. А как иначе?
wire [3:0] constant = 4'd5;

always @(posedge clk)
begin
if (s_load) count <= constant;
else count <= count + 1'b1;
end

Конечно же условия поменялись. И глубина мультиплексирования. Но так как усе это фиксируется по фронту клока, то дело наверно все же в использовании в процессе по клоку оператора блокирующего присваивания переменной =
При использовании такого оператора при синтезе регистров, задержек нп регистрах по клоку становиться важным порядок следования такого оператора в процессе по клоку.
используйте неблокирующий оператор <=
Ведь имеено его вы и имеете ввиду при поведенческом описании схемы
(Если не задумали в поведенческом описании порядок следования поведения)
Go to the top of the page
 
+Quote Post
torik
сообщение Dec 28 2007, 18:41
Сообщение #12


Гуру
******

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



Спасибо, я понял куда копать.
Как это ни смешно, но я до сих пор не очень четко представляю когда необходимо использовать блокирующее и неблокирующее присваивание, надо бы почитать про это дело...


--------------------
Быть. torizin-liteha@yandex.ru
Go to the top of the page
 
+Quote Post
des00
сообщение Dec 29 2007, 04:15
Сообщение #13


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(sazh @ Dec 28 2007, 06:07) *
wire [3:0] constant = 4'd5;



/me посмотрел свои исходники

Скажите пожалуйста а что localparam уже не синтезируется ? smile.gif)


С наступающим!!!


--------------------
Go to the top of the page
 
+Quote Post

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

 


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


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