Sisukord:

WIDI - traadita HDMI Zybo abil (Zynq Development Board): 9 sammu (piltidega)
WIDI - traadita HDMI Zybo abil (Zynq Development Board): 9 sammu (piltidega)

Video: WIDI - traadita HDMI Zybo abil (Zynq Development Board): 9 sammu (piltidega)

Video: WIDI - traadita HDMI Zybo abil (Zynq Development Board): 9 sammu (piltidega)
Video: Krtkl Snickerdoodle wifi setup 2024, Juuli
Anonim
WIDI - traadita HDMI Zybo abil (Zynq Development Board)
WIDI - traadita HDMI Zybo abil (Zynq Development Board)
WIDI - traadita HDMI Zybo abil (Zynq Development Board)
WIDI - traadita HDMI Zybo abil (Zynq Development Board)

Kas olete kunagi soovinud, et saaksite teleri välise monitorina arvutiga või sülearvutiga ühendada, kuid ei tahtnud, et kõik need tüütud juhtmed oleksid takistatud? Kui jah, siis see õpetus on just teile! Kuigi selle eesmärgi saavutamiseks on mõningaid tooteid, on isetegemise projekt palju rahuldustpakkuvam ja potentsiaalselt odavam.

See kontseptsioon erineb sellistest toodetest nagu chromecast, kuna see on mõeldud voogesitusseadme asemel HDMI -kaabli asemel, mis ühendatakse monitoriga.

Meie projekt loodi San Luis Obispo California osariigi polütehnilise ülikooli reaalajas opsüsteemide kursuse lõputööna.

Projekti eesmärk on kasutada kahte Digilent Zybo plaati, et olla traadita side liides HDMI-saatja (arvuti, blu-ray jne) ja HDMI vastuvõtuseadme (lauaarvuti, projektor, teler jne) vahel.

Üks Digilent Zybo ühendatakse edastava seadmega HDMI kaudu ja teine vastuvõtjaga HDMI kaudu.

Traadita side toimub saatjale ja vastuvõtjale mõeldud traadita kohtvõrgu abil, ilma et see suunataks läbi koduse ruuteri või muu sellise seadme. Selle projekti jaoks kasutatav traadita moodul on tplink wr802n nanorouter, millest üks töötab võrgu loomiseks juurdepääsupunktina ja teine võrguga ühenduse loomiseks kliendina. Iga nanorouter ühendatakse Etherneti kaabli kaudu kas Zybo plaadiga. Nende ruuteritega ühendatuna suhtlevad seadmed TCP kaudu, nagu oleksid nad ühendatud ühe Etherneti kaabliga (see tähendab, et ühenduse loomiseks on vaja ainult konfiguratsiooni kliendi IP -aadress).

Kuigi projekti eesmärk oli hõlbustada 1080x720 video @ 60Hz voogu, ei olnud see saavutatav traadita võrgu ribalaiuse piirangute ja reaalajas video tihendamise puudumise tõttu, et vähendada saatmiseks vajalikke andmeid. Selle asemel on see projekt selle eesmärgi saavutamiseks tulevase arengu raamistik, kuna see on rangelt piiranud kaadrisageduse piiranguid HDMI -andmete nõuetekohaseks voogesitamiseks.

Projekti nõuded:

2x Digilent Zybo arendusplaati (peab olema vähemalt üks HDMI -port)

2x HDMI kaablit

2x microusb kaablit (arendamiseks Zybo ühendamiseks arvutiga)

2x tplink wr802n nanoroutereid (sealhulgas adtl. 2x microusb ja seinakontakti toiteadapterid)

2x Etherneti kaablit

*** Märkus. See õpetus eeldab Vivado disainikomplekti tundmist ja kogemusi uue projekti ja plokkide kujundamisel. ***

Samm: konfigureerige saatja Zynqi programmeeritav loogika

Zynqi programmeeritava loogika seadistamine saatja jaoks
Zynqi programmeeritava loogika seadistamine saatja jaoks
Zynqi programmeeritava loogika seadistamine saatja jaoks
Zynqi programmeeritava loogika seadistamine saatja jaoks
Zynqi programmeeritava loogika seadistamine saatja jaoks
Zynqi programmeeritava loogika seadistamine saatja jaoks

Meie lähenemisviis saatja programmeeritava loogika väljatöötamisele oli hdmi-hdmi edastamine arvutist monitorile, kasutades kahte VDMA (Video Direct Memory Access) plokki, üks kirjutamiseks ja teine lugemiseks.

Mõlemad on valitud vabalt jooksvaks, 3 kaadripuhverrežiimi (0-1-2). Kuna videosüdamik on optimeeritud 60 kaadrit sekundis, tähendab see, et VDMA kirjutab või loeb uuele kaadrile iga 16,67 ms järel selles järjekorras: 0, 1, 2, 0, 1, 2, 0, 1, 2. Iga kaadri DDR -mälu asukohad on kahe VDMA puhul erinevad, kuna need pole enam üksteisega sünkroonitud. Selle asemel kasutatakse riistvara taimerit (TTC1), mis on konfigureeritud sagedusele 60 Hz, andmete sünkroonimiseks kahe mälukoha vahel.

Ülaltoodud pildil on näha 3 kaadrit, nende mõõtmed ja mälumaht (kaadrist paremal). Kui määrame nendele mälukohtadele kirjutamise VDMA, saame loetud VDMA mälu asukohad määrata sellest komplektist kaugemale, näiteks alustades 0x0B000000. Iga kaader koosneb 1280*720 pikslist ja iga piksel koosneb 8 bitist punasest, rohelisest ja sinisest, kokku 24 bitti. See tähendab, et raam koosneb 1280*720*3 baidist (2,76 MB).

Taimeri IRQ sees, mida on kirjeldatud VDMA draiveri seadistuses, hakatakse kopeerima andmeid kahe VMDA mälukoha vahel. VDMA pakub kursorit praegusele kaadrile, millele kirjutatakse või millest loetakse. Raami tähistab konkreetne hall kood, mis teisendatakse tarkvaras. Halli koodi definitsioonid 3 kaadripuhverkonfiguratsiooni jaoks on toodud A lisa AXI VDMA tootejuhendis.

See võimaldab meil kirjutatavat sisu mällu kopeerida, lugemata hetkel kirjutatud raamist.

*** Pange tähele, et loetud VDMA -d ei kasutata andmete saatmisel traadita võrgu kaudu. Selle ainus eesmärk on kontrollida kirjutamise VMDA -st mälu kopeerimise nõuetekohast toimimist. VMDA lugemine tuleks keelata. ***

Saatja kujundusploki loomiseks toimige järgmiselt

  1. Uue projekti loomisel on hea projektile määrata kiip või tahvel. See link kirjeldab, kuidas lisada Vivado kataloogi uusi tahvlifaile ja seostada oma projektiga õige tahvel. See on kasulik töötlemissüsteemi ploki lisamisel ja riistvaralt tarkvarale üleminekul (SDK pool).
  2. Lisage järgmised plokid:

    • dvi2rgb
    • Video Axi4 voogu
    • Ajastuse kontroller
    • axi4-stream, et vid välja
    • rgb2dvi
    • AXI VDMA x2
    • AXI GPIO x2
    • Kellaviisard
    • Pidev
    • Zynq töötlemissüsteem
  3. Töötlussüsteemi lisamisel klõpsake ülemises rohelises ribas nuppu "Käivita plokkide automatiseerimine" ja veenduge, et valik "Rakenda plaadi eelseade" on valitud. Jäta kõik muu vaikimisi.
  4. Iga ploki konfiguratsiooniakna pilte leiate ülaltoodud piltidelt. Kui te ei näe konkreetse akna pilti, jätke see vaikeseadeks.
  5. Alustage Zynq töötlemissüsteemi konfigureerimist:

    • PS-PL Configuration AXI Non Secure Enable GP Master AXI lubage M AXI GP0 liides
    • PS-PL konfiguratsioonis HP Slave AXI Interface lubage nii HP0 kui ka HP1
    • Veenduge, et MIO konfiguratsioonis oleks ENET0 lubatud I/O välisseadmete all, seejärel rakenduse protsessor, lubage Timer0
    • Clock Configuration PL Fabric Clocks lubage FCLK_CLK0 ja seadke 100 MHz.
    • Klõpsake nuppu OK
  6. Enne käsu „Käivita ühenduse automatiseerimine” klõpsamist ühendage kindlasti videoblokid, nagu on näha ülaltoodud TX -ploki kujunduspildil. Soovite konstandi ümber nimetada VDD -ks ja seada väärtuseks 1. Ühendage videoblokid vastavalt.
  7. Muutke HDMI TMDS kell ja andmestikud rgb2dvi ja dvi2rgb plokkidele väliseks
  8. Looge tulipistiku tuvastussignaali (HPD) sisend- ja väljundport ning ühendage need kokku, need on määratletud piirangute failis
  9. Pikslikell taastatakse piirangute failis loodud TMDS_Clk_p -st. See on 74,25 MHz vastavalt 720p eraldusvõimele. Oluline on ühendada pikslikell (plokist dvi2rgb) järgmiste tihvtidega:

    • vid_io_in_clk (vid in axi stream block)
    • vid_io_out_clk (aksivoog videoväljalaskmiseks)
    • clk (ajastuskontroller)
    • PixelClk (rgb2dvi)
  10. *** Märkus. Praegu tuleb pikslite kella taastamise aktiveerimiseks HDMI rx ja tx pistikud ühendada aktiivse allika/valamuga. Üks võimalus sellest on video rx- ja tx -plokkide eraldamine erinevateks kelladomeenideks (teisisõnu, genereerida uus 74,25 MHz kell, mida tx -plokile ette anda). ***
  11. Järgmisena seadistage kellaviisard nii, et teil oleks 100 MHz sisend (globaalne puhverallikas) ja 3 väljundkella @ 50 MHz (AXI-Lite kell), 150 MHz (AXI4-Stream kell), 200 MHz (dvi2rgb RefClk pin).
  12. Ühendage töötlussüsteemi tihvt FCLK_CLK0 kellaviisardi viisardiga
  13. Siinkohal klõpsake kujundusakna ülaosas oleval rohelisel ribal käsul „Käivita ühenduse automatiseerimine”. See on hea mõte teha üks plokk korraga ja järgida ülaltoodud TX ploki kujunduspilti.
  14. Tööriist üritab lisada AXI Interconnecti, mis toimib AXI-Lite bussi (VDMA ja GPIO) kasutavate plokkide ülem-/alamühendusena.
  15. See lisab ka AXI SmartConnecti, mis toimib VDMA (voo mälukaardile ja vastupidi) kasutatavate AXI4-Streami ja suure jõudlusega protsessori liideste ülem-/alamühendusena.
  16. Tööriist lisab ka protsessori süsteemi lähtestamise. Veenduge, et see on ühendatud ainult VDMA -de, GPIO -de ja protsessoriga seotud plokkidega. Ärge ühendage seda ühegi videoblokiga (nt dvi2rgb, ajastusregulaator, voogesituse video jne)
  17. Kui ühenduse automatiseerimine on lõpule viidud, kontrollige, kas ühendused vastavad TX -ploki kujunduspildile. Märkate täiendavat süsteemi ILA blokeeringut, mida pole mainitud. See on mõeldud ainult silumiseks ja praegu pole seda vaja. See kasutab 150M protsessori lähtestamist, seega pole seda ka vaja. Kõikjal, kus näete bussides väikseid rohelisi "vigu", see on ILA tõttu ja seda saab ignoreerida.
  18. Viimane samm on hiire parema nupuga klõpsata ploki kujundusel projekti allikate puus ja valida "Loo HDL -pakend". Kui kavatsete ümbrikule lisada loogika, kirjutatakse see iga kord selle valimisel üle.
  19. SDK poole üksikasju leiate jaotisest VDMA draiveri seadistamine.

Kellad ja lähtestamine

Olen avastanud, et mis tahes programmeeritava loogikaprojekti kõige olulisemad aspektid on kella domeenide ja lähtesignaalide hoolikas kaalumine. Kui need on õigesti konfigureeritud, saate oma disaini tööle panna.

Pixeli kell ja ajastus lukustatud

Selleks, et kontrollida, kas teatud signaalid on aktiivsed, on hea siduda need signaalid valgusdioodidega (kellad, lähtestused, lukud jne). Kaks signaali, mida leidsin saatjaplaadil abiks olevat, olid pikslikell ja AXI4-Stream to video out ploki lukustatud signaal, mis ütleb teile, et video ajastus on ajakontrolleri ja videoallikaga sünkroonitud andmed. Olen lisanud kujundusploki ümbrisesse loogika, mis jälgib pikslite kella, kasutades lähtestamiseks dvi2rgb ploki signaali PixelClkLocked. Lisasin faili siia kui hdmi_wrapper.v. Piirangute fail on samuti siia lisatud.

2. samm: konfigureerige Zynqi programmeeritav loogika vastuvõtja jaoks

Zynqi programmeeritava loogika seadistamine vastuvõtja jaoks
Zynqi programmeeritava loogika seadistamine vastuvõtja jaoks
Zynqi programmeeritava loogika seadistamine vastuvõtja jaoks
Zynqi programmeeritava loogika seadistamine vastuvõtja jaoks
Zynqi programmeeritava loogika seadistamine vastuvõtja jaoks
Zynqi programmeeritava loogika seadistamine vastuvõtja jaoks

Vastuvõtja programmeeritava loogika plokk on lihtsam. Peamine erinevus peale puuduvate hdmi sisendplokkide on taastatud pikslikella puudumine. Sel põhjusel peame kellaviisardist looma oma. See disain tuleks teha saatjast eraldi projektina. Meie jaoks järgis vastuvõtjaprojekt Zybo 7Z-20 plaati ja saatja Z7-10 plaati. Tahvlitel olevad FPGA -d on erinevad, seega … olge ettevaatlik.

Vastuvõtja kujundusploki loomiseks toimige järgmiselt

  1. Lisage oma kujundusele järgmised IP -plokid:

    • Ajastuse kontroller
    • AXI4-Stream videoväljundiks
    • RGB kuni DVI
    • AXI VDMA
    • AXI GPIO
    • Töötlussüsteem
    • Kellaviisard
    • Konstant (VDD seadistatud väärtusele 1)
  2. Järgige nende plokkide seadistamisel sama mustrit nagu saatjal. Siia on lisatud pildid märkimisväärsete konfiguratsioonierinevuste kohta. Teised jäävad saatjaks samaks.
  3. Seadistage selle disaini VDMA ainult lugemiskanaliks. Keela kirjutuskanal.
  4. Kellaviisard tuleks konfigureerida järgmiste väljundite jaoks:

    • clk_out1: 75 MHz (pikslite kell)
    • clk_out2: 150 MHz (voo kella)
    • clk_out3: 50 MHz (axi-lite kell)
  5. Ühendage videoblokid, nagu on näidatud RX -ploki kujunduspildil.
  6. Seejärel käivitage ühenduse automatiseerimine, mis lisab plokid AXI Interconnect, AXI SmartConnect ja System Reset ning proovib luua sobivaid ühendusi. Minge aeglaselt siia, veendumaks, et see ei tekita soovimatuid ühendusi.
  7. Muutke HDMI TMDS kell ja andmestikud rgb2dvi plokis väliseks
  8. Sellel konstruktsioonil pole vaja kuuma pistiku signaali.

Samm: seadistage VDMA draiver

Seadistage VDMA draiver
Seadistage VDMA draiver

AXI-Lite liidese kaudu konfigureeritud erinevate plokkide seadistamine on kõige parem, kui kasutada viitena BSP-ga kaasasolevaid demoprojekte. Pärast disainiriistvara eksportimist ja SDK käivitamist Vivadost soovite lisada uue plaadi tugipaketi ja lisada BSP seadete aknasse teegi lwip202. Avage BSP -st fail system.mss ja näete oma ploki kujundusest pärinevaid välisseadmete draivereid. Valik „Impordinäited” võimaldab importida neid välisseadmeid kasutavaid demoprojekte ja näitab teile, kuidas neid olemasolevate Xilinxi draiverite abil tarkvaras konfigureerida (vt lisatud pilti).

Seda meetodit kasutati VDMA, taimer ja katkestus ning GPIO konfigureerimiseks. Siia on lisatud nii saatmise kui ka vastuvõtmise lähtekood. Erinevused on peaaegu eranditult main.c.

*** MÄRKUS. Kuna süsteem ei ole selle õpetuse kirjutamise ajal täielikult töökorras, ei sisalda selle jaotise lähtekood traadita võrgu koodi. Videotuumade edastamise/vastuvõtmise projektide ja võrgu edastamise/vastuvõtmise projektide kombineerimise tulemusena tuleb lahendada mitu viga. Seetõttu käsitleb see õpetus neid praegu eraldi. ***

TX katkestuskäsitleja funktsioon (IRQHandler)

See funktsioon loeb hallid koodid, mida pakuvad GPIO -plokkide kaudu nii lugemis- kui ka kirjutamis -VDMA -d. Hallid koodid teisendatakse kümnendkohaks ja neid kasutatakse praeguse kaadri kaadri baasmälu asukoha valimiseks. Kopeeritud kaader on eelmine kaader sellele, millele VDMA kirjutab (nt kui VDMA kirjutab kaadrisse 2, kopeerime raami 1; kui kirjutate raami 0, pakime ja loeme kaadrist 2).

Funktsioon salvestab ainult iga kuuenda kaadri, et vähendada kaadrisagedust 10 Hz asemel 60 Hz. Võrgu ülemine piir on 300 Mbps. Kiirus 10 kaadrit sekundis on vajalik ribalaius 221,2 Mbps.

Selle funktsiooni kahe rea kommenteerimine/kommenteerimise tühistamine võimaldab kasutajal silumise/testimise eesmärgil lülituda HDMI passthru-režiimi (koodi kommenteeritakse vastavate ridade tähistamiseks). Praegu kopeerib see kaadri mälupessa, mida kasutab Etherneti kood.

Vastuvõtmise katkestamise käitleja funktsioon (IRQHandler)

See funktsioon on väga sarnane TX -funktsiooniga, kuid see kopeerib 2 -puhvrist FIFO -st, mida Ethernet kasutab sissetulevate andmete kirjutamiseks. Etherneti kood näitab, millisesse kaadrisse FIFO kirjutatakse, andmed kopeeritakse vastaskaadrist. Rebenemise vältimiseks kopeeritakse andmed kaadrisse otse selle taga, mida VDMA loeb.

Samm: seadistage Nanorouteri võrk

Seadistage Nanorouteri võrk
Seadistage Nanorouteri võrk

TPlinki nanorouterite abil võrgu loomiseks lülitage need ükshaaval sisse ja ühendage seadmete vaike -WiFi -SSID -ga. Lisateavet selle konkreetse seadme konfiguratsiooniseadete kohta leiate seadme kasutusjuhendist.

Seadistage üks seadmetest pääsupunktiks, see toimib võrgu esmase ühendusena. Pange kindlasti võrgule nimi ja märkige nimi ning keelake DHCP (me ei taha, et ruuter konfigureeriks IP -aadresse dünaamiliselt, tahame, et tansmitter ja vastuvõtja Zybo tahvlid määraksid oma IP -aadressid ise nii, et need oleksid järjepidevad). Pärast seadistamist veenduge, et seade taaskäivitub ja loob selle võrgu.

Seadistage teine seade kliendiks ja veenduge, et see ühendub võrgu SSID -ga, mille seadistasite esimese nanorouteriga. Veenduge veel kord, et DHCP oleks kliendi jaoks keelatud.

Kui klient on lõpetanud ja taaskäivitanud, peaks see looma ühenduse pääsupunkti nanorouteriga (kui ei, siis on tõenäoliselt probleem ühe seadme konfiguratsioonis). Märkate, et kliendi LED -tuli põleb pidevalt, kui see on pöörduspunktiga ühendatud.

Tõenäoliselt jätkab pääsupunkti nanorouteri LED -i vilkumine sel hetkel, see on okei! Vilkuv tuli tähendab, et see ei ole Etherneti pordist teise seadmega ühendatud ja kui see on konfigureeritud Zybo -ga ühendatud, jääb LED põlema, mis näitab edukat võrguühendust.

Nüüd, kui oleme oma nanorouterid seadistanud, on meil traadita võrk, mis võimaldab meil suhelda. Oluline märkus on see, et meie konfiguratsioonimeetod nanorouteritele (pääsupunktiks ja kliendiks) võimaldab meil edastavalt Zybo -plaadilt vastuvõtvale Zybo -plaadile suhelda, nagu oleksid need kaks ühendatud ühe Etherneti juhtmega. See muudab meie võrgu seadistamise vähem keeruliseks, kuna alternatiiv hõlmaks tõenäoliselt Zybo plaatide konfigureerimist serveriga ühenduse loomiseks koos kavandatud ühendusega.

Kui mõlemad seadmed on seadistatud, on nanorouterid konfigureeritud ja valmis teie WIDI -võrku rakendamiseks. Nanorouterite ja Zybo plaatide vahel puudub konkreetne sidumine, kuna kas pöörduspunkt või klient töötavad nii saatmis- kui ka vastuvõtuseadme jaoks.

Samm: seadistage Zynqi töötlemissüsteem Etherneti kaudu andmete edastamiseks

Seadistage Zynqi andmetöötlussüsteem Etherneti kaudu andmete edastamiseks
Seadistage Zynqi andmetöötlussüsteem Etherneti kaudu andmete edastamiseks
Seadistage Zynqi andmetöötlussüsteem Etherneti kaudu andmete edastamiseks
Seadistage Zynqi andmetöötlussüsteem Etherneti kaudu andmete edastamiseks

HDMI -andmete edastamiseks ühelt Zybo plaadilt teisele peame VDMA draiverisse lisama Etherneti protokolli. Meie eesmärk on siin voogesitada üksikuid videokaadreid töötlussüsteemi Etherneti välisseadme kaudu määratud kiirusega, mis on kooskõlas meie võrgu ribalaiusega. Oma projekti jaoks kasutasime TCP-d, mida pakub paljasmetallist LwIP API. Kuna mõlemad projekti liikmed on võrguteenuste osas suhteliselt kogenematud, tehti see valik TCP -ga kaasnevaid tagajärgi ja piiranguid täielikult teadvustamata. Selle rakenduse põhiprobleemiks oli piiratud ribalaius ja asjaolu, et see pole tõesti ette nähtud suurte andmemahtude aurutamiseks. Selle projekti alternatiivseid lahendusi TCP asendamiseks ja tbe parandamiseks arutatakse hiljem.

LwIP -ga TCP lühikirjeldus: andmed saadetakse võrgu kaudu pakettides suurusega tcp_mss (maksimaalne TCP segmendi suurus), mis on tavaliselt 1460 baiti. Helistamine tcp_write võtab mõned andmed, millele viitab osuti ja konfigureerib pbufs (pakettpuhvrid) andmeid hoidma ja TCP -toimingute struktuuri pakkuma. Maksimaalne andmete hulk, mida saab korraga järjekorda panna, on määratud tcp_snd_buf (TCP saatja puhverruum). Kuna see parameeter on 16 -bitine number, piirdume saatmispuhvri suurusega 59695 baiti (saatmispuhvris on nõutud täidis). Kui andmed on järjekorda pandud, kutsutakse tcp_output andmete edastamist alustama. Enne järgmise andmete segmendi saatmist on hädavajalik, et kõik eelmised paketid oleks edukalt edastatud. See protsess toimub funktsiooni recv_callback abil, kuna see on funktsioon, mida kutsutakse, kui vastuvõtjalt nähakse kinnitust.

Näidisprojektide kasutamine Vivado SDK -s on väga kasulik LwIP TCP toimimise tundmaõppimiseks ja on hea lähtepunkt uue projekti alustamiseks.

WiDi edastusseadme protseduur on järgmine:

  1. Initsialiseeri TCP-võrk, kasutades tühja metallist LWIP-draiverifunktsioone.
  2. Määrake võrgutoiminguteks vajalikud tagasihelistamisfunktsioonid.
  3. Ühendage WiDi vastuvõtjaga, ühendades selle IP -aadressi ja pordiga (meie konfiguratsioon: vastuvõtja IP on 192.168.0.9, ühendage pordiga 7).
  4. Kui VDMA draiveri taimer aegub, sisestage TX ISR.
  5. Määrake praegune kaadripuhver, millele pääsete juurde, VDMA halli koodi alusel
  6. Järjestage TCP saatmispuhvrisse esimene andmete segment
  7. Väljendage andmed ja värskendage kohalikke muutujaid, et jälgida, kui palju andmeid praegusest kaadrist on saadetud.
  8. Pärast vastuvõetud tagasihelistamist (funktsioonikõne, mis tehti pärast seda, kui saatja sai kinnituse andmete kättesaamise kohta), pange järjekorda järgmine andmete segment.
  9. Korrake samme 7 ja 8, kuni kogu kaader on saadetud.
  10. Naaske jõudeolekusse ja oodake järgmist taimerikatkestust, mis näitab, et uus kaader on valmis (Tagasi 4. sammu juurde).

Veenduge, et seadistate plaadi tugipaketi LwIP seaded, nagu on näidatud ülaltoodud pildil. Kõik väärtused on vaikimisi, välja arvatud tcp_snd_buf, tcp_pueue_ooseq, mem_size, memp_n_tcp_seg. Pange tähele, et üksikasjalikku silumist on võimalik saavutada, muutes rühma debug_options BSP parameetreid.

6. toiming: seadistage Zynqi andmetöötlussüsteem Etherneti kaudu andmete vastuvõtmiseks

Traadita vastuvõtjana toimiv Zybo arendusplaat töötab sarnaselt edastava seadmega. LwIP -plaadi tugipaketi seaded on identsed eelmise sammuga.

Seade võtab nanorouterist sisse videokaadri segmente sisaldavad paketid ja kopeerib videokaadri andmed vastuvõtva VDMA kolmekordse kaadri puhverruumi. Andmete ülekirjutamise vältimiseks kasutatakse nanorouterist andmete kogumisel kahekordset andmepuhvrit (edaspidi võrgupuhvrit), et võrguliiklus saaks voogesitust jätkata ka siis, kui eelmist täisvideokaadrit kopeeritakse VDMA puhver.

WiDi vastuvõtuseadme protseduur nõuab kahte ülesannet, millest üks on Etherneti andmete vastuvõtmine ja teine videokaadrite kopeerimine võrgupuhvrist VDMA kolmekordse kaadri puhvrisse.

Etherneti vastuvõtuülesanne:

  1. Initsialiseeri TCP-võrk, kasutades tühja metallist LWIP-draiverifunktsioone (seadistamine IP-aadressiga, millega saatja ühendub, meie oma 192.168.0.9)
  2. Määrake võrgutoiminguteks vajalikud tagasihelistamisfunktsioonid.
  3. Etherneti paketi vastuvõtmisel kopeerige pakettandmed praegusesse võrgupuhvrisse, suurendage kogunenud andmeid.
  4. Kui pakett täidab võrgukaadri puhvri, jätkake punktidega 5 ja 6. Vastasel korral liikuge selle ülesande juurde tagasi sammu 3 juurde.
  5. annab märku, et VDMA kolmekordse kaadri puhverülesanne peaks kopeerima äsja lõppenud võrgupuhvrist.
  6. Lülituge teisele võrgupuhvrile ja jätkake andmete kogumist Etherneti kaudu.
  7. Ootage, kuni saate uue Etherneti paketi (samm 3).

Võrgu puhvri kopeerimine VDMA kolmekordse kaadri puhvrisse:

  1. Kui VDMA draiveri taimer aegub, sisestage RX ISR.
  2. Määrake praegune kaadripuhver, millele pääsete juurde, VDMA halli koodi alusel.
  3. Tehke kindlaks, milline võrgupuhver VDMA puhvrisse kopeeritakse, ja kopeerige need andmed

Samm: ühendage oma Zybo plaadid HDMI allika ja HDMI valamuga

Ühendage oma Zybo plaadid HDMI allika ja HDMI valamuga
Ühendage oma Zybo plaadid HDMI allika ja HDMI valamuga

Ühendage nüüd vastuvõtja ja saatja hdmi -kaablid, programmeerige FPGA -d ja käivitage töötlemissüsteem. Kaadrisagedus on tõenäoliselt väga aeglane LwIP -operatsiooni tohutu üldkulude ja piiratud ribalaiuse tõttu. Probleemide korral looge ühendus UART -i kaudu ja proovige tuvastada kõik hoiatused või vead.

8. samm: alternatiivsed ideed parandamiseks

Alternatiivsed ideed parandamiseks
Alternatiivsed ideed parandamiseks

Selle projekti suur probleem oli wifi kaudu saatmiseks vajalike andmete hulk. See oli ootuspärane, kuid me alahindasime selle mõju ja selle tulemuseks oli rohkem ekraanipilte kui videovoogu. Selle projekti täiustamiseks on mitu võimalust:

  • Video pakkimine reaalajas. Sissetuleva video voo kaaderhaaval kokkusurumine vähendaks oluliselt võrgu kaudu saadetavate andmete hulka. Ideaalis tehtaks seda riistvaras (mis pole lihtne ülesanne) või seda saaks teha tarkvaras, kasutades teist ARM -i tuuma tihendusalgoritmide käitamiseks (see vajaks ajakulu tagamiseks täiendavat analüüsi). Veebist leidsime mõningaid avatud lähtekoodiga reaalajas videote tihendamise komponente, kuid enamus neist on IP.
  • Etherneti voo juurutamine riistvaras, mitte tarkvaras. Segmentide suuruse piirangute tõttu oli saatjas väljaminevate andmete järjekorda panemiseks ruumi palju üldkulusid. Palju tõhusam protsess on andmete sisestamiseks kasutada AXI Etherneti IP -d koos FIFO -puhvriga või DMA -ga. See vähendaks täiendavat pagasit LwIP TCP -st ja võimaldaks rohkem andmevoogu.

9. samm: juurdepääsetavus

Selle WiDi projekti tulemuseks peaks olema täielikult integreeritud ja kompaktne seadmepaar, mille kasutaja saaks ühendada mis tahes HDMI -allikaga ja seejärel juhtida videovoogu juhtmevabalt HDMI -funktsiooniga ekraanile. Seadmetel oleks Zynq-7000 SoC, mis on leitud Zybo võrdlusplaadilt, ja need sisaldaksid TP-Linki nano-ruuterites leiduvat võrguriistvara. Ideaalis oleks kasutajal võimalik edastusmoodulit sihtoperatsioonisüsteemi diskreetsest kohast juhtida, ilma et oleks vaja märkimisväärseid tehnilisi võimalusi.

Turvalisus ja ühenduvus

Seadmed peaksid sisaldama ka transpordikihi turvalisust (TLS) ja neil peaks olema piiratud automaatse ühenduse loomise võimalus nii privaatsuse huvides. Disainerite eesmärk on muuta ekraaniga ühendamine traadita liidese kaudu kasutaja nimel tahtlikuks tegevuseks, et vältida ekslikult tundliku materjali levitamist.

Praegune olek

Kuni selle hetkeni on projekti seis veel väga pooleli. Selleks, et praegune lõppkasutaja sellest õpetusest kasu saaks, peab tal olema tugev tehniline arusaam manussüsteemi projekteerimisest ning programmeeritava riistvara ja manustatud tarkvara koos töötamine.

Võrgu kaudu saadetavad andmed pole praegu krüptitud ja eeldatakse, et need on TCP/IP -pakettide töötlemata edastamine.

Video põhiprojekti testiti edukalt nii edastamise kui ka vastuvõtmise osas. Teisest küljest loodi traadita ühendus kahe zybo plaadi vahel ja testkaadri andmed saadeti edukalt. Siiski on siiski vaja ühendada võrgukood iga video põhiprojektiga ja testida tegelike videokaadrite edastamist.

Soovitan: