• Ei tuloksia

Kuten kappalleessa 2 mainittiin, niin harjoitustyön aloituslähtökohta on se, että pelin ai-heena on sama mikä digitaalisuunnittelun ja Ohjelmointi 1 kurssilla on, mutta johdatte-levalla tavalla sulautettuun ohjelmointiin. Joten tästä syystä harjoitustyötä suunnitellaan baremetal-ohjelmointi näkökulmasta. Baremetal-ohjelmoinnilla tarkoitetaan suoraan pro-sessorille ohjelmointia ilman että käyttöjärjestelmä pyörisi taustalla [7].

Kuva 3.1.Ohjelmointi VS baremetal ohjelmointi [7]

Baremetal-ohjelmointi poikkeaa "normaalista"ohjelmointitavasta siten että normaalisti oh-jelmoijan ei tarvitse tietää prosessorin rekistereistä ja osoitteista mitään, vaan asiat ta-pahtuvat korkealla tasolla. Baremetallissa puolestaan liikutaan lähempänä raudantasoa, eli ohjelmoidaan suoraan prosessorin rekistereitä [7].

PYNQ:n kehitysalustassa hieman ongelmallisena prosessorilöhtöisen harjoitustyönsuun-nittelussa on Kaikki tarvittavat IO:t, joita tarvitaan LED-matriisin käyttöön on kytketty Zynq-piirin FPGA linjoihin [5][6]. Tämän takia harjoitustyötä on mahdoton tehdä ilman FPGA:n käyttöönottoa. Digilent on hoitanut tämän ongelman omassa valmiissa ympä-ristössään käyttämällä Xilinx:n tarjoamaa softcore prosessori IP:tä Microplazea kytke-mään HPS (Hard Processing System) sekä LED-matriisin tarvitsemat ulkoiset IO:t toi-siinsa. Softcore prosessorilla tarkoitetaan prosessoria, joka voidaan erikseen syntetisoida SoC:n FPGA:lle tarvittaessa, kun puolestaan HPS, Zynq:n tapauksessa ARM Cortex-A on implementoitu piirille kovakoodattuna. Kuvassa 3.2 on esitelty yksinkertaistettu versio PYNQ-Z1 käyttämästä blokkidiagrammista.

Kuva 3.2.PYNQ-Z1 yksinkertaistettu blokkidiagrammi [22]

Xilinx:n selitys softcoren käytölle IO:n ja prosessorin välille on mahdollisuus implementoi-da omia kommunikointiväyliä mahdollisimman helposti ilman että käyttäjän tarvitsisi tietää miten digitaalista rautaa suunnitellaan[22]. Ajatustasolla tämä on hyvä, mutta harjoitus-työn kannalta tämä tapa on huono, sillä tarkoituksena on ohjata IO:ta suoraan ja itse implementoida tiedonsiirto väylä Zynq:n ja LED-matriisin ohjaimmen välille. Tähän on-gelmaan on kuitenkin yksinkertainen ratkaisu: Hyödyntää tätä valmista blokkidiagrammia ja muokata sitä omien tarpeiden mukaan. Xilinx tarjoaa vapaasti tätä blokkidiagrammia sekä ohjeen, kuinka tätä voidaan hyödyntää. Ottaakseen tämän oletus blokkidiagrammi käyttöön, tarvitsee vain ajaa seuraavat scriptit tcl-scripti Xilinx:n tcl-shell:ssä[22].

cd <PYNQ r e p o s i t o r y > / boards / Pynq−Z1 / base source . / b u i l d _ b a s e _ i p . t c l

source . / base . t c l

Tästä seuraa että Vivado-sovellukseen luodaan automaattisesti kuvan 3.2 mukaisen

blok-kidiagrammi. Scriptin käyttämisellä saavutetaan myös ylimääräinen etu, sillä scripti myös asettelee ARM Cortex-A9 prosessorin rekisterit oikein käytetyllä kehitysalustalla. Eli esi-merkiksi itse ei tarvitse miettiä PLL (Phase locked loop) sekä muiden prosessori keskeis-ten rekisterien asettelua saadakseen prosessori toiminta valmiuteen.

Blokkidiagrammista tarvitsee täten poistaa vain kaikki turhat asiat kuten käytetty softco-re MicroBlaze prosessori IP:t. Se millä ARM, FPGA ja fyysiset IO:t yhdistetään toisiin-sa on Xilinx:n tarjoaman AXI-GPIO IP:n avulla [23]. Tämä soveltuu tähän tarkoitukseen täydellisesti, sillä sen avulla prosessori pystyy AXI-väylän kautta asettelemaan FPGA:lla sijaitsevaa GPIO-lohkoa ja täten hallitseen fyysisiä lähtöjä Zynq-piiriltä. Tämän pohjalta blokkidiagrammiin soveltuu hyvin neljä eri GPIO-lohkoa. yksi ohjamaan PYNQ-Z1:n nor-maaleita LED:ä (LD0-LD3), yksi ohjaamaan RGB-LED:ä, yksi ohjaamaan M54564FP-virtalähdepiiriä, sekä yksi ohjaamaan itse DM163-piiriä. GPIO-IP:llä pystytään itse mää-rittelemään moniko bittinen sen lähtö on [23]. Normaaleille LED:lle näin ollen on järke-vä pistää 4-bittinen lähtö, koska neljä LED:ä. kahdelle RGB-LED:lle puolestaan järkevin bittimäärä on 6. M54564FP-piirille lähtöjen määräksi soveltuu 8-bittiä ja DM163-piirille 6-bittiä. Toisin kuin muut IO:t, painonappeja ja kytkimiä ei kytketä GPIO-lohkoihin, vaan suo-raan prosessoriin EMIO:n avulla (Extended Multiplexed Input Output). EMIO on tarkoitet-tu käytettäväksi ohjelmoitavan logiikan puolelta tarkoitet-tuleville/lähteville signaaleille Cortex-A9 prosessorille/prosessorilta [24]. Kuvassa 3.3 on esitelty Zynq-7000 arkkitehtuurin blokki-diagrammi.

Kuva 3.3.Zynq-7000 arkkitehtuurin blokkidiagrammi [24]

Tällä saavutetaan mahdollisuus käyttää eri tyyppisiä keskeytyksiä, sillä GPIO-IP:t tuke-vat vain taso-keskeytyksiä [23]. Synteesivaiheessa painonappien ja kytkimien fyysiset sisääntulot SoC:n pinnillä kytketään käytännössä vain suoralla vedolla EMIO-pinnien ja fyysisten pinnien välille. Kuvassa 3.4 on esitelty muokattu blokkidiagrammi.

Kuva 3.4.Vivadossa muokattu lopullinen blokkidiagrammi

Vivadossa voidaan määrittää myös samalla Address Editor:ssa GPIO IP:n AXI-väylien osoitteet mitä kautta prosessori on yhteydessä näihin lohkoihin. Synteesi vaiheessa puo-lestaan voidaan määrittää I/O Planning työkalulla mihin fyysiseen lähtöön nämä IP:t kyt-ketään. Taulukossa 3.1 on esitelty miten bitit ja M54564FP-piille tulevat lähdöt on järjes-telty. Kuten taulukosta näkee, tämä noudattaa selkeää järjestystä.

Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0

C7 C6 C5 C4 C3 C2 C1 C0

Taulukko 3.1.M54564FP-piiriin kytketyt kanava bitit

DM163-piirille on pyritty asettamaan mahdollisimman järkevä järjestys miten IO:t on kyt-ketty. Tärkeintä tämän tapauksessa on että SDA ja SCK IO:t ovat vierekkäin, sillä sarja-kello ja sarjadata voidaan luokitella pariksi. Taulukossa 3.2 on esitelty miten DM163:lle lähdöt on kytketty.

Bit4 Bit3 Bit2 Bit1 Bit0

SDA SCK SB Lat Rst

Taulukko 3.2.DM163-piiriin kytketyt signaalit

Myös PYNQ-Z1 laudan omat LED:t LD0-LD3 noudattaa selkeää järjestystä: ensimmäinen LED on kytketty vähiten merkitsevään bittiin ja viimeinen eniten merkitsevään bittiin, kuten taulu 3.3 osoittaa.

Bit3 Bit2 Bit1 Bit0

LD3 LD2 LD1 LD0

Taulukko 3.3.PYNQ-Z1 LED:n kytkentä

Pynq-Z1 laudalla olevat RGB-LED:t on asetettu myöskin selkeään taulun 3.4 mukaiseen järjestykseen.

Bit5 Bit4 Bit3 Bit2 Bit1 Bit0

LD5.R LD5.G LD5.B LD4.R LD4.G LD4.B Taulukko 3.4.PYNQ-Z1 RGB-LED:n kytkentä

Vaikka painonapit ja kytkimet eivät käytä GPIO-IP:tä, niin ne voidaan myös järjestellä loogisesti taulukon 3.5 mukaiseen järjestykseen, koska ne kulkevat joka tapauksessa FPGA:n kautta Cortex-A9 prosessorille.

Bit5 Bit4 Bit3 Bit2 Bit1 Bit0

SW1 SW0 BTN3 BTN2 BTN1 BTN0

Taulukko 3.5.PYNQ-Z1 kytkinten ja painonappien kytkentä

Taulukossa 3.6 on puolestaan esitelty mihin muistiosotteisiin kaikki edellämainitut on kyt-ketty.

Vivadossa luodaan myös HDF-tiedosto (Hardware Description File) jossa kerrotaan pro-sessorin asetukset kuten PLL, UART, TTC, DDR-asetukset. Tätä tiedosta puolestaan käytetään hyväksi, kun Xilinx SDK:ssa luodaan BSP (Board Support package). BSP:llä tarkoitetaan rautakohtaista kokoelmaa matalantason kirjastoja mitä tarvitaan jotta

LIITTYVÄT TIEDOSTOT