|
|
  |
BMP 16 бит, вывод на экран через ПЛИС |
|
|
|
Dec 24 2007, 14:17
|

Гуру
     
Группа: Свой
Сообщений: 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.pdfftp://ftp.xilinx.com/pub/applications/xapp/xapp283.zipэто методы перекодировки, в том числе таблицей. Итого, остаются вопросы: - какой же там формат - чем состряпать такую таблицу чтоб не писать руками.
--------------------
Быть. torizin-liteha@yandex.ru
|
|
|
|
|
Dec 27 2007, 06:19
|

Гуру
     
Группа: Свой
Сообщений: 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
|
|
|
|
|
Dec 28 2007, 11:07
|
Гуру
     
Группа: Свой
Сообщений: 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 Конечно же условия поменялись. И глубина мультиплексирования. Но так как усе это фиксируется по фронту клока, то дело наверно все же в использовании в процессе по клоку оператора блокирующего присваивания переменной = При использовании такого оператора при синтезе регистров, задержек нп регистрах по клоку становиться важным порядок следования такого оператора в процессе по клоку. используйте неблокирующий оператор <= Ведь имеено его вы и имеете ввиду при поведенческом описании схемы (Если не задумали в поведенческом описании порядок следования поведения)
|
|
|
|
|
Dec 29 2007, 04:15
|
Вечный ламер
     
Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453

|
Цитата(sazh @ Dec 28 2007, 06:07)  wire [3:0] constant = 4'd5; /me посмотрел свои исходники Скажите пожалуйста а что localparam уже не синтезируется ?  ) С наступающим!!!
--------------------
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|