|
|
  |
Zynq подключение камеры, Вопросы новичка |
|
|
|
Oct 30 2017, 08:57
|
Участник

Группа: Участник
Сообщений: 42
Регистрация: 29-10-17
Пользователь №: 99 964

|
Доброго времени суток! Я совсем новенький в теме SoC. Есть плата Z-turn и JTAG отладчик, все подружил, попробовал hello world. Пока читаю книгу ZynqBook. Есть задача: подключить камеру MT9V034 к плате Z-turn. Хочу подключить по параллельному интерфейсу (PIXCLK, DATA(9:0), HSYNC, VSYNC), но можно еще по LVDS последовательному интерфейсу. Камера имеет разрешение 752х480 60 фпс, монохромная. 1) Есть ли у кого опыт пользования этими интерфейсами, камера будет в сантиметрах от платы, поэтому скорее всего LVDS помехозащищенность не нужна. И проще всего подключить по параллельному интерфейсу. Так ли это? 2) Далее надо организовать некий контроллер-приемник на стороне PL. Есть ли готовые IP-ядра для этого? В STM32 есть DCMI контроллер, есть ли здесь что то похожее? 3) Надо, чтобы контроллер-приемник передавал принятые байты DMA контроллеру, а он складывал в видеобуфер на стороне DDR. Какой DMA контроллер использовать, который реализован аппаратно в PS или нужно IP ядро? 4) Как организовать связку DMA контроллера и DDR памяти, нужно ли доп ядро DDR контроллера? Какие параметры нужно устанавливать для совместной их работы и как их настроить? После заполнения видеобуфера, надо чтобы сработало прерывание для ядра, чтобы можно было производить обработку, то есть ядро никак не должно участвовать в приеме картинки, такое возможно? Стоит ли писать по байтово в DDR или лучше накопить некую пачку и только потом записать? Какова пропускная способность всей цепи от DCMI контроллера до ячеек DDR памяти, потянет ли реал-тайм запись или нудны промежуточные буферы? 5) Я так понимаю нужно 2 DDR буфера -пока один постепенно заполняется, с другим можно работать, потом они меняются местами, правильно ли думаю? Как организовать доступ ядра к DDR памяти или я просто обращаюсь под выделенное для DDR памяти адресное пространство и DDR контроллер понимает, что это орбащение к DDR памяти и все организовывает сам? 6) После получения кадра, надо отсылать картинку по UDP на комп, где она визуализируется. Хочу писать в FreeRTOS, есть ли готовые функции для приема/отправки UDP пакетов, как они реализованы (блокируемые или по прерываниям)? Как правильно упаковать картинку для передачи по UDP. 7) Еще не понятна схема работы в Vivado и SDK. То есть в Vivado нужно нарисовать саму архитектуру системы, далее сгенерировать некий BSP. А в SDK с помощью этого самого BSP настроить периферию, записью в различные регистры. Правильно я понимаю? 8) Если я использую аппаратный SPI в PS, нужно ли мне генерировать Bitstream? Ведь По идее ресурсы FGPA не используются 9) Как взаимодействовать с кэшем различного уровня? Как правильно с ним работать? Интересует именно в BareMetal и FreeRTOS варианте. И вообще вопрос как правильно разрабатывать на таком устройстве? То есть как переключаться между SDK и Vivado, в какую память шить? Какие тесты делать? Как лучше отлаживать в SDK или внешними утилитами? Какие подводные камни есть? на что стоит обратить внимание? Очень много настроек в PS, что можно менять и как они повлияют друг на друга? Можно ли часть настроек менять в SDK вместо Vivado или они независимые? Очень много вопросов. Надеюсь не нарушил никакие правила и не задал слишком нубских вопросов. Принимаю любую критику, ссылки на учебники, уроки, советы, наставления. Ответы на любые вопросы, какие сможете или хотите ответить. Заранее спасибо.
|
|
|
|
|
Oct 30 2017, 19:59
|
Участник

Группа: Участник
Сообщений: 52
Регистрация: 25-10-10
Из: Россия
Пользователь №: 60 410

|
Готов выполнить за вознаграждение!
|
|
|
|
|
Oct 30 2017, 21:09
|
Профессионал
    
Группа: Участник
Сообщений: 1 273
Регистрация: 3-03-06
Пользователь №: 14 942

|
Цитата(ilyaprok @ Oct 30 2017, 11:57)  1) Есть ли у кого опыт пользования этими интерфейсами, камера будет в сантиметрах от платы, поэтому скорее всего LVDS помехозащищенность не нужна. И проще всего подключить по параллельному интерфейсу. Так ли это? Да, это так. Цитата(ilyaprok @ Oct 30 2017, 11:57)  6) После получения кадра, надо отсылать картинку по UDP на комп, где она визуализируется. Хочу писать в FreeRTOS, есть ли готовые функции для приема/отправки UDP пакетов, как они реализованы (блокируемые или по прерываниям)? Как правильно упаковать картинку для передачи по UDP. Посчитайте битрейт. Вероятно, будет сложно реализовать передачу на комп в несжатом виде. Например, через 100 Мбит/c гарантированно не пролезет. Зависит, конечно, от разрешения и частоты смены кадров. Как правильно упаковать картинку. Зависит от того, чем вы её собираетесь на компьютере отображать. Если своими силами, то просто сложите картинку в пакеты, снабдив служебной информацией начала-конца кадра. Если сторонними плеерами, то есть и стандартные контейнеры. По FreeRTOS есть подфорум, там по сетевым протоколам можно найти массу информации. Мне представляется разумным сжать видеопоток в MJPEG (есть готовые ядра opensource) до разумного битрейта (50-80 Мбит/c). Для стрима по UDP тоже есть доступные ядра, но можно стримить процессором. Многие плееры (например, VLC) спокойно воспроизводят MJPEG по UDP. Исходный битрейт: 752 * 480 * 60 * 8 = ~170 Мбит/c. В принципе немного. По 1G сетке спокойно можно переслать.
|
|
|
|
|
Oct 31 2017, 11:41
|
Участник

Группа: Участник
Сообщений: 42
Регистрация: 29-10-17
Пользователь №: 99 964

|
Цитата Готов выполнить за вознаграждение! Выполнение не надо, надо самому обучиться, за сколько вы можете меня проконсультировать и обучить базе, конкретно на этой задаче? x736C большое спасибо за ответ, уже какие то вопросы закрываются. Пока самое узкое и непонятное место - это взаимодействие с DRAM, DMA, DCMI. Может вы можете меня послать на верный путь?
|
|
|
|
|
Oct 31 2017, 11:47
|
Участник

Группа: Участник
Сообщений: 66
Регистрация: 5-07-17
Пользователь №: 97 975

|
Цитата(ilyaprok @ Oct 31 2017, 14:41)  Пока самое узкое и непонятное место - это взаимодействие с DRAM, DMA, DCMI. Может вы можете меня послать на верный путь? Может, это поможет? https://www.xilinx.com/support/documentatio...ver-IP-zynq.pdfСама сейчас грызу...
|
|
|
|
|
Oct 31 2017, 20:05
|
Участник

Группа: Участник
Сообщений: 42
Регистрация: 29-10-17
Пользователь №: 99 964

|
Цитата(sheynmanyu @ Oct 31 2017, 16:47)  Большое спасибо, почитаю на досуге. Сейчас кстати смотрю видео на ютубе https://www.youtube.com/user/mamsadegh2/videos. Цитата(svedach @ Oct 31 2017, 22:18)  Лично с Вами (ТС) связаться можно? Не знаю можно ли тут публиковать свои данные, личное сообщение послать не могу, ну лады. мой мейл ilya94prok@mail.ru
|
|
|
|
|
Nov 5 2017, 14:08
|
Участник

Группа: Участник
Сообщений: 42
Регистрация: 29-10-17
Пользователь №: 99 964

|
А как соединить IP ядро с конкретным портом, как его сконфигурировать? Есть документ или урок, где это делается? Вот получается у меня есть справа порты, которым надо назначить конкретный физические выводы. Где об этом почитать?
|
|
|
|
|
Nov 14 2017, 16:51
|
Участник

Группа: Участник
Сообщений: 42
Регистрация: 29-10-17
Пользователь №: 99 964

|
Спасибо за последние ответы. Вновь прошу помощи. Данные не проходят блок "Video in to Axi 4 Stream". Имею камеру MT9V034 данные идут по параллельной шине DATA(7:0), PXCLK, LINE_VALID (активный сигнал - 1), FRAME_VALID (активный сигнал - 1). На вход подаю тактирование я взял с FCLK1 - 13.3333 МГц. У ядра "Video in to Axi 4 Stream" имеется входы vid_data(7:0), vid_active_video, vid_field_id, vid_hblak, vid_vblank, vid_hsync, vid_vsync, vid_io_in_clk, vid_io_in_ce, vid_io_in_reset. В документации написано используйте сигналы sync или сигналы blank. Непонятно как из LINE_VALID, FRAME_VALID создать vid_hblak, vid_vblank или vid_hsync, vid_vsync. пробовал по-всякому. Частоту FCLK1 менял в большую и и меньшую сторону. В Вивадо отладчике пытаюсь посмотреть что приходит на входы и что на выходе блока. Но отладчик показывает вообще какую то чушь!!! смотрю на осциллограф, там нормальная картинка, как и должно быть. Что я делаю не так? Кто посоветует. Может влиять длина проводников на такой частоте (13,3333 МГц)? Около 10 см. Прочел темы: https://forums.xilinx.com/t5/DSP-and-Video/...ace/td-p/517557https://forums.xilinx.com/t5/Zynq-All-Progr...ht/false#M15677https://forums.xilinx.com/t5/Zynq-All-Progr...-IP/td-p/531275  Вот запись с лог. анализатора 1  2
Сообщение отредактировал ilyaprok - Nov 14 2017, 17:08
|
|
|
|
|
Nov 14 2017, 17:47
|
Частый гость
 
Группа: Свой
Сообщений: 135
Регистрация: 8-01-12
Из: Беларусь
Пользователь №: 69 226

|
Оставляю для Вас личное IP-ядро с исходниками, которое работает с видео-декодерами (правда только с компонентой яркости).  Сигналы DE и HS в Вашем случае можно объединить. Отдаю с исходниками - разберетесь, будут вопросы - буду отвечать...
|
|
|
|
|
Nov 14 2017, 20:02
|
Участник

Группа: Участник
Сообщений: 42
Регистрация: 29-10-17
Пользователь №: 99 964

|
Цитата(svedach @ Nov 14 2017, 22:47)  Оставляю для Вас личное IP-ядро с исходниками, которое работает с видео-декодерами (правда только с компонентой яркости).  Сигналы DE и HS в Вашем случае можно объединить. Отдаю с исходниками - разберетесь, будут вопросы - буду отвечать... Огромное спасибо!  Сейчас буду пробовать. С вашим ядром уже какие то данные идут! Это то что на входе:  Это то что на выходе:  Данные все время меняются, то есть что то идет! Вот только я не понял - почему сигналы тактирования в нуле? ila2 - это то что на входе тактируется PXCLK - 13.3333 МГц. А ila1 - это то что на выходе тактируется FCLK0 - 100 Мгц. В этом самом дебагере не получилось запуститься по тригеру никаким сигналом (пробовал по переднему фронту TVALID, TREADY, TLAST). Нормально ли это? То есть я так понимаю эти сигналы зависят от следующего ядра (у меня AXI DMA) Еще не получалось долго проивезти имплементацию, ругался на vid_io_in_clk (это который PXCLK - 13.333 МГЦ), я в Constraint прописал set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets vid_io_in_clk_IBUF]. Может ли это как то помешать? А так большое спасибо за помощь! Еще вопрос - как определять начало кадра и иницировать транзакцию DMA? Я пока вижу так - подключить сигнал tuser к прерыванию - в обработчике прерывания иницировать передачу DMA - в первый раз. А далее иницировать уже в прерывании по DMA. Как посоветуете?
Сообщение отредактировал ilyaprok - Nov 14 2017, 20:08
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|