Kurssi: Digitaalitekniikka-1, Logiikkapiirien alkeet, viimeinen kertaus torstaina 14.1.2016 kello 18

Aloitamme taas digitaalitekniikan opintokokonaisuuden alkeiskurssilla, joita on tarkoitus vetää tämän vuoden puolella ainakin kuutena torstaina.

Lähestyminen on mahdollisimman epäteoreettista ja teemme yksinkertaisia 74-sarjan ja vastaavien logiikkapiirien kytkentöjä leipälaudalle.

Kurssi on ilmainen ja avoin kaikille eikä vaadi esitietoja.

Kurssille tulee jatkoa peruskurssin muodossa, jolloin siirrymme ohjelmoitavien CPLD- ja FPGA-piirien ohjemointiin Verilog-kielellä. Tämän jälkeen on vielä jatkokurssi jossa mennään syvemmin FPGA-piirien syövereihin jos innostusta riittää.

Helsinki Hacklab

Kurssin tiedoitus tapahtuu tämän Discourse-ketjun kautta, eli rekisteröidy ja ruksi sähköpostiseurantaan.

Kurssin aiheeseen sopivasti tänään tulee täyteen 200 vuotta George Boolen syntymästä. Myös Google muistaa merkkipäivää hakusivunsa logoanimaatiossa.

Vaikka kurssin epäteoreettisesta luonteesta johtuen Boolen algebrasta ei paljoa puhutakaan, kyllä se siellä taustalla vaikuttaa vahvasti.

Ensimmäisellä kerralla Jari veti perusteita, kalvot löytyvät ‘kurssikansiosta’:

Tällä viikolla pidetään pikainen kertaus, sitten vähän tylsempää teoriaa binääriluvuista, koska niiden sujuva pyörittely tekee jatkosta helpompaa.

Sitten harjoituksen vuoksi tehdään taas pari yksinkertaista leipälautakytkentää peruspiireillä, jotta saadaan vähän rutiinia tähänkin hommaan.

Toisella kerralla tutustuttiin pikaisesti eri kantalukujärjestelmiin:

Kymmenkantainen desimaalijärjestelmä (dec)

  • symbolit: 0, 1, 2, 3, 4, 5, 6, 7, 8 ja 9
  • merkintätapoja: 42, 42₁₀, 8’d42 (Verilog)

Kahdeksankantainen oktaalijärjestelmä (oct)

  • symbolit: 0, 1, 2, 3, 4, 5, 6 ja 7
  • merkintätapoja: 52, 52₈, 8’o52 (Verilog), 052 (C-sukuiset ohjelmointikielet, tätä kannattaa varoa!)
  • vastaa kolmen bitin binäärilukua

16-kantainen heksadesimaalijärjestelmä (hex)

  • symbolit: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E ja F
  • merkintätapoja: 2A, 2A₁₆, 2ah, 8’h52 (Verilog), 0x2a (C-sukuiset ohjelmointikielet)
  • vastaa neljän bitin binäärilukua (myös termiä nibble käytetään)
  • kaksi heksanumeroa(digitaalia) vastaa kahdeksaa bittiä, eli tavua (myös termiä oktetti käytetään tietoliikenteessä)

Kaksikantainen binäärijärjestelmä (bin)

  • symbolit: 0 ja 1
  • merkintätapoja: 101010, 101010₂, 8’b0010_1010 (Verilog), 0b101010 (C-sukuiset ohjelmointikielet, ei standardi mutta monesti tuettu)

Lukujen esittäminen desimaalijärjestelmällä on ihmiselle se ymmärrettävin muoto. Mutta koska binäärisessä digitaalitekniikassa yksittäisillä signaaleilla on vain kaksi tilaa (HIGH/LOW, ON/OFF, 0/1, VCC/GND, jne.) ja näitä niputtamalla saadaan isompia lukuarvoja joita on monesti kätevämpi esittää binääri- ja heksaluvuilla. Nykyisin yleisin yksikkö on tavu (byte) joka koostuu kahdeksasta bitistä.

Tavulla voidaan ilmaista 256 (2×2×2×2×2×2×2×2 = 2^8) erilaista kombinaatiota. Nämä voidaan tulkita esimerkiksi lukuina 0…255 tai vaikka 7-bittisenä ASCII-merkkinä. Isompia lukuja voidaan rakentaa yhdistelemällä useampia tavuja, yleensä 2, 4 tai 8 kappaletta jolloin käyttöön saadaan 8-, 16-, 32- ja 64-bittiset luvut. Näistä huomataan, että ne ovat kaikki neljällä jaollisia, joten heksadesimaaleiksi niitä on helppo muuntaa.

Vastaavasti tietotekniikan alkuaikoina käytettiin paljon kolmella jaollisia bittimääriä (9, 12, 18, 24, 36 jne.) jolloin oktaaliluvut olivat luonnollisia.

Näissä kaikissa lukujärjestelmissä kokonaisluvut voidaan luetella saman kaavan mukaisesti, aloitetaan nollasta lisäämällä joka kierroksella lukuun yksi. Sitten kun tulos ylittää lukujärjestelmän symbolit, aloitetaan taas nollasta, mutta lisätään yksi tätä edelliseen symboliin.

  • desimaalijärjestelmä:
  • 0
  • 0 + 1 = 1
  • 1 + 1 = 2
  • 2 + 1 = 3 …
  • 8 + 1 = 9
  • 9 + 1 = 10
  • 10 + 1 = 11 jne.
  • heksadesimaalijärjestelmä:
  • 0
  • 0 + 1 = 1 …
  • 9 + 1 = A
  • A + 1 = B …
  • F + 1 = 10
  • 10 + 1 = 11 (desimaalilukuna 17)
  • binäärijärjestelmä:
  • 0
  • 0 + 1 = 1
  • 1 + 1 = 10
  • 10 + 1 = 11
  • 11 + 1 = 100 (desimaalilukuna 4)

Huomioita

  • nämä järjestelmät ovat vain saman informaation eri esitysmuotoja ihmisille, aina on kyse samasta matemaattisesta kokonaisluvusta, joka on olemassa esimerkiksi elektronisesti binäärilukuna johtimissa.
  • binääriluvun voi pätkiä neljän bitin ryhmiin ja opetella vastaavat heksadigitaalit vaikka ulkoa (kuvan kuusitoista ensimmäistä riviä).
  • binääriluvut/kombinaatiot voi helposti luetella ruutupaperille vaihtamalla alimman bitin arvoja nollasta ykköseen joka rivillä, seuraavan bitin arvoja kahden rivin välein, seuraavan neljän jne. tutki kuvasta bittien käyttäytymistä
  • vaikka tässä puhutaan vain luvuista, ne voivat esittää ASCII-merkkejä, RGB-värejä, tietokoneohjelmaa jne.

Lukujärjestelmien välillä on jatkossa helppo tehdä muutoksia myös laskimella, perusteet voi testata vaikka sillä että ymmärtää mihin tämän vitsin ryhmään kuuluu:

Nyt kun on selvitty alkulämmittelyistä, lähdetään käymään läpi kombinaatiologiikkaa. Opetellaan myös binäärilukujen yhteenlaskua ja rakennetaan leipälaudalle laskukone. Ei nyt ihan funktiolaskinta, mutta jos edes binäärilukuja yhteenlaskeva.

Viime kerralla ehdittiinkin jo käymään kombinaatiologiikka lähes kokonaan läpi, ja yhteenlaskukonekin saatiin suunnilleen toimimaan. Tällä kertalla katsellaan lyhyesti piiriperheitä, ja sen jälkeen päästään jo aloittelemaan sekvenssilogiikkaa. Sen parissa sitten vietetäänkin loput tästä kurssista.

Tälläkin viikolla työ haittaa harrastustoimintaa. Mikä on paras lähde sekvenssijuttujen katseluun tässä vaiheessa. Että en ihan turistina tule paikalle :sunglasses:

Tästä varmaan torstain jälkeen laitetaan joku kooste siitä kuinka pitkälle päästiin, alkeiskurssilla käymme läpi varsinaisesti vain nämä:

  • SR-latch (set/reset ‘salpa’) joko kahdesta NOR- tai NAND-portista, rakennetaan tämmöinen leipälaudalle, ja tästä löytyy paljon ainestoa netistä, esim:

  • https://www.youtube.com/watch?v=kt8d3CYWGH4

  • D-latch (data ‘salpa’, transparent) tätä ei varsinaisesti meidän kursseilla haluta käyttää, varsinkaan ohjelmoitavalla logiikalla, mutta opettelemme jotta osaamme välttää näiden syntetisoimista

  • D-flipflop, DFF (data ‘kiikku’, ‘flipflop’, ‘flipari’, edge-triggered ‘reunaherkkä’) tämä on se millä jatkossa kaikki synkroninen sekvenssilogiikka tullaan toteuttamaan

Mutta yritän löytää näille jotain hyviä tutoriaaleja etäopiskeluun. Jos kerkiämme pidemmälle, niin sitten seuraavan näistä rakennetaan siirtorekisteri ja sen jälkeen ehkä laskuri. Tämä onkin sitten melkein koko alkeiskurssin asia ja harjoitelemme näitä paljon eri sovelluksilla, koska kaikki mielenkiintoisemmat rakennelmat tulevat näiden tietojen soveltamisesta.

Tänään puhuttiin logiikkaperheistä ja opeteltiin lukemaan kotelon merkintöjä.
Tässä on verkkosivu, jolla on listattu valmistajien käyttämiä kirjainsarjoja.

Tuolla ylempänä kyseltiin verkkosivuja, joista voisi opiskella, jos sattuu kurssi-istunto jäämään väliin tai muutenkin. Tässä pari:

  • http://www.play-hookey.com/digital/ Tätä olen käyttänyt kurssillakin, siinä on varsin selkeä jaottelu ja interaktiiviset esimerkit, joilla näkee piirien toiminnan havainnollisesti.

  • http://www.falstad.com/circuit/ Tämä on piirisimulaattori. Aika paljon analogiakytkentöjä, mutta myös perusdigitaalipiirit löytyy. Niitä voi piirrellä itsekin ja näkee mitä piirissä tapahtuu.

Viimeksi kertailtiin vielä kombinaatiopiirejä. Hiukan jo tulevia kursseja valmistellen katsottiin lyhyesti periaatteita, joilla CPLD- ja FPGA-piirit selviytyvät tilanteesta, jossa niiden pitää pystyä toteuttamaan mikä tahansa totuustaulu. Sitten poikettiin piiriperheiden puolelle ja yritettiin ymmärtää mikropiirien kotelojen päälle painettuja mystisiä kirjain- ja numeroyhdistelmiä. Lopuksi ehdittiin vielä sekvenssilogiikan puolelle ja rakennettiin kaikkien sekventiaalisten piirien äiti: RS-kiikku NAND-porteista.

Tällä viikolla jatketaan kiikkujen parissa ja tutustutaan lähemmin D-kiikkuihin, ja siihen, mikä ero onkaan latchilla ja flip-flopilla. D-kiikun sovelluksena rakennetaan optinen liikkeen suunnan ilmaisin.

Viime kerta menikin kokonaan D-kiikkujen parissa. Jos tuosta kerrasta onnistuu muistamaan vain yhden asian, niin kannattaa muistaa läpinäkyvän latchin ja flip-flopin ero: läpinäkyvyys kellon ollessa ylhäällä vs. reunaliipaisu.

Ensi kerralla siirrytään sitten siirtorekistereihin ja näistä tutkitaan erityisesti joka paikassa vastaantulevaa 74HC595:ttä.

Vuoden viimeisessä istunnossa keskitytään binäärilaskureihin. Sen jälkeen onkin käyty kaikki digitaalitekniikan rakennuspalikat läpi. Vuoden vaihduttua otetaan vielä pari istuntoa alkeiskurssia, joissa kertaillaan opittua ja rakennellaan hiukan tähänastisia monimutkaisempia kytkentöjä.

Pidetään alkeiskurssia vielä tämän viikon tortaina ja kertauksen merkeissä.

Ohjelmoitavilla logiikkapiireillä jatketaan tämän jälkeen torstaisin samalla paikkalla:

Nyt siis kerkiää vielä kertaamaan tai palauttelemaan mieleen peruslogiikkapiirien olemusta.

Syksyn ja tammikuun aikana läpikäydyt kalvosetit ja labratöiden toimintaselostukset löytyvät nyt täältä:

Heips,
skype elvytetty eli jos intoa kokeiluun on, niin se onnistunee. Palaillaan t. Tuula