Sisällysluettelo:
- Vaihe 1: Materiaalit
- Vaihe 2: LÄHTÖ - VGA -ohjain Osa 1
- Vaihe 3: LÄHTÖ - VGA -ohjain Osa 2
- Vaihe 4: LÄHTÖ - HDMI -ohjain Osa 1
- Vaihe 5: LÄHTÖ - HDMI -ohjain Osa 2
- Vaihe 6: Kuvien näyttäminen RAM -muistista
- Vaihe 7: LÄHTÖ - SDK LOPPU
Video: Zynq -kuvanparannusjärjestelmä: 7 vaihetta
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 09:03
Kuten otsikosta voisi päätellä, tämän projektin tavoitteena on luoda kuvanparannusjärjestelmä ZYNQ ApSOC: n avulla. Tarkemmin sanottuna haluamme rakentaa järjestelmän, joka voi poistaa sumun kuvista tai videoista. Tämä järjestelmä käyttää huonoissa olosuhteissa visuaalista dataa tulona, käsittelee sitä kuvanparannustekniikoilla ja tulostaa sitten tuloksen.
Projekti rakennettiin ja testattiin Digilent Zybo Boardilla, mutta myös muiden ZYNQ -laitteiden pitäisi toimia.
Jaamme tämän projektin 3 osaan:
1) INPUT = Syötä kuva Ethernetin kautta tietokoneesta/kamerasta
2) PROCESS = Käsittele kuvaa
3) OUTPUT = Tulosta kuva HDMI -liitännän kautta
Hyvin vastustamattomalla tavalla aloitamme projektin tulostusosasta (tämä antaa meille paremmat virheenkorjausmahdollisuudet matkan varrella), jatkamme syötteellä ja lopetamme käsittelyosan.
Vaihe 1: Materiaalit
Tämän projektin loppuun saattamiseksi tarvitset:
LAITTEISTO
- kaikkien ZYNQ -korttien, joissa on HDMI ja Ethernet, pitäisi toimia / käytän Digilent Zyboota
- USB A - micro B USB -kaapeli
- HDMI -kaapeli
- Ethernet kaapeli
- Näyttö HDMI -tulolla
OHJELMISTO
- Xilinx Vivado
- Xilinx SDK
Vaihe 2: LÄHTÖ - VGA -ohjain Osa 1
Julkaisemme visuaaliset tiedot käyttämällä taulussa olevaa HDMI -porttia. HDMI -portti on kytketty ZYNQ: n PL (ohjelmoitava logiikka = FPGA) -puoleen, ja meidän on suunniteltava sille VHDL -ohjain. Jos olet koskaan suunnitellut VGA -ohjaimen, löydät tämän hyvin samanlaisen. HDMI- ja VGA -ajoitukset ovat itse asiassa samat, itse asiassa voit rakentaa olemassa olevan VGA -ohjaimen HDMI -ohjaimen hankkimiseksi.
Jotta ymmärtäisimme paremmin, mitä todella tapahtuu, suunnittelemme ensin VGA -ohjaimen
Haluamme näyttää resoluutiolla 1920x1080.
VGA -ohjain on vastuussa pikselidatan (RGB -muodossa) lähettämisestä peräkkäin, pikseli pikseliltä näytölle. Varsinaisen 1920x1080 -näyttöalueen ulkopuolella on myös joitakin "raja -alueita", nimittäin: kuisti, takakuisti ja paluu. Näiden alueiden koko pikseleinä on vakio ja ominaista jokaiselle resoluutiolle. Nämä alueet EIVÄT todella näy näytöllä, mutta ne ovat pakollisia, ja tämän alueen pikselien värin on oltava musta. Oikea kysymys olisi, miksi näitä lisäalueita tarvitaan. Tämä kysymys uhmaa tämän ohjeen tarkoitusta, mutta jos olet utelias, kehotan sinua tekemään lisätutkimuksia verkossa.
Tämä on hyvä video, joka selittää VGA -käyttöliittymän
Meidän tapauksessamme haluamme näyttää näytön resoluutiolla 1920*1080, ja nämä ovat ajoitukset:
Vaakasuora näyttöalue = 1920 pikseliä
Vaakasuuntainen kuisti = 88 pikseliä
Vaakasuuntainen kuisti = 148 pikseliä
Vaakasuuntainen paluu = 44 pikseliä
Pystysuora näyttöalue = 1080 pikseliä
Pystysuora etukuisti = 4 pikseliä
Pystysuuntainen kuisti = 36 pikseliä
Pystysuuntainen paluu = 5 pikseliä
(Täältä löydät muiden päätöslauselmien ajoitukset
Todellinen tarkkuutemme on siis 2200 x 1125. Haluamme 60 kuvaa sekunnissa (kuvaa sekunnissa), joten pikselikellomme on 60*2200*1125 = 148,5 MHz. Zybo Boardissa on 125 Mhz kello. Käytämme MMCM -IP -osoitetta tarvitsemamme 148,5 MHz: n pikselikellon luomiseen.
Vaihe 3: LÄHTÖ - VGA -ohjain Osa 2
Edellisen vaiheen teoreettisella taustalla sinun pitäisi pystyä suunnittelemaan oma VGA -ohjain. Tarjoan sinulle Vivado -projektin, joka tekee niin, mutta suosittelen, että yrität ainakin tehdä sen ensin itse.
Useimmat VGA -portit eivät anna sinulle 8 bittiä värikanavaa kohti kuvapistettä kohti (katso yllä oleva kuva), joten sinun on mukautettava muotoilu piirilevyn värejä kohti (tämä ei ole ongelma HDMI: lle).
Suunnittelu maalaa koko näytön siniseksi paitsi vasemmanpuoleisen pikselin, joka on punainen. On huomattava, että tämä projekti käyttää ZYBO -hallituksen rajoituksia. Joten jos haluat suorittaa tämän projektin toisella levyllä, sinun on päivitettävä rajoitustiedosto ja mukautettava nastojen määrää väriä kohden.
Katso kuva nro. 2. Muista, että vaikka VGA -ohjaimemme tuottaa 5/6 bittiä väriä kohti, nämä bitit muunnetaan yhdeksi analogiseksi signaaliksi kullekin värikanavalle (punainen, vihreä ja sininen) ennen kaapelin läpivientiä.
Vaihe 4: LÄHTÖ - HDMI -ohjain Osa 1
Nyt kun tiedämme, miten VGA -ohjain toimii ja meillä on toimiva suunnittelu, voimme jatkaa HDMI -ohjaimen kanssa. HDMI -ohjain käyttää itse asiassa kaikkea VGA -ohjaimessa kehittämäämme koodia. HDMI ja VGA käyttävät samoja ajoituksia ja samoja signaaleja. Ero näkyy ulostulonappeissa.
Vaikka VGA käyttää yhtä johtoa kullekin värille ja lähettää analogista signaalia sen läpi, HDMI lähettää tiedot digitaalisesti 1 bitti kerrallaan kullekin värille ja käyttää differentiaalista signalointia. Differentiaalinen signalointi tarkoittaa, että jokaisessa bitissä HDMI: ssä on 2 nastaa, joista toinen on päinvastainen. Joten jos haluaisimme lähettää signaalin "1", lähetämme "1" johdolla ja "1" negatiivisena toisella johdolla. Tämä varmistaa signaalin eheyden ja voit lukea siitä lisää täältä https://goo.gl/6CPCzB. Meillä on yksi näistä kanavista kullekin värille, PUNAINEN, VIHREÄ ja SININEN, ja yksi kellolle. Erotussignaalien erityispiirteiden vuoksi hdmi: n kautta lähettämiemme signaalien on oltava tasapainotettuja tasavirtaa, mikä tarkoittaa, että 1: n ja 0: n lukumäärän on oltava suunnilleen yhtä suuret tietyn ajanjakson aikana. Tätä varten käytämme 8b/10b -koodausta. Voit oppia paljon siitä, miten differentiaalinen merkinanto ja 8b/10b -koodaus toimivat DVI -määrityksistä täältä https://goo.gl/hhh8Ge (DVI ja HDMI käyttävät samoja videosignaaleja).
Vaihe 5: LÄHTÖ - HDMI -ohjain Osa 2
Teoria riittää, siirrymme projektiin. Vaikka VGA -ohjaimessa saimme 148,5 MHz: n kellon, tässä meidän on annettava 10 -kertainen taajuus, koska haluamme lähettää 8 bittiä jokaiselle värille ja käyttämällä 8b/10b -koodausta, joka tarkoittaa 10 bittiä pikseliä kohti ja 10 *148,5 MHz = 1485 MHz. Tämä on valtava taajuus, jota ei voi saada Zybo Boardilta. Onneksi saimme muutamia temppuja hihaamme. Voimme hallita 5*148,5MHz = 742,5MHz ja käytämme OSERDES (serializer) IP -osoitetta tietojen siirtämiseen sekä 742,5Mhz -kellon nousevalle että laskevalle reunalle, joten saamme todella lähetettyä tietoa 1485MHz: llä. Vivado antaa meille ajoitusvaroituksia ja voit aina valita pienemmän resoluution pienemmällä kellolla, mutta koska se toimii, emme todellakaan välitä siitä nyt (varoitukset liittyvät siihen, että kellopuskurit eivät virallisesti tukemaan yli 464 MHz: n taajuuksia).
Meidän on siis koodattava VGA -ohjaimen ulostulostamme saadut tiedot 8b/10b -muodossa ja sarjoitettava ne sitten edellä mainitulla tavalla. Meidän on myös lisättävä projektiin toinen MMCM, jotta voidaan generoida 742.5 MHz: n kello sarjoittamista varten.
Olen liittänyt alla vhdl -tiedostot kooderia ja sarjoitinta varten. Sinun on ensin koodattava RGB -kanavat ja sarjattava ne sitten.
Esimerkki punaisesta kanavasta:
TMDS_encoder_RED: TMDS_encoder
porttikartta (clk148, red_channel_8bits, c_red, video_on, encoded_red_10bits);
Serialiser_RED: Serialiser10_1
porttikartta (clk148, clk742, encoded_red_10bits, reset, red_serial_1bit);
TMDS_encoderin "c" -tulo on "00" punaiselle ja vihreälle ja "vsync & hsync" siniselle (tämä on osa DVI -määritystä
Vaihe 6: Kuvien näyttäminen RAM -muistista
HDMI -ohjaimen tarkoitus on näyttää käsitellyt kuvat. Nyt kun ohjain on asennettu ja käyttövalmis, meidän pitäisi ajatella tämän ohjaimen syöttämistä tiedoilla. Koska suuri osa kuvanparannusprosessista tapahtuu PS: ssä (Processing System = ARM Processor) ja saadut kuvat sijaitsevat DDR RAM -muistissa. Joten tarvitsemme tavan saada tiedot RAM -muistista HDMI -ohjaimeen.
Tämän saavuttamiseksi tarvitset 3 IP -osoitetta:
1) VDMA (Video Direct Memory Access)
2) VTC (videon ajoitusohjain)
3) Striimaa videolähtöön (kutsumme sitä tästä lähtien S2VO: ksi)
S2VO antaa itse asiassa RGB 24BIT -signaalin lähtöön ja tarvittavat HSYNC- ja VSYNC -signaalit. Joten voimme jättää sen osan HDMI -ohjaimesta pois.
Sinun on lisättävä nämä IP -osoitteet suunnitteluun, määritettävä ne ja muodostettava oikeat yhteydet.
Lopuksi sinun pitäisi saada jotain, joka muistuttaa yllä olevaa kaaviota.
Vaihe 7: LÄHTÖ - SDK LOPPU
Kun kaikki laitteistot on asennettu ja käyttövalmiina, meidän on nyt rakennettava ohjelmisto PS: ään. Viemme laitteiston ja bittivirran ja käynnistämme SDK: n.
1) Tiedosto -> Vie -> Vie laitteisto -> Tarkista Sisällytä bittivirta ja paina OK
2) Tiedosto -> Käynnistä SDK
Luo SDK: ssa uusi sovellusprojekti.
3) Tiedosto -> Uusi -> Sovellusprojekti
4) Valitse projektillesi nimi ja paina Seuraava
5) Valitse "Hello World" -malli ja paina Valmis
SDK: n sovelluksen on ohjelmoitava VDMA. Tämän saavuttamiseksi käytetään joitain vakiotoimintoja (menen yksityiskohtiin, kun minulla on aikaa).
Suunnittelumme testaamiseksi käytämme SDK Restore (Xilinx Tools -> Dump/Restore) -toimintoa kuvan asettamiseen DDR RAM -muistiin ja sen näyttämiseen HDMI -ohjaimemme avulla. Voit ladata kuvan minne haluat (paitsi joitakin pieniä rajoitettuja alueita muistin alussa). Esimerkkinä valitsimme osoitteen 16777216 ja tiedoston koon 8294400 = 1920*1080*4 (4 kanavaa = RGB + alfa).
Se toimii !
Jatkuu
Suositeltava:
Akustinen levitaatio Arduino Unon kanssa Askel askeleelta (8 vaihetta): 8 vaihetta
Akustinen levitaatio Arduino Unon kanssa Askel askeleelta (8 vaihetta): ultraäänikaiuttimet L298N DC-naarasadapterin virtalähde urospuolisella dc-nastalla ja analogiset portit koodin muuntamiseksi (C ++)
4G/5G HD -videon suoratoisto DJI Dronesta alhaisella latenssilla [3 vaihetta]: 3 vaihetta
4G/5G HD -videon suoratoisto DJI Dronesta alhaisella latenssilla [3 vaihetta]: Seuraava opas auttaa sinua saamaan live-HD-videovirtoja lähes mistä tahansa DJI-dronesta. FlytOS -mobiilisovelluksen ja FlytNow -verkkosovelluksen avulla voit aloittaa videon suoratoiston droonilta
Pultti - DIY -langaton latauskello (6 vaihetta): 6 vaihetta (kuvilla)
Pultti - DIY -langaton latausyökello (6 vaihetta): Induktiiviset lataukset (tunnetaan myös nimellä langaton lataus tai langaton lataus) on langattoman voimansiirron tyyppi. Se käyttää sähkömagneettista induktiota sähkön tuottamiseen kannettaville laitteille. Yleisin sovellus on langaton Qi -latauslaite
WIDI - langaton HDMI Zybo: n avulla (Zynq Development Board): 9 vaihetta (kuvien kanssa)
WIDI - langaton HDMI Zybo: n avulla (Zynq Development Board): Oletko koskaan toivonut, että voisit liittää television tietokoneeseen tai kannettavaan tietokoneeseen ulkoisena näyttönä, mutta et halunnut saada kaikkia näitä ärsyttäviä johtoja tielläsi? Jos on, tämä opetusohjelma on juuri sinua varten! Vaikka on olemassa joitakin tuotteita, jotka saavuttavat tämän tavoitteen
Nelikopteri Zybo Zynq-7000 -kortilla: 5 vaihetta
Nelikopteri Zybo Zynq-7000 -levyä käyttämällä: Ennen kuin aloitamme, tässä on muutamia asioita, joita haluat projektille: Osaluettelo 1x Digilent Zybo Zynq-7000 -levy 1x nelikopterikehys, jolla voidaan asentaa Zybo (liitetty Adobe Illustrator -tiedosto laserleikkaukseen) 4x Turnigy D3530/ 14 1100KV harjatonta moottoria 4x