Карательная электроника: Как нельзя разрабатывать интерфейс скоростной видеокамеры.
Кратко в статье будет:
Что же не так в первой же картинке: хоть и выглядит вполне аккуратно, или сказ о наводках и СВЧ чёрной цифровой магии и почему так делать нельзя.
Немного об отладочной плате FPGA и особенностях разработки.
О модуле камеры, её сенсоре, MIPI интерфейсе и как его испортить.Как сделать связь с ПК в сотни мегабит, менее 100мбит/сек, и как в том числе и тут словить кару.
Внимание: в статье несколько хайрез фоток и видео, много тех терминов и лютого DIY, возможен взрыв мозга!
Начнём с пациента:
Что это на фото?
1. Белая плата - мозги: FPGA плата на базе Artix-7 от Xilinx, подключена к ПК по micro USB для прошивки и отладочных логов
2. Мини плата слева сверху - FTDI, обещала "скоростную" связь с компом...
3. Синяя плата справа сверху - сам модуль скоростной камеры с пимпкой "объектива" (извиняюсь за ругательство).
4. Куча проводков от ардуины.
Требовалось:
Захватить видеопоток с камеры и послать на ПК как есть, без сжатия, при этом достичь максимального количества кадров в секунду.
Что за зверь, FPGA плата?
Это процессор или миникомп как "малинка"?
Нет, но она как процессор может исполнять алгоритм, считать и управлять чем-нибудь.
По сути FPGA это набор блоков памяти, отдельных битов памяти и простых, проще сложения, логических элементов с управляемыми связями. А связями всего этого набора можно произвольно управлять софтом по своему желанию.
Стоп, а как оно считает, исполняет алгоритм и управляет?
А тем что специальный софт разбивает алгоритм, написанный на си подобном языке, на отдельные блоки:
массивы размещает в большие блоки памяти,
переменные разбивает на биты и размещает в отдельные аппаратные биты,
вычисления, даже такие простые как инкремент разбивает на сотни и тысячи логических функций, для сложных использует готовые аппаратные блоки.
И потом всё это соединяет вполне реальными физическими связями. И работает всё это на частотах в несколько сотен мегагерц.
По сути алгоритм превращается в реальную и очень комплексную электрическую схему. Это настолько низкоуровневое программирование, что даже "ниже" не только ассемблера, но и машинных кодов и чёрт побери перфокарт!
100-200 Мгц медленно? и зачем такой дрочь нужен если есть обычная малинка или одноплатные ПК х86 на которых винда крутится?
Нет, это не медленно и есть задачи, где не возможно обойтись без FPGA физически.
Первая фишка: в том что это не проц, который исполняет алгоритм шаг за шагом. Это куча связанного "железа" которая исполняет весь алгоритм одновременно! Тотальное 100% распараллеливание алгоритма, даже если в нём несколько сотен тысяч строк кода!
Это даёт возможность такой магии, как сортировка массива за ноль тактов (например, в фильтре шума).
А ещё даёт возможность самому проектировать эмуляторы старых консолей и они будут работать в точности, нет, ТАК В ТАК, так-же как и их аппаратные дедушки, даже даёт возможность сэмулировать баги, и разные аппаратные нестабильности например в звуке чип-тюна ZX-Spectrum.
А ещё это и чудовищное быстродействие: делать расчёты на 66 Мгц быстрее чем Core i7 на 3700 МГц? запросто! Именно поэтому ASIC (FPGA с предзаказанными, не изменяемыми связями) так полюбились всеми майнерами.
Вторая принципиально непобедимая фишка: время реакции - раз всё работает параллельно и можно реагировать с нереальной скоростью, в десятки а порой единицы наносекунд. Робототехника, автопрома и оружейка - без FPGA и ASIC (захардкоженный FPGA) никак.
Третья фишка: можно реализовать любую переферию, любой интерфейс самому при помощи исходного кода, и если ты написал сам всё с нуля, включая интерфейсы, то это 100% переносимо, ну не мечта ли? Но с большими оговорками, и можно "отстрелить себе ногу", что я и сделал в интерфейсе камеры.
Модуль камеры:
Это плата модуля камеры: сверху чёрный цилиндр объектива, под ним чип сенсора который собственно и видит со всей логикой, который установлен на плате, два стабилизатора питания и разъём 40 контактный.
Камера:
5 мегапикселей.
"Объектив" полное гавно: мылит даже на VGA разрешении, света собирает мало, не настраивается фокус. Но для отладки пойдёт.
Чип сенсора выдаёт RAW формат как в профессиональных фотокамерах,
Интерфейс параллельный MIPI, он примитивный: каждый такт синхросигнала выдаёт 12 бит данных пикселя, с парой статусных сигналов "конец строки" и "конец кадра".
Для настройки юзает двух проводной I2C.
Коннектор - 40 пиновый, двухрядный с шагом 2.56мм, как в старых жестяках.
Казалось бы всё просто особенно для FPGA...
"Отстрел ноги"
Но чтоб достичь максимальной скорости надо выдать камере максимальную частоту в ~100Мгц (а с гармониками до гигагерца), от которой камера и тактируется, которая в свою очередь даёт обратно FPGA с сырыми данными изображения.
А это очень быстро, даже слишком быстро и было наивно с моей стороны надеется, что можно отдельными проводками соединить и ничего за это не будет...
Будет!
Во первых: в стародавние времена, когда у жестяков был широченный ParallelATA 40 пиновый коннектор и такой же шлейф, то этот 40 жильный шлейф работал только до частот 30-60МГц, а далее уже нужно было использовать особый магический 80 жильный шлейф. И это не спроста: на таких частотах взаимные наводки очень сильно влияют и портят сигнал. Но в этой связке его использовать нельзя т.к. на основной FPGA плате нет такого же 40пинового разъёма, а мудаки из Xilinx ради маркетинга (ну и чтоб продавать только их доп платки по конской наценке) и несовместимости запилили 4 группы по 12 контактов в два ряда.
Во вторых: длинна ардуино-проводов разная да и на самой плате очень сильно различается длинна дорожек, а это критично на таких скорстях и если даже не из за скорости света то из за разной индуктивности - которая усиливает взимные наводки, разносит их по разным фазам ещё сильнее и превращает сигнал в "кашу".
В третьих: маркетологи посчитали что при помощи платы "всего" за 100 баксов нельзя давать заниматься серьёзными вещами. И поэтому два из четырёх 12 контактных коннекторов GPIO подключили через много килоомные резисторы тем самым зарезав частоту и "завалив форнты" (когда тактовая нарастает не слишком быстро чип камеры, из за шумов может не понять время переключение, это было одно или несколько).
Не делайте так! Не надо пытаться ардуино-проводками подключать такие быстрые (свыше 30 МГц и многобитные интерфейсы)
Попытки профиксить и прочие бесполезные трепыхания
1. Тактовая пикселей MIPI что выходит из камеры оказалась в разы шумнее: это тактовая из FPGA которая набрала по пути до камеры шумы, а потом вернулась из камеры в FPGA набрав ещё шумов на обратном пути. Пришлось затактироваться внутренней частотой внутри FPGA что генерится и выдаётся наружу.
Фейл: чип камеры при каждом старте настраивается чуток поразному и поэтому выходящяя из него тактовая тоже на пару наносекунд то отстаёт то опережает.
Адский Костыль: Нужно вручную подстраивать каждый раз при каждом включении задержку.
2. Фейл: Взаимные шумы: так как лежит на первой картинке (плата связи рядом с платой камеры) не работает! В линке с ПК проскакивают лишние байты или он теряет байты.
Адский Костыль:
приходится буквально на пару сантиметров отгибать в сторону камеру вот так:
Чёртов бубновый шаманизм!3. Мини Фейл: Ардуино проводки - они норовят отскачить при любом неосторожном движении любой платы! Это, просто, очень и очень не удобно, надо ОЧЕНЬ аккуратно всё двигать.
Костыль: расковырял иголкой разъём чтоб лучше держалось ... помогло мало но вроде помогло.
4. Связь с ПК при помощи модуля FTDI2232H оказалось не настолько крутой как её рекламировала фирма.
Фейл: скорость вместо 480 мегабит оказалась всего в 100 мегабит, т.к. внутри ФТДИхи два канала и они прибиты гвоздями, уже 240мегабит, USB не умеет в 100% пропускной, уже 200Мегабит, а чип не сразу видит такт записи а через пол дополнительного такта: вот тебе и 100 мегабит. Дрочиться собирать из двух каналов один не стал - драйвер фтди перемашивает рандомно. Дрочь.
5. так же производитель камеры обманул: вместо 150 фпс оказалось 128 фпс, сам сенсор оказался очень тёмным на такой скорости.
Дополнительно было сделано
Т.к. камера выдаёт сырой рав-поток как в проф камерах, то его надо обрабатывать как это делают тулзы цифровой проявки такие как Adobe Light room.
Для этого запилил на верилоге свой видеопроц:
в нём и MIPI приёмник, и свой i2c контроллер и такие страшные слова как баланс белого, гамма-коррекция, коррекция дин. диапазона, шумодав (где сортируется за 0 тактов в медианном фильтре), ресайз, усиление и коррекция цветов.
схемка для пущего устрашения (to NN это выход в фтди, и спойлер темы будущей статьи ;):
Итог и что получилось сделать:
Оно заработало:
слева рендеринг на ПК при помощи OpenCV,
справа отладочная консоль в формате VT100 с цветами и свистелко-перделками (реализованный аппаратно на FPGA при помощи той же логики и такой-то матери), да я люблю красиво, дорого и богато.
В первую секунду видна первичная инициализация и пуск камеры с логом адресов и значений команд записи.
Далее я ручками, посылаю текстовые команды в FPGA (лексический интерпретатор команд тоже сам сделал, тоже на логике) и настраиваю яркость и чёртову фазу сигналов, видно что после подстройки фазы обильный "розовый снег" исчезает.
После я машу перед камерой древним смартом с настроечной таблицей цветов.
косяки:
1. т.к. по скорости FTDI подвела то только 64 кадра в сек, в среднем каждый второй пропускается.
2. есть местами мусор в виде снега и цветных кластеров (показаны красными стрелочками)
3. сам модуль камеры на такой скорости оказалось лютым гавном, мутная, и шумов много т.к. ISO задран к небесам.
Использованные ресурсы чипа:
блочной BRAM памяти больше всего ушло на буфер одного кадра.Вывод:
Не делайте так! Не надо пытаться ардуино-проводками подключать такие быстрые (свыше 30 МГц и многобитные интерфейсы). Именно поэтому профессионалы порой недолюбливают ардуинщиков за такие дикие сопли с ардуино-проводками.
А отладить камеру и ip-корку (аппаратная либа) видеопроца я всё-таки смог. Благо сам алгоритм разработал и верифицировал формально и математически, а на FPGA только проверил, что оно в принципе работает и понял что надо копать в сторону само синхронных синфазных LVDS гигабитных интерфейсов без тактовой и всего этого дроча с шумами.
На этом всё, вот в завершение фотка с топологией чипа (светлосиним заюзанные аппаратные ячейки), зачем? незнай, просто красивый город как из сим-сити вышел.
Подробнее
test2,Science & Technology,,
Etí 99¿S 097.H » Q i Nj 2610 \¿ZH¿ П оЛэ 1¿T0 vic/vco Q sjCy** O V pteiHi l'en™ „ Чгт? гетэихл BQ_ E ir CDUV 6230 □Ce9Zö COJS 39Ztí nnpn ÍÍN'* ФЮО.Ф Оч-к- >o ¿дакоэевюо Ю NI ÜIIfiBl laN093d ■мдидрри|м 88И1ЯВ^^1В шёШШЁКШВВЯИшё пимя Шиши! шш ШИИдиДИШ^НИ МйШЗ^ДДМшДЯ еашшшвв^ташШШ1шстюШШ8ШШШШ1! йЯДИ^И^ИВдИД 11М^ИИмшИВмИЯ ШШ^Ш11111111111 11!И1И111ШВИ|1^Я^М I ИИИИ1М^И111ви и—ИД^^И^ИН1 ИИ^^^^Ми^аИ! ЯИИИВшИИИИИ1 1ШЯШШИЯм1^М«1НШД .nTítff ГТГ Шийш. HjTTWTkP Шшщ ШИМИМШ iMlfm Жiüil 1т.1пИШ1ж »f ИтШ 1Жш1Ш1ЙЙ Шттат|У Ш1ЧГ£т» i гп г Hi КяотжШет.Штам* НИ ffpliil iinHl ■■МИШИ IlSiS ^■¡¡ИмИ ■НишшШшгШтпГ ВИМяю iiiMlill йяШЩ иЩпса ЗзШи* юшв ¡Mill ЩШ ■■¡В мир ж Ш1й1 v?prvrvr мпнн Т¥кШ1Ш ИННИН CED ШШЖхШВчЩЩ I тшш Нш Шш ивиишамш мни Егегцм ШЯШШЁШЯШЁ i ет ре ■ПН ■ aMPlilii HWttwi SUNW WWtItTitii'H'tt ШШШЁЯ^ШШ ft* И Ии ^■^щнн МКаШННВмШЗЭ CED 1Еэ CED С lljliijí ВИЦ=ЦЩ1тайашк ПИшВ * И Н $а ^7 \¿v z¿6 . ш OSd ¿90 89d сбИЬ?’ ii j^vd -j, e9ä 40 v9d nan i шэ cb . cm ^ Да—мл fejgtear—14-1 \(m Ф % (Щ l#j| . rrfUM+i i ■ ■ i iTH:'T«?rv?fc ЦД r.I. !Ttf >тпм1Г1>И wrirr'f гЯтЯИтШ Щ RMmffi мШ*У Ф*$ 0000 ||BB шдуА кн мшшпшт НИН & ■ В ушшн ШтгаЖ>#иЦ 1 ЕШйтШ ^пттйшгя ГиНштае SJWTTTfrWI НННйа nass 9и^шрщт i v6iä]№ ]ДД I 96iäM zi I 96Ш|£ -I I еоюШ е 9DI ¿ola > ^ОЮ. в11Л ^ у ттп!?-- L.UM «И— ¡шшшшшша (tuf ЯННВ [ГОНГ* В ir»fi ИД й| п 1 W iN3iioia^ н J;;» ftffj ИИт>п I ■ М ПИ1 rTMTlWIfW ili И ши LLiTTTl' • З^Шшп Aldv Li 1 VCO’OD a вш ПЗщ ÉLflt ean KG *__> Z.V 831 99 Ю ВИНКИ Miwwi Г) с ншн , ННш ЮйИИИШЮДЙшгаВ ил—>ея т" ^ ** w3v3dS ¿ею • 89 Ю ■1 Л» 801 ПТЕП ЕЭСш 6V2ä U¡ I; ú », (t L (í й (i u ’tfrflt! J. ü4c»ffOiil jtjrimmila тЗшяктид HiWimrift fi nwIïsisySjï? шни н MIW штШтШш |ШНШЯ Вщ|Ш!!тНштИ ИЛИДИДЩ ! Í«33 T rnН1И ВИ гм I « It I}\Ш иШ WfM НВ км Ш ««»«пнях# мпляхявп гм» гг» швшш МВ Цл fjTf I\ft LfrfWl Si ЩШШ mm »lirfb (г >!#►* S и «а ншшм mm РЯЯ IM 1ЙДШ iKn»>TrHffm> Mtit НтеГиНито ГНЯВкППП PíTr*mr,'f i ни m НЖШ S3 îulfnîHj’ ÍLiíJI IÍIm! iMim ii knjlmf ИИ mm ЮЯаЙЯИ iwmwwj ШиЯШяМ IHHliilBH ■toMfWjN H ir»,ffTf.ff ^rfíTlí» гТгттзт?гг n KimffnHvi Ш Я1Я!11!НДЭДМ»ЯМ1 ШШ) Гг ITT ri Irr тзЯт i tires* Ц11 fl i MWÉi MÈbbh#Si |^М51№нм»>« ЙНИЙ» 1И»шНтшНЗч R№ H м» ■ ВНВ i ttuOSS ш ггт >Ш IН ШИ 11Ш ! Ill •««м;-- м>швдш1у- . . Л _ b<M»müi [э|*еЕЕП Л! g ши-oie \zL—JÊM В|НЩЩЩННВЩЩ^НР^^ □ о о о оооооооооооооо о о |6НВМЙЙЙШЙ # I Щ ■ ■ ■ Ifflltffii шжтштт иш и> ^ Шй ит
a ül wA -'"“AÆ^D\GVVtW\ V«^f«fi f’731 L«T \ш «=.. I« « ; «> «%» ^ \
п шшш. ШШшшШШШт ШШштШШт ИИИИ^^^ш ЯЙ1ВШрмШЯЯВУШШ1М titffn« jmi Wäwi I ИМWB*w ШншшаШШшшН m щ m шщ SSd frQd . l¿d Z¿ü ¿90 €90 890 V9d 9Ы01 zzzal b¿za¡ mmi». ^¡м1ашймвя8йшШ|1Ушшшш ИИДНшИ1Я1ЦИ1Н1НЙМЯИ8МШ1 теШ|ЯШшамаиШиШ^ш ышишщямшша iilfleillplilll шШШШШМЁШШ ИМмШМ мин ни WWífi К »ои* </>окл IgBQQG евп 22 C9Z0 Я Ц 2920 со со о. и) ijîî'H; 8QK03C9100 fr6ldJ 96 Idl S6idl 8G Idt ¿6 id eoiol 931 ímm 8ШЯ ¿1131 41+jti -nQOlOT ®oj Æ3I 603 ®iN3ii9ia^ MI ИИИЯпИ111И1п1 ВВн|ПИ ияюишш^д Шш H Шшшшвт НИ мин 1 @0g@ 1Ж EBililöö la*09Zö 6t2d ZbZO* ¿S13 ign rowff знвнмш ШШЛ и нн H иЦил tWjfwyri Hm! ИН ,1 ’ ШШШВДжМШ ■ ■ ■ iWSSMäiraiäfSn И ШИ№таЮ»1ШИИВ*И ИдвШЗ 1$10ГО1Я¥ОТ»8Щ|г8я8о1' №Н№ю1ш1Пш№1ап] ♦МИНИН I □ дд^]|Д||уд^ЦдНдцЯтЯ шрШ ШшШж НийКи ш шшш №fira yfltff ■ ЯМвЦ И íwfw \шьт9тт íHwWihhW ЭЙИуПзЯЯлЙ . в ШшйШ R (щ Ù?1frïïïï^ÿ М М * \ * \ * & 11* fj t* л? í* $ * ®т ® ajH к 1 ззр 4\¡ ш lt3HR(í WT ж ЗгЧ •
Utilization Resource Utilization LUT 4855 LUTRAM 22 FF 10275 BRAM 45.50 10 44 BUFG 3 PLL 1 Post-Synthesis I Post-Implementation Available Graph I Table Utilization % 20800 23.34 9600 0.23 41600 24.70 50 91.00 210 20.95 32 9.38 5 20.00
□□□□ □□□□□□□ □ □ ■■■■И” ■ ■■ В ■ В ■ •■!■ » » °|BD В ■ ■ IB BIB ■» в в ■ ■ oionna ’ini в в a '■ВВВ зшинввва ■■ни17 “ ■ ■ «в ■■■ion вив “ ■ ■ ° *ня * • валяв■в|в а ■ ав*» ВИЕВ»я вея > » ■ Ш ■авяв9 a • ■ В * В ■ В* В ■■■■в в■ЯШ "В ■ ■ "В■ вввавв <■ ■ ■ в в ■ ваш я яви ■■■■ ■ ВШЯ «Я в ■■■■в * "ВвЛЛВ ”*ВВВВ ■ вне» ■BBBflB ВВВОВНВ ■■ааив Я ■ " " ОПВВВВВВВВЯН в■ ■ >вв■ яввв "BDB “ ВВВНЛ в ° • • О Я я о ярцц • НИ • ■ a ля » » л**«» «я ИЯ ■ ■■»Я ■ • ввв 1 ■■ ■ ■ • • Я В ■■■*■ “ЯВВИИИНН ЯНН1Г*""Я»®вННВВ■ Чааавв ° в в в»явд■в щ ■ "дввддввш ва пт 111 и 11 и 111 тп ODD ODD DDG DDPDDD1111 mn qDDD DDP 111 ii 11 ii 111PDD ODD GGP DDP PPPPPP GDGD
Карательная электроника,не делайте так,электроника,разработка железа,DIY,geek porn,geek,Прикольные гаджеты. Научный, инженерный и айтишный юмор,сделал сам,нарисовал сам, сфоткал сам, написал сам, придумал сам, перевел сам,FPGA,Mirn (фотограф)
Они ещё рекламировались как первые производители майнинговых чипов, что логично т.к. надо быстрее намайнить пока размер блока не вырос и ждать долгую адаптацию под "чистый холст" бессмыслено. Но это возможно опять таки упрощение маркетологов когда сгребают под "одну гребёнку" термина разные сущности .
поэтому добавлю тут:
1. Камера завелась на 128 фпс а запас по частотке до 400 у моего дизайна (полный pipeline на регистрах), просто каналу в пк не хватает и часть кадров не приходит в пк.
2. Экранирование не поможет от конских резюков на половине контактов - я конечно старшие биты, сигналы управления и клоки завёл на скоростные версии разъёмов, но младшие заметно дребезжат и скорости нарастания фронтов маловато, не треугольники там бегают но осциллограмма что вот вот "глаз закроется"
2 можно сделать один корпус для всех задейственных плат, с перегородками для плат друг от друга, чтоб через перегородки только кабель проходи
Можно их зашунтировать что бы не мешали если первое.
2. сигналы можно гнать по шлейфу с чередованием с землей - тогда все куда проще получается
3. судя по проблемам есть подозрение на гонки фронтов сигналов - те в идеале данные выставлять на спад а на фронт строба считывать (или наоброт)
4. правильно делать свою макетку с учетом задачи, тк готовые чаще всего универсальные до невозможности использования.
1. да прекрасно ловят помехи, причём большую часть помех от самих себя и соседних, особенно если есть импульсный источник питания который спроектирован криво (привет китайским модулям с али). Поэтому экранировать от внешней среды обычно мало помогает.
2. я не нашёл доступный шлейф или разъёмы под чередование земли под PLD12 (6х2 рядный разъём).
3. на видео сразу после включения я даю команду сенсору камеры по сдвигу фронта сигнала, но исправляются не до конца (из-за резюков после разъёме производителя fpga платы).
4. я знал на что иду, видеопроц был отлажен на другой плате уже спроектированной по феншую, и это был челендж заработает или нет на таких соплях, благо захотелось пощупать Xilinx и в руки их плата попала, как раз в притык, но подходящая для видеопотока ...
надо понимать, что резисторы на выходе могут служить не только во вред - те ухудшая фронт до невозможности работы
но и в пользу - те ослаблять звон для несогласованных линий передачи
Кста во взрослых проектах на камеру стараются не прокидывать клоки между платами. В тех проектах о которых я знаю видео с камеры в раве подавалось на fpga через sdio. На lx45t(вроде) был аналоговый модуль который это дело принимал и синхронил. Ну и я вообще удивлен что у тебя lvds завелся, там же согласование терминаторами надо делать. Ну и производитель не обманул 150гц оно держит, а то что с частотой кажра падает время экспозиции это давняя засада.
Мой совет запаяй провода хотя бы, самая плохая пайка лучше вставленных проводков. Ну и хранить целый кадр в браме не fpga way сорян)
а разве на sdio нет клоков? или про какой sdio речь?
Ну и производитель не обманул 150гц оно держит
я не смог настроить столько, перебирал все настройки и вышло 127.5 фпс только
Мой совет запаяй провода хотя бы
я хотел пощупать Xilinx и не на моргалке светодиода а на реальной комплексной задаче, пощупал, эксплотировать ЭТО я не намерен ибо ясно было что дичь с самого начала.
https://www.xilinx.com/support/documentation-navigation/design-hubs/dh0012-vivado-high-level-synthesis-hub.html
Очень любопытно что в итоге получилось. Насколько я понимаю это сделано потому что прогеров особо нету и они хотят снизить порог вхождения, но и удобство разработки высокоуровневой логики выше наверное.
Сначала, по привычке, пролистал статью до первой схемы, но потом возникло столько вопросов, что решил их написать:
0. Постановка задачи в части максимального кол-ва кадров в секунду. Во имя науки или под какую-то практическую цель.
1. >>Захватить видеопоток с камеры и послать на ПК как есть, без сжатия
При этом в схеме мы видим сначала Downscale, а потом Crop. Это ли не сжатие? Или смысл здесь в отсечении?
2. I2C в обратной связи. Учитывая, что при скоростном режиме этот протокол выдает только 400 кбит/с, разве нон не убивает тебе всю скорость основного канала? При этом он еще чувствителен к емкости, но про провода тебе только ленивый не написал
3. Зачем преобразование RGB->YUV и обратно? Цветокоррекцию и подавление шума нельзя сделать в модели YUV?
4.Из-за чего возникает необходимость в Range Corrector? И что он собственно делает- забивает нулями первые 50 адресов?
Писал коммент долго, так как параллельно несколько раз перечитывал пост. Так что за повторы в вопросах простите-извините.
Будет интересно следить за твоим прогрессом.
я хотел пощупать Xilinx и не на моргалке светодиода а на реальной комплексной задаче, пощупал, последнее что я делал это видеопроц и нейропроц. вот оттуда взял что попроще
1. При этом в схеме мы видим сначала Downscale, а потом Crop. Это ли не сжатие? Или смысл здесь в отсечении? смысл в том чтоб сделать ровно 224х224 разрешение для нейросетки. переделывать не стал т.к. задача не требовала того
2. I2c только для команд настройки камеры, я не стал раздувать статью и пихать инфу о всей переферии, про осциллограф реализованный в плис, про то что есть отладочная консоль из фпга в комп через уарт-усб тоже написал вскользь. И что ещё есть парсер команд из уарта-усб в пары - регистр, значение и отправка их по i2c для конфигурирования камеры через уарт консоль пк.
3. Зачем преобразование RGB->YUV и обратно? Цветокоррекцию и подавление шума нельзя сделать в модели YUV?
при дебаеризации проще всего получить RGB но R и B компоненты очень слабенькие, их надо усиливать и проще всего это сделать в YUV
4.Из-за чего возникает необходимость в Range Corrector? И что он собственно делает- забивает нулями первые 50 адресов?
из за гамма функции чёрный цвет нарастает слишком быстро и чёрных пикселей нет если не закрыть чёрной тряпкой объектив вообще, все тёмное места выглядят серыми, это жутко не естественно, поэтому диапазон 50-255 я растягиваю до 0-255
по пункту 4: из за того что я усиливал красный и синий канал - они оказались ОЧЕНЬ шумными и пришлось влепить шумодав (5х5 окно, и выбор из середины медианы в эти 25 пикселей), и лучше всего шумодав работает в цветоразностных каналах
Несколько вопросов:
1)Сколько ты уже занимаешся разработкой под FPGA?
2)Все блоки сам писал ?
3)Какой алгоритм балансабелого ?
4)Как делаеш цветокорекцию?
5)Почему именно эта матрица?
6)Какова цель конечного продукта ?
2. Все сам с нуля на верилоге
3. Статичная подстройка коэф уселения без автоматики
4. Домножаю на матрицу - классика
5. Что было от другого проекта под рукой потому что п 6
6. Хотел пощупать xilinx и нагрузить его реальной живой и в меру влазящий в артик 7 задачей
Через такую PLDшку без проводов мы гиг в принципе прокачивали. Можешь кстати, пока, взять плоский ленточный кабель и прямо на плате поочередной подпаяй к земле. В принципе, можно попробовать просто максимально укоротить проводки и припаять их прямо к плате. RLC всей этой связки заметно так уменьшится, особенно после выкидывания разъема. Опять же, кростолки несравнимо уменьшатся. Собственно, ты это и написал.
А ты вообще смотрел какой формы сигналы у тебя реально доходят до плисины? Может сам модуль мудит? Или до него совсем плохое питание доходит.
А почему именно ЮСБ? Вроде на этой же плате Езернет есть?
А ты вообще смотрел какой формы сигналы у тебя реально доходят до плисины? вроде всё в норме.
Доводить до ума я уже буду с другой камерой и плис. Я уже выбрал 800фпсную камеру на LVDS протоколе и с FMC коннектором с 10 гигабитным пропусканием.
Это был скорее угар и трешь, вызов: можно ли запустить в принципе на таких соплях или нет.
ПыСы.
А 800 фпс это на каком разрешении?
а сенсор PYTHON-1300
Ты выше написал что на верилоге пишешь. А как он тебе в сравнение с vhdl?
OpenCV на чём запустил -C++, Python, etc?
OpenCV на плюсах: на C++ можно писать RTL код и переносить в верилог "как есть", поправив только синтаксис, = заменяется на неблокирующее присваивание и прочие мелочи типа разницы в оформлении бит и констант. При этом можно эмулировать RTL код потактно в реалтайме видя его результат на лету. Асинхронные и самосинхронные схемы они (плюсы) уже не могут. Да и скоростью плюсов мелкая, всего до десяти миллиардов умножений в секунду при потактной точности. (да я переизобрёл верилятор)