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

 
 
> 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
 
Start new topic
Ответов
torik
сообщение Dec 27 2007, 06:19
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 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



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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 21:21
Рейтинг@Mail.ru


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