Suositeltavat palautettavat tehtävät on korostettu tällä taustavärillä.
Boolean logiikka 30 pistettä
Teoriatehtävät 8 pistettä
Teoriatehtäviin kannattaa pelata peliä ja kokeilla ja lueskella peli -sivun vihjeitä Huom: säännöissä, joista aloitetaan, ei tarvitse olla NAND funktioita, mutta lopputuloksena pitää olla yhtäsuuruus kysytyn funktion ja "NAND"-funtion välillä, siten että "NAND-funktiossa" kaiken voi toteuttaa NAND:eillä (eli esim. funktiossa voi olla muuttujan invertointeja/negatointeja eli NOT funktio, koska NOT itsessään voidaan toteuttaa NAND:lla).
- Lähtien Boolean algebran säännöistä , johda looginen funktio NOT siten että käytetään vain NAND funktioita (lopputuloksessa tulee olla vain NAND funktioita).
- Lähtien Boolean algebran säännöistä, johda looginen funktio AND siten että käytetään vain NAND funktioita.
- Lähtien Boolean algebran säännöistä, johda looginen funktio OR siten että käytetään vain NAND funktioita.
- Lähtien Boolean algebran säännöistä, johda looginen funktio NOR siten että käytetään vain NAND funktioita.
- Johda XOR:in totuustaulusta Boolean lauseke tulojen summamuodossa (SOP sum of products).
Vinkki: Tämä on sama muoto kuin Kaikki kahden muuttujan boolean funktiot taulukossa.
- Yksinkertaista edellisen tehtävän lauseketta algebrallisesti muotoon jossa toteutus voidaan tehdä NAND porteilla. Toteutus vaatii joko 4 tai 5 NAND:ia. Sieventäminen 4 NAND muotoon lähtee huomiosta että XOR:n negaatio on XNOR. Neljän NAND:n toteutuksen lausekkeessa on 5 NAND termiä mutta 2 termiä ovat samoja, jolloin kytkennässä ne toteutetaan vain kerran.
- Ota etu- ja sukunimesi ensimmäinen kirjain (esim. luennoitsijan tapauksesa A ja V,
skandinaavisten kirjainten tapauksessa valitse jokin muu kirjainten Å, Ä tai Ö tilalle).
Mitkä ovat kirjaimia vastaavat ASCII luvut a) desimaalilukuna,
b) binäärilukuna ja c) heksadesimaalilukuna? Huom: laske muunnokset käsin ja käytä
tarkistukseen Internetistä löytyviä taulukoita tai muuntajia, esim.
ASCII taulu tai
Binary translator
- Suorita etukirjaintesi binäärinen yhteenlasku (käsin). Mikä lukuarvo on tulos,
jos se tulkitaan a) etumerkittömänä 8-bittisenä desimaalilukuna?
Entä b) etumerkillisenä 8-bittisenä desimaalilukuna (josta MSB bitti on etumerkki)
c) yhden koplementti muodossa, d) kahden komplementti muodossa?
Elektroniikkatehtävät 6 pistettä
Elektroniikkademojen ohjeet
- Yksi nappi sytyttää ledin
- Kaksi nappia yhtä aikaa pohjassa sytyttää ledin (eli AND)
- Transistori kytkimenä
- Kaksi transistoria sytyttää ledin (AND)
- NAND käyttämällä AND ja NOT portteja
- NOT ja AND käyttämällä NAND portteja
Logicsim tehtävät 6 pistettä
Huom: Voit palauttaa ao. tehtävät kaikki yhdessä tiedostossa
- Toteuta NOT käyttämällä NAND portteja
- Toteuta AND käyttämällä NAND portteja
- Toteuta OR käyttämällä NAND portteja sekä aiemmin toteutettuja portteja
- Toteuta XOR käyttämällä NAND portteja sekä aiemmin toteutettuja portteja
- Toteuta NOR käyttämällä NAND portteja sekä aiemmin toteutettuja portteja
- Toteuta XNOR käyttämällä NAND portteja sekä aiemmin toteutettuja portteja
Nand2Tetris tehtävät 10 pistettä
Tarkemmat ohjeet
täältä ja
teoriatausta
täältä.
Katso myös
HDL Survival Guide
- Not.hdl (NOT portti)
- And.hdl (AND portti)
- Or.hdl (OR portti)
- Xor.hdl (XOR portti)
- Not16.hdl (16-bit Not)
- And16.hdl (16-bit And)
- Or16.hdl (16-bit Or)
- Nor.hdl (NOR portti)
- Nor.tst (testitiedosto NOR portille, ks. esim. sivu 16)
- Nor.cmp (ulostulon vertailutiedosto NOR portille)
Kombinaatiologiikka 34 pistettä
Teoriatehtävät 5 pistettä
- Sievennä MUX piirin (Multiplekseri eli tulovalitsin) totuustaulu NAND muotoon
(eli muotoon jossa piiri toteutetaan pelkillä NAND porteilla). Piirissä on kolme 1-bitin sisääntuloa (input)
joista yhdellä (sel) valitaan kumpi kahdesta muusta inputista (a ja b) kytketään ulostuloon)
(Ks. myös LogicSim ja Nand2Tetris demojen vastaavaa)
- Elektroniikkademoissa 2 toteutetaan
enemmistö kolmesta kytkentä. Muodosta kytkennän totuustaulu ja siitä kytkennän Boolean lauseke tulojen summamuodossa (SOP sum of products). Sievennä lauseke Karnaugh:n kartalla. Vinkki:
Totuustaulun saa, kun miettii miten kytkennän pitäisi toimia, sisäänmenoja on 3, ulostuloja 1 (LED). Ja LEDin pitää palaa silloin kun enemmistö kolmesta sisään menosta saa arvon 1 (painetaan kytkintä).
Vertaa myös luennolla esitettyyn
vähemmistö kolmesta totuustauluun ja funktioiden sieventämiseen.
- Toteuta Elektroniikkademon 2 enemmistö kolmesta kytkennän totuustaulusta saadun tulojen summamuodon sieventäminen algebrallisesti.
- Sievennä Half Adder (puolisummain) piirin totuustaulun molemmat ulostulot NAND muotoon (kannattaa ensin sieventää mahdollisemman yksinkertaiseksi ja sitten vasta NAND muotoon)
- Sievennä Full Adder (kokosummain) piirin totuustaulun molemmat ulostulot NAND muotoon (kannattaa ensin sieventää mahdollisemman yksinkertaiseksi ja sitten vasta NAND muotoon)
Elektroniikkatehtävät 4 pistettä
Elektroniikkademojen ohjeet
- Enemmistö kolmesta - kytkentä
- Painalluslaskuri binäärisellä ledinäytöllä
- Puolisummain (Half Adder), oma toteutus itse valituilla piireillä
- Kokosummain (Full Adder), oma toteutus itse valituilla piireillä
LogicSim tehtävät 5 pistettä
- Toteuta Multiplekseri (tulovalitsin)
(a) totuustaulun mukaan (b) niin yksinkertaisena kuin pystyt (
käyttämällä joko NAND portteja tai NOT, AND, OR tai XOR portteja - ks. myös teoriatehtävä jossa tämä johdetaan, tai sievennä automaattisesti totuustaulusta)
- Toteuta Demultiplekseri (lähtövalitsin) käyttämällä NAND portteja sekä aiemmin toteutettuja portteja
- Toteuta Or8Way.hdl piirin toteutus käyttämällä NAND portteja sekä aiemmin toteutettuja portteja
- Toteuta Half Adder (puolisummain) käyttämällä NAND portteja sekä aiemmin toteutettuja portteja
(a) totuustaulun mukaan (b) niin yksinkertaisena kuin pystyt
- Toteuta Full Adder (kokosummain) käyttämällä NAND portteja sekä aiemmin toteutettuja portteja
(a) totuustaulun mukaan (b) niin yksinkertaisena kuin pystyt
Nand2Tetris tehtävät 20 pistettä
Kombinaatiologiikka - Tarkemmat ohjeet
täältä ja
täältä ja
teoriatausta
täältä ja
täältä
- Mux.hdl (Multiplekseri (tulovalitsin) jonka ulostulo (lähtö - output)
voidaan valita kahdesta eri sisäänmenosta (tulo - input) (ks.
esim.)
- DMux.hdl (Demultiplekseri (lähtövalitsin) jonka yksi sisäänmeno
(tulo - input) voidaan ohjata yhteen kahdesta eri ulostulosta (lähtö - output).
- Mux16.hdl (16-bit Multiplekseri)
- Or8Way.hdl (Or portti, jossa kahdeksan sisäänmenoa. Ulostulona 1 jos vähintään yksi sisäänmeno on 1)
- Mux4Way16.hdl (16-bit/4-way mux - 16 bittinen tulovalitsin, jossa 4 tuloa ja 1 lähtö)
- Mux8Way16.hdl (16-bit/8-way mux - 16 bittinen tulovalitsin, jossa 8 tuloa ja 1 lähtö)
- DMux4Way.hdl (4-way demultiplexor - 1 bittinen lähtövalitsin, jossa 1 tulo ja 4 lähtöä)
- DMux8Way.hdl (8-way demultiplexor - 1 bittinen lähtövalitsin, jossa 1 tulo ja 8 lähtöä) - HUOM: ohjelmiston mukana virheellinen .cmp tiedosto (puuttuu kolmas sel bitti), esim. tässä oikea DMux8Way.cmp, sekä .tst tiedosto DMux8Way.tst
- HalfAdder.hdl (Half Adder - puolisummain, laskee yhteen kaksi bittiä, antaa
tuloksena summa bitin ja carry bitin)
- FullAdder.hdl (Full Adder) - kokosummain, laskee yhteen kolme bittiä, jossa
kolmas bitti on edellisen vähemmän merkitsevän bitin yhteenlaskusta saatu carry bitti.
- Add16.hdl (16-bit Adder - Summaa kaksi 16 bittistä lukua yhteen
(ylivuotoa ei ilmoiteta, eikä sitä toteutettavassa tietokoneessa tarvitse tutkia)
- Inc16.hdl (16-bit incrementer - summaaja, joka kasvattaa 16 bittistä lukua yhdellä)
- (8 pistettä) ALU.hdl (Arithmetic Logic Unit - joka toteuttaa prosessorin
tarvitsemat laskuoperaatiot ja loogiset operaatiot)
Sekvenssilogiikka, Assembly ja CPU 36 pistettä
Elektroniikkatehtävät 3 pistettä
Elektroniikkademojen ohjeet
- RS kiikku kahdella transistorilla (Kytkentä jättää muistiin kumpaa nappia on painettu viimeksi)
Esimerkkikytkentä
(R1, R2 = 1k Ohm ja R3, R4 = 10k Ohm). Ledi kytketään transistorin kollektoriin etuvastuksella
(ja toinen jalka maahan (ground)). Jos ledi syttyy ilman kytkimen painallusta kun virta kytketään
on se kytketty "väärään" transistoriin (eli antaa ulostulona negaation oikeasta ulostulosta).
simulaatio
- RS kiikku NAND tai NOR piireillä
- D kiikku NAND tai NOR piireillä
LogicSim tehtävät 3 pistettä
- Toteuta RS kiikku (RS flip flop) käyttämällä NAND portteja
- Toteuta D kiikku (D flip flop) käyttämällä NAND portteja
- Toteuta T kiikku (T flip flop) käyttämällä NAND portteja (ja D kiikkuja)
Nand2Tetris tehtävät 8 pistettä
Sekvenssilogiikka - Tarkemmat ohjeet
täältä ja
teoriatausta
täältä
- Bit.hdl (1-bit register)
- Register.hdl (16-bit register)
- RAM8.hdl (16-bit / 8-register memory - 16 bittinen 8 sanainen muisti)
- RAM64.hdl (16-bit / 64-register memory - 16 bittinen 64 sanainen muisti)
- RAM512.hdl (16-bit / 512-register memory - 16 bittinen 512 sanainen muisti)
- RAM4K.hdl (16-bit / 4096-register memory - 16 bittinen 4k sanainen muisti)
- RAM16K.hdl (16-bit / 16384-register memory - 16 bittinen 16k sanainen muisti)
- PC.hdl (16-bit program counter - ohjelmalaskuri,
jonka 15 bittinen ulostulo kertoo mistä ROM muistin osoitteesta haetaan
seuraava käsky suoritettavaksi)
Assembly ja Konekieli tehtävät 10 pistettä
Assembly ja Konekieli - Tarkemmat ohjeet
täältä ja
teoriatausta
täältä
- (4 pistettä) Mult.asm (Laskee tulon R0*R1 ja tallentaa vastauksen rekisteriin R2,
huom. Virtuaaliset rekisterit R0 - R15 sijaitsevat RAM muistin lohkoissa RAM[0] - RAM[15]).
Oletetaan että kerrottavat lukuarvot ovat ei-negatiivisia (eli ≥ 0)
- HUOM: ohjelmiston mukana virheelliset .tst ja .cmp tiedostot, ao linkit
ovat oikein ja testaavat lisäksi sitä onko R2 alustettu nollaksi (lisäksi
jos koodisi käyttään R0 tai R1 rekisteriä laskurin arvona, niin Mult.cmp ja Mult.tst versiot ottavat sen huomioon.
Ja alkuperäisessä Mult.asm pohjassa on kommenteissa virhe // Multiplies R0 and R1 and stores the result in R2.
// (R0, R1, R2 refer to RAM[0], RAM[1], and RAM[3], respectively.) <-- tuolla RAM[3] pitäisi olla RAM[2]
- (6 pistettä) Fill.asm (täyttää ruudun mustalla näppäintä painettaessa
(16 pikseliä (eli 16 bittiä, mikä vastaa yhtä muistilohkoa) per näppäimen painallus)
ja pyyhkii mustat pois kun näppäintä ei paineta)
CPU ja Tietokoneen arkkitehtuuri 12 pistettä
Tietokoneen arkkitehtuuri - Tarkemmat ohjeet
täältä ja
teoriatausta
täältä
- Memory.hdl (Toteutetaan tietokoneen koko muisti,
sisältäen RAM lohkon, näyttälohkon (screen) ja näppäimistö lohkon (keyboard)).
- (10 pistettä) CPU.hdl (Toteutetaan prosessori (CPU), joka sisältää ALU:n
kaksi rekisteriä (A ja D rekisterit), ohjelmalaskurin (Program Counter PC),
joka hakee ROM muistista seuraavan suoritettavan käskyn) ja lisäksi Logiikan jolla
konekielisen käskyn bitit ohjataan oikeisiin paikkoihin.
- Computer.hdl (Tietokone, joka koostuu CPU:sta ja muistilohkoista)