Карательная электроника: Как нельзя разрабатывать интерфейс скоростной видеокамеры. / geek porn :: Mirn (фотограф) :: FPGA :: сделал сам (нарисовал сам, сфоткал сам, написал сам, придумал сам, перевел сам) :: DIY :: разработка железа :: электроника :: не делайте так :: Карательная электроника :: geek (Прикольные гаджеты. Научный, инженерный и айтишный юмор)

Карательная электроника не делайте так электроника разработка железа DIY geek porn geek сделал сам FPGA Mirn (фотограф) 

Карательная электроника: Как нельзя разрабатывать интерфейс скоростной видеокамеры.

Кратко в статье будет:

Что же не так в первой же картинке: хоть и выглядит вполне аккуратно, или сказ о наводках и СВЧ чёрной цифровой магии и почему так делать нельзя.

Немного об отладочной плате FPGA и особенностях разработки.

О модуле камеры, её сенсоре, MIPI интерфейсе и как его испортить.

Как сделать связь с ПК в сотни мегабит, менее 100мбит/сек, и как в том числе и тут словить кару.


Внимание: в статье несколько хайрез фоток и видео, много тех терминов и лютого DIY, возможен взрыв мозга! 


Начнём с пациента:

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. Белая плата - мозги: FPGA плата на базе Artix-7 от Xilinx, подключена к ПК по micro USB для прошивки и отладочных логов

2. Мини плата слева сверху - FTDI, обещала "скоростную" связь с компом...

3. Синяя плата справа сверху - сам модуль скоростной камеры с пимпкой "объектива" (извиняюсь за ругательство).

4. Куча проводков от ардуины.


Требовалось:

Захватить видеопоток с камеры и послать на ПК как есть, без сжатия, при этом достичь максимального количества кадров в секунду.


Что за зверь, FPGA плата?


a ül
wA	-'"“AÆ^D\GVVtW\
							
V«^f«fi f’731			L«T \ш	«=.. I«	« ; «> «%» ^ \,Карательная электроника,не делайте так,электроника,разработка железа,DIY,geek porn,geek,Прикольные гаджеты. Научный, инженерный и  айтишный юмор,сделал сам,нарисовал сам, сфоткал сам, написал сам, придумал сам,


Это процессор или миникомп как "малинка"? 

Нет, но она как процессор может исполнять алгоритм, считать и управлять чем-нибудь. 

По сути FPGA это набор блоков памяти, отдельных битов памяти и простых, проще сложения, логических элементов с управляемыми связями. А связями всего этого набора можно произвольно управлять софтом по своему желанию.


Стоп, а как оно считает, исполняет алгоритм и управляет? 

А тем что специальный софт разбивает алгоритм, написанный на си подобном языке, на отдельные блоки:
массивы размещает в большие блоки памяти, 

переменные разбивает на биты и размещает в отдельные аппаратные биты, 

вычисления, даже такие простые как инкремент разбивает на сотни и тысячи логических функций, для сложных использует готовые аппаратные блоки. 

И потом всё это соединяет вполне реальными физическими связями. И работает всё это на частотах в несколько сотен мегагерц. 

По сути алгоритм превращается в реальную и очень комплексную электрическую схему. Это настолько низкоуровневое программирование, что даже "ниже" не только ассемблера, но и машинных кодов и чёрт побери перфокарт!


100-200 Мгц медленно? и зачем такой дрочь нужен если есть обычная малинка или одноплатные ПК х86 на которых винда крутится? 

Нет, это не медленно и есть задачи, где не возможно обойтись без FPGA физически.


Первая фишка: в том что это не проц, который исполняет алгоритм шаг за шагом. Это куча связанного "железа" которая исполняет весь алгоритм одновременно! Тотальное 100% распараллеливание алгоритма, даже если в нём несколько сотен тысяч строк кода! 

Это даёт возможность такой магии, как сортировка массива за ноль тактов (например, в фильтре шума).

А ещё даёт возможность самому проектировать эмуляторы старых консолей и они будут работать в точности, нет, ТАК В ТАК, так-же как и их аппаратные дедушки, даже даёт возможность сэмулировать баги, и разные аппаратные нестабильности например в звуке чип-тюна ZX-Spectrum. 

А ещё это и чудовищное быстродействие: делать расчёты на 66 Мгц быстрее чем Core i7 на 3700 МГц? запросто! Именно поэтому ASIC (FPGA с предзаказанными, не изменяемыми связями) так полюбились всеми майнерами. 


Вторая принципиально непобедимая фишка: время реакции - раз всё работает параллельно и можно реагировать с нереальной скоростью, в десятки а порой единицы наносекунд. Робототехника, автопрома и оружейка - без FPGA и ASIC (захардкоженный FPGA) никак.


Третья фишка: можно реализовать любую переферию, любой интерфейс самому при помощи исходного кода, и если ты написал сам всё с нуля, включая интерфейсы, то это 100% переносимо, ну не мечта ли? Но с большими оговорками, и можно "отстрелить себе ногу", что я и сделал в интерфейсе камеры.


Модуль камеры:

Карательная электроника,не делайте так,электроника,разработка железа,DIY,geek porn,geek,Прикольные гаджеты. Научный, инженерный и  айтишный юмор,сделал сам,нарисовал сам, сфоткал сам, написал сам, придумал сам, перевел сам,FPGA,Mirn (фотограф)


Это плата модуля камеры: сверху чёрный цилиндр объектива, под ним чип сенсора который собственно и видит со всей логикой, который установлен на плате, два стабилизатора питания и разъём 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. Фейл: Взаимные шумы: так как лежит на первой картинке (плата связи рядом с платой камеры) не работает! В линке с ПК проскакивают лишние байты или он теряет байты. 

Адский Костыль:  

приходится буквально на пару сантиметров отгибать в сторону камеру вот так:

п
шшш.
ШШшшШШШт
ШШштШШт
ИИИИ^^^ш
ЯЙ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
шШШШШМЁШШ
ИМмШМ
мин
ни

Чёртов бубновый шаманизм!

3. Мини Фейл: Ардуино проводки - они норовят отскачить при любом неосторожном движении любой платы! Это, просто, очень и очень не удобно, надо ОЧЕНЬ аккуратно всё двигать. 

Костыль: расковырял иголкой разъём чтоб лучше держалось ... помогло мало но вроде помогло.

4. Связь с ПК при помощи модуля FTDI2232H оказалось не настолько крутой как её рекламировала фирма.

Фейл: скорость вместо 480 мегабит оказалась всего в 100 мегабит, т.к. внутри ФТДИхи два канала и они прибиты гвоздями, уже 240мегабит, USB не умеет в 100% пропускной, уже 200Мегабит, а чип не сразу видит такт записи а через пол дополнительного такта: вот тебе и 100 мегабит. Дрочиться собирать из двух каналов один не стал - драйвер фтди перемашивает рандомно. Дрочь.

5. так же производитель камеры обманул: вместо 150 фпс оказалось 128 фпс, сам сенсор оказался очень тёмным на такой скорости.


Дополнительно было сделано

Т.к. камера выдаёт сырой рав-поток как в проф камерах, то его надо обрабатывать как это делают тулзы цифровой проявки такие как Adobe Light room.

Для этого запилил на верилоге свой видеопроц:

в нём и MIPI приёмник, и свой i2c контроллер и такие страшные слова как баланс белого, гамма-коррекция, коррекция дин. диапазона, шумодав (где сортируется за 0 тактов в медианном фильтре), ресайз, усиление и коррекция цветов.

схемка для пущего устрашения (to NN это выход в фтди, и спойлер темы будущей статьи ;):

Карательная электроника,не делайте так,электроника,разработка железа,DIY,geek porn,geek,Прикольные гаджеты. Научный, инженерный и  айтишный юмор,сделал сам,нарисовал сам, сфоткал сам, написал сам, придумал сам, перевел сам,FPGA,Mirn (фотограф)



Итог и что получилось сделать:

Оно заработало:


слева рендеринг на ПК при помощи OpenCV, 

справа отладочная консоль в формате VT100 с цветами и свистелко-перделками (реализованный аппаратно на FPGA при помощи той же логики и такой-то матери), да я люблю красиво, дорого и богато.


В первую секунду видна первичная инициализация и пуск камеры с логом адресов и значений команд записи.

Далее я ручками, посылаю текстовые команды в FPGA (лексический интерпретатор команд тоже сам сделал, тоже на логике) и настраиваю яркость и чёртову фазу сигналов, видно что после подстройки фазы обильный "розовый снег" исчезает.

После я машу перед камерой древним смартом с настроечной таблицей цветов.


косяки: 

1. т.к. по скорости FTDI подвела то только 64 кадра в сек, в среднем каждый второй пропускается.

2. есть местами мусор в виде снега и цветных кластеров (показаны красными стрелочками)

Карательная электроника,не делайте так,электроника,разработка железа,DIY,geek porn,geek,Прикольные гаджеты. Научный, инженерный и  айтишный юмор,сделал сам,нарисовал сам, сфоткал сам, написал сам, придумал сам, перевел сам,FPGA,Mirn (фотограф)

3. сам модуль камеры на такой скорости оказалось лютым гавном, мутная, и шумов много т.к. ISO задран к небесам.


Использованные ресурсы чипа:

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,Карательная электроника,не делайте

блочной BRAM памяти больше всего ушло на буфер одного кадра.
Ушло примерно 200 часов моего времени на разработку, из них 150 на видео проц (raw --> rgb).


Вывод: 

Не делайте так! Не надо пытаться ардуино-проводками подключать такие быстрые (свыше 30 МГц и многобитные интерфейсы). Именно поэтому профессионалы порой недолюбливают ардуинщиков за такие дикие сопли с ардуино-проводками. 


А отладить камеру и ip-корку (аппаратная либа) видеопроца я всё-таки смог. Благо сам алгоритм разработал и верифицировал формально и математически, а на FPGA только проверил, что оно в принципе работает и понял что надо копать в сторону само синхронных синфазных LVDS гигабитных интерфейсов без тактовой и всего этого дроча с шумами.


На этом всё, вот в завершение фотка с топологией чипа (светлосиним заюзанные аппаратные ячейки), зачем? незнай, просто красивый город как из сим-сити вышел.

□□□□ □□□□□□□ □ □
■■■■И”
■ ■■
В ■ В ■	•■!■ » » °|BD В ■ ■ IB BIB ■»
в в ■ ■ oionna ’ini в в	a
'■ВВВ зшинввва ■■ни17 “ ■ ■ «в ■■■ion вив “ ■ ■ ° *ня *	• валяв■в|в а ■ ав*»
	ВИЕВ»я
	вея > »
■ Ш	■авяв9
a •	■ В *
В	■ В* В
■■■■в в■ЯШ "В ■ ■ "В■ вввавв <■ ■ ■ в в ■ ваш я яви ■■■■ ■ ВШЯ «Я в





Подробнее
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 (фотограф)
Еще на тему
Развернуть
ASIC никакого отношения к FPGA не имеет, это чисты холст, на котором можно размещать произвольное количество элементов в пределах площади кристалла, в FPGA же количество ресурсов ограничены конкретной моделью. ASIC с законченным функционалом выпускают на фабриках, а функционал в FPGA записывается на столе.
А видел сервисы заказа асиков от альтеры и прочих FPGA производителей без переделки топологий и адаптаций базовых ячеек и паттернов. Как понимаю они как в технологии БМК просто заменяют слой с перестраиваемыми связями на одноразовую металлизацию.
Они ещё рекламировались как первые производители майнинговых чипов, что логично т.к. надо быстрее намайнить пока размер блока не вырос и ждать долгую адаптацию под "чистый холст" бессмыслено. Но это возможно опять таки упрощение маркетологов когда сгребают под "одну гребёнку" термина разные сущности .
Mirn Mirn 20.10.202019:08 ответить ссылка 1.7
Сначала дизайн делают для FPGA на верилоге/VHDL, затем после всяких верификаций код отправляется на фабрику для синтеза в ASIC.
ph для школьников (как я). надо плату с sma или lvds. за проект зачёт
nanoo nanoo 20.10.202019:06 ответить ссылка 1.4
Попробуй экранировать кабеля, платы друг от друга, платы друг от друга. и заменить провода на одножильные медные. По идеи надо частоту кадров до 120 в секунду довести и чтоб изображения не смазаны был - хорошую матрицу
H0NT0R H0NT0R 20.10.202019:25 ответить ссылка 1.1
так, реактор успешно проигнорил обе правки, и отключил возможность правки статьи,
поэтому добавлю тут:
1. Камера завелась на 128 фпс а запас по частотке до 400 у моего дизайна (полный pipeline на регистрах), просто каналу в пк не хватает и часть кадров не приходит в пк.
2. Экранирование не поможет от конских резюков на половине контактов - я конечно старшие биты, сигналы управления и клоки завёл на скоростные версии разъёмов, но младшие заметно дребезжат и скорости нарастания фронтов маловато, не треугольники там бегают но осциллограмма что вот вот "глаз закроется"
Mirn Mirn 20.10.202019:30 ответить ссылка 1.0
1 как я понял плата работает на usb 2.0, и не поддерживает 3.0. можно включить минимально сжатие на 20-30 %
2 можно сделать один корпус для всех задейственных плат, с перегородками для плат друг от друга, чтоб через перегородки только кабель проходи
H0NT0R H0NT0R 20.10.202019:47 ответить ссылка 1.1
Да, в нижнем комментарии правильно писали, что лучше провода с чередованием землей делать
H0NT0R H0NT0R 20.10.202019:51 ответить ссылка 1.1
и еще длина провода микроЮСБ-ЮСБ какая? чем короче, тем лучше
H0NT0R H0NT0R 20.10.202019:55 ответить ссылка 1.1
в компе в какой юсб подключен? которая на материнке, или через еще одну плату юсб?
H0NT0R H0NT0R 20.10.202020:01 ответить ссылка 1.1
два провода, метр и два метра, напрямую к материнке, оба достаточно дорогих за 1000 йен каждый, в карбоновой оплётке, качественные и если в моем городе где-нибудь в переходе усб кабеля не брать, то они не подводят.
Mirn Mirn 20.10.202020:22 ответить ссылка 0.9
А резисторы на плате видны? Или они там прямо на фпга?
Можно их зашунтировать что бы не мешали если первое.
Каефный пост, сам железячник и я просто не смог пройти стороной. Жду продолжения
1. нельзя такие частоты гнать по таким проводам - они тупо очень длинные и прекрасно ловят помехи.
2. сигналы можно гнать по шлейфу с чередованием с землей - тогда все куда проще получается
3. судя по проблемам есть подозрение на гонки фронтов сигналов - те в идеале данные выставлять на спад а на фронт строба считывать (или наоброт)
4. правильно делать свою макетку с учетом задачи, тк готовые чаще всего универсальные до невозможности использования.
Nagisa Nagisa 20.10.202019:34 ответить ссылка 2.8
во всём полностью согласен. осталось только добавить:
1. да прекрасно ловят помехи, причём большую часть помех от самих себя и соседних, особенно если есть импульсный источник питания который спроектирован криво (привет китайским модулям с али). Поэтому экранировать от внешней среды обычно мало помогает.
2. я не нашёл доступный шлейф или разъёмы под чередование земли под PLD12 (6х2 рядный разъём).
3. на видео сразу после включения я даю команду сенсору камеры по сдвигу фронта сигнала, но исправляются не до конца (из-за резюков после разъёме производителя fpga платы).
4. я знал на что иду, видеопроц был отлажен на другой плате уже спроектированной по феншую, и это был челендж заработает или нет на таких соплях, благо захотелось пощупать Xilinx и в руки их плата попала, как раз в притык, но подходящая для видеопотока ...
Mirn Mirn 20.10.202019:49 ответить ссылка 1.0
резюки можно поменять - делов-то

надо понимать, что резисторы на выходе могут служить не только во вред - те ухудшая фронт до невозможности работы
но и в пользу - те ослаблять звон для несогласованных линий передачи
Nagisa Nagisa 21.10.202014:28 ответить ссылка 0.9
Эх молодость, эх fpga...
Кста во взрослых проектах на камеру стараются не прокидывать клоки между платами. В тех проектах о которых я знаю видео с камеры в раве подавалось на fpga через sdio. На lx45t(вроде) был аналоговый модуль который это дело принимал и синхронил. Ну и я вообще удивлен что у тебя lvds завелся, там же согласование терминаторами надо делать. Ну и производитель не обманул 150гц оно держит, а то что с частотой кажра падает время экспозиции это давняя засада.
Мой совет запаяй провода хотя бы, самая плохая пайка лучше вставленных проводков. Ну и хранить целый кадр в браме не fpga way сорян)
Algor Algor 20.10.202019:37 ответить ссылка 1.4
"видео с камеры в раве подавалось на fpga через sdio"
а разве на sdio нет клоков? или про какой sdio речь?

Ну и производитель не обманул 150гц оно держит
я не смог настроить столько, перебирал все настройки и вышло 127.5 фпс только

Мой совет запаяй провода хотя бы
я хотел пощупать Xilinx и не на моргалке светодиода а на реальной комплексной задаче, пощупал, эксплотировать ЭТО я не намерен ибо ясно было что дичь с самого начала.
Mirn Mirn 20.10.202020:09 ответить ссылка 0.9
Сорян SDI, я поплыл в конце рабочего дня, там коаксиал хотя бы. Прочитал жопой, подумал что сенсор получается темным на 150фпс. А вроде на этом кристалле можно юзать vivado + system verilog/с, ты на чем писал? На самом деле system verilog должен сильно упрощать разработку, жаль что я ушел раньше чем на него перешли.
Algor Algor 20.10.202021:54 ответить ссылка 1.4
выражения RTL верилога можно напрямую гонять на си и плюсах, что ускоряет разработку, и даже спец тулы типа верилятора не нужны. Правда скорость симуляции очень низкая, всего до 5-10 миллиардов умножений с накоплениями в сек (по сравнению с нативным и оптимизированным си кодом который даёт 100+ Giga fma), но видеопроц я отлаживал налету с видеопотока с живой камеры. Медленно, но по сравнению с моделсимом который один кадр десятки секунд переваривает ....
Mirn Mirn 21.10.202009:14 ответить ссылка 0.9
Не, я про хай лвл разработку для fpga на си, вроде вот это
https://www.xilinx.com/support/documentation-navigation/design-hubs/dh0012-vivado-high-level-synthesis-hub.html
Очень любопытно что в итоге получилось. Насколько я понимаю это сделано потому что прогеров особо нету и они хотят снизить порог вхождения, но и удобство разработки высокоуровневой логики выше наверное.
Algor Algor 21.10.202010:00 ответить ссылка 0.3
Ну и хранить целый кадр в браме не fpga way сорян - чтоб нейросетка взлетела используется только OnChip RAM (даже DDR3 не поспевает), естественно набортной памяти МНОГО, очень МНОГО, и на сдачу уже можно впихнуть фрейм буфер целиком, когда у тебя десятки мегабайт, всегда останется несколько мегабайт на сдачу, что удобно с организацией стриминга и можно удобно сетку отлаживать разместив туда пару тестовых кадров и сравнивать вывод.
Mirn Mirn 21.10.202009:20 ответить ссылка 0.3
Спасибо, мил человек, подкинул пищи для ума.

Сначала, по привычке, пролистал статью до первой схемы, но потом возникло столько вопросов, что решил их написать:

0. Постановка задачи в части максимального кол-ва кадров в секунду. Во имя науки или под какую-то практическую цель.
1. >>Захватить видеопоток с камеры и послать на ПК как есть, без сжатия
При этом в схеме мы видим сначала Downscale, а потом Crop. Это ли не сжатие? Или смысл здесь в отсечении?
2. I2C в обратной связи. Учитывая, что при скоростном режиме этот протокол выдает только 400 кбит/с, разве нон не убивает тебе всю скорость основного канала? При этом он еще чувствителен к емкости, но про провода тебе только ленивый не написал
3. Зачем преобразование RGB->YUV и обратно? Цветокоррекцию и подавление шума нельзя сделать в модели YUV?
4.Из-за чего возникает необходимость в Range Corrector? И что он собственно делает- забивает нулями первые 50 адресов?

Писал коммент долго, так как параллельно несколько раз перечитывал пост. Так что за повторы в вопросах простите-извините.
Будет интересно следить за твоим прогрессом.
0. Постановка задачи в части максимального кол-ва кадров в секунду. Во имя науки или под какую-то практическую цель.
я хотел пощупать 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
Mirn Mirn 20.10.202020:15 ответить ссылка 1.8
по пункту 0 добавлено - я не привык отлаживать железо жалея, я хочу нагрузить по полной чтоб понять что может, естественно всё делал на FPGA вычищая чтоб не было даже мельчайшего варнинга и все тайминги сошлись, поэтому я выбрал такую цель - максимальный фреймрейт.

по пункту 4: из за того что я усиливал красный и синий канал - они оказались ОЧЕНЬ шумными и пришлось влепить шумодав (5х5 окно, и выбор из середины медианы в эти 25 пикселей), и лучше всего шумодав работает в цветоразностных каналах
Mirn Mirn 20.10.202020:20 ответить ссылка 1.8
отнесись к моему вопросу философски- что есть максимальный фреймрейт? 100? 200? Больше, чем у Васяна? Больше чем у топовых мировых камер? Все равно же должно быть какое-то численное значение, иначе как определить, что свою цель ты достиг?
мой ускоритель нейросетки держит 400 фпс, хотелось бы этой цифры достичь, но камера не даёт а уж из нейросетки вылетает вектор из 1000 значений по значению на каждый класс классификтора, передать это по усб тривиальщина
Mirn Mirn 20.10.202021:13 ответить ссылка 1.8
Круто.
Несколько вопросов:
1)Сколько ты уже занимаешся разработкой под FPGA?
2)Все блоки сам писал ?
3)Какой алгоритм балансабелого ?
4)Как делаеш цветокорекцию?
5)Почему именно эта матрица?
6)Какова цель конечного продукта ?
1. Лет 10
2. Все сам с нуля на верилоге
3. Статичная подстройка коэф уселения без автоматики
4. Домножаю на матрицу - классика
5. Что было от другого проекта под рукой потому что п 6
6. Хотел пощупать xilinx и нагрузить его реальной живой и в меру влазящий в артик 7 задачей
Mirn Mirn 20.10.202021:45 ответить ссылка 1.0
Ооо, мы в институте Xilinx программили на одном из предметов. Не помню правда уже ничего
konfuci konfuci 20.10.202022:18 ответить ссылка 1.1
Пиздуйте на Хабр!!!
xTHC xTHC 20.10.202022:42 ответить ссылка -2.6
Но но но! С чего бы! Все свои, все местные.
MapPoo MapPoo 20.10.202023:01 ответить ссылка 1.2
С проводами это конечно весело получилось.
Через такую PLDшку без проводов мы гиг в принципе прокачивали. Можешь кстати, пока, взять плоский ленточный кабель и прямо на плате поочередной подпаяй к земле. В принципе, можно попробовать просто максимально укоротить проводки и припаять их прямо к плате. RLC всей этой связки заметно так уменьшится, особенно после выкидывания разъема. Опять же, кростолки несравнимо уменьшатся. Собственно, ты это и написал.
А ты вообще смотрел какой формы сигналы у тебя реально доходят до плисины? Может сам модуль мудит? Или до него совсем плохое питание доходит.
А почему именно ЮСБ? Вроде на этой же плате Езернет есть?
MapPoo MapPoo 20.10.202022:56 ответить ссылка 1.4
Езернет на плис я ещё не поднимал, а усб и проще и наработки на пк уже были. Просто именно поэтому.

А ты вообще смотрел какой формы сигналы у тебя реально доходят до плисины? вроде всё в норме.

Доводить до ума я уже буду с другой камерой и плис. Я уже выбрал 800фпсную камеру на LVDS протоколе и с FMC коннектором с 10 гигабитным пропусканием.
Это был скорее угар и трешь, вызов: можно ли запустить в принципе на таких соплях или нет.
Mirn Mirn 21.10.202009:10 ответить ссылка 0.9
Хех. Будем следить, интересно, что будет дальше))) А FMC так вообще хорошо. Эта камера в нем будет закреплена так, что в принципе ничего больше и не нужно будет. Большой и жесткий.
ПыСы.
А 800 фпс это на каком разрешении?
MapPoo MapPoo 21.10.202018:58 ответить ссылка 0.6
VGA разрешении, но цель сделать быструю нейронку, а они обычно больше 256х256 не кушают
а сенсор PYTHON-1300
Mirn Mirn 21.10.202019:08 ответить ссылка 0.6
Крутая статья и интересно написано!
Ты выше написал что на верилоге пишешь. А как он тебе в сравнение с vhdl?
OpenCV на чём запустил -C++, Python, etc?
Den321 Den321 20.10.202023:04 ответить ссылка 1.4
vhdl не пробовал.
OpenCV на плюсах: на C++ можно писать RTL код и переносить в верилог "как есть", поправив только синтаксис, = заменяется на неблокирующее присваивание и прочие мелочи типа разницы в оформлении бит и констант. При этом можно эмулировать RTL код потактно в реалтайме видя его результат на лету. Асинхронные и самосинхронные схемы они (плюсы) уже не могут. Да и скоростью плюсов мелкая, всего до десяти миллиардов умножений в секунду при потактной точности. (да я переизобрёл верилятор)
Mirn Mirn 21.10.202009:07 ответить ссылка 1.0
А можно модуль вставить напрямую в свою кастомную плату. Частоты мизерные и плисина простенькая. Сам я псб дизайнер, так что про схемную часть я сказать много не могу, но платы я проектирую давно.
Только зарегистрированные и активированные пользователи могут добавлять комментарии.
Похожие темы

Похожие посты
Middlefinger powered by ESP8266