Բովանդակություն:

Zynq Image Enhancement System: 7 քայլ
Zynq Image Enhancement System: 7 քայլ

Video: Zynq Image Enhancement System: 7 քայլ

Video: Zynq Image Enhancement System: 7 քայլ
Video: ⚡ Easy Embedded Linux Installation on Zynq-7000 with Prebuilt Images | Step-by-Step Tutorial ⚡ 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) ԳՈՐԸՆԹԱ = մշակել պատկերը

3) OUTPUT = Պատկերը թողեք HDMI ինտերֆեյսի միջոցով

Շատ հակասական ձևով մենք կսկսենք նախագծի ելքային մասից (դա մեզ ճանապարհին կարգաբերման ավելի լավ հնարավորություններ կտա) կշարունակենք մուտքագրմամբ և կավարտենք մշակման մասով:

Քայլ 1: Նյութեր

Նյութեր
Նյութեր

Այս նախագիծը ավարտելու համար ձեզ հարկավոր է.

HARDWARE

- HDMI և Ethernet ունեցող ցանկացած ZYNQ խորհուրդ պետք է աշխատի / ես օգտագործում եմ Digilent Zybo- ն

- USB A- ից միկրո B USB մալուխ

- HDMI մալուխ

- Ethernet մալուխ

- Displayուցադրել HDMI մուտքով

SOՐԱԳԻՐ

- Xilinx Vivado

- Xilinx SDK

Քայլ 2: ԵԼՔ - VGA վերահսկիչ Մաս 1

ԵԼՔ - VGA վերահսկիչ Մաս 1
ԵԼՔ - VGA վերահսկիչ Մաս 1

Մենք մեր տեսողական տվյալները կտրամադրենք ՝ օգտագործելով տախտակին առկա HDMI պորտը: HDMI պորտը միացված է ZYNQ- ի PL (mրագրավորվող տրամաբանություն = FPGA) կողմին, և դրա համար մենք պետք է VHDL- ով վերահսկիչ նախագծենք: Եթե դուք երբևէ նախագծել եք VGA վերահսկիչ, ապա այն շատ նման կգտնեք: HDMI- ի և VGA- ի ժամկետներն իրականում նույնն են, իրականում դուք կարող եք հիմնվել գոյություն ունեցող VGA վերահսկիչի վրա `HDMI վերահսկիչ ձեռք բերելու համար:

Ավելի լավ հասկանալու համար, թե ինչ է իրականում տեղի ունենում, մենք նախ նախագծելու ենք VGA վերահսկիչ

Մենք ցանկանում ենք ցուցադրել 1920x1080 թույլատրությամբ:

VGA վերահսկիչը պատասխանատու է պիքսելային տվյալները (RGB ձևաչափով) հաջորդաբար, պիքսել առ պիքսել ցուցադրմանը փոխանցելու համար: 1920x1080 իրական ցուցադրման տարածքի սահմաններից դուրս կան նաև որոշ «սահմանային» տարածքներ, մասնավորապես ՝ առջևի շքամուտք, հետևի շքամուտք և հետընթաց: Այս տարածքների պիքսելային չափերը ստանդարտ են և հատուկ են յուրաքանչյուր լուծման համար: Այս տարածքները իրականում ՉԵՆ հայտնվում էկրանին, բայց դրանք պարտադիր են, և այս հատվածի պիքսելների գույնը պետք է լինի սև: Վստահելի հարց կլինի, թե ինչու են անհրաժեշտ այս լրացուցիչ տարածքները: Այս հարցը հակասում է այս ուսանելիի նպատակին, բայց եթե ձեզ հետաքրքրում է, ես ձեզ կխրախուսեմ լրացուցիչ հետազոտություններ կատարել առցանց:

Սա լավ տեսանյութ է, որը բացատրում է VGA ինտերֆեյսը

Մեր դեպքում մենք ցանկանում ենք ցուցադրել 1920*1080 թույլատրությամբ, և սրանք ժամանակներն են.

Հորիզոնական ցուցադրման տարածք = 1920 պիքսել

Հորիզոնական շքամուտք = 88 պիքսել

Հորիզոնական հետևի շքամուտք = 148 պիքսել

Հորիզոնական հետադարձ = 44 պիքսել

Ուղղահայաց ցուցադրման տարածք = 1080 պիքսել

Ուղղահայաց ճակատային պատշգամբ = 4 պիքսել

Ուղղահայաց հետևի շքամուտք = 36 պիքսել

Ուղղահայաց հետադարձ = 5 պիքսել

(Այստեղ կարող եք գտնել այլ բանաձևերի ժամկետներ

Այսպիսով, մեր իրական լուծաչափը կլինի 2200 x 1125. Մենք ցանկանում ենք 60 կ / վրկ (վայրկյան կադրեր), այնպես որ մեր պիքսելային ժամացույցը կլինի 60*2200*1125 = 148.5 ՄՀց: Zybo Board- ում նախատեսված է 125 ՄՀց ժամացույց: Մենք կօգտագործենք MMCM IP ՝ մեզ անհրաժեշտ 148.5 ՄՀց պիքսել ժամացույց ստեղծելու համար:

Քայլ 3. ԵԼՔ - VGA վերահսկիչ Մաս 2

ԵԼՔ - VGA վերահսկիչ Մաս 2
ԵԼՔ - VGA վերահսկիչ Մաս 2

Նախորդ քայլի տեսական հիմքով դուք պետք է կարողանաք նախագծել ձեր սեփական VGA վերահսկիչը: Ես ձեզ կտրամադրեմ Vivado նախագիծ, որը դա անում է, բայց խորհուրդ եմ տալիս, որ դուք գոնե նախ ինքներդ փորձեք այն կատարել:

VGA նավահանգիստների մեծամասնությունը ձեզ չի տալիս 8 բիթ մեկ գունավոր ալիքի համար մեկ պիքսելում (տե՛ս վերևի պատկերը), այնպես որ դուք պետք է դիզայնը հարմարեցնեք տախտակի տրամադրած յուրաքանչյուր գույնի կապումների քանակին (չնայած դա HDMI- ի համար խնդիր չէ):

Դիզայնը ամբողջ էկրանը կապույտ կներկի, բացառությամբ վերին ձախ պիքսելների, որոնք կարմիր կլինեն: Հարկ է նշել, որ այս նախագիծը օգտագործում է ZYBO- ի խորհրդի սահմանափակումները: Այսպիսով, եթե ցանկանում եք այս նախագիծը գործարկել մեկ այլ տախտակի վրա, դուք պետք է թարմացնեք սահմանափակումների ֆայլը և հարմարեցնեք յուրաքանչյուր գույնի կապում:

Նայեք թիվ նկարին: 2. Հիշեք, որ մինչ մեր VGA վերահսկիչը մեկ գույնի համար թողարկում է 5/6 բիթ, այդ բիթերը մալուխի միջով անցնելուց փոխակերպվում են մեկ անալոգային ազդանշանի յուրաքանչյուր գունավոր ալիքի համար (կարմիր, կանաչ և կապույտ):

Քայլ 4. ԵԼՔ - HDMI վերահսկիչ Մաս 1

ԵԼՔ - HDMI վերահսկիչ Մաս 1
ԵԼՔ - HDMI վերահսկիչ Մաս 1

Այժմ, երբ մենք գիտենք, թե ինչպես է աշխատում VGA վերահսկիչը և ունենք աշխատանքային դիզայն, կարող ենք շարունակել HDMI վերահսկիչով: HDMI վերահսկիչն իրականում կօգտագործի VGA վերահսկիչում մեր մշակած ամբողջ ծածկագիրը: HDMI- ն և VGA- ն օգտագործում են նույն ժամկետները և նույն ազդանշանները: Տարբերությունը հայտնվում է ելքային կապում:

Մինչ VGA- ն օգտագործում է մեկ մետաղալար յուրաքանչյուր գույնի համար և փոխանցում անալոգային ազդանշան դրա միջով, HDMI- ն տվյալները փոխանցում է թվայնորեն 1 բիթ յուրաքանչյուր գույնի համար և օգտագործում է դիֆերենցիալ ազդանշան: Դիֆերենցիալ ազդանշանը նշանակում է, որ յուրաքանչյուր բիտի համար HDMI- ն ունի 2 կապ, որոնցից մեկը մյուսի հակառակն է: Այսպիսով, եթե մենք կցանկանայինք փոխանցել «1» ազդանշանը, մենք կփոխանցեինք «1» -ը մետաղալարով, իսկ «1» -ը ՝ մյուս լարի վրա ՝ մերժված: Սա ապահովում է ազդանշանի ամբողջականությունը, և դրա մասին ավելին կարող եք կարդալ այստեղ ՝ https://goo.gl/6CPCzB: Մենք ունենք այս ալիքներից յուրաքանչյուրը յուրաքանչյուր գույնի համար ՝ ԿԱՐՄԻՐ, Կանաչ և Կապույտ և մեկը ժամացույցի համար: Դիֆերենցիալ ազդանշանների առանձնահատկությունների պատճառով hdmi- ով ուղարկվող ազդանշանները պետք է լինեն DC հավասարակշռված, ինչը նշանակում է, որ 1 -ի և 0 -ի թիվը պետք է մոտավորապես հավասար լինի որոշակի պատուհանում: Դա իրականացնելու համար մենք կօգտագործենք 8b/10b կոդավորումը: Դուք կարող եք շատ բան իմանալ այն մասին, թե ինչպես է դիֆերենցիալ ազդանշանը և 8b/10b կոդավորումը աշխատում DVI- ի բնութագրից այստեղ ՝ https://goo.gl/hhh8Ge (DVI և HDMI- ն օգտագործում են նույն տեսա ազդանշանները):

Քայլ 5. ԵԼՔ - HDMI վերահսկիչ Մաս 2

ԵԼՔ - HDMI վերահսկիչ Մաս 2
ԵԼՔ - HDMI վերահսկիչ Մաս 2

Բավական տեսություն, եկեք հասնենք մեր նախագծին: Մինչ VGA Controller- ում մենք դուրս եկանք 148.5 ՄՀց ժամացույցից, այստեղ մենք ստիպված կլինենք տրամադրել այդ հաճախականությունը 10 անգամ, քանի որ մենք ցանկանում ենք յուրաքանչյուր գույնի համար փոխանցել 8 բիթ և օգտագործել 8b/10b կոդավորումը, որը թարգմանվում է 10 բիթ մեկ պիքսելում և 10 *148.5 ՄՀց = 1485 ՄՀց: Դա հսկայական հաճախականություն է, որը հնարավոր չէ ձեռք բերել Zybo Board- ում: Բարեբախտաբար, մենք մի քանի հնարք գտանք մեր թևում: Մենք կարող ենք կառավարել 5*148.5 ՄՀց = 742.5 ՄՀց, և մենք կօգտագործենք OSERDES (սերիալիզատոր) IP ՝ տվյալներ փոխանցելու ինչպես 742.5 ՄՀց ժամացույցի աճող, այնպես էլ նվազող եզրին, ուստի մենք իրականում կստանանք 1485 ՄՀց հաճախականությամբ փոխանցվող տվյալներ: Vivado- ն մեզ որոշ ժամանակային նախազգուշացումներ կտա, և դուք միշտ կարող եք ավելի փոքր լուծման գնալ ավելի փոքր ժամացույցով, բայց քանի որ այն աշխատում է, մենք առայժմ դա իրականում դեմ չենք (նախազգուշացումները կապված են այն բանի հետ, որ ժամացույցի բուֆերները պաշտոնապես չեն գործում աջակցում են 464 ՄՀց -ից բարձր հաճախականություններ):

Այսպիսով, այն, ինչ մենք պետք է անենք, մեր VGA Controller- ի ելքի տվյալները կոդավորելն է 8b/10b ձևաչափով, այնուհետև դրանք սերիականացնել, ինչպես նշվեց վերևում: Մենք նաև պետք է նախագծին ավելացնենք ևս մեկ MMCM ՝ սերիալիզացիայի համար 742.5 ՄՀց ժամացույց ստեղծելու համար:

Ստորև կցեցի 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, reset, 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 (Տեսանյութի ժամանակի վերահսկիչ)

3) Stream to Video Out (այսուհետ այն կանվանենք S2VO)

S2VO- ն իրականում կտրամադրի RGB 24BIT ազդանշան ելքին և անհրաժեշտ HSYNC և VSYNC ազդանշաններին: Այսպիսով, մենք կարող ենք HDMI վերահսկիչի այդ մասը դուրս թողնել:

Դուք պետք է ավելացնեք այս IP- ները ձեր դիզայնին, կազմաձևեք դրանք և կատարեք համապատասխան կապեր:

Ի վերջո, դուք պետք է ինչ -որ բան ստանաք, որը նման է վերը նշված սխեմատիկային:

Քայլ 7: Ելք - SDK- ի ՎԵՐ

ԵԼՔ - SDK ՎԵՐ
ԵԼՔ - SDK ՎԵՐ

Բոլոր սարքավորումները տեղադրված և պատրաստ են աշխատանքի, մենք այժմ պետք է ծրագրակազմը կառուցենք PS- ում: Մենք կարտահանենք սարքավորումներն ու բիթսթրիմը և գործարկելու ենք SDK- ն:

1) Ֆայլ -> Արտահանում -> Արտահանման սարքաշար -> Ստուգեք ներառել Bitstream- ը և սեղմեք OK

2) Ֆայլ -> Գործարկել SDK

SDK- ում ստեղծեք նոր կիրառական նախագիծ:

3) Ֆայլ -> Նոր -> Դիմումի նախագիծ

4) Ընտրեք ձեր նախագծի անունը և կտտացրեք Հաջորդը

5) Ընտրեք «Բարև աշխարհ» ձևանմուշը և կտտացրեք Ավարտել

SDK- ի դիմումը պետք է ծրագրավորի VDMA- ն: Կան որոշ ստանդարտ գործառույթներ, որոնք օգտագործվում են դա իրականացնելու համար (մանրամասների մեջ կանդրադառնամ, երբ ժամանակ ունենամ):

Մեր դիզայնը փորձարկելու համար մենք կօգտագործենք SDK- ի վերականգնում (Xilinx Tools -> Dump/Restore) հնարավորությունը ՝ պատկերը DDR RAM հիշողության մեջ դնելու և այն ցուցադրելու համար `օգտագործելով մեր HDMI վերահսկիչը: Դուք կարող եք բեռնել պատկերը ցանկացած վայրում (բացառությամբ հիշողության սկզբում որոշ փոքր սահմանափակ տարածքների): Մեր օրինակի համար մենք ընտրեցինք հասցե 16777216 և ֆայլի չափը 8294400 = 1920*1080*4 (4 ալիք = RGB + ալֆա):

Աշխատում է !

Շարունակելի

Խորհուրդ ենք տալիս: