Jump to content

    

Recommended Posts

Приветствую.

Задача: вывести на монитор тестовый шаблон по HDMI на Artix AC701.

Исходные данные: работаю в Vivado 2017.1, имеется монитор Dell 2408WFP с поддержкой HDMI, и, собственно, сама плис Artix. Изображение для начала можно любого формата, главное, чтоб заработало. Я взяла режим 1920х1080р 60Гц, 24-Bit RGB (4:4:4) с раздельной синхронизацией.

Проблема: Первая и самая главная - изображение отсутствует. Однако сигнал, судя по анализатору ILA в виваде, идет. У меня в наличии еще имеется маленький 7 дюймовый монитор hdmi lcd 1024x600 для raspberry pi (режим, разумеется, поменяла), на нем отображается не соответствующая шаблону картинка да еще и скачущая. Возможно, проблема с синхронизацией?

Подробно о моем проекте.

Создала в вивадо стандартный проект с процессором Microblaze (картинку прикрепила). Из документа ac701-schematic узнаю, что на борту артикс есть некая микросхема ADV7511 - это кодек HDMI, обеспечивает интерфейс между плис и портом hdmi, откликается по адресу 0х39. Дальнейшее изучение назначений ножек привело меня к еще одной микросхеме - PCA9548 - это IIC мультиплексор. Т.е. чтобы получить доступ к ADV, нужно пройти через коммутатор IIC по адресу 0х74. Нам нужно использовать 5 канал этого коммутатора для доступа к ADV. 

 Из официального документа AN-1270 фирмы Analog Devices на микросхему ADV я нашла схему, как "собрать" все это безобразие плюс исходные коды на верилог для создания собственного IP ядра в виваде. Итак, картинка сложилась: добавляем в проект собственное ядро ADV7511 c предоставленными кодами (на схеме выделено красным), добавляем ядро AXI-IIC (выделено зеленым), поскольку для вывода в формате HDMI микросхема ADV должна быть запрограммирована на запись в соответствующие регистры IIC. Еще добавила блок Clock Wizard для генерации т.н. pixel frequency (для режима 1080p - 148.5 МГц) - на картинке выделен голубым.

Ну и разумеется, прога в SDK для "оживления" всей этой аппаратной части. Сразу замечу, что скрипт для шины IIC из документа AN1270 вызвал у меня некоторые подозрения, ибо там дублируются одни и те же регистры с разными значениями. Поэтому в SDK я прописала значения регистров, взятые из ADV7511 Programming guide.

Помогите, пожалуйста. Я много копалась на форуме Xilinx, но пока решение не нашла. Уповаю на наше сообщество. Если нужны еще подробности, документы с которыми работаю, все предоставлю.

мой проект.png

AN-1270.pdf

Edited by Jul'etta

Share this post


Link to post
Share on other sites
45 minutes ago, RobFPGA said:

Приветствую!

 

Видели эту ссылку.  Такие вещи удобно изучать имея рабочий reference design.

 

Успехов!  Rob.

Посмотрю, спасибо!

Share this post


Link to post
Share on other sites

проверьте, соблюдаются ли времянки (front porch, sync pulse width, back porch), которые прописаны именно для вашего монитора.

148,5 МГц - это пиксельная частота стандартная для 1080p из спецификации VESA, но у каждого моника могут быть иные времянки и пиксельная частота. эту инфу можно узнать через EDID или, если есть инфа, в документации на монитор

Share this post


Link to post
Share on other sites
6 hours ago, quato_a said:

проверьте, соблюдаются ли времянки (front porch, sync pulse width, back porch), которые прописаны именно для вашего монитора.

148,5 МГц - это пиксельная частота стандартная для 1080p из спецификации VESA, но у каждого моника могут быть иные времянки и пиксельная частота. эту инфу можно узнать через EDID или, если есть инфа, в документации на монитор

я первым делом это проверила. из параметров такого "низкого" уровня как front  и back porch, в документации на моник прописаны только sync polarity (это я прописала в соответствии с разрешением), pixel clock ну и horizontal/vertical freq. Первый параметр (sync polarity) прописывается в регистрах ADV по IIC, остальные выбираются в соответствии с режимом в коде верилог в описании AN-1270. Пока глухо, монитор не откликается.

Untitled.png

Share this post


Link to post
Share on other sites
41 minutes ago, Jul'etta said:

я первым делом это проверила. из параметров такого "низкого" уровня как front  и back porch, в документации на моник прописаны только sync polarity (это я прописала в соответствии с разрешением), pixel clock ну и horizontal/vertical freq. Первый параметр (sync polarity) прописывается в регистрах ADV по IIC, остальные выбираются в соответствии с режимом в коде верилог в описании AN-1270. Пока глухо, монитор не откликается.

чет меня в сомнение пускает - что это за таблица "Preset Display Modes"?

вроде же этому монику нужно слать столько 1920x1200, остальное он не воспримет, если у него нет внутри image scaler. а image scaler внедряют далеко не во все моники

Share this post


Link to post
Share on other sites
37 minutes ago, quato_a said:

чет меня в сомнение пускает - что это за таблица "Preset Display Modes"?

вроде же этому монику нужно слать столько 1920x1200, остальное он не воспримет, если у него нет внутри image scaler. а image scaler внедряют далеко не во все моники

Таблица из документации к монитору :) Монитор, правда, старенький, но рабочий, проверяла, подключив к компу. 1920х1200 - это оптимальный для него режим, но не единственный, который он поддерживает, по идее. Документ прикрепила.

dell-2408wfp_user's guide_en-us.pdf

Share this post


Link to post
Share on other sites

Вам надо сначала запрограммировать ADV7511 в требуемый режим работы (при переподключении кабеля HDMI необходимо ADV7511 заново пограммировать):

//iic_adv7511( reg, data )

iic_adv7511( 0x41, 0x10 );//power up, disable sync_adjustment (0x12 - enable sync_adjustment)

iic_adv7511( 0x15, 0x00 );//24 bit RGB

iic_adv7511( 0x16, 0x34 );//RGB 8 bit style 2

//iic_adv7511( 0x17, 0x60 );//sync polariry low

iic_adv7511( 0x17, 0x00 );//sync polariry high

и далее выводить изображение точно также как на интерфейс VGA:

https://www.fpga4fun.com/HDMI.html

http://we.easyelectronics.ru/blog/plis/2713.html

 

Share this post


Link to post
Share on other sites
2 hours ago, esokol said:

Вам надо сначала запрограммировать ADV7511 в требуемый режим работы (при переподключении кабеля HDMI необходимо ADV7511 заново пограммировать):

//iic_adv7511( reg, data )

iic_adv7511( 0x41, 0x10 );//power up, disable sync_adjustment (0x12 - enable sync_adjustment)

iic_adv7511( 0x15, 0x00 );//24 bit RGB

iic_adv7511( 0x16, 0x34 );//RGB 8 bit style 2

//iic_adv7511( 0x17, 0x60 );//sync polariry low

iic_adv7511( 0x17, 0x00 );//sync polariry high

и далее выводить изображение точно также как на интерфейс VGA:

https://www.fpga4fun.com/HDMI.html

http://we.easyelectronics.ru/blog/plis/2713.html

 

Вот за ссылки отдельная благодарность! особенно за вторую - все шаги последовательно разобраны. А все настройки АDV у меня прописаны для регистров шины IIC в SDK, т.е. уже на софтверном уровне. Там и для ADV и для мультиплексора PCA9548.

 

А может, Вы знаете, зачем инвертируют частоту пикселей?  Что в описании к ADV (документ AN1270), что во второй Вашей ссылке:

assign pixel_clk_N = ~pixel_clk; // инвертированный PixelClock
Edited by Jul'etta

Share this post


Link to post
Share on other sites

В этих проектах формируются сигналы цвета и синхронизации по фронту "pixel_clk", а ADVшка защелкивает данные по фронту "pixel_clk_n" (описано в Hardware UG ADV7511 стр. 13-14, setup/hold по 2нс).

Share this post


Link to post
Share on other sites
On 9/3/2021 at 8:24 PM, esokol said:

В этих проектах формируются сигналы цвета и синхронизации по фронту "pixel_clk", а ADVшка защелкивает данные по фронту "pixel_clk_n" (описано в Hardware UG ADV7511 стр. 13-14, setup/hold по 2нс).

Спасибо!

 

 

Эх, бьюсь третью неделю. Пока никак. А казалось, что все сложилось. 

Edited by Jul'etta

Share this post


Link to post
Share on other sites

Наткнулась на годные уроки  xilinx video series. 

https://forums.xilinx.com/t5/Video-and-Audio/Xilinx-Video-Series/td-p/849583

В 16 уроке идет речь о блоке VTC (Video Timing Controller). https://forums.xilinx.com/t5/Video-and-Audio/Video-Beginner-Series-16-Understanding-Video-Timing-with-the-VTC/td-p/899769

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

 

 

Что значит, если код на верилоге подсвечивается голубым? Картинку прикрепила

1.jpg

Edited by Jul'etta

Share this post


Link to post
Share on other sites

Для получения "видеотаймингов" можно воспользоваться калькулятором https://www.epanorama.net/faq/vga2rgb/calc.html.

А вывод статического изображения можно сделать примерно так

 

 

send2adv7511.v

Share this post


Link to post
Share on other sites
On 9/6/2021 at 10:52 PM, esokol said:

Для получения "видеотаймингов" можно воспользоваться калькулятором https://www.epanorama.net/faq/vga2rgb/calc.html.

А вывод статического изображения можно сделать примерно так

 

 

send2adv7511.v 1.49 kB · 2 downloads

глянула, спасибо. Ваш код гораздо короче, чем код от AD :)

Share this post


Link to post
Share on other sites

Ознакомьтесь с этой статьей. Мне в своё время она очень помогла написать RX часть DVI.

https://marsohod.org/projects/proekty-dlya-platy-marsokhod3/307-max10-hdmi

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.