Kurssi: Digitaalitekniikka, pidettiin torstaisin ajalla 2.3.2017–24.5.2018

Loppuvuoden aikana käymme läpi digitaalitekniikan alkeet porttipiireistä FPGA-ohjelmointiin (System)Verilog HDL-kielellä ja Linux kernelin toimintaan niiltä osin kuin se näiden sulautettujen järjestelmien hyödyntämiseksi on tarpeellista.

Kurssi solveltuu asiasta kiinnostuneille harrastajille tai jo teollisuudessa sulautettujen kanssa työskenteleville jotka haluavat päivittää osaamistaan. Pohjatiedoiksi riittää C-kielen alkeiden osaaminen.

Harjoitukset ja aineisto pyritään pitämään siten, että helpoimmissa pysyvät kaikki mukana, mutta samalla jatkotehtävissä olisi edistyneimillekin uutta opittavaa. Kurssilla käytännössä kaikki tullaan tekemää Xilinxin Zynq -piirillä, joka siis yhdistää ARM ja FPGA -maailmat samaan piiriin ns. All Programmable SoCs (AP SoC).

Kurssilla tarvitaan siis kehityslauta jossa minimissään Zynq-7010, 512 MiB RAMia, SD-korttipaikka ja ethernet-liitin. Ainakaan vielä kahdella ensimmäisellä kerralla ei tarvitse olla omaa, mutta maaliskuun aikana semmoinen pitäisi jokaiselle saada. Ensimmäisellä kerralla voi sopia kimppatilauksia, niin säästää ainakin postikulut.

Lisäksi tarvitaan oma suhteellisen tehokas tietokone, vähintään 8 GiB RAMia ja 100GB vapaata levytilaa, miellellään SSD:tä koska Xilinxin työkaluja on kurssilla helpointa ajaa virtuaalikoneessa (esim. VirtualBox). Vivadon voi myös asentaa 64-bittiseen Windows tai Linux koneeseen suoraan, katso viralliset vaatimukset. Kurssilla esimerkkinä on Ubuntu 16.04.1 joka toimii hyvin parin asetuksen säätämisen jälkeen.

Kurssi on ilmainen Helsinki Hacklabin jäsenille ja jos et ole vielä jäsen, niin liittymällä pääset osallistumaan tälle kurssille sekä vuoden muihin koulutuksiin, tapaamisiin ja muuhun toimintaan. Lähetä jäsenhakemuksesi viimeistään kurssin aikana. Varsinaista etukäteisilmoittautumista ei ole, mutta jos tulee ahdasta, eturivin paikoille on viime vuoden digitaalitekniikan kurssilaisilla etuoikeus.

Tämä keskustelu on kurssin virallinen tiedoituskanava, eli tee tunnus sivun oikeasta yläkulmasta Sign Up ja sen jälkeen lisää ainakin tämä keskustelu itsellesi email-valvontaan.

Näitä seuraavia kehityslevyjä on evaluoitu ja niille saa kurssin aikana virallista tukea. Jos valmistaja on julkaissut ns. board-tiedostot, niin ei pitäisi olla muidenkaan kanssa ongelmia.

MYIR Z-turn Board

Digilent PYNQ-Z1

  • digilentinc.com
  • 229€ Zynq-7020
  • 65€ jos olet alan korkeakouluopiskelija, katso lisätietoja
  • tässä siis isompi piiri ja on suunnattu enemmän Python-ohjelmoijille, on kuitenkin täysiverinen kehityslauta

Digilent Arty Z7

  • digilentinc.com
  • Zynq-7010 ja Zynq-7020
  • saatavuutta tai hintoja ei vielä julkaistu, erot Pynq-lautaan minimaalisia, eikä aivan selvää että miksi näin samankaltaiset tuotteet (sain Digilentiltä infoa että pyrkivät saamaan maaliskuun lopussa julkaistua)
  • ei pidä sekoittaa Arty Artix-7-lautaan joka on pelkkä FPGA

Digilent ZedBoard

  • digilentinc.com
  • 495€ Zynq-7020
  • 319€ jos olet alan korkeakouluopiskelija
  • tämä levy on ehkä turhan hintava hankittavaksi pelkästään tätä kurssia varten

Avnet MicroZed

Red Pitaya / STEMlab 125

  • redpitaya.com
  • 199€ Zynq-7010
  • sopii erityisesti analogisen signaalin mittaamisen ja tuottamiseen, nopeat 125 Msps ADC/DACit joilla mahdollista nanosekunti luokan latensseilla tehdä säätimiä yms.

Kaikkien hinnat suuntaa-antavia, päälle tulee postit, alvit ja tullit. Jälleenmyyjiä varmasti muitakin.

Huomenna torstaina 2.3. aloittelemme kevyesti kurssin esittelyllä ja selvittelemme osallistujien osaamistasoa. Käymme läpi kurssilaisten käyttöjärjestelmät ja kiinnostuksen kehityslautojen kimppatilauksiin. Lopuksi harjoittelemme diskreetillä irtologiikalla leipälautakytkentöjen tekemistä.

Ensi viikon torstaina 9.3. aloitelemme tekemällä johdetusti tunnukset Xilinxin sivuille ja oikeanlaiset WebPack lisenssit Vivadoon. Asentelemme virtuaalikoneisiin Ubuntua ja Vivadoa ja taas lopuksi kertausharjoittelua leipälautakytkennöillä.

Alussa aikaa menee paljon ohjelmistojen asentamiseen ja hyödynnämme aikaa käymällä pois alta tylsää teoriaa kombinaatiologiikasta ja binääriluvuista.

Keväällä kurssikertoja olisi tarkoitus pitää noin 13 kappaletta joista viimeinen 8.6. jonka jälkeen kesätauko ja syyskausi jatkuisi taas koulujen alkaessa.

Kevään tavoitteena on, että kurssilainen osaa itsenäisesti:

  • luoda Vivadolla projetin omalle kehityslaudalleen
  • luoda oman AXI4-Lite FPGA -lohkon
  • tehdä Linuxilla toimivan C-ohjelman jolla lohkolle pystyy liikennöimään

Syksyn tavoitteena on, että kurssilainen osaa itsenäisesti:

  • luoda mille tahansa kurssilla mukana olevalle kehityslaudalle SD-kortin sisällön jossa kaikki tarvittava bootloaderista itse käännettyyn Linuxiin
  • tehdä yhteiskäyttöön soveltuvia AXI4-Lite ja AXI4-Stream lohkoja
  • tehdä tarvittaessa lohkoille Linux-kernel moduleita jotta niiden käyttäminen onnistuu laitetiedostoina

Kurssilla sivuttavia tekniikoita, listassa on paljon asiaa, eikä ole tarkoitus kaikkia kovin syvällisesti käydä vaan oman mielenkiinnon mukaan valita jatkoprojekteja:

  • FPGA-lohkojen käyttäminen verkon yli selaimella (Nginx palvelin Zynqissä)
  • singaalinkäsittelyä FPGA:n DSP-lohkoilla, mahdollisesti High Level Synthesis (HLS) avulla
  • HDMI-kuvan kaappaus ja prosessointi
  • PYNQ-projektin mukaisten ‘Overlay’ FPGA-lohkojen tekeminen ja vastaavan Python ympäristön pystyttäminen muille kehityslaudoille

Moi,

Kun kerran mainitsit PC-laitteistovaatimuksista alkuperäisessä postissa, niin kysyisin, että voisiko vanhempikin ja vähän hitaampikin läppäri (4 GB RAM, Win-10 64-bit, SSD) olla tällä kurssilla riittävä, jos käytän Zynq-7010 (ehkäpä tuo Red Pitaya)

T: Josu

Kyllä tuollakin menee, muisti on vähän hilkulla mutta SSD kompensoi. Ja pitää sitten natiivisti asentaa kun virtuaalikoneet vaatisivat enemmän muistia. Piirin koko 7010 vs. 7020 ei käytännössä vaikuta, paitsi että isompaan on joskus nopeampi ajaa map/route kun tilaa on vapaammin.

Mutta kyllä tuolla pääsee alkuun ja sitten jos alkaa se hitaus harrastuksen edetessä haitata niin voi koneen päivittämistä suunnitella.

1 Like

Ensi torstaina 9.3. teemme tunnukset Xilinxin sivuille ja oikeanlaiset WebPack-lisenssit Vivadoon, ohjeet löytyvät myös täältä.

Katsomme kuinka moni haluaa lähteä PYNQ-kehityslaudan yhteishankintaan, sillä emme jää odottelmaan Arty Z7 -lautoja koska 7020-version hinta ei tule olemaan merkittävästi PYNQiä edullisempi ja julkaisu saattaa venyä pitkälle huhtikuun puolelle. Jos haluat osallistua kimppaan, kirjoita nimesi listaan, arvio lopullisesta hinnasta 280€. Jos haluaa edullisemman laudan, niin MYIR Z-turnilla ilman Capeakin pärjään kurssilla.

Kertaamme myös lyhyesti viimekerralla käydyt asiat, eli vielä kerkiää hyvin mukaan.

Uusia asioita:

  • demotaan pikaisesti Vivadolla perus Hello World Zynq -projekti
  • Windows käyttäjät asentavat Puttyn tai muun ohjelman jolla pystyvät kirjautumaan SSH:lla labin Red Pitaya Zynq -lautaan
  • tehdään Zynqillä Hello World C-kielellä
  • jaetaan muistitikulta kopioitavaksi “Vivado HLx 2016.4: All OS installer Single-File Download (TAR/GZIP - 20.59 GB)” jota voi sitten annettujen ohjeiden mukaan kotosalla asennella ensi kerraksi
2 Likes

Meni liian säätämiseksi ja joiduin laittamaan hanskat tiskiin yhteistilaamisen kanssa. Eli tilatkaa suoraan PYNQ Digilentiltä tai sitten MYIR Trenziltä:

Kurssilla on jo aika monella lauta, eli ilmankin pärjää vielä tämän kuun ja torstaina voidaa katsoa jeesiä jos joku ei pysty itse tilaamaan ulkomailta.

Huomenna jatkamme asentamalla Vivadon, tässä jo ohjeet Windows 10 ja Ubuntu 16.04.2 asennukselle.

Viimeksi kävimme hieman läpi virtuaalimuistin toimintaa ja nyt jatkamme sen käsittelyä syvällisemmin mmap-systeemikutsun ja /proc/self/pagemap:n avulla.

Käymme myös läpi kombinaatiologiikan ohjelmointia C:n bittioperaattoreilla & | ^ ~ jne.

Jos kaikki saavat Vivadon asennettua, teemmen johdetusti ‘baremetal’ Hello World -projektin PYNQ-laudalle.

1 Like

Viime kerta hurahtikin siihen, että Vivadolla ja SDK:lla tehtiin “baremetal” Hello World -ohjelma ja ainakin PYNQ:llä ja Z-turnilla saatiin toimimaan. SDK:ta ei tulla aivan heti tarvitsemaan uudestaan, eli jos se on jäänyt asentamatta tai ei toimi, niin katsotaan sitten uudestaan kun Vivado 2017.1 on julkaistu.

Nyt huomenna oletetaan että kaikilla on Vivado 2016.4 toimintakunnossa ja joku devauslauta käytettävissä, jos ei niin labille voi tulla jo kello 16:00 saamaan vielä apua asennuksessa.

Huomenna aloitame katsomalla joka laudalle jonkin Linux distron jolla devaamisen pääsee aloittamaan:

  • Red Pitaya STEMlab, jatkossa pitaya
  • vakio SD-image kelpaa toistaiseksi sellaisenaan
  • http://downloads.redpitaya.com/downloads/red_pitaya_OS-stable.img.zip
  • PYNQ-Z1, jatkossa pynq
  • vakio SD-image mahdollsesti kelpaa, pitää vain muistaa jupyter yms. ajossa olevat samuttaa devauksen ajaksi
  • https://files.digilent.com/Products/PYNQ/pynq_z1_image_2017_02_10.zip
  • Z-turn, jatkossa zturn
  • tämä enemmän kysymyskerkki, oma lauta on vasta tilauksessa, auttaisi jos joku testaisi jonkun Debian-pohjaisen toimimaan
  • mukana tulleella CD-levyllä kai oli joku, mutta voisi olla vähän tuoreempikin release
  • MicroZed, jatkossa microzed
  • tätä ei tainnut kellään kurssilaisella olla, niin jätetään toistaiseksi sivuun

Sitten kun kaiki pääsevät omaan devaulautaansa SSH:lla sisään ja gcc on asennettuna, jatkamme virtuaalimuistin toiminnan ihmettelyä mmap-kernelkutsun avulla. Ensin mappaamme tavallisen tiedoston useammalla prosessilla, vertailemme virtuaaliosoitteita ja fyysisiä /proc/self/pagemap ja vastaavien kautta.

Seuraavaksi mappaamme fyysistä muistia eri kohdista /dev/mem -laitteen avulla PS-puolen I/O-rekistereitä (tätä ei turvallisuussyistä yleensä ole enabloitu kuin sulautetuissa järjestelmissä).

Sitten kun mappaamiset alkaa sujua, teemme Vivadolla ensimmäisen varsinaisen projektin. Block designissä lisäämme XADC-komponentin (7-sarjalaisten sisäänrakennettu A/D-muunnin) ja konfiguroimme sen mittaamaan Zynqin sisäistä lämpötilaa ja jännitteitä. Sitten teemme C-ohjelman joka lukee arvot ja tulostaa ne siististi ruudulle. Edistyneemmät voivat hioa ruudunpäivitystä ja värejä ANSI-koodeilla.

Jos aikaa jää, aloitamme Verilogin alkeisiin tutustumisen ja seuraavalla kerralla on tarkoitus tehdä yksinkertaista kombinaatiologiikkaa FPGA-puolelle.

Viimeksi teimme yksinkertaisen projektin Vivadolla, jossa nyt uutena yksi XADC AXI4-Lite IP-lohko josta sitten GP0-väylän kautta luettiin ZYNQ-piirin lämpötilaa ja jännitteitä. Tämä projekti tehdään huomenna vielä uudestaan.

Otimme yhteyden devauslautoihin serial-portin kautta ja parilla komennolla terminaalikin saatiin mukautumaan koon ja värien osalta. Tälläkin tyylillä hommaa pystyy tekemään (paitsi pitajan-10 versiolla), mutta FPGA bittitiedoston siirtäminen ja apuohjelmien päivittäminen menee vaikeaksi.

Jatkossa käytämme serialin sijasta SSH-yhteyksiä, eli huomenna kykemme boardit ethernetkaapelilla labin verkkoon ja myöhemmin langattomasti USB-WiFi -nappuloilla (näitä voi ostaa labilta 5e/kpl. kunhan saadaan ne ensin testattua).

Nyt kaikkien kehitysympäristö ja työkalut alkavat olla valmiina kevätkauden varsinaiseen tavoitteeseen, eli sen oman AXI4-Lite IP-lohkon tekoon. Ensin teemme Verilogilla pelkkää kombinaatiologiikkaa joka ei edes keskustele PS puolelle, mutta työnkulku pidetään samana.

Vaikka jonkin aikaa keskitymme hyvin vahvasti Verilogiin, pyrimme joka kerta myös vähän opettelemaan Linuxin peruskomentoja ja ARM prosessoreiden arkkitehtuuria.

Z-turn 7020 board file: https://www.dropbox.com/s/89x31bv6f33855x/zturn-7z020.zip?dl=0

Pyritään keräämään kaikkien levyjen tiedot tänne: https://gitlab.com/suovula/digitaalitekniikka .

Constraint-tiedostot (.xdc) ovat vielä aika yksinkertaisia, lisäillään kurssin kuluessa niihin tavaraa sitä mukaan kun projektit vaativat.

Sori, tuo oli tilapäiseen tarpeeseen. Piti se poistaakin mutta kiireessä taas jäi.

Nyt 13. kiirastorstaina pidetään vapaamuotoisempi kurssikerta kun monilla varmasti on jo pääsiäiskiireet päällä.

Eli jos on jäänyt kertoja välistä tai sitten kaipaa linkkejä omaehtoiseen edistymiseen, niin voidaan käydä tämmöisiä ja muita paikallaolijoita askarrutavia juttuja läpi.

1 Like

Jos et huomenna pääse paikalle, katso kotitehtävänä, että oman kehityslautasi asetukset samalle tasolle:

Huomenna jatkamme Verilogin opiskelua puhtaalla kombinaatiologiikalla ja tätä varten tarvitsemme kehityslaudalle vähintään neljä painiketta ja LEDiä kuten viime torstaina jo osa saikin rakenneltua.

Sitten alamme askel askeleelta opiskelemaan Verilogin kierouksia, olkoon ensimmäisenä wire vs. reg -keywordien käyttö syntetisoituvassa koodissa. Muistisääntö menee lyhyesti näin:

  • sijoituksen kohteen pitää olla reg-tyyppiä jos siihen sijoitetaan always-lohkon sisältä, muuten sen pitää olla tyyppiä wire

Se ei siis ole registeri (vaikka mahdollistaa sellaisen luonnin) ja tätä kummajaista on SystemVerilogissa korjattu, mutta sääntö on kuitenkin niin yksinkertainen, että opettelemme sen vain ulkoa kummemmin miettimättä.

Koodit joilla lähdetään liikkeelle löytyvät gitlabista.

Vivadosta julkaistiin juuri tänään 2017.1-versio ja se näyttäisi toimivan, eli saa päivittää jo tässä vaiheessa jos haluaa, tiedoston Vivado HLx 2017.1: All OS installer Single-File Download (TAR/GZIP - 20.21 GB) - MD5: ee351905f061e19751999e69b41f4b22 voi kopioida labilla muistitikulta. Ulkoasu on vähän uudistunut:

Mainittakoon vielä uutisena, että FPGA-kapasiteettia saa ostaa nyt pilvipalvelunakin, katsastamme tämän sysksyllä paremmin kun siinä on mahdollisuus edullisesti päästä kokeilemaan sen luokan piirejä mihin tuskin yksityisellä henkilöllä olisi muuten varaa.

Viime kerralla aloitimme yksinkertaisen sekvenssilogiikan alkeisiin laskureilla ledien vilkkuttamiseen.

Huomenna käymme sitten tiivistetysti suositeltavat Verilog-rakenteet lävitse, joita soveltamalla pärjää loppukurssin.

Myös havaittu bugi FCLK-kellojen mukaan ledien vilkutteluun selvisi jo puoliksi, mutta palataan tähän vielä huomenna tarkemmin.

Huomenna vielä kertaamme kurssilla käytettävän Verilog syntaksin yksinkertaisten kombinaatio- ja sekvenssilogiikoiden toteuttamiseksi.

Vastaavat asiat löytyvät ‘kurssikirjasta’ josta löytyy selailukappale labilta: FPGA Prototyping by Verilog Examples:Xilinx Spartan-3 Version (2008), joka on ehdottamasti paras kirja Verilogin opiskeluun. Labilta saa myös lainaksi kirjassa käytetyn Spartan-3 kehityslaudan, jos kirjan esimerkkejä haluaa kokeilla (vaatii tosin vanhemman ISE-kehitysympäristön asentamisen Vivadon rinnalle).

Eli jos itsenäinen opiskelu tuntuu sujuvan tai kaipaa kurssin lisäksi kertausta, kirjasta kannattaa käydä huolellisesti seuraavat kohdat:

  • 1.3 Basic Lexical Elements and Data Types
  • sallitut merkit tunnisteissa
  • 1.4 Data Types
  • kurssilla ei käytetä signaaleille z-arvoja vaan ohjataan tri-state puskureita suoraan IOBUF-primitiivillä
  • katso tarkkaan taulukko 1.2
  • kurssilla voidaan käyttää sääntöä: signaali on tyyppiä reg jos sen arvo asetetaan initial tai always-lohkon sisältä, muuten wire
  • 1.5 Program Skeleton
  • käytämme vain eksplisiittisesti esiteltyjä signaaleja ja tämä pakotetaan laittamalla tiedostojen alkuun default_nettype none
  • 1.6 Structural Description
  • käytämme aina porttien kytkemisessä nimiä (connection-by-name)
  • 3.2 Operators
  • opettele operaattorien symbolit, huomaa erot C-kieleen
  • katso tarkkaan taulukosta 3.2 operaattorien suoritusjärjestys, lisää aina sulkuja jos olet vähänkään epävarma
  • 3.3 Always Block for a Combinatorial Circuit
  • käytämme kurssilla vain always @* -notaatiota
  • vältämme väärät latch-rakenteet, kun sijoitamme lohkon alussa oletusarvot kaikille siinä muutettaville signaaleille
  • jos signaalin arvon laskenta ei tarvitse if tai case -rakenteita, kannattaa se muuttaa wire ja assign -rakenteeksi
  • kombinaatiolohkoissa käytetään sijoituksiin aina = (blocking assignment)
  • 3.7.2 Guidelines
  • tärkeä lista, lue huolellisesti läpi
  • 3.9.1 kohdasta listaus 3.14
  • tyypillinen esimerkki puhtaasta kombinaatiologiikasta
  • koska toteutus on vain yksi case rakenne, sen default haara riittää estämään latchien muodostumisen
  • 4.1.1 D FF and Register
  • yhden bitin muisti, kaiken sekvenssilogiikan perusta: Data Flip Flop, DFF, FF, FD, flipari, kiikku, jne.
  • monen fliparin ‘väylää’ kutsutaan rekisteriksi
  • rekisterin muodostuu, kun käytämme sekvenssilohkossa always @(posedge clk) ja <= sijoitusta (non-blocking assignment)
  • huomaa että varattu sana reg voi määritellä sekä kombinatoorisen tai sekventiaalisen signaalin, käyttötapa ratkaisee ja siksi näiden rakenteiden noidattaminen on ehdottoman tärkeää
  • 7.1 Blocking Versus Nonblocking Assignment
  • tarkempi selitys = ja <= sijoitusten eroista
  • 7.2 Alternative Coding Style for Sequential Circuit
  • tämä on se tyyli jota kurssilla käytetään

Jos mainitut asiat ovat jo sujuvasti hallinnassa ja kaipaa lisähaastetta, sitä löytyy kirjasta Verilog And SystemVerilog Gotchas:101 Common Coding Errors And How To Avoid Them (2007) Kirjaa ei labilla vielä ole, mutta alkuun pääsee näillä tekijän esityksillä:

Ensi viikolla helatorstaina jätämme kurssin väliin ja kevätkauden viimeiset kaksi kertaa pidetään 1.6 ja 8.6. ja sitten jäämme kesätauolle. Jatkamme syyskautta elokuun viimeisenä päivänä eli torstaina 31.8.

Nyt on hyvää aikaa kerrata itsenäisesti edellisessä postauksessa olevat Verilogin syntaksit. Kevään viimeisillä kerroilla käymme läpi AXI4-Stream protokollan ja sitten sen pohjalta nopeasti AXI4-Lite IP-lohkon, jonka pohjalta edistyneemmät voivat kesän aikana itsenäisesti tehdä omia projektejaan.

Pari ylimääräistä teemaworkshoppia olisi tarkoistus pitää, ensimmäinen aiheesta yksinkertaisen prosessorin tekeminen, esimerkkinä PDP-8 ja toisena HDMI-kuvanmuodotus. Näiden ajankohtaan voivat kiinnostuneet vaikuttaa.

1 Like

Tänään tosiaan kevätkauden viimeinen kerta, keskitymme AXI-rajapintoihin kertaamalla edellisen kerran esimerkin ja parantelemme sitä.