Բովանդակություն:
- Քայլ 1. Կարգավորեք Zynq ծրագրավորվող տրամաբանությունը հաղորդիչի համար
- Քայլ 2. Կարգավորեք Zynq ծրագրավորվող տրամաբանությունը ստացողի համար
- Քայլ 3: Կարգավորեք VDMA վարորդը
- Քայլ 4: Կարգավորեք Nanorouter ցանցը
- Քայլ 5. Ստեղծեք տվյալների փոխանցման համար Zynq մշակման համակարգ Ethernet- ի միջոցով
- Քայլ 6. Տեղադրեք Zynq մշակման համակարգը տվյալների ընդունման համար Ethernet- ի միջոցով
- Քայլ 7: Միացրեք ձեր Zybo տախտակները HDMI աղբյուրին և HDMI լվացարանին
- Քայլ 8. Բարելավման այլընտրանքային գաղափարներ
- Քայլ 9: Մատչելիություն
Video: WIDI - Անլար HDMI ՝ օգտագործելով Zybo (Zynq զարգացման խորհուրդ). 9 քայլ (նկարներով)
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:49
Երբևէ ցանկացե՞լ եք, որ դուք կարողանայիք ձեր հեռուստացույցը միացնել համակարգչին կամ նոութբուքին ՝ որպես արտաքին մոնիտոր, բայց չէ՞ք ցանկանա, որ այդ բոլոր ձանձրացնող լարերը խանգարեն ձեզ: Եթե այո, ապա այս ձեռնարկը հենց ձեզ համար է: Թեև կան որոշ ապրանքներ, որոնք հասնում են այս նպատակին, 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 ծրագրավորվող տրամաբանությունը հաղորդիչի համար
Հաղորդիչի ծրագրավորվող տրամաբանությունը զարգացնելու մեր մոտեցումն այն էր, որ համակարգչից 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- ն պետք է անջատված լինի: ***
Ահա Հաղորդիչների նախագծման բլոկ ստեղծելու քայլերը
- Նոր նախագիծ ստեղծելիս լավ գաղափար է նախագծին չիպ կամ տախտակ նշանակելը: Այս հղումը նկարագրում է, թե ինչպես ավելացնել նոր տախտակի ֆայլեր Vivado գրացուցակում և ճիշտ տախտակը կապել ձեր նախագծի հետ: Այն օգտակար կլինի Մշակման համակարգի բլոկը ավելացնելիս և սարքավորումից ծրագրային ապահովման անցնելիս (SDK կողմ):
-
Ավելացրեք հետևյալ բլոկները.
- dvi2rgb
- Տեսանյութը Axi4-stream- ում
- Timամանակի վերահսկիչ
- axi4-stream- ը դուրս գալու համար
- rgb2dvi
- AXI VDMA x2
- AXI GPIO x2
- Clամացույցի կախարդ
- Մշտական
- Zynq մշակման համակարգ
- Մշակման համակարգը ավելացնելիս կտտացրեք «Գործարկել արգելափակման ավտոմատացումը» վերին կանաչ գույնի սանդղակից և համոզվեք, որ ընտրված է «Դիմել տախտակի նախադրվածը» տարբերակը: Մնացած ամեն ինչը թողեք կանխադրված:
- Յուրաքանչյուր բլոկի կազմաձևման պատուհանի պատկերները կարելի է գտնել վերը նշված պատկերներում: Եթե որոշակի պատուհանի պատկեր չեք տեսնում, պարզապես թողեք այն որպես կանխադրված:
-
Սկսեք 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
- Մինչև «Գործարկել միացման ավտոմատացումը» կտտացնելը, համոզվեք, որ միացրեք վիդեո բլոկները, ինչպես երևում է վերևում TX բլոկի դիզայնի պատկերում: Դուք կցանկանաք հաստատունը վերանվանել VDD և սահմանել արժեքը 1. Համապատասխանաբար միացրեք տեսաբլոկները:
- HDMI TMDS ժամացույցը և տվյալների կապերը արտաքին դարձրեք rgb2dvi և dvi2rgb բլոկների վրա
- Ստեղծեք մուտքային և ելքային պորտ ՝ տաք վարդակից հայտնաբերելու ազդանշանի (HPD) համար և միացրեք դրանք միասին, դրանք սահմանված են սահմանափակումների ֆայլում
-
Պիքսելային ժամացույցը վերականգնվում է TMDS_Clk_p- ից, որը ստեղծվում է սահմանափակումների ֆայլում: Դա կլինի 74.25 ՄՀց ՝ 720p բանաձևին համապատասխան: Կարևոր է միացնել պիքսելային ժամացույցը (dvi2rgb բլոկից) հետևյալ կապումներին.
- vid_io_in_clk (վիդեո առանցքային հոսքի արգելափակման մեջ)
- vid_io_out_clk (առանցքային հոսք դեպի վիդեո բլոկ)
- clk (ժամանակի վերահսկիչ)
- PixelClk (rgb2dvi)
- *** Նշում. Ներկայումս պիքսելային ժամացույցի վերականգնումն ակտիվացնելու համար HDMI rx և tx միակցիչները պետք է միացված լինեն ակտիվ աղբյուրին/լվացարանին: Սրա շուրջ մեկ տարբերակ ՝ տեսահոլովակի rx և tx բլոկները բաժանել ժամացույցի տարբեր տիրույթների (այլ կերպ ասած ՝ գեներացնել 74.25 ՄՀց նոր ժամացույց ՝ tx բլոկին կերակրելու համար): ***
- Հաջորդը կարգավորեք ժամացույցի հրաշագործը, որպեսզի ունենաք 100 ՄՀց մուտք (գլոբալ բուֆերային աղբյուր) և 3 ելքային ժամացույց @ 50 ՄՀց (AXI-Lite ժամացույց), 150 ՄՀց (AXI4-Stream ժամացույց), 200 ՄՀց (dvi2rgb RefClk քորոց):
- Միացրեք FCLK_CLK0 մշակման համակարգի քորոցը ժամացույցի հրաշագործի մուտքին
- Այս պահին կտտացրեք «Գործարկել միացման ավտոմատացումը» դիզայնի պատուհանի վերևում գտնվող կանաչ սանդղակից: Լավ գաղափար է դա անել միանգամից մեկ բլոկի համար և հետևել վերը նշված TX բլոկի ձևավորման պատկերին:
- Գործիքը կփորձի ավելացնել AXI Interconnect- ը, որը հանդես է գալիս որպես հիմնական/ստրուկ փոխկապակցում այն բլոկների համար, որոնք օգտագործում են AXI-Lite ավտոբուսը (VDMA և GPIO):
- Այն նաև կավելացնի AXI SmartConnect- ը, որը հանդես է գալիս որպես հիմնական/ստրուկ փոխկապակցում VDMA- ի կողմից օգտագործվող AXI4-Stream և High Performance պրոցեսորային միջերեսների համար (Stream to Memory Map և հակառակը):
- Գործիքը կավելացնի նաև Processor System Reset- ը: Համոզվեք, որ սա կապված է միայն VDMA- ների, GPIO- ների և պրոցեսորների հետ կապված բլոկների հետ: Մի միացրեք այն որևէ վիդեո բլոկի (այսինքն ՝ dvi2rgb, ժամանակի վերահսկիչ, տեսանյութ հոսքի համար և այլն)
- Միացման ավտոմատացումն ավարտվելուց հետո ստուգեք, որ կապերը համընկնում են TX բլոկի դիզայնի պատկերի հետ: Դուք կնկատեք համակարգային ILA- ի լրացուցիչ բլոկ, որը չի նշվել: Սա միայն վրիպազերծման համար է և առայժմ դրա կարիքը չկա: Այն օգտագործում է 150M Processor Reset, այնպես որ դա նույնպես անհրաժեշտ չէ: Whereանկացած վայրում, որտեղ տեսնում եք փոքրիկ կանաչ «վրիպակներ» ավտոբուսների վրա, դա ILA- ի պատճառով է եւ կարող է անտեսվել:
- Վերջնական քայլը ծրագրի աղբյուրների ծառի վրա աջ սեղմել բլոկի ձևավորման վրա և ընտրել «Ստեղծել HDL փաթաթիչ»: Եթե պլանավորում եք փաթեթավորմանը ավելացնել տրամաբանությունը, այն ամեն անգամ ընտրվելուց հետո կգրվի:
- SDK- ի կողմում մանրամասների համար տե՛ս VDMA Driver Setup բաժինը:
Clամացույցներ և վերագործարկումներ
Ես գտա, որ ծրագրավորվող տրամաբանական նախագծի ամենակարևոր ասպեկտները ժամացույցի տիրույթների և վերակայման ազդանշանների մանրակրկիտ դիտարկումն է: Եթե դրանք ճիշտ կազմաձևված են, ապա դուք լավ կկարողանաք ձեր դիզայնը գործի դնել:
Pixel ժամացույց և ժամաչափը կողպված է
Որոշ ազդանշանների ակտիվ լինելը ստուգելու համար լավ գաղափար է ՝ այդ ազդանշանները կապել LED- ների հետ (ժամացույցներ, վերակայումներ, կողպեքներ և այլն): Երկու ազդանշան, որոնք ես օգտակար գտա հաղորդիչ տախտակին հետևելու համար, եղել են պիքսելային ժամացույցը և AXI4-Stream- ի «կողպված» ազդանշանը ՝ վիդեո դուրս գալու համար, ինչը ձեզ ասում է, որ տեսանյութի ժամանակը համաժամացվել է ժամանակի վերահսկիչի և տեսաաղբյուրի հետ: տվյալները: Ես որոշ տրամաբանություն եմ ավելացրել դիզայնի բլոկի փաթաթանին, որը հետևում է պիքսելային ժամացույցին ՝ օգտագործելով dvi2rgb բլոկի PixelClkLocked ազդանշանը ՝ որպես վերականգնում: Ես այստեղ կցել եմ ֆայլը որպես hdmi_wrapper.v: Արգելքների ֆայլը նույնպես կցված է այստեղ:
Քայլ 2. Կարգավորեք Zynq ծրագրավորվող տրամաբանությունը ստացողի համար
Ստացողի համար ծրագրավորվող տրամաբանական բլոկն ավելի պարզ է: Հիմնական տարբերությունը, բացի բացակայող hdmi մուտքային բլոկներից, վերականգնված պիքսելային ժամացույցի բացակայությունն է: Այդ պատճառով մենք պետք է ստեղծենք մեր սեփականը ժամացույցի հրաշագործից: Այս դիզայնը պետք է կատարվի հաղորդիչից առանձին նախագծում: Մեր նպատակների համար ընդունիչի նախագիծը հետևեց Zybo 7Z-20 տախտակին, իսկ Հաղորդիչը `Z7-10 տախտակին: Տախտակների վրա FPGA- ները տարբեր են, այնպես որ… զգույշ եղեք:
Ահա Ստացողի նախագծման բլոկ ստեղծելու քայլերը
-
Ձեր դիզայնին ավելացրեք հետևյալ ip բլոկները.
- Timամանակի վերահսկիչ
- AXI4-Stream to Video Out
- RGB- ից DVI- ին
- AXI VDMA
- AXI GPIO
- Մշակման համակարգ
- Clամացույցի կախարդ
- Մշտական (VDD- ն սահմանել է 1)
- Այս բլոկների կազմաձևման համար հետևեք նույն օրինակին, ինչ հաղորդիչը: Այստեղ ներառված են կազմաձևերի նշանակալի տարբերությունների պատկերները: Մյուսները մնում են նույնը, ինչ Հաղորդիչն է:
- Կազմաձևեք VDMA- ն այս դիզայնի համար միայն որպես ընթերցված ալիք: Անջատեք գրելու ալիքը:
-
Clockամացույցի հրաշագործը պետք է կազմաձևվի հետևյալ ելքերի համար.
- clk_out1: 75 ՄՀց (պիքսելային ժամացույց)
- clk_out2: 150 ՄՀց (հոսքի ժամացույց)
- clk_out3: 50 ՄՀց (առանցքային ժամացույց)
- Միացրեք վիդեո բլոկները, ինչպես ցույց է տրված RX բլոկի դիզայնի պատկերում:
- Այնուհետև գործարկեք կապի ավտոմատացումը, որը կավելացնի AXI Interconnect, AXI SmartConnect և System Reset բլոկները և կփորձի կատարել համապատասխան կապեր: Դանդաղ գնացեք այստեղ ՝ համոզվելու համար, որ այն չի կատարում անցանկալի կապեր:
- HDMI TMDS ժամացույցը և տվյալների կապերը արտաքին դարձրեք rgb2dvi բլոկի վրա
- Այս դիզայնի վրա տաք վարդակից ազդանշանի կարիք չկա:
Քայլ 3: Կարգավորեք 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 ցանցը
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- ի միջոցով
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 փոխանցող սարքի ընթացակարգը հետևյալն է.
- Նախագծեք TCP ցանցը ՝ օգտագործելով մերկ մետաղական LWIP վարորդի գործառույթի կանչերը:
- Նշեք ցանցի գործունեության համար անհրաժեշտ հետ կանչման ցանկացած գործառույթ:
- Միացեք WiDi ընդունիչին ՝ միանալով նրա IP հասցեին և նավահանգստին (մեր կազմաձևը. Ստացողի IP- ն է 192.168.0.9, միացեք 7 -րդ պորտին):
- Երբ VDMA վարորդի ժամաչափը լրանում է, մուտքագրեք TX ISR:
- Որոշեք մուտքի ներկայիս շրջանակի բուֆերը `հիմնվելով VDMA գորշ կոդի վրա
- Հավաքեք տվյալների առաջին հատվածը TCP ուղարկելու բուֆերում
- Մուտքագրեք տվյալները և թարմացրեք տեղական փոփոխականները ՝ հետևելու համար, թե որքան տվյալներ են ուղարկվել ընթացիկ շրջանակից:
- Ստացված հետադարձ կապին հասնելուց հետո (գործառույթի կանչը, որը կատարվել է այն բանից հետո, երբ հաղորդիչը ստանում է տվյալների որոնման հաստատում), հերթագրեք տվյալների հաջորդ հատվածը:
- Կրկնեք 7 և 8 քայլերը, մինչև ամբողջ շրջանակն ուղարկվի:
- Վերադառնալ պարապ վիճակի ՝ սպասելու, որ հաջորդ ժամաչափի ընդհատումը ցույց տա, որ նոր շրջանակը պատրաստ է (Վերադառնալ քայլ 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 ընդունման առաջադրանք.
- Նախնականացնել TCP ցանցը ՝ օգտագործելով մերկ մետաղական LWIP վարորդի գործառույթի կանչերը (կարգաբերում IP հասցեով, որին հաղորդիչը կկապի, մեր ՝ 192.168.0.9)
- Նշեք ցանցի գործունեության համար անհրաժեշտ հետ կանչման ցանկացած գործառույթ:
- Ethernet փաթեթ ստանալուց հետո պատճենեք տվյալների տվյալները ցանցի ընթացիկ բուֆերում, ավելացրեք ընթացիկ կուտակված տվյալները:
- Եթե փաթեթը լրացնում է ցանցի շրջանակի բուֆերը, շարունակեք քայլերը 5 և 6. Հակառակ դեպքում, այս առաջադրանքից ետ շրջեք դեպի քայլ 3:
- ազդանշան, որ VDMA եռակի շրջանակի բուֆերային առաջադրանքը պետք է պատճենվի նոր ավարտված ցանցի բուֆերից:
- Անցեք ցանցի մյուս բուֆերին և շարունակեք տվյալների հավաքումը ethernet- ի միջոցով:
- Պարապ մնացեք մինչև նոր ethernet փաթեթը ստացվի (քայլ 3):
Պատճենեք ցանցի բուֆերը VDMA եռակի շրջանակի բուֆերի մեջ.
- Երբ VDMA վարորդի ժամաչափը լրանում է, մուտքագրեք RX ISR:
- Որոշեք մուտքի ներկայիս շրջանակի բուֆերը `հիմնվելով VDMA գորշ կոդի վրա:
- Որոշեք, թե որ ցանցի բուֆերն է պատճենվելու VDMA բուֆերում և պատճենեք այդ տվյալները
Քայլ 7: Միացրեք ձեր 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 տախտակների միջև անլար կապը հաստատվեց, և փորձարկման շրջանակի տվյալները հաջողությամբ ուղարկվեցին: Այնուամենայնիվ, դեռ անհրաժեշտ է միավորել ցանցի ծածկագիրը յուրաքանչյուր վիդեո հիմնական ծրագրի համար և ստուգել իրական տեսաֆիլմերի փոխանցումը:
Խորհուրդ ենք տալիս:
DIY ESP32 զարգացման խորհուրդ - ESPer: 5 քայլ (նկարներով)
DIY ESP32 զարգացման խորհուրդ - ESPer. Այսպիսով, վերջերս ես կարդում էի շատ IoT- ների (իրերի ինտերնետ) մասին և վստահում ինձ, ես պարզապես չէի սպասում սպասել այս հիանալի սարքերից մեկի փորձարկմանը `ինտերնետին միանալու ունակությամբ, ինքս և ձեռքս վերցրեք աշխատանքի: Բարեբախտաբար, հնարավորություն
JALPIC One զարգացման խորհուրդ. 5 քայլ (նկարներով)
JALPIC One Development Board. Եթե հետևում եք իմ Instructables նախագծերին, ապա գիտեք, որ ես JAL ծրագրավորման լեզվի մեծ երկրպագու եմ PIC միկրոկոնտրոլերի հետ համատեղ: JAL- ը Պասկալի նման ծրագրավորման լեզու է, որը մշակվել է Microchip- ի 8-բիթանոց PIC միկրոկոնտրոլերների համար: Մո
ESP-12E և ESP-12F ծրագրավորման և զարգացման խորհուրդ. 3 քայլ (նկարներով)
ESP-12E և ESP-12F ծրագրավորման և զարգացման խորհուրդ. Այս խորհրդի գործառույթը պարզ էր. Կարողացեք ծրագրավորել ESP-12E և ESP-12F մոդուլները նույնքան հեշտ, որքան NodeMCU տախտակները (այսինքն `կոճակները սեղմելու կարիք չկա): Ունեցեք հացաթխման համար հարմար կապում ՝ օգտագործելի IO- ին հասանելիությամբ: Սերիական փոխանցման համար օգտագործեք առանձին USB
Պարոն Է.Z. Խողովակների զարգացման խորհուրդ. 4 քայլ (նկարներով)
Պարոն Է.Z. Խողովակների զարգացման խորհուրդ. Նպատակը/նպատակը. Պարոն Է.Z. Tube- ն էժան վակուումային խողովակի աուդիո հարթակ է `առանց« երկաթի ». Չկա էներգիայի տրանսֆորմատոր, չկա ելքային տրանսֆորմատոր (ներ): Խողովակների ուժեղացուցիչը սովորաբար կունենա մի քանի ծանր, թանկարժեք տրանսֆորմատորներ. Ելքային տրանսֆորմատորներ, որոնք պաշտպանում են խոսքը
UDuino. Շատ ցածր գնով Arduino համատեղելի զարգացման խորհուրդ. 7 քայլ (նկարներով)
UDuino. Շատ ցածր գնով Arduino համատեղելի զարգացման խորհուրդ. Arduino տախտակները հիանալի են նախատիպերի պատրաստման համար: Այնուամենայնիվ, դրանք բավականին թանկ են դառնում, երբ դուք ունեք միաժամանակ մի քանի նախագծեր կամ ավելի մեծ ծրագրի համար անհրաժեշտ են բազմաթիվ հսկիչ տախտակներ: Կան մի քանի հիանալի, ավելի էժան այլընտրանքներ (Boarduino, Freeduino), բայց