Sisällysluettelo:

Zynq -kuvanparannusjärjestelmä: 7 vaihetta
Zynq -kuvanparannusjärjestelmä: 7 vaihetta

Video: Zynq -kuvanparannusjärjestelmä: 7 vaihetta

Video: Zynq -kuvanparannusjärjestelmä: 7 vaihetta
Video: Zynq 7 – PS project: Hello World and Memory test without Programmable Logic 2024, Marraskuu
Anonim
Zynq -kuvanparannusjärjestelmä
Zynq -kuvanparannusjärjestelmä
Zynq -kuvanparannusjärjestelmä
Zynq -kuvanparannusjärjestelmä

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

Materiaalit
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

LÄHTÖ - VGA -ohjain Osa 1
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

LÄHTÖ - VGA -ohjain Osa 2
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

LÄHTÖ - HDMI -ohjain Osa 1
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

LÄHTÖ - HDMI -ohjain Osa 2
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

Kuvien näyttäminen RAM -muistista
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

LÄHTÖ - SDK LOPPU
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: