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

WIDI - Անլար HDMI ՝ օգտագործելով Zybo (Zynq զարգացման խորհուրդ). 9 քայլ (նկարներով)
WIDI - Անլար HDMI ՝ օգտագործելով Zybo (Zynq զարգացման խորհուրդ). 9 քայլ (նկարներով)

Video: WIDI - Անլար HDMI ՝ օգտագործելով Zybo (Zynq զարգացման խորհուրդ). 9 քայլ (նկարներով)

Video: WIDI - Անլար HDMI ՝ օգտագործելով Zybo (Zynq զարգացման խորհուրդ). 9 քայլ (նկարներով)
Video: 📺 SAMSUNG UE55RU7300UXUA ԿՈՒԵԼ Էկրանի հեռուստացույց / 55 դյույմ 2024, Հուլիսի
Anonim
WIDI - անլար HDMI ՝ օգտագործելով Zybo (Zynq զարգացման տախտակ)
WIDI - անլար HDMI ՝ օգտագործելով Zybo (Zynq զարգացման տախտակ)
WIDI - անլար HDMI ՝ օգտագործելով Zybo (Zynq զարգացման տախտակ)
WIDI - անլար HDMI ՝ օգտագործելով Zybo (Zynq զարգացման տախտակ)

Երբևէ ցանկացե՞լ եք, որ դուք կարողանայիք ձեր հեռուստացույցը միացնել համակարգչին կամ նոութբուքին ՝ որպես արտաքին մոնիտոր, բայց չէ՞ք ցանկանա, որ այդ բոլոր ձանձրացնող լարերը խանգարեն ձեզ: Եթե այո, ապա այս ձեռնարկը հենց ձեզ համար է: Թեև կան որոշ ապրանքներ, որոնք հասնում են այս նպատակին, DIY նախագիծը շատ ավելի գոհացուցիչ է և պոտենցիալ ավելի էժան:

Այս հասկացությունը տարբերվում է chromecast- ի նման արտադրանքներից, քանի որ այն նախատեսված է մոնիտորին միացվող HDMI լարի տեղ զբաղեցնելու փոխարեն հոսքային սարք լինելու փոխարեն:

Մեր նախագիծը ստեղծվել է որպես վերջնական նախագիծ իրական ժամանակի օպերացիոն համակարգերի դասընթացների համար Կալիֆոռնիայի պետական պոլիտեխնիկական համալսարանում, Սան Լուիս Օբիսպո:

Րագրի նպատակն է օգտագործել երկու Digilent Zybo տախտակ ՝ որպես անլար հաղորդակցման միջերես HDMI հաղորդիչ սարքի (համակարգիչ, blu-ray և այլն) HDMI ընդունող սարքի (Desktop Monitor, Projector, TV և այլն) միջև:

Մեկ Digilent Zybo- ն HDMI- ով միացված կլինի փոխանցող սարքին, իսկ մյուսը HDMI- ով `ընդունող սարքին:

Անլար կապը կիրականացվի ՝ օգտագործելով հաղորդիչին և ընդունիչին նվիրված անլար տեղական ցանց, առանց տան երթուղղիչի կամ նման այլ սարքի միջոցով անցնելու: Այս նախագծի համար օգտագործվող անլար մոդուլը tplink wr802n nanorouter- ն է, որոնցից մեկը գործում է որպես ցանց ստեղծելու մուտքի կետ, իսկ մյուսը `ցանցին միանալու համար որպես հաճախորդ: Յուրաքանչյուր nanorouter միացված կլինի ethernet մալուխի միջոցով կամ Zybo տախտակին: Այս երթուղիչներին միանալիս սարքերը TCP- ի միջոցով կշփվեն այնպես, կարծես միացված լինեն միայն մեկ Ethernet մալուխի հետ (այսինքն ՝ կապ հաստատելու համար անհրաժեշտ միակ կոնֆիգուրացիան հաճախորդի IP հասցեն է):

Մինչ նախագծի նպատակն էր հեշտացնել 1080x720 վիդեո @ 60Hz հոսքը, դա անհասանելի էր անլար ցանցում թողունակության սահմանափակումների և ուղարկելու համար պահանջվող տվյալները նվազեցնելու համար իրական ժամանակի վիդեո սեղմման բացակայության պատճառով: Փոխարենը, այս նախագիծը ծառայում է որպես այս նպատակին հասնելու ապագա զարգացման շրջանակ, քանի որ այն խստորեն սահմանափակել է շրջանակների արագության սահմանափակումները `HDMI- ի տվյալները պատշաճ կերպով փոխանցելու համար, ինչպես նախատեսված էր:

Projectրագրի պահանջները.

2x Digilent Zybo զարգացման տախտակներ (պետք է ունենան առնվազն մեկ HDMI պորտ)

2 x HDMI մալուխներ

2x microusb մալուխներ (զարգացման համար Zybo- ն համակարգչին միացնելու համար)

2x tplink wr802n nanorouters (ներառյալ adtl. 2x microusb և պատի վարդակից էներգիայի ադապտերներ)

2x ethernet մալուխներ

*** Նշում. Այս ձեռնարկը ենթադրում է Vivado դիզայնի հավաքակազմի հետ ծանոթություն և նոր նախագծի և բլոկի դիզայնի ստեղծման փորձ: ***

Քայլ 1. Կարգավորեք Zynq ծրագրավորվող տրամաբանությունը հաղորդիչի համար

Կարգավորեք Zynq ծրագրավորվող տրամաբանությունը հաղորդիչի համար
Կարգավորեք Zynq ծրագրավորվող տրամաբանությունը հաղորդիչի համար
Կարգավորեք Zynq ծրագրավորվող տրամաբանությունը հաղորդիչի համար
Կարգավորեք Zynq ծրագրավորվող տրամաբանությունը հաղորդիչի համար
Կարգավորեք Zynq ծրագրավորվող տրամաբանությունը հաղորդիչի համար
Կարգավորեք Zynq ծրագրավորվող տրամաբանությունը հաղորդիչի համար

Հաղորդիչի ծրագրավորվող տրամաբանությունը զարգացնելու մեր մոտեցումն այն էր, որ համակարգչից hdmi-to-hdmi փոխանցում կատարվի համակարգչին `մոնիտորինգի միջոցով` օգտագործելով Video Direct Memory Access (VDMA) երկու բլոկ `մեկը գրելու և մեկը կարդալու համար:

Երկուսն էլ ընտրված են ազատ աշխատելու, 3 շրջանակ-բուֆերային ռեժիմի համար (0-1-2): Քանի որ վիդեո միջուկը օպտիմիզացված է վայրկյանում 60 կադրի համար, դա նշանակում է, որ VDMA- ն ամեն 16,67 մկս -ով ամեն հաջորդ գրելու կամ կարդալու է այս կարգով ՝ 0, 1, 2, 0, 1, 2, 0, 1, 2: Յուրաքանչյուր շրջանակի համար DDR հիշողության վայրերը տարբեր են երկու VDMA- ների համար, քանի որ դրանք այլևս սինխրոնիզացված չեն միմյանց հետ: Փոխարենը, ապարատային ժամաչափը (TTC1), որը կազմաձևված է 60 Հց հաճախականությամբ, օգտագործվում է երկու տեղակայման միջև տվյալների շարժումը համաժամեցնելու համար:

Վերևի պատկերը ցույց է տալիս 3 շրջանակ, դրանց չափերը և յուրաքանչյուրի պահանջվող հիշողության ծավալը (շրջանակի աջ կողմում): Եթե մենք նշանակենք գրելու VDMA հիշողության այս վայրերին, ապա կարող ենք նշանակել կարդացած VDMA հիշողության վայրերը այս հավաքածուից այն կողմ, ասենք `սկսած 0x0B000000- ից: Յուրաքանչյուր շրջանակ բաղկացած է 1280*720 պիքսելից և յուրաքանչյուր պիքսելից բաղկացած է 8 բիթ կարմիր, կանաչ և կապույտ ընդհանուր 24 բիթ: Սա նշանակում է, որ շրջանակը բաղկացած է 1280*720*3 բայթից (2.76 ՄԲ):

Qամաչափի IRQ- ի ներսում, որը նկարագրված է VDMA վարորդի կարգաբերման մեջ, կզբաղվի տվյալների պատճենմամբ երկու VMDA հիշողության վայրերի միջև: VDMA- ն ցույց է տալիս ընթացիկ շրջանակի ցուցիչ, որի վրա գրվում կամ կարդացվում է: Շրջանակը ներկայացված է որոշակի մոխրագույն ծածկագրով, որը փոխարկվում է ծրագրային ապահովման մեջ: 3 շրջանակ-բուֆերային կազմաձևի մոխրագույն ծածկագրի սահմանումները կարելի է գտնել C հավելվածում ՝ AXI VDMA Ապրանքի ուղեցույցում:

Սա թույլ է տալիս մեզ պատճենել հիշողության մեջ գրվող բովանդակությունը ՝ առանց ընթերցելու ներկայումս գրվող շրջանակից:

*** Ուշադրություն դարձրեք, որ ընթերցված VDMA- ն չի օգտագործվում անլար ցանցով տվյալներ ուղարկելու ժամանակ: Նպատակն է միայն ստուգել VMDA գրելու հիշողությունը պատճենելու ճիշտ աշխատանքը: Ընթերցված VMDA- ն պետք է անջատված լինի: ***

Ահա Հաղորդիչների նախագծման բլոկ ստեղծելու քայլերը

  1. Նոր նախագիծ ստեղծելիս լավ գաղափար է նախագծին չիպ կամ տախտակ նշանակելը: Այս հղումը նկարագրում է, թե ինչպես ավելացնել նոր տախտակի ֆայլեր Vivado գրացուցակում և ճիշտ տախտակը կապել ձեր նախագծի հետ: Այն օգտակար կլինի Մշակման համակարգի բլոկը ավելացնելիս և սարքավորումից ծրագրային ապահովման անցնելիս (SDK կողմ):
  2. Ավելացրեք հետևյալ բլոկները.

    • dvi2rgb
    • Տեսանյութը Axi4-stream- ում
    • Timամանակի վերահսկիչ
    • axi4-stream- ը դուրս գալու համար
    • rgb2dvi
    • AXI VDMA x2
    • AXI GPIO x2
    • Clամացույցի կախարդ
    • Մշտական
    • Zynq մշակման համակարգ
  3. Մշակման համակարգը ավելացնելիս կտտացրեք «Գործարկել արգելափակման ավտոմատացումը» վերին կանաչ գույնի սանդղակից և համոզվեք, որ ընտրված է «Դիմել տախտակի նախադրվածը» տարբերակը: Մնացած ամեն ինչը թողեք կանխադրված:
  4. Յուրաքանչյուր բլոկի կազմաձևման պատուհանի պատկերները կարելի է գտնել վերը նշված պատկերներում: Եթե որոշակի պատուհանի պատկեր չեք տեսնում, պարզապես թողեք այն որպես կանխադրված:
  5. Սկսեք Zynq Processing համակարգի կազմաձևումը.

    • PS-PL կազմաձևում AXI Non Secure Enable GP Master AXI, միացրեք M AXI GP0 միջերեսը
    • PS-PL կազմաձևում HP Slave AXI ինտերֆեյս, միացրեք և՛ HP0, և՛ HP1
    • MIO- ի կազմաձևում Համոզվեք, որ ENET0- ը միացված է I/O ծայրամասային սարքերի ներքո, այնուհետև Application Processor Unit, միացրեք Timer0
    • Ockամացույցի կազմաձևում PL Fabric Clocks- ում միացրեք FCLK_CLK0 և սահմանեք 100 ՄՀց:
    • Սեղմեք Ok
  6. Մինչև «Գործարկել միացման ավտոմատացումը» կտտացնելը, համոզվեք, որ միացրեք վիդեո բլոկները, ինչպես երևում է վերևում TX բլոկի դիզայնի պատկերում: Դուք կցանկանաք հաստատունը վերանվանել VDD և սահմանել արժեքը 1. Համապատասխանաբար միացրեք տեսաբլոկները:
  7. HDMI TMDS ժամացույցը և տվյալների կապերը արտաքին դարձրեք rgb2dvi և dvi2rgb բլոկների վրա
  8. Ստեղծեք մուտքային և ելքային պորտ ՝ տաք վարդակից հայտնաբերելու ազդանշանի (HPD) համար և միացրեք դրանք միասին, դրանք սահմանված են սահմանափակումների ֆայլում
  9. Պիքսելային ժամացույցը վերականգնվում է TMDS_Clk_p- ից, որը ստեղծվում է սահմանափակումների ֆայլում: Դա կլինի 74.25 ՄՀց ՝ 720p բանաձևին համապատասխան: Կարևոր է միացնել պիքսելային ժամացույցը (dvi2rgb բլոկից) հետևյալ կապումներին.

    • vid_io_in_clk (վիդեո առանցքային հոսքի արգելափակման մեջ)
    • vid_io_out_clk (առանցքային հոսք դեպի վիդեո բլոկ)
    • clk (ժամանակի վերահսկիչ)
    • PixelClk (rgb2dvi)
  10. *** Նշում. Ներկայումս պիքսելային ժամացույցի վերականգնումն ակտիվացնելու համար HDMI rx և tx միակցիչները պետք է միացված լինեն ակտիվ աղբյուրին/լվացարանին: Սրա շուրջ մեկ տարբերակ ՝ տեսահոլովակի rx և tx բլոկները բաժանել ժամացույցի տարբեր տիրույթների (այլ կերպ ասած ՝ գեներացնել 74.25 ՄՀց նոր ժամացույց ՝ tx բլոկին կերակրելու համար): ***
  11. Հաջորդը կարգավորեք ժամացույցի հրաշագործը, որպեսզի ունենաք 100 ՄՀց մուտք (գլոբալ բուֆերային աղբյուր) և 3 ելքային ժամացույց @ 50 ՄՀց (AXI-Lite ժամացույց), 150 ՄՀց (AXI4-Stream ժամացույց), 200 ՄՀց (dvi2rgb RefClk քորոց):
  12. Միացրեք FCLK_CLK0 մշակման համակարգի քորոցը ժամացույցի հրաշագործի մուտքին
  13. Այս պահին կտտացրեք «Գործարկել միացման ավտոմատացումը» դիզայնի պատուհանի վերևում գտնվող կանաչ սանդղակից: Լավ գաղափար է դա անել միանգամից մեկ բլոկի համար և հետևել վերը նշված TX բլոկի ձևավորման պատկերին:
  14. Գործիքը կփորձի ավելացնել AXI Interconnect- ը, որը հանդես է գալիս որպես հիմնական/ստրուկ փոխկապակցում այն բլոկների համար, որոնք օգտագործում են AXI-Lite ավտոբուսը (VDMA և GPIO):
  15. Այն նաև կավելացնի AXI SmartConnect- ը, որը հանդես է գալիս որպես հիմնական/ստրուկ փոխկապակցում VDMA- ի կողմից օգտագործվող AXI4-Stream և High Performance պրոցեսորային միջերեսների համար (Stream to Memory Map և հակառակը):
  16. Գործիքը կավելացնի նաև Processor System Reset- ը: Համոզվեք, որ սա կապված է միայն VDMA- ների, GPIO- ների և պրոցեսորների հետ կապված բլոկների հետ: Մի միացրեք այն որևէ վիդեո բլոկի (այսինքն ՝ dvi2rgb, ժամանակի վերահսկիչ, տեսանյութ հոսքի համար և այլն)
  17. Միացման ավտոմատացումն ավարտվելուց հետո ստուգեք, որ կապերը համընկնում են TX բլոկի դիզայնի պատկերի հետ: Դուք կնկատեք համակարգային ILA- ի լրացուցիչ բլոկ, որը չի նշվել: Սա միայն վրիպազերծման համար է և առայժմ դրա կարիքը չկա: Այն օգտագործում է 150M Processor Reset, այնպես որ դա նույնպես անհրաժեշտ չէ: Whereանկացած վայրում, որտեղ տեսնում եք փոքրիկ կանաչ «վրիպակներ» ավտոբուսների վրա, դա ILA- ի պատճառով է եւ կարող է անտեսվել:
  18. Վերջնական քայլը ծրագրի աղբյուրների ծառի վրա աջ սեղմել բլոկի ձևավորման վրա և ընտրել «Ստեղծել HDL փաթաթիչ»: Եթե պլանավորում եք փաթեթավորմանը ավելացնել տրամաբանությունը, այն ամեն անգամ ընտրվելուց հետո կգրվի:
  19. SDK- ի կողմում մանրամասների համար տե՛ս VDMA Driver Setup բաժինը:

Clամացույցներ և վերագործարկումներ

Ես գտա, որ ծրագրավորվող տրամաբանական նախագծի ամենակարևոր ասպեկտները ժամացույցի տիրույթների և վերակայման ազդանշանների մանրակրկիտ դիտարկումն է: Եթե դրանք ճիշտ կազմաձևված են, ապա դուք լավ կկարողանաք ձեր դիզայնը գործի դնել:

Pixel ժամացույց և ժամաչափը կողպված է

Որոշ ազդանշանների ակտիվ լինելը ստուգելու համար լավ գաղափար է ՝ այդ ազդանշանները կապել LED- ների հետ (ժամացույցներ, վերակայումներ, կողպեքներ և այլն): Երկու ազդանշան, որոնք ես օգտակար գտա հաղորդիչ տախտակին հետևելու համար, եղել են պիքսելային ժամացույցը և AXI4-Stream- ի «կողպված» ազդանշանը ՝ վիդեո դուրս գալու համար, ինչը ձեզ ասում է, որ տեսանյութի ժամանակը համաժամացվել է ժամանակի վերահսկիչի և տեսաաղբյուրի հետ: տվյալները: Ես որոշ տրամաբանություն եմ ավելացրել դիզայնի բլոկի փաթաթանին, որը հետևում է պիքսելային ժամացույցին ՝ օգտագործելով dvi2rgb բլոկի PixelClkLocked ազդանշանը ՝ որպես վերականգնում: Ես այստեղ կցել եմ ֆայլը որպես hdmi_wrapper.v: Արգելքների ֆայլը նույնպես կցված է այստեղ:

Քայլ 2. Կարգավորեք Zynq ծրագրավորվող տրամաբանությունը ստացողի համար

Կարգավորեք Zynq ծրագրավորվող տրամաբանությունը ստացողի համար
Կարգավորեք Zynq ծրագրավորվող տրամաբանությունը ստացողի համար
Կարգավորեք Zynq ծրագրավորվող տրամաբանությունը ստացողի համար
Կարգավորեք Zynq ծրագրավորվող տրամաբանությունը ստացողի համար
Կարգավորեք Zynq ծրագրավորվող տրամաբանությունը ստացողի համար
Կարգավորեք Zynq ծրագրավորվող տրամաբանությունը ստացողի համար

Ստացողի համար ծրագրավորվող տրամաբանական բլոկն ավելի պարզ է: Հիմնական տարբերությունը, բացի բացակայող hdmi մուտքային բլոկներից, վերականգնված պիքսելային ժամացույցի բացակայությունն է: Այդ պատճառով մենք պետք է ստեղծենք մեր սեփականը ժամացույցի հրաշագործից: Այս դիզայնը պետք է կատարվի հաղորդիչից առանձին նախագծում: Մեր նպատակների համար ընդունիչի նախագիծը հետևեց Zybo 7Z-20 տախտակին, իսկ Հաղորդիչը `Z7-10 տախտակին: Տախտակների վրա FPGA- ները տարբեր են, այնպես որ… զգույշ եղեք:

Ահա Ստացողի նախագծման բլոկ ստեղծելու քայլերը

  1. Ձեր դիզայնին ավելացրեք հետևյալ ip բլոկները.

    • Timամանակի վերահսկիչ
    • AXI4-Stream to Video Out
    • RGB- ից DVI- ին
    • AXI VDMA
    • AXI GPIO
    • Մշակման համակարգ
    • Clամացույցի կախարդ
    • Մշտական (VDD- ն սահմանել է 1)
  2. Այս բլոկների կազմաձևման համար հետևեք նույն օրինակին, ինչ հաղորդիչը: Այստեղ ներառված են կազմաձևերի նշանակալի տարբերությունների պատկերները: Մյուսները մնում են նույնը, ինչ Հաղորդիչն է:
  3. Կազմաձևեք VDMA- ն այս դիզայնի համար միայն որպես ընթերցված ալիք: Անջատեք գրելու ալիքը:
  4. Clockամացույցի հրաշագործը պետք է կազմաձևվի հետևյալ ելքերի համար.

    • clk_out1: 75 ՄՀց (պիքսելային ժամացույց)
    • clk_out2: 150 ՄՀց (հոսքի ժամացույց)
    • clk_out3: 50 ՄՀց (առանցքային ժամացույց)
  5. Միացրեք վիդեո բլոկները, ինչպես ցույց է տրված RX բլոկի դիզայնի պատկերում:
  6. Այնուհետև գործարկեք կապի ավտոմատացումը, որը կավելացնի AXI Interconnect, AXI SmartConnect և System Reset բլոկները և կփորձի կատարել համապատասխան կապեր: Դանդաղ գնացեք այստեղ ՝ համոզվելու համար, որ այն չի կատարում անցանկալի կապեր:
  7. HDMI TMDS ժամացույցը և տվյալների կապերը արտաքին դարձրեք rgb2dvi բլոկի վրա
  8. Այս դիզայնի վրա տաք վարդակից ազդանշանի կարիք չկա:

Քայլ 3: Կարգավորեք VDMA վարորդը

Կարգավորեք VDMA վարորդը
Կարգավորեք VDMA վարորդը

Տարբեր բլոկների կարգավորումը, որոնք կազմաձևված են AXI-Lite ինտերֆեյսի միջոցով, լավագույնս կատարվում է BSP- ի հետ ներառված ցուցադրական նախագծերի միջոցով որպես տեղեկանք: Դիզայներական ապարատն արտահանելուց և Vivado- ից SDK- ն գործարկելուց հետո կցանկանաք ավելացնել տախտակի աջակցության նոր փաթեթ և ներառել lwip202 գրադարանը BSP կարգավորումների պատուհանում: Բացեք system.mss ֆայլի ֆայլը BSP- ից և կտեսնեք ձեր բլոկի նախագծից ներկայացված ծայրամասային վարորդները: «Նմուշների ներմուծում» տարբերակը թույլ է տալիս ներմուծել ցուցադրական ծրագրեր, որոնք օգտագործում են այս ծայրամասային սարքերը և դրանով իսկ ցույց են տալիս, թե ինչպես դրանք կարգավորել ծրագրակազմում ՝ օգտագործելով առկա Xilinx վարորդները (տես կցված պատկերը):

Սա այն մեթոդն էր, որն օգտագործվում էր VDMA, Timer & Interrupt և GPIO կազմաձևելու համար: Այստեղ ներառված է ինչպես փոխանցման, այնպես էլ ստացման աղբյուրի կոդը: Տարբերությունները գրեթե բացառապես main.c- ում են:

*** Ո NOTՇԱԴՐՈԹՅՈՆ. Քանի որ այս ձեռնարկը գրելու պահին համակարգը լիարժեք գործունակ չէ, այս բաժնի աղբյուրի կոդը չի ներառում անլար ցանցի ծածկագիրը: Տեսահոլովակի փոխանցման/ստացման նախագծերի և ցանցի փոխանցման/ստացման նախագծերի համատեղման արդյունքում անհրաժեշտ է լուծել մի շարք սխալներ: Հետևաբար, այս ձեռնարկը առայժմ նրանց առանձին է վերաբերվում: ***

TX Interrupt Handler գործառույթը (IRQHandler)

Այս գործառույթը կարդում է գորշ կոդերը, որոնք տրամադրվում են ինչպես կարդալու, այնպես էլ գրելու VDMA- ներով GPIO բլոկների միջոցով: Մոխրագույն կոդերը վերածվում են տասնորդականի և օգտագործվում են ընթացիկ շրջանակի շրջանակի հիմնական հիշողության վայրը ընտրելու համար: Պատճենված շրջանակը նախորդ շրջանակն է, որին գրում է VDMA- ն (օրինակ, եթե VDMA- ն գրում է շրջանակ 2 -ին, մենք պատճենում ենք շրջանակը 1 -ը, եթե 0 -ին գրում ենք, մենք փաթաթում և կարդում ենք շրջանակ 2 -ից):

Գործառույթը գրավում է միայն յուրաքանչյուր 6 -րդ շրջանակը ՝ շրջանակի արագությունը նվազեցնելու համար մինչև 10 Հց, այլ ոչ թե 60 Հց: Theանցի վերին սահմանը 300 Մբիթ / վրկ է: 10 կադր վայրկյանում պահանջվում է 221.2 Մբիթ / վ թողունակություն:

Այս գործառույթի երկու տողերի մեկնաբանումը/չմեկնաբանելը թույլ կտա օգտվողին կարգաբերման/փորձարկման նպատակով անցնել HDMI passthru ռեժիմի (ծածկագիրը մեկնաբանվում է `համապատասխան տողերը նշելու համար): Այն ներկայումս պատճենում է շրջանակը հիշողության վայրում, որն օգտագործվում է ethernet կոդի միջոցով:

RX ընդհատումների կառավարիչի գործառույթ (IRQHandler)

Այս գործառույթը շատ նման է TX գործառույթին, սակայն այն պատճենում է 2 բուֆերային FIFO- ից, որն օգտագործվում է ethernet- ի կողմից `մուտքային տվյալներ գրելու համար: Ethernet ծածկագիրը ցույց է տալիս, թե որ շրջանակն է գրվում FIFO- ի վրա, տվյալները պատճենվում են հակառակ շրջանակից: Տվյալները պատճենվում են այն շրջանակի վրա, որն անմիջապես գտնվում է VDMA- ի կողմից ընթերցվողի ետևում ՝ պատռվածքից խուսափելու համար:

Քայլ 4: Կարգավորեք Nanorouter ցանցը

Կարգավորեք Nanorouter ցանցը
Կարգավորեք Nanorouter ցանցը

TPlink nanorouters- ի միջոցով ցանց ստեղծելու համար միացրեք դրանք առանձին և միացեք սարքերի համար կանխադրված wifi SSID- ին: Այս սարքի կազմաձևման կարգավորումների մասին լրացուցիչ տեղեկություններ կարելի է գտնել սարքի օգտագործման ձեռնարկի միջոցով:

Կարգավորեք սարքերից մեկը որպես մուտքի կետ, այն կգործի որպես ցանցի առաջնային կապ: Համոզվեք, որ անվանեք ցանցը և նշեք անունը և անջատեք DHCP- ը (մենք չենք ցանկանում, որ երթուղիչը IP հասցեները դինամիկ կազմաձևի, մենք ուզում ենք, որ հաղորդիչ և ընդունող Zybo տախտակները ինքնուրույն սահմանեն իրենց IP հասցեները, որպեսզի դրանք հետևողական լինեն): Կարգավորելուց հետո համոզվեք, որ սարքը վերագործարկվի և ստեղծի այս ցանցը:

Կարգավորեք մյուս սարքը որպես հաճախորդ և համոզվեք, որ այն միանում է ձեր առաջին նանոարագծով տեղադրված SSID ցանցին: Կրկին համոզվեք, որ DHCP- ն անջատված է հաճախորդի համար:

Հաճախորդն ավարտելուց և վերագործարկվելուց հետո այն պետք է միանա մուտքի կետի nanorouter- ին (եթե դա չկատարվի, ամենայն հավանականությամբ, սարքերից մեկի կազմաձևման խնդիր կա): Դուք կնկատեք, որ հաճախորդի LED լույսը ամուր կլինի, երբ այն միանա մուտքի կետին:

Մուտքի կետի nanorouter LED- ն, ամենայն հավանականությամբ, կշարունակի առկայծել այս պահին, սա նորմալ է: Flashրամեկուսացման լույսը նշանակում է, որ այն միացված չէ այլ սարքի իր ethernet պորտից, և երբ այն միացված է կազմաձևված Zybo- ին, LED- ն կմնա ամուր ՝ նշելով հաջող ցանցային կապը:

Այժմ, երբ մենք ունենք մեր nanorouters- ի կարգավորումը, մենք ունենք անլար ցանց, որը թույլ կտա մեզ հաղորդակցվել: Կարևոր նշում է, որ nanorouters- ի մեր կոնֆիգուրացիայի մեթոդը (որպես մուտքի կետ և հաճախորդ) թույլ է տալիս հաղորդակցվել Zybo հաղորդիչ տախտակից մինչև ընդունող Zybo տախտակին այնպես, ասես երկուսը կապված լինեն մեկ Ethernet լարով: Սա ավելի դժվար է դարձնում մեր ցանցի կարգավորումը, քանի որ այլընտրանքը, ամենայն հավանականությամբ, կներառի Zybo- ի տախտակների կազմաձևումը ՝ սերվերին հստակորեն միանալու համար ՝ նախատեսված կապի հետ միասին:

Երկու սարքերի տեղադրումից հետո, nanorouters- ը կազմաձևված է և պատրաստ է ներդրման ձեր WIDI ցանցում: Չկա հատուկ զուգավորում nanorouters- ի և Zybo- ի տախտակների միջև, քանի որ կամ մուտքի կետը, կամ հաճախորդը կաշխատի փոխանցող կամ ստացող սարքի համար:

Քայլ 5. Ստեղծեք տվյալների փոխանցման համար Zynq մշակման համակարգ Ethernet- ի միջոցով

Ստեղծեք տվյալների փոխանցման համար Zynq մշակման համակարգ Ethernet- ի միջոցով
Ստեղծեք տվյալների փոխանցման համար Zynq մշակման համակարգ Ethernet- ի միջոցով
Ստեղծեք տվյալների փոխանցման համար Zynq մշակման համակարգ Ethernet- ի միջոցով
Ստեղծեք տվյալների փոխանցման համար Zynq մշակման համակարգ Ethernet- ի միջոցով

HDMI տվյալները Zybo- ի մեկ տախտակից մյուսը փոխանցելու համար մենք պետք է Ethernet արձանագրություն ներառենք մեր VDMA վարորդի հետ: Մեր նպատակն է ՝ առանձին տեսանյութերի շրջանակներ փոխանցել Ethernet ծայրամասային սարքով ՝ մշակման համակարգում ՝ սահմանված արագությամբ, որը համահունչ է մեր ցանցի թողունակությանը: Մեր նախագծի համար մենք օգտագործեցինք TCP- ն, որը տրամադրվում էր մերկ մետաղներով LwIP API- ով: Քանի որ ծրագրի երկու անդամներն էլ համեմատաբար անփորձ են ցանցային կոմունալ ծառայությունների ոլորտում, այս ընտրությունը կատարվել է առանց լիովին ճանաչելու TCP- ի հետ կապված հետևանքներն ու սահմանափակումները: Այս իրականացման հիմնական խնդիրը սահմանափակ թողունակությունն էր և այն, որ այն իսկապես նախատեսված չէ տվյալների մեծ ծավալների գոլորշիացման համար: Այս նախագծում TCP- ի փոխարինման և բարելավման այլընտրանքային լուծումները կքննարկվեն ավելի ուշ:

TCP- ի համառոտ նկարագրություն LwIP- ով. Տվյալները ցանցով ուղարկվում են tcp_mss չափի փաթեթներով (TCP հատվածի առավելագույն չափը), որն ընդհանուր առմամբ կազմում է 1460 բայթ: Tcp_write- ի կանչը կպահանջի ցուցիչով հղված որոշ տվյալներ և կկարգավորի pbufs (փաթեթային բուֆերներ) `տվյալները պահելու և TCP գործողությունների կառուցվածք ապահովելու համար: Տվյալների առավելագույն քանակը, որոնք կարող են հերթագրվել միաժամանակ, սահմանվում է որպես tcp_snd_buf (TCP ուղարկողի բուֆերային տարածք): Քանի որ այս պարամետրը 16 բիթանոց է, մենք սահմանափակվում ենք 59695 բայթ ուղարկող բուֆերի չափով (ուղարկելու բուֆերում կա որոշ անհրաժեշտ լիցք): Տվյալների հերթագրվելուց հետո tcp_output- ը կանչվում է ՝ սկսելու տվյալների փոխանցումը: Տվյալների հաջորդ հատվածը ուղարկելուց առաջ անհրաժեշտ է, որ բոլոր նախորդ փաթեթները հաջողությամբ փոխանցվեն: Այս գործընթացը կատարվում է օգտագործելով recv_callback գործառույթը, քանի որ սա այն գործառույթն է, որը կոչվում է, երբ ընդունումը երևում է ստացողից:

Vivado SDK- ի օրինակելի նախագծերի օգտագործումը շատ օգտակար է LwIP TCP- ի գործողությունը սովորելու համար և լավ մեկնարկային կետ է նոր նախագիծ սկսելու համար:

WiDi փոխանցող սարքի ընթացակարգը հետևյալն է.

  1. Նախագծեք TCP ցանցը ՝ օգտագործելով մերկ մետաղական LWIP վարորդի գործառույթի կանչերը:
  2. Նշեք ցանցի գործունեության համար անհրաժեշտ հետ կանչման ցանկացած գործառույթ:
  3. Միացեք WiDi ընդունիչին ՝ միանալով նրա IP հասցեին և նավահանգստին (մեր կազմաձևը. Ստացողի IP- ն է 192.168.0.9, միացեք 7 -րդ պորտին):
  4. Երբ VDMA վարորդի ժամաչափը լրանում է, մուտքագրեք TX ISR:
  5. Որոշեք մուտքի ներկայիս շրջանակի բուֆերը `հիմնվելով VDMA գորշ կոդի վրա
  6. Հավաքեք տվյալների առաջին հատվածը TCP ուղարկելու բուֆերում
  7. Մուտքագրեք տվյալները և թարմացրեք տեղական փոփոխականները ՝ հետևելու համար, թե որքան տվյալներ են ուղարկվել ընթացիկ շրջանակից:
  8. Ստացված հետադարձ կապին հասնելուց հետո (գործառույթի կանչը, որը կատարվել է այն բանից հետո, երբ հաղորդիչը ստանում է տվյալների որոնման հաստատում), հերթագրեք տվյալների հաջորդ հատվածը:
  9. Կրկնեք 7 և 8 քայլերը, մինչև ամբողջ շրջանակն ուղարկվի:
  10. Վերադառնալ պարապ վիճակի ՝ սպասելու, որ հաջորդ ժամաչափի ընդհատումը ցույց տա, որ նոր շրջանակը պատրաստ է (Վերադառնալ քայլ 4):

Համոզվեք, որ տեղադրեք տախտակի աջակցության փաթեթի LwIP կարգավորումները, ինչպես ցույց է տրված վերևի նկարում: Բոլոր արժեքները կանխադրված են, բացառությամբ tcp_snd_buf, tcp_pueue_ooseq, mem_size, memp_n_tcp_seg: Նաև նշեք, որ մանրամասն վրիպազերծման կարելի է հասնել ՝ կարգաբերման_ընտրանքների խմբի BSP պարամետրերը փոխելով:

Քայլ 6. Տեղադրեք Zynq մշակման համակարգը տվյալների ընդունման համար Ethernet- ի միջոցով

Zybo- ի զարգացման խորհուրդը, որը հանդես կգա որպես անլար ընդունիչ, կգործի նմանապես հաղորդիչ սարքի հետ: LwIP- ի տախտակի աջակցության փաթեթի կարգավորումները նույնական կլինեն նախորդ քայլին:

Սարքը կընդունի նանոարագծից վիդեո շրջանակի հատվածներ պարունակող փաթեթներ, և այն կպատճեն վիդեո շրջանակի տվյալները եռակի շրջանակի բուֆերային տարածության մեջ ընդունող VDMA- ի համար: Տվյալների վերագրանցումից խուսափելու համար տվյալների կրկնակի բուֆերը (մենք կանդրադառնանք որպես ցանցի բուֆեր) օգտագործվում է նանոարուղուց տվյալների հավաքման ժամանակ, որպեսզի ցանցի երթևեկությունը շարունակի հոսել, քանի դեռ նախորդ ամբողջական վիդեո շրջանակը պատճենվում է VDMA բուֆեր:

WiDi ընդունող սարքի ընթացակարգը պահանջում է երկու խնդիր, որոնցից մեկը `Ethernet տվյալների ստացումն է, իսկ մյուսը` ցանցի բուֆերից վիդեո շրջանակների պատճենումը VDMA- ի եռակի շրջանակի բուֆերին:

Ethernet ընդունման առաջադրանք.

  1. Նախնականացնել TCP ցանցը ՝ օգտագործելով մերկ մետաղական LWIP վարորդի գործառույթի կանչերը (կարգաբերում IP հասցեով, որին հաղորդիչը կկապի, մեր ՝ 192.168.0.9)
  2. Նշեք ցանցի գործունեության համար անհրաժեշտ հետ կանչման ցանկացած գործառույթ:
  3. Ethernet փաթեթ ստանալուց հետո պատճենեք տվյալների տվյալները ցանցի ընթացիկ բուֆերում, ավելացրեք ընթացիկ կուտակված տվյալները:
  4. Եթե փաթեթը լրացնում է ցանցի շրջանակի բուֆերը, շարունակեք քայլերը 5 և 6. Հակառակ դեպքում, այս առաջադրանքից ետ շրջեք դեպի քայլ 3:
  5. ազդանշան, որ VDMA եռակի շրջանակի բուֆերային առաջադրանքը պետք է պատճենվի նոր ավարտված ցանցի բուֆերից:
  6. Անցեք ցանցի մյուս բուֆերին և շարունակեք տվյալների հավաքումը ethernet- ի միջոցով:
  7. Պարապ մնացեք մինչև նոր ethernet փաթեթը ստացվի (քայլ 3):

Պատճենեք ցանցի բուֆերը VDMA եռակի շրջանակի բուֆերի մեջ.

  1. Երբ VDMA վարորդի ժամաչափը լրանում է, մուտքագրեք RX ISR:
  2. Որոշեք մուտքի ներկայիս շրջանակի բուֆերը `հիմնվելով VDMA գորշ կոդի վրա:
  3. Որոշեք, թե որ ցանցի բուֆերն է պատճենվելու VDMA բուֆերում և պատճենեք այդ տվյալները

Քայլ 7: Միացրեք ձեր Zybo տախտակները HDMI աղբյուրին և HDMI լվացարանին

Միացրեք ձեր Zybo տախտակները HDMI աղբյուրին և HDMI լվացարանին
Միացրեք ձեր Zybo տախտակները HDMI աղբյուրին և HDMI լվացարանին

Այժմ միացրեք hdmi մալուխները և ստացողի, և հաղորդիչի համար, ծրագրավորեք FPGA- ն և գործարկեք մշակման համակարգը: Շրջանակի արագությունը, ամենայն հավանականությամբ, շատ դանդաղ կլինի ՝ LwIP- ի գործողության հսկայական ծախսերի և սահմանափակ թողունակության պատճառով: Եթե որևէ խնդիր կա, միացեք UART- ի միջոցով և փորձեք բացահայտել որևէ նախազգուշացում կամ սխալ:

Քայլ 8. Բարելավման այլընտրանքային գաղափարներ

Բարելավման այլընտրանքային գաղափարներ
Բարելավման այլընտրանքային գաղափարներ

Այս նախագծի համար մեծ խնդիր էր WiFi- ի միջոցով ուղարկելու համար անհրաժեշտ տվյալների քանակը: Սա սպասելի էր, սակայն մենք թերագնահատեցինք դրա ազդեցությունը և հանգեցրինք էկրանին ավելի շատ պատկերների պոռթկման, քան տեսաֆիլմերի: Այս նախագիծը բարելավելու մի քանի եղանակ կա.

  • Իրական ժամանակի վիդեո սեղմում: Մուտքային տեսաֆիլմը շրջանակ առ շրջանակ սեղմելը մեծապես կնվազեցնի ցանցով ուղարկվելու համար անհրաժեշտ տվյալների քանակը: Իդեալում, դա կաներ ապարատային սարքավորումների մեջ (ինչը հեշտ գործ չէ), կամ ծրագրային ապահովման մեջ `օգտագործելով ARM- ի մյուս միջուկը` սեղմման ալգորիթմներ գործարկելու համար (սա լրացուցիչ վերլուծության կարիք կունենա `ժամանակի ավարտը ապահովելու համար): Կան բաց կոդով իրական ժամանակի վիդեո սեղմման բաղադրիչներ, որոնք մենք գտել ենք համացանցում, բայց մեծամասնությունը IP են:
  • Ethernet հոսքի ներդրում ապարատային, այլ ոչ թե ծրագրային ապահովման մեջ: Տեղադրված տարածքի բացակայության պատճառով հաղորդիչի մեջ ելքային տվյալները հերթագրելու համար մի հատված կար ՝ հատվածի չափի սահմանափակության պատճառով: Շատ ավելի արդյունավետ գործընթաց է AXI Ethernet IP- ի օգտագործումը FIFO բուֆերի կամ DMA- ի հետ `դրա մեջ տվյալները ներմուծելու համար: Սա կնվազեցնի LwIP TCP- ի լրացուցիչ ուղեբեռը և թույլ կտա ավելի շատ տվյալների հոսք:

Քայլ 9: Մատչելիություն

Այս WiDi նախագծի արդյունքում ստացված արտադրանքը պետք է լինի լիովին ինտեգրված, կոմպակտ զույգ սարքեր, որոնցից օգտվողը կարող է միացնել ցանկացած HDMI աղբյուրի, այնուհետև տեսաֆայլը անլար կերպով սուզել HDMI հնարավորությամբ էկրանին: Սարքերը կցուցադրեն Zyq-7000 SoC- ը, որը հայտնաբերվել է Zybo- ի տեղեկատու տախտակին և կներառեն TP-Link նանո-երթուղղիչներում հայտնաբերված ցանցային սարքավորումները: Իդեալում, օգտագործողը կկարողանա վերահսկել փոխանցման մոդուլը թիրախային օպերացիոն համակարգի դիսկրետ տեղից `զգալի տեխնիկական կարողությունների քիչ կարիք ունենալով:

Անվտանգություն և միացում

Սարքերը պետք է ներառեն նաև Տրանսպորտային շերտի անվտանգություն (TLS) և ունենան սահմանափակ ավտոմատ միացման հնարավորություն ՝ երկուսն էլ գաղտնիության նկատառումներով: Դիզայներների մտադրությունն է անլար ինտերֆեյսի միջոցով ցուցադրման հետ կապը դարձնել օգտվողի անունից կանխամտածված գործողություն `սխալմամբ զգայուն նյութերի հեռարձակումից խուսափելու համար:

Ներկայիս կարգավիճակը

Մինչև այս պահը, ծրագրի վիճակը դեռ շատ ընթացքի մեջ է: Որպեսզի ընթացիկ վերջնական կետի օգտվողը օգուտ քաղի այս ձեռնարկից, նա պետք է ունենա ուժեղ տեխնիկական պատկերացում ներդրված համակարգի ձևավորման վերաբերյալ և պետք է որոշակի ծանոթ լինի համատեղ աշխատող ծրագրավորվող ապարատին և ներդրված ծրագրակազմին:

Theանցով ուղարկվող տվյալները այս պահին գաղտնագրված չեն և ենթադրվում է, որ TCP/IP փաթեթների հում փոխանցում են:

Տեսամիջուկ նախագիծը հաջողությամբ փորձարկվել է ինչպես փոխանցման, այնպես էլ ստացման համար: Մյուս կողմից, երկու zybo տախտակների միջև անլար կապը հաստատվեց, և փորձարկման շրջանակի տվյալները հաջողությամբ ուղարկվեցին: Այնուամենայնիվ, դեռ անհրաժեշտ է միավորել ցանցի ծածկագիրը յուրաքանչյուր վիդեո հիմնական ծրագրի համար և ստուգել իրական տեսաֆիլմերի փոխանցումը:

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