Мазмуну:

Zynq Image Enhancement System: 7 кадам
Zynq Image Enhancement System: 7 кадам

Video: Zynq Image Enhancement System: 7 кадам

Video: Zynq Image Enhancement System: 7 кадам
Video: Image Processing on Zynq (FPGAs) : Part 3 Design of MAC 2024, Ноябрь
Anonim
Zynq Image Enhancement System
Zynq Image Enhancement System
Zynq Image Enhancement System
Zynq Image Enhancement System

Сиз, балким, аталышынан түшүнүп турганыңыздай, бул долбоордун максаты ZYNQ ApSOCтун жардамы менен Сүрөттү жакшыртуу системасын түзүү. Тагыраак айтканда, биз туманды сүрөттөрдөн же видеодон тазалай турган системаны кургубуз келет. Бул система начар шарттарда визуалдык маалыматтарды киргизүү катары кабыл алып, сүрөттү өркүндөтүү ыкмаларын колдонуп иштетип, анан жыйынтыкты чыгарат.

Долбоор Digilent Zybo тактасында курулган жана сыналган, бирок башка ZYNQ түзмөктөрү да иштеши керек.

Биз бул долбоорду 3кө бөлөбүз:

1) INPUT = Компьютерден/Камерадан Ethernet аркылуу сүрөт киргизүү

2) PROCESS = Image иштетүү

3) OUTPUT = HDMI интерфейси аркылуу сүрөттү чыгаруу

Биз проекттин чыгуу бөлүгүнөн баштайбыз (бул бизге жолду оңдоонун жакшыраак мүмкүнчүлүктөрүн берет) киргизүү менен улантып, кайра иштетүү бөлүгү менен аяктайт.

1 -кадам: материалдар

Материалдар
Материалдар

Бул долбоорду аягына чыгаруу үчүн сизге керек болот:

ЖАБДУУ

- HDMI жана Ethernet менен каалаган ZYNQ Board иштеши керек / Мен Digilent Zybo колдонуп жатам

- USB Aдан micro B USB кабелине чейин

- HDMI кабели

- Ethernet кабели

- HDMI киргизүү менен көрсөтүү

ПРОГРАММА

- Xilinx Vivado

- Xilinx SDK

2 -кадам: ЧЫГУУ - VGA Controller 1 -бөлүк

ЧЫГУУ - VGA контролери 1 -бөлүк
ЧЫГУУ - VGA контролери 1 -бөлүк

Биз визуалдык маалыматыбызды борттогу HDMI портунан чыгарабыз. HDMI порту ZYNQнын PL (Programmable Logic = FPGA) тарабына туташкан жана ал үчүн VHDLде контроллерди иштеп чыгышыбыз керек болот. Эгерде сиз VGA контроллерин ойлоп тапкан болсоңуз, анда бул абдан окшош болот. HDMI жана VGA убактысы чындыгында бирдей, чындыгында сиз HDMI контроллерин алуу үчүн учурдагы VGA контроллерин түзө аласыз.

Чынында эмне болуп жатканын жакшыраак түшүнүү үчүн, биз биринчи кезекте VGA контроллерин иштеп чыгабыз

Биз 1920x1080 чечилишинде көрсөтүүнү каалайбыз.

VGA контроллери пикселдик маалыматтарды (RGB форматында) ырааттуу түрдө, пиксел менен пикселди дисплейге берүү үчүн жооптуу. 1920x1080 өлчөмүндөгү чыныгы дисплей аянтынын сыртында дагы кээ бир "чек ара" жерлери бар, тактап айтканда: алдыңкы подъезд, арткы подъезд жана трасс. Бул аймактардын пикселдеринин өлчөмү стандарттык жана ар бир токтомго мүнөздүү. Бул аймактар экранда көрүнбөйт, бирок алар милдеттүү жана бул аймакта пикселдердин түсү кара болушу керек. Бул кошумча аймактар эмне үчүн керек деген суроо жаралат. Бул суроо бул үйрөткүчтүн максатын жокко чыгарат, бирок эгер сиз кызык болсоңуз, мен сизди онлайнда кошумча изилдөө жүргүзүүгө үндөйт элем.

Бул VGA интерфейсин түшүндүргөн жакшы видео

Биздин учурда, биз 1920*1080 чечилишинде көрсөтүүнү каалайбыз жана бул убакыттар:

Горизонталдуу дисплей аянты = 1920 пиксел

Horizontal Fron Porch = 88 пиксел

Horizontal Back Porch = 148 пиксел

Horizontal Retrace = 44 пиксел

Vertical Display Area = 1080 пиксел

Vertical Front Porch = 4 пиксел

Vertical Back Porch = 36 пиксел

Vertical Retrace = 5 пиксел

(Бул жерде сиз башка чечимдердин убактысын таба аласыз

Ошентип, биздин чыныгы чечимибиз 2200 x 1125 болот. Биз 60 кадр / сек (секундасына кадр) каалайбыз, ошондуктан пиксел саатыбыз 60*2200*1125 = 148.5 МГц болот. Zybo тактасында 125 МГц саат каралган. Бизге керек болгон 148.5 МГц пикселдик саатты түзүү үчүн MMCM IP колдонобуз.

3 -кадам: ЧЫГУУ - VGA Controller 2 -бөлүк

ЧЫГУУ - VGA контролери 2 -бөлүк
ЧЫГУУ - VGA контролери 2 -бөлүк

Мурунку кадамдын теориялык маалыматы менен сиз өзүңүздүн VGA контролеруңузду долбоорлошуңуз керек. Мен сизге Vivado долбоорун сунуштайм, бирок муну жок дегенде өзүңүз жасоого аракет кылыңыз.

Көпчүлүк VGA порттору сизге пикселдин түстүү каналына 8 бит бербейт (жогорудагы сүрөттү караңыз), андыктан дизайнды Башкармалыктын түстөрүнө төөнөгүчтөрдүн санына ылайыкташтырышыңыз керек болот (бул HDMI үчүн көйгөй эмес).

Дизайн экрандын бардыгын көк түскө боёйт, үстүнкү кызыл пикселден башка. Белгилей кетсек, бул долбоор ZYBO Board үчүн чектөөлөрдү колдонот. Демек, сиз бул долбоорду башка Башкармада иштеткиңиз келсе, анда чектөөлөр файлын жаңыртып, түстөргө төөнөгүчтөрдүн санын ыңгайлаштырыңыз.

Nr фигурасын караңыз. 2. Эсиңизде болсун, биздин VGA Контролери 5/6 битти бир түстө чыгарат, ошол биттер кабелден өтүүдөн мурун ар бир түстүү канал үчүн бир аналогдук сигналга айланат (Кызыл, Жашыл жана Көк).

4 -кадам: ЧЫГУУ - HDMI Controller 1 -бөлүк

ЧЫГУУ - HDMI Контролери 1 -бөлүк
ЧЫГУУ - HDMI Контролери 1 -бөлүк

Эми биз VGA контроллери кандай иштээрин билебиз жана иштөөчү дизайныбыз бар, биз HDMI контроллери менен уланта алабыз. HDMI контроллери чындыгында VGA контроллеринде биз иштеп чыккан бардык кодду колдонот. HDMI жана VGA бирдей убакытты жана ошол эле сигналдарды колдонушат. Айырмасы чыгуучу казыктарда көрүнөт.

VGA ар бир түс үчүн бир зымды колдонот жана аналогдук сигналды бүтүндөй өткөрүп берсе, HDMI ар бир түс үчүн бир убакта санарип түрүндө маалыматтарды өткөрүп берет жана дифференциалдуу сигнализацияны колдонот. Дифференциалдуу сигнал берүү, ар бир бит үчүн, HDMIде бири -бирине карама -каршы 2 казык бар экенин билдирет. Демек, эгер биз '1' сигналын өткөргүбүз келсе, анда биз зымга '1' беребиз, ал эми башка зымга '1' жокко чыгарылат. Бул сигналдын бүтүндүгүн камсыздайт жана бул жөнүндө көбүрөөк окуй аласыз https://goo.gl/6CPCzB. Бизде ар бир түс үчүн КЫЗЫЛ, ЖАШЫЛ жана КӨК жана саат үчүн бир канал бар. Дифференциалдуу сигнализациянын өзгөчөлүктөрүнөн улам, биз hdmi аркылуу жөнөтүп жаткан сигналдар тең салмактуу болушу керек, бул 1 менен 0дин саны белгилүү бир убакыт терезесинде болжол менен бирдей болушу керек дегенди билдирет. Бул үчүн биз 8b/10b коддоону колдонобуз. Бул жерде DVI спецификациясынан дифференциалдуу сигнализация жана 8b/10b коддоо кандай иштээри жөнүндө көп нерселерди биле аласыз https://goo.gl/hhh8Ge (DVI жана HDMI бир эле видео сигналдарды колдонот).

5 -кадам: ЧЫГУУ - HDMI Controller 2 -бөлүк

ЧЫГУУ - HDMI Controller 2 -бөлүк
ЧЫГУУ - HDMI Controller 2 -бөлүк

Жетиштүү теория, биздин долбоорго өтөлү. VGA Контроллеринде биз 148.5 МГц сааты менен качып кеткенбиз, бул жерде биз бул жыштыкты 10 эсе камсыздашыбыз керек, анткени биз ар бир түс үчүн 8 битти өткөрүп берүүнү каалайбыз жана 10 пикселге 10 битке которулган 8b/10b коддоону колдонобуз. *148.5MHz = 1485MHz. Бул Zybo тактасында алынбай турган чоң жыштык. Бактыга жараша, биз бир нече трюктарды жеңип алдык. Биз 5*148.5МГц = 742.5МГцти башкара алабыз жана 742.5МГц сааттын өйдө жана ылдый жагында маалыматтарды берүү үчүн OSERDES (сериялаштыруучу) IP колдонобуз, андыктан биз 1485МГцте берилүүчү маалыматтарды алабыз. Vivado бизге кээ бир убакыт эскертмелерин берет жана сиз кичине саат менен ар дайым төмөн чечимге барсаңыз болот, бирок ал иштегендиктен, биз азырынча буга каршы эмеспиз (эскертүүлөр сааттын буферлери расмий түрдө иштебегенине байланыштуу) 464 МГцтен жогору жыштыктарды колдоо).

Ошентип, биз эмне кылышыбыз керек, биздин VGA контроллерибиздин маалыматын 8b/10b форматында коддоо жана андан кийин аны жогоруда айтылгандай сериялаштыруу. Биз ошондой эле сериялаштыруу үчүн 742.5MHz саатты түзүү үчүн долбоорго дагы бир MMCM кошушубуз керек.

Мен vhdl файлдарын коддогучка жана сериализаторго тиркелдим. Сиз адегенде RGB каналдарын коддошуңуз керек, анан аларды сериялаштырыңыз.

Кызыл каналга мисал:

TMDS_encoder_RED: TMDS_encoder

порт картасы (clk148, red_channel_8bits, c_red, video_on, encoded_red_10bits);

Serialiser_RED: Serialiser10_1

порт картасы (clk148, clk742, encoded_red_10bits, баштапкы абалга келтирүү, red_serial_1bit);

TMDS_encoder'ге "c" киргизүү кызыл жана жашыл үчүн "00" жана көк үчүн "vsync & hsync" (бул DVI спецификациясынын бир бөлүгү

6 -кадам: RAMдан сүрөттөрдү көрсөтүү

RAMдан сүрөттөрдү көрсөтүү
RAMдан сүрөттөрдү көрсөтүү

HDMI контроллеринин максаты - иштетилген сүрөттөрдү көрсөтүү. Эми, контроллер ишке киргизилгенде жана кетүүгө даяр болгондо, бул контроллерди маалымат менен азыктандыруу жөнүндө ойлонушубуз керек. Сүрөттү өркүндөтүү процессинин көбү PSде (Processing System = ARM Processor) ишке ашаарын эске алып, алынган сүрөттөр DDR RAMда калат. Ошентип, биз маалыматты RAMдан HDMI контроллерине алуунун жолуна муктажбыз.

Бул үчүн 3 IP керек болот:

1) VDMA (Video Direct Memory Access)

2) VTC (Video Timing Controller)

3) Video Out үчүн агым (биз мындан ары аны S2VO деп атайбыз)

S2VO иш жүзүндө чыгууга RGB 24BIT сигналын жана керектүү HSYNC жана VSYNC сигналдарын берет. Ошентип, биз HDMI контроллеринин ошол бөлүгүн таштап койсок болот.

Сиз бул IP даректериңизди дизайнга кошуп, конфигурациялап, туура байланыштарды түзүшүңүз керек.

Акыры сиз жогоруда көрсөтүлгөн схемага окшош нерсени алышыңыз керек.

7 -кадам: OUTPUT - SDK END

ЧЫГУУ - SDK END
ЧЫГУУ - SDK END

Бардык жабдыктар орнотулган жана барууга даяр болсо, биз азыр программалык камсыздоону PSге курушубуз керек. Биз аппараттык жабдыктарды жана биттик агымды экспорттоп, SDKти ишке киргизебиз.

1) File -> Export -> Export Hardware -> Include Bitstream'ди текшерип, ОК басыңыз

2) Файл -> SDK иштетүү

SDKда жаңы колдонмо долбоорун түзүңүз.

3) Файл -> Жаңы -> Колдонмо долбоору

4) Долбооруңуздун атын тандап, Кийинкини басыңыз

5) "Hello World" шаблонун тандап, Finish баскычын басыңыз

SDKдагы колдонмо VDMAны программалашы керек. Муну аткаруу үчүн кээ бир стандарттык функциялар колдонулат (убактым болгондо майда -чүйдөсүнө чейин айтам).

Дизайнды текшерүү үчүн биз SDK калыбына келтирүү (Xilinx Tools -> Dump/Restore) мүмкүнчүлүгүн колдонобуз, сүрөттү DDR RAM эсине салып, аны HDMI контроллерибиздин жардамы менен көрсөтөбүз. Сиз сүрөттү каалаган жериңизге жүктөй аласыз (эс тутумдун башында кичинекей чектелген жерлерди кошпогондо). Биздин мисал үчүн биз 16777216 дарегин жана файлдын өлчөмүн 8294400 = 1920*1080*4 (4 канал = RGB + альфа) тандап алдык.

Ал иштейт !

Уландысы бар

Сунушталууда: