Përmbajtje:

WIDI - HDMI pa tela duke përdorur Zybo (Bordi i Zhvillimit Zynq): 9 hapa (me fotografi)
WIDI - HDMI pa tela duke përdorur Zybo (Bordi i Zhvillimit Zynq): 9 hapa (me fotografi)

Video: WIDI - HDMI pa tela duke përdorur Zybo (Bordi i Zhvillimit Zynq): 9 hapa (me fotografi)

Video: WIDI - HDMI pa tela duke përdorur Zybo (Bordi i Zhvillimit Zynq): 9 hapa (me fotografi)
Video: Откройте для себя невидимые миры с цифровым микроскопом LINKMICRO LM249MS! 2024, Nëntor
Anonim
WIDI - HDMI pa tel duke përdorur Zybo (Bordi i Zhvillimit Zynq)
WIDI - HDMI pa tel duke përdorur Zybo (Bordi i Zhvillimit Zynq)
WIDI - HDMI pa tel duke përdorur Zybo (Bordi i Zhvillimit Zynq)
WIDI - HDMI pa tel duke përdorur Zybo (Bordi i Zhvillimit Zynq)

A keni dëshiruar ndonjëherë që të mund ta lidhni televizorin tuaj me një kompjuter ose laptop si një monitor të jashtëm, por nuk dëshironi të keni të gjitha ato litarët bezdisës në rrugë? Nëse është kështu, ky tutorial është vetëm për ju! Ndërsa ka disa produkte që arrijnë këtë qëllim, një projekt DIY është shumë më i kënaqshëm dhe potencialisht më i lirë.

Ky koncept është i ndryshëm nga produktet si chromecast, pasi synohet të zërë vendin e një kordoni HDMI që lidhet me një monitor në vend që të jetë një pajisje transmetimi.

Projekti ynë u krijua si një projekt përfundimtar për një kurs të Sistemeve Operative në kohë reale në Universitetin Politeknik të Shtetit të Kalifornisë, San Luis Obispo.

Qëllimi i projektit është të përdorë dy borde Digilent Zybo për të vepruar si ndërfaqe komunikimi pa tel midis një pajisje transmetuese HDMI (PC, blu-ray, etj) në një pajisje marrëse HDMI (Monitor Desktop, Projektor, TV, etj).

Një Digynt Zybo do të lidhet nëpërmjet HDMI me pajisjen transmetuese, dhe tjetri do të lidhet nëpërmjet HDMI me pajisjen marrëse.

Komunikimi pa tel do të bëhet duke përdorur një rrjet pa tel lokal të dedikuar për transmetuesin dhe marrësin, pa u përcjellë përmes një ruteri në shtëpi ose pajisje të tjera të tilla. Moduli pa tel i përdorur për këtë projekt është nplouter tplink wr802n, njëra prej të cilave funksionon si një pikë aksesi për të krijuar rrjetin dhe tjetra për të operuar si një klient për t'u lidhur me rrjetin. Çdo nanorouter do të lidhet përmes kabllit ethernet në njërën nga bordet Zybo. Kur lidhen me këta ruterë, pajisjet do të komunikojnë përmes TCP sikur të ishin të lidhura me një kabllo të vetme ethernet (që do të thotë se konfigurimi i vetëm i nevojshëm për të krijuar një lidhje është adresa IP e klientit).

Ndërsa qëllimi i projektit ishte të lehtësonte një rrjedhë prej 1080x720 video @ 60Hz, kjo nuk ishte e arritshme për shkak të kufizimeve të gjerësisë së brezit në rrjetin pa tel dhe mungesës së kompresimit të videos në kohë reale për të zvogëluar të dhënat e kërkuara për të dërguar. Në vend të kësaj, ky projekt shërben si kornizë për zhvillimin e ardhshëm për të arritur këtë qëllim, pasi ka kufizuar ashpër kufizimet në shkallën e kornizës për të transmetuar siç duhet të dhënat HDMI sipas synimit.

Kërkesat e projektit:

2x Borde Zhvillimi Digilent Zybo (duhet të kenë të paktën një port HDMI)

2 x kabllo HDMI

2x kabllo microusb (për të lidhur Zybo me PC për zhvillim)

2x nanorouterë tplink wr802n (përfshirë adtl. 2x mikrousb dhe adaptorë të rrymës së murit)

2 x kabllo ethernet

*** Shënim: Ky tutorial supozon njohjen me paketën e dizajnit Vivado dhe përvojën në krijimin e një projekti të ri dhe dizajn bllok. ***

Hapi 1: Konfiguroni Logjikën e Programueshme të Zynq për Transmetuesin

Konfiguroni Logjikën e Programueshme të Zynq për Transmetuesin
Konfiguroni Logjikën e Programueshme të Zynq për Transmetuesin
Konfiguroni Logjikën e Programueshme të Zynq për Transmetuesin
Konfiguroni Logjikën e Programueshme të Zynq për Transmetuesin
Konfiguroni Logjikën e Programueshme të Zynq për Transmetuesin
Konfiguroni Logjikën e Programueshme të Zynq për Transmetuesin

Qasja jonë për zhvillimin e logjikës së programueshme të transmetuesit ishte kryerja e një kalimi hdmi-to-hdmi nga kompjuteri për të monitoruar duke përdorur dy blloqe të hyrjes në kujtesën video të drejtpërdrejtë (VDMA), një për të shkruar dhe një për të lexuar.

Të dy janë përzgjedhur për funksionim pa pagesë, 3-frame-buffer mode (0-1-2). Meqenëse bërthama e videos është optimizuar për 60 korniza për sekondë, kjo do të thotë që VDMA do të shkruajë ose lexojë në një kornizë të re çdo 16.67 ms në këtë mënyrë: 0, 1, 2, 0, 1, 2, 0, 1, 2. Vendndodhjet e kujtesës DDR për secilën kornizë janë të ndryshme për dy VDMA sepse ato nuk janë më të sinkronizuara me njëra -tjetrën. Në vend të kësaj, një kohëmatës hardueri (TTC1), i konfiguruar për 60 Hz, përdoret për të sinkronizuar lëvizjen e të dhënave midis dy vendndodhjeve të kujtesës.

Imazhi i mësipërm tregon 3 korniza, dimensionet e tyre dhe sasinë e kujtesës që kërkon secila (në të djathtë të kornizës). Nëse caktojmë shkrimin VDMA në këto vende të kujtesës, atëherë mund t'i caktojmë vendet e kujtesës së lexuar VDMA përtej këtij grupi, të themi duke filluar me 0x0B000000. Çdo kuadër përbëhet nga 1280*720 piksele dhe çdo piksel përbëhet nga 8 bit të Kuq, të Gjelbër dhe Blu për një total prej 24 bit. Kjo do të thotë që një kornizë përbëhet nga 1280*720*3 bajt (2.76 MB).

Brenda kohëmatësit IRQ, i cili përshkruhet në konfigurimin e drejtuesit VDMA, do të trajtojë kopjimin e të dhënave midis dy vendndodhjeve të kujtesës VMDA. VDMA siguron një tregues për kornizën aktuale që shkruhet ose lexohet. Korniza përfaqësohet nga një kod i veçantë gri, i cili konvertohet në softuer. Përkufizimet e kodit gri për një konfigurim 3-frame-buffer mund të gjenden në Udhëzuesin e Produktit AXI VDMA në shtojcën C.

Kjo na lejon të kopjojmë përmbajtjen që shkruhet në kujtesë pa lexuar nga një kornizë që aktualisht është duke u shkruar.

*** Vini re se VDMA e lexuar nuk përdoret kur dërgoni të dhëna përmes rrjetit pa tel. Qëllimi i vetëm është të verifikojë funksionimin e duhur të kopjimit të kujtesës nga VMDA e shkruar. VMDA e lexuar duhet të çaktivizohet. ***

Këtu janë hapat për krijimin e Bllokut të Dizajnit të Transmetuesit:

  1. Kur krijoni një projekt të ri, është një ide e mirë të caktoni një çip ose bord në projekt. Kjo lidhje përshkruan se si të shtoni skedarë të rinj të bordit në drejtorinë Vivado dhe të lidhni tabelën e duhur me projektin tuaj. Do të jetë i dobishëm kur shtoni bllokun e Sistemit të Përpunimit dhe kaloni nga pajisja në softuer (ana SDK).
  2. Shtoni blloqet e mëposhtme:

    • dvi2rgb
    • Video në Axi4-stream
    • Kontrolluesi i kohës
    • axi4-lumë për të dalë jashtë
    • rgb2dvi
    • AXI VDMA x2
    • AXI GPIO x2
    • Magjistari i orës
    • Konstante
    • Sistemi i përpunimit Zynq
  3. Kur shtoni Sistemin e Përpunimit, klikoni "Run Block Automation" nga shiriti i sipërm me ngjyrë të gjelbër dhe sigurohuni që të jetë zgjedhur opsioni "Apliko Paravendosjen e Bordit". Lini gjithçka tjetër të paracaktuar.
  4. Imazhet e secilës dritare të konfigurimit të bllokut mund të gjenden në imazhet e mësipërme. Nëse nuk shihni një imazh për një dritare të veçantë, thjesht lini atë si parazgjedhje.
  5. Filloni të konfiguroni sistemin e përpunimit Zynq:

    • Në konfigurimin PS-PL AXI Non Secure Enable GP Master AXI, aktivizoni ndërfaqen M AXI GP0
    • Në Konfigurimin PS-PL HP Slave AXI Interface, aktivizoni si HP0 ashtu edhe HP1
    • Në Konfigurimin MIO Sigurohuni që ENET0 është aktivizuar nën Periferikësh I/O, pastaj Njësia e Përpunuesit të Aplikimit, aktivizoni Timer0
    • Në Clocks Configuration PL Fabrics Clocks, aktivizoni FCLK_CLK0 dhe vendoseni në 100 MHz.
    • Kliko Ok
  6. Para se të klikoni "Run Connection Automation", sigurohuni që të lidhni blloqet video siç shihet në imazhin e dizajnit të bllokut TX më lart. Ju do të dëshironi ta riemërtoni konstanten në VDD dhe ta vendosni vlerën në 1. Lidhni blloqet e videove në përputhje me rrethanat.
  7. Bëni orën HDMI TMDS dhe kunjat e të dhënave të jashtme në blloqet rgb2dvi dhe dvi2rgb
  8. Krijoni një port hyrje dhe dalje për sinjalin e zbulimit të prizës së nxehtë (HPD) dhe lidhini ato së bashku, këto përcaktohen në skedarin e kufizimeve
  9. Ora piksel merret nga TMDS_Clk_p, e cila krijohet në skedarin e kufizimeve. Kjo do të jetë 74.25 MHz në përputhje me rezolucionin 720p. Importantshtë e rëndësishme të lidhni orën pixel (nga blloku dvi2rgb) me kunjat e mëposhtëm:

    • vid_io_in_clk (vid në bllokun e rrymës aksi)
    • vid_io_out_clk (lumi axi për të bllokuar vid out)
    • clk (Kontrolluesi i kohës)
    • PixelClk (rgb2dvi)
  10. *** Shënim: Aktualisht, për të aktivizuar rikuperimin e orës pixel, lidhësit HDMI rx dhe tx duhet të lidhen me një burim/lavaman aktiv. Një mënyrë rreth kësaj është ndarja e blloqeve të videos rx dhe tx në fusha të ndryshme të orës (me fjalë të tjera, gjeneroni një orë të re 74.25 MHz për t'u ushqyer në bllokun tx). ***
  11. Tjetra vendosni magjistarin e orës në mënyrë që të keni një hyrje 100 MHz (burim tampon global) dhe 3 orë dalëse @ 50 MHz (ora AXI-Lite), 150 MHz (ora AXI4-Stream), 200 MHz (pin dvi2rgb RefClk).
  12. Lidhni pinin e sistemit të përpunimit FCLK_CLK0 me hyrjen e magjistarit të orës
  13. Në këtë pikë klikoni "Run Connection Automation" nga shiriti i gjelbër në krye të dritares së projektimit. Ideashtë një ide e mirë ta bëni këtë për një bllok në të njëjtën kohë dhe të ndiqni imazhin e dizajnit të bllokut TX më lart.
  14. Mjeti do të përpiqet të shtojë AXI Interconnect, i cili vepron si ndërlidhja master/slave për blloqet që përdorin autobusin AXI-Lite (VDMA dhe GPIO).
  15. Ai gjithashtu do të shtojë AXI SmartConnect, i cili vepron si ndërlidhja kryesore/skllave për ndërfaqet e procesorit AXI4-Stream dhe High Performance të përdorura nga VDMA (Rrjedha në Memory Map dhe anasjelltas).
  16. Mjeti gjithashtu do të shtojë një Reset System Processor. Sigurohuni që kjo është e lidhur vetëm me VDMA, GPIO dhe blloqet e lidhura me procesorin. Mos e lidhni me asnjë bllok video (p.sh. dvi2rgb, kontrollues i kohës, video për transmetim, etj.)
  17. Pasi të ketë përfunduar automatizimi i lidhjes, verifikoni që lidhjet përputhen me atë të imazhit të dizajnit të bllokut TX. Ju do të vini re një bllok shtesë të Sistemit ILA që nuk është përmendur. Kjo është vetëm për korrigjim dhe nuk është e nevojshme tani për tani. Ai përdor rivendosjen e procesorit 150M, kështu që as kjo nuk është e nevojshme. Kudo që shihni "insekte" të vogla jeshile në autobusë, kjo është për shkak të ILA dhe mund të injorohet.
  18. Hapi i fundit është të klikoni me të djathtën në modelin e bllokut në pemën e burimeve të projektit dhe të zgjidhni "Krijo mbështjellës HDL." Nëse planifikoni të shtoni logjikë në mbështjellës, ajo do të mbishkruhet sa herë që zgjidhet kjo.
  19. Shikoni seksionin VDMA Driver Setup për detaje në anën e SDK.

Orët dhe Rivendosjet

Kam gjetur se aspektet më të rëndësishme të çdo projekti logjik të programueshëm është shqyrtimi i kujdesshëm i fushave të orës dhe sinjaleve të rivendosjes. Nëse ato janë konfiguruar siç duhet, ju keni një mundësi të mirë për të vënë në punë modelin tuaj.

Ora Pixel dhe Koha e Bllokuar

Për të verifikuar që sinjale të caktuara janë aktive, është një ide e mirë t'i lidhni këto sinjale me LED (orë, rivendosje, bravë etj.). Dy sinjale që më duken të dobishme për të gjurmuar në tabelën e transmetuesit ishin ora pixel dhe sinjali "i kyçur" në bllokun AXI4-Stream për të nxjerrë video, i cili ju tregon se koha e videos është sinkronizuar me kontrolluesin e kohës dhe burimin e videos të dhënave. Unë kam shtuar një logjikë në mbështjellësin e bllokut të dizajnit që gjurmon orën pixel duke përdorur sinjalin PixelClkLocked në bllokun dvi2rgb si një rivendosje. Unë e kam bashkangjitur skedarin si hdmi_wrapper.v këtu. Skedari i kufizimeve është bashkangjitur gjithashtu këtu.

Hapi 2: Konfiguroni Logjikën e Programueshme të Zynq për Marrësin

Konfiguroni logjikën e programueshme të Zynq për marrësin
Konfiguroni logjikën e programueshme të Zynq për marrësin
Konfiguroni Logjikën e Programueshme të Zynq për Marrësin
Konfiguroni Logjikën e Programueshme të Zynq për Marrësin
Konfiguroni Logjikën e Programueshme të Zynq për Marrësin
Konfiguroni Logjikën e Programueshme të Zynq për Marrësin

Blloku Logjik i Programueshëm për marrësin është më i thjeshtë. Dallimi kryesor, përveç blloqeve hyrëse hdmi që mungojnë është mungesa e një ore pixel të rikuperuar. Për këtë arsye ne duhet të krijojmë tonën nga magjistari i orës. Ky dizajn duhet të bëhet në një projekt të veçantë nga transmetuesi. Për qëllimet tona, projekti i marrësit ndoqi tabelën Zybo 7Z-20 ndërsa Transmetuesi ndoqi tabelën Z7-10. FPGA -të në dërrasa janë të ndryshme kështu që … kini kujdes.

Këtu janë hapat për krijimin e bllokut të dizajnit të marrësit:

  1. Shtoni blloqet e mëposhtme IP në modelin tuaj:

    • Kontrolluesi i kohës
    • AXI4-Transmeto në Video Out
    • RGB në DVI
    • AXI VDMA
    • AXI GPIO
    • Sistemi i përpunimit
    • Magjistari i orës
    • Konstant (VDD e vendosur në 1)
  2. Ndiqni të njëjtin model për konfigurimin e këtyre blloqeve si Transmetuesi. Imazhet për dallimet e dukshme në konfigurim janë përfshirë këtu. Të tjerët mbeten të njëjtë me Transmetuesin.
  3. Konfiguroni VDMA për këtë dizajn vetëm si kanale të lexuara. Çaktivizoni kanalin e shkrimit.
  4. Magjistari i orës duhet të konfigurohet për daljet e mëposhtme:

    • clk_out1: 75 MHz (ora pixel)
    • clk_out2: 150 MHz (ora e transmetimit)
    • clk_out3: 50 MHz (ora aksi-lite)
  5. Lidhni blloqet video siç tregohet në imazhin e dizajnit të bllokut RX.
  6. Pastaj ekzekutoni automatizimin e lidhjes, i cili do të shtojë blloqet AXI Interconnect, AXI SmartConnect dhe System Reset dhe do të përpiqet të bëjë lidhjet e duhura. Shkoni ngadalë këtu për t'u siguruar që nuk kryen lidhje të padëshiruara.
  7. Bëni orën HDMI TMDS dhe kunjat e të dhënave të jashtme në bllokun rgb2dvi
  8. Nuk ka nevojë për sinjal të prizës së nxehtë në këtë dizajn.

Hapi 3: Konfiguroni drejtuesin VDMA

Vendosni drejtuesin VDMA
Vendosni drejtuesin VDMA

Konfigurimi për blloqet e ndryshme që janë konfiguruar përmes ndërfaqes AXI-Lite bëhet më së miri duke përdorur projekte demo të përfshira me BSP si referencë. Pas eksportimit të pajisjeve të projektimit dhe nisjes së SDK nga Vivado, do të dëshironi të shtoni një paketë të re mbështetëse të bordit dhe të përfshini bibliotekën lwip202 në dritaren e cilësimeve të BSP. Hapni skedarin e skedarit system.mss nga BSP dhe do të shihni drejtuesit periferikë të pranishëm nga dizajni juaj i bllokut. Opsioni "Import Shembuj" ju lejon të importoni projekte demo që përdorin këto pajisje periferike dhe kështu ju tregojnë se si t'i konfiguroni ato në softuer duke përdorur drejtuesit e disponueshëm Xilinx (shiko figurën e bashkangjitur).

Kjo ishte metoda e përdorur për konfigurimin e VDMA, Timer & Interrupt dhe GPIO. Kodi burim si për transmetimin ashtu edhe për marrjen është përfshirë këtu. Dallimet janë pothuajse ekskluzivisht në kryesore.c.

*** SHENIM: Meqenëse sistemi nuk është plotësisht funksional në kohën e shkrimit të këtij tutoriali, kodi burimor në këtë seksion nuk përfshin kodin e rrjetit pa tel. Disa defekte duhet të adresohen si rezultat i kombinimit të projekteve të transmetimit/marrjes së bërthamës video me projektet e transmetimit/marrjes së rrjetit. Prandaj ky tutorial për momentin i trajton veçmas. ***

Funksioni i Trajtuesit të Ndërprerjes TX (IRQHandler)

Ky funksion lexon kodet gri të ofruara si nga leximi ashtu edhe shkrimi i VDMA përmes blloqeve GPIO. Kodet gri konvertohen në dhjetore dhe përdoren për zgjedhjen e vendndodhjes së kujtesës bazë të kornizës të kornizës aktuale. Korniza e kopjuar është kuadri i mëparshëm me atë të shkruar nga VDMA (p.sh. nëse VDMA po shkruan në kornizën 2, ne kopjojmë kornizën 1; nëse shkruajmë në kornizën 0, përfundojmë dhe lexojmë nga korniza 2).

Funksioni kap vetëm çdo kuadër të 6 -të për të zvogëluar shkallën e kornizës në 10 Hz në vend të 60 Hz. Kufiri i sipërm i rrjetit është 300 Mbps. Me 10 korniza për sekondë kërkohet një gjerësi brezi prej 221.2 Mbps.

Komentimi/mos komentimi i dy rreshtave në këtë funksion do t'i lejojë përdoruesit të kalojë në modalitetin HDMI passthru për qëllime të korrigjimit/testimit (kodi komentohet për të treguar linjat e duhura). Aktualisht kopjon kornizën në një vendndodhje të kujtesës të përdorur nga kodi ethernet.

Funksioni i mbajtësit të ndërprerjes RX (IRQHandler)

Ky funksion është shumë i ngjashëm me funksionin TX, por kopjon nga një tampon 2 FIFO i përdorur nga ethernet për të shkruar të dhënat hyrëse. Kodi ethernet tregon se në cilën kornizë po shkruhet FIFO, të dhënat kopjohen nga korniza e kundërt. Të dhënat kopjohen në kuadrin direkt pas atij që lexohet nga VDMA për të shmangur grisjen.

Hapi 4: Konfiguroni Rrjetin Nanorouter

Konfiguroni Rrjetin Nanorouter
Konfiguroni Rrjetin Nanorouter

Për të krijuar një rrjet duke përdorur nanorouterët TPlink, ndizni ato individualisht dhe lidheni me SSID -in e paracaktuar wifi për pajisjet. Më shumë informacion mbi cilësimet e konfigurimit për këtë pajisje të veçantë mund të gjenden përmes manualit të përdorimit të pajisjes.

Vendosni një nga pajisjet si një pikë hyrjeje, kjo do të veprojë si lidhja kryesore për rrjetin. Sigurohuni që të emërtoni rrjetin dhe të mbani shënim emrin, dhe çaktivizoni DHCP (ne nuk duam që ruteri të konfigurojë adresat IP në mënyrë dinamike, ne duam që tabelat tansmitter dhe marrës Zybo të vendosin vetë adresat e tyre IP në mënyrë që ato të jenë konsistente). Pas konfigurimit, sigurohuni që pajisja të rindizet dhe të krijojë këtë rrjet.

Konfiguroni pajisjen tjetër si klient dhe sigurohuni që të lidhet me SSID -in e rrjetit që keni konfiguruar me nanorouterin e parë. Edhe një herë, sigurohuni që DHCP është i çaktivizuar për klientin.

Pasi klienti të ketë përfunduar dhe rindezur, duhet të lidhet me nanorouterin e pikës së hyrjes (nëse nuk ndodh, ka të ngjarë të ketë një problem në konfigurimin tuaj të njërës prej pajisjeve). Do të vini re se drita LED në klient do të jetë e fortë sapo të lidhet me pikën e hyrjes.

LED i pikës së hyrjes nanorouter ka të ngjarë të vazhdojë të ndizet në këtë pikë, kjo është në rregull! Drita ndezëse do të thotë se nuk është e lidhur me një pajisje tjetër nga porti i saj ethernet, dhe sapo të lidhet me një Zybo të konfiguruar, LED do të mbetet i fortë duke treguar një lidhje të suksesshme në rrjet.

Tani që kemi konfiguruar nanorouterët tanë, ne kemi një rrjet wireless që do të na lejojë të komunikojmë përmes. Një shënim i rëndësishëm është se metoda jonë e konfigurimit për nanorouterët (si pikë aksesi dhe klient) na lejon të komunikojmë nga bordi transmetues Zybo në bordin pranues Zybo sikur të dy të ishin të lidhur me një tel të vetëm ethernet. Kjo e bën konfigurimin e rrjetit tonë më pak të vështirë, pasi alternativa ka të ngjarë të përfshijë konfigurimin e tabelave Zybo për t'u lidhur me serverin në mënyrë eksplicite së bashku me lidhjen e synuar.

Pasi të jenë konfiguruar të dyja pajisjet, nanorouterët janë konfiguruar dhe gati për t'u zbatuar në rrjetin tuaj WIDI. Nuk ka një çiftim specifik midis nanorouterëve dhe bordeve Zybo, pasi ose pika e hyrjes ose klienti do të punojë ose për pajisjen transmetuese ose marrëse.

Hapi 5: Konfiguroni sistemin e përpunimit Zynq për transmetimin e të dhënave përmes Ethernet

Vendosni sistemin e përpunimit Zynq për transmetimin e të dhënave përmes Ethernet
Vendosni sistemin e përpunimit Zynq për transmetimin e të dhënave përmes Ethernet
Vendosni sistemin e përpunimit Zynq për transmetimin e të dhënave përmes Ethernet
Vendosni sistemin e përpunimit Zynq për transmetimin e të dhënave përmes Ethernet

Për të transmetuar të dhënat HDMI nga një bord Zybo në tjetrin, duhet të përfshijmë një protokoll Ethernet me drejtuesin tonë VDMA. Qëllimi ynë këtu është të transmetojmë korniza video individuale përmes periferikëshit Ethernet në sistemin e përpunimit, me një normë të caktuar që është në përputhje me gjerësinë e brezit të rrjetit tonë. Për projektin tonë, ne përdorëm TCP të siguruar nga API i zhveshur prej metali LwIP. Meqenëse të dy anëtarët e projektit janë relativisht të papërvojë me shërbimet e rrjetit, kjo zgjedhje u bë pa njohur plotësisht implikimet dhe kufizimet e përfshira në TCP. Problemi kryesor me këtë zbatim ishte gjerësia e kufizuar e brezit dhe fakti që nuk është vërtet i dizajnuar me qëllim të avullimit të vëllimeve të larta të të dhënave. Zgjidhjet alternative për të zëvendësuar TCP dhe për të përmirësuar tbe në këtë projekt do të diskutohen më vonë.

Një përshkrim i shkurtër i TCP me LwIP: Të dhënat dërgohen përmes rrjetit në pako me madhësi tcp_mss (madhësia maksimale e segmentit TCP), e cila në përgjithësi është 1460 bajt. Thirrja e tcp_write do të marrë disa të dhëna të referuara nga një tregues dhe do të konfigurojë pbufs (tamponët e paketave) për të mbajtur të dhënat dhe për të siguruar një strukturë për operacionet TCP. Sasia maksimale e të dhënave që mund të vendosen në radhë në të njëjtën kohë përcaktohet si tcp_snd_buf (hapësira tampon e dërguesit TCP). Meqenëse ky parametër është një numër 16 bit, ne jemi të kufizuar në një madhësi tampon të dërgimit prej 59695 byte (ka disa mbushje të kërkuara në tamponin e dërgimit). Pasi të dhënat janë vënë në radhë, tcp_output thirret për të filluar transmetimin e të dhënave. Para se të dërgoni segmentin tjetër të të dhënave, është e domosdoshme që të gjitha paketat e mëparshme të jenë transmetuar me sukses. Ky proces bëhet duke përdorur funksionin recv_callback, pasi ky është funksioni që thirret kur shikohet njohja nga marrësi.

Përdorimi i projekteve shembullore në Vivado SDK është shumë i dobishëm për të mësuar se si funksionon LwIP TCP, dhe është një pikënisje e mirë për fillimin e një projekti të ri.

Procedura për pajisjen transmetuese WiDi është si më poshtë:

  1. Filloni rrjetin TCP duke përdorur thirrjet e funksionit të shoferit LWIP të metalit të zhveshur.
  2. Specifikoni çdo funksion të thirrjes së nevojshme për operacionet e rrjetit.
  3. Lidhuni me marrësin WiDi duke u lidhur me adresën dhe portën IP të tij (konfigurimi ynë: IP i marrësit është 192.168.0.9, lidheni me portën 7).
  4. Kur skadon kohëmatësi i drejtuesit VDMA, futni TX ISR.
  5. Përcaktoni tamponin aktual të kornizës për qasje bazuar në kodin gri VDMA
  6. Vendosni radhën në segmentin e parë të të dhënave në tamponin e dërgimit TCP
  7. Nxirrni të dhënat dhe azhurnoni variablat lokalë për të mbajtur gjurmët se sa të dhëna janë dërguar nga korniza aktuale.
  8. Me arritjen e përgjigjes së thirrjes së marrë (thirrja e funksionit e bërë pasi transmetuesi merr një njohje të marrjes së të dhënave), vendosni radhë në segmentin tjetër të të dhënave.
  9. Përsëritni hapat 7 dhe 8 derisa të dërgohet i gjithë korniza.
  10. Kthehuni në një gjendje boshe për të pritur që ndërprerësi tjetër i kohëmatësit të tregojë se një kornizë e re është gati (Kthehu te hapi 4).

Sigurohuni që të konfiguroni cilësimet e paketës mbështetëse të bordit LwIP siç tregohet në imazhin e mësipërm. Të gjitha vlerat janë të paracaktuara përveç tcp_snd_buf, tcp_pueue_ooseq, mem_size, memp_n_tcp_seg. Gjithashtu vini re se korrigjimi i detajuar mund të arrihet duke ndryshuar parametrat e BSP për grupin debug_options.

Hapi 6: Konfiguroni sistemin e përpunimit Zynq për marrjen e të dhënave përmes Ethernet

Bordi i zhvillimit Zybo që do të veprojë si marrës pa tel do të funksionojë në mënyrë të ngjashme me pajisjen transmetuese. Cilësimet e paketës mbështetëse të bordit për LwIP do të jenë identike me ato të hapit të mëparshëm.

Pajisja do të marrë pako që përmbajnë segmente të kornizave video nga nanorouteri dhe do të kopjojë të dhënat e kornizës video në hapësirën tampon të kornizës së trefishtë për VDMA marrëse. Për të shmangur mbishkrimin e të dhënave, një tampon i dyfishtë i të dhënave (ne do t'i referohemi si tampon i rrjetit) përdoret kur grumbulloni të dhëna nga nanorouter, në mënyrë që trafiku i rrjetit të mund të vazhdojë transmetimin ndërsa korniza e plotë e mëparshme e videos kopjohet në Tampon VDMA.

Procedura për pajisjen marrëse WiDi kërkon dy detyra, njëra prej të cilave është marrja e të dhënave ethernet, dhe tjetra është kopjimi i kornizave video nga tamponi i rrjetit në tamponin e kornizës së trefishtë të VDMA.

Detyra e pritjes Ethernet:

  1. Filloni rrjetin TCP duke përdorur thirrjet e funksionit të shoferit LWIP me metal të zhveshur (konfigurimi me adresën IP me të cilën do të lidhet transmetuesi, 192.168.0.9 në tonën)
  2. Specifikoni çdo funksion të thirrjes së nevojshme për operacionet e rrjetit.
  3. Pas marrjes së paketës ethernet, kopjoni të dhënat e paketave në tamponin aktual të rrjetit, rrisni të dhënat aktuale të grumbulluara.
  4. Nëse paketa mbush tamponin e kornizës së rrjetit, vazhdoni me hapat 5 & 6. Përndryshe, kthehuni prapa në hapin 3 nga kjo detyrë.
  5. sinjalizon se detyra tampon i kuadrit të trefishtë VDMA duhet të kopjohet nga tamponi i rrjetit i sapopërfunduar.
  6. Kaloni në tamponin tjetër të rrjetit dhe vazhdoni të grumbulloni të dhëna përmes ethernet.
  7. Në pritje derisa të merret paketa e re ethernet (hapi 3).

Kopjoni tamponin e rrjetit në tamponin e trefishtë të kornizës VDMA:

  1. Kur skadon kohëmatësi i drejtuesit VDMA, futni RX ISR.
  2. Përcaktoni tamponin aktual të kornizës për qasje bazuar në kodin gri VDMA.
  3. Përcaktoni se cili tampon i rrjetit do të kopjohet në tamponin VDMA dhe kopjoni ato të dhëna

Hapi 7: Lidhni bordet tuaja Zybo me burimin HDMI dhe lavamanin HDMI

Lidhni bordet tuaja Zybo me burimin HDMI dhe lavamanin HDMI
Lidhni bordet tuaja Zybo me burimin HDMI dhe lavamanin HDMI

Tani lidhni kabllot HDMI si për marrësin ashtu edhe për transmetuesin, programoni FPGA -të dhe drejtoni sistemin e përpunimit. Shkalla e kornizës ka të ngjarë të jetë shumë e ngadaltë, për shkak të shpenzimeve të mëdha në operacionin LwIP dhe gjerësisë së brezit të kufizuar. Nëse ka ndonjë problem, lidheni përmes UART dhe përpiquni të identifikoni ndonjë paralajmërim ose gabim.

Hapi 8: Idetë alternative për përmirësim

Idetë alternative për përmirësim
Idetë alternative për përmirësim

Një çështje e madhe për këtë projekt ishte sasia e të dhënave të nevojshme për të dërguar përmes wifi. Kjo ishte e pritshme, megjithatë ne e nënvlerësuam ndikimin që do të kishte dhe rezultoi në më shumë një shpërthim të imazheve në një ekran sesa në një burim video. Ka disa mënyra për të përmirësuar këtë projekt:

  • Kompresim video në kohë reale. Kompresimi i furnizimit të videove hyrëse kornizë për kuadër do të zvogëlonte shumë sasinë e të dhënave të nevojshme për t'u dërguar në rrjet. Në mënyrë ideale kjo do të bëhej në harduer (që nuk është një detyrë e lehtë), ose mund të bëhet në softuer duke përdorur bërthamën tjetër të ARM për të drejtuar një algoritme kompresimi (kjo do të kishte nevojë për disa analiza të mëtejshme për të siguruar që koha të funksionojë). Ekzistojnë disa përbërës të kompresimit të videos në kohë reale që kemi gjetur në internet, por shumica janë IP.
  • Zbatimi i rrjedhës Ethernet në harduer, në vend të softuerit. Kishte një ton të lartë për shkak të mungesës së hapësirës në dispozicion për të rradhitur të dhënat dalëse në transmetues, për shkak të kufizimit në madhësinë e segmentit. Një proces shumë më efikas është përdorimi i IP AXI Ethernet me një tampon FIFO ose DMA për të futur të dhëna në të. Kjo do të zvogëlonte bagazhet shtesë nga LwIP TCP dhe do të lejonte më shumë rrjedhje të të dhënave.

Hapi 9: Qasshmëria

Produkti që rezulton i këtij projekti WiDi duhet të jetë një palë pajisje plotësisht të integruara dhe kompakte, të cilat një përdorues mund t'i lidhë me çdo burim HDMI dhe pastaj ta zhysë furnizimin e videos në një ekran me aftësi HDMI pa tel. Pajisjet do të shfaqin Zynq-7000 SoC të gjetur në tabelën e referencës Zybo dhe do të përfshijnë harduerin e rrjetit që gjendet në nano-ruterat TP-Link. Në mënyrë ideale, përdoruesi do të jetë në gjendje të kontrollojë modulin e transmetimit nga një vend diskret brenda sistemit operativ të synuar, me pak nevojë për aftësi të konsiderueshme teknike.

Siguria dhe Lidhshmëria

Pajisjet gjithashtu duhet të përfshijnë Sigurinë e Shtresës së Transportit (TLS) dhe të kenë aftësi të kufizuar të lidhjes automatike, të dyja për qëllime të intimitetit. Intentionshtë qëllimi i projektuesve që ta bëjnë lidhjen me një ekran përmes një ndërfaqeje pa tel një veprim të qëllimshëm në emër të përdoruesit për të shmangur transmetimin gabimisht të materialeve të ndjeshme.

Statusi aktual

Deri në këtë pikë, gjendja e projektit është ende një punë në progres. Në mënyrë që përdoruesi aktual i pikës përfundimtare të përfitojë nga ky mësim, ai ose ajo duhet të ketë një kuptim të fortë teknik të dizajnit të sistemit të ngulitur dhe duhet të ketë njëfarë familjariteti me pajisjet e programueshme dhe softuerin e ngulitur që punojnë së bashku.

Të dhënat që dërgohen përmes rrjetit nuk janë të koduara në këtë pikë dhe supozohet të jenë një transmetim i papërpunuar i paketave TCP/IP.

Projekti kryesor i videos u testua me sukses si për transmetim ashtu edhe për marrje. Nga ana tjetër, lidhja pa tel midis dy bordeve zybo u krijua dhe të dhënat e kornizës së provës u dërguan me sukses. Sidoqoftë, është akoma e nevojshme të kombinoni kodin e rrjetit në secilin projekt thelbësor të videos dhe të testoni transmetimin e kornizave aktuale të videos.

Recommended: