Boolean logiikka 58 pistettä
Boolean logiikan tehtävät TIM järjestelmässä (Huom: jotta näet tehtävät, sinun täytyy kirjautua TIM järjestelmään Korppi -tunnuksilla) 21 pistettä
Boolean logiikan Elektroniikkademojen ohjeet 15 pistettä
Logicsim tehtävät 12 pistettä
Huom: Voit palauttaa ao. tehtävät kaikki yhdessä tiedostossa, tai esim NOR tehtävät omassa tiedostossaan.
- 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ä edellisten kohtien portteja
- Toteuta XOR käyttämällä NAND portteja sekä edellisten kohtien portteja
- Toteuta NOR käyttämällä NAND portteja sekä sekä edellisten kohtien portteja
- Toteuta XNOR käyttämällä NAND portteja sekä sekä edellisten kohtien portteja
- Toteuta NOT käyttämällä NOR portteja (Huom: T7 - T12 saa käyttää vain NOR portteja)
- Toteuta OR käyttämällä NOR portteja
- Toteuta AND käyttämällä NOR portteja
- Toteuta NAND käyttämällä NOR portteja
- Toteuta XNOR käyttämällä NOR portteja
- Toteuta XOR käyttämällä NOR 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)
Luentotaltioinnissa on johdantoa Nand2Tetris tehtäviin.
- 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 50 pistettä
Kombinaatiologiikan tehtävät TIM järjestelmässä 10 pistettä
Kombinaatiologiikan Elektroniikkademojen ohjeet 6 pistettä
LogicSim tehtävät 13 pistettä
- Toteuta Multiplekseri (tulovalitsin)
totuustaulun mukaan (joko suoraan tai voit sieventää, mutta siten että toteutuksessa on vain AND, OR ja/tai NOT portteja)
- Toteuta Multiplekseri (tulovalitsin)
käyttämällä NAND portteja
- Toteuta Multiplekseri (tulovalitsin)
käyttämällä NOR portteja
- Toteuta Demultiplekseri (lähtövalitsin) käyttämällä NAND portteja
- Toteuta Demultiplekseri (lähtövalitsin) käyttämällä NOR portteja
- Toteuta Or8Way.hdl piirin toteutus käyttämällä NAND portteja ja/tai aiemmin Boolean logiikka osiossa toteuttamiasi portteja
- Toteuta Half Adder (puolisummain) käyttämällä NAND portteja sekä aiemmin Boolean logiikka osiossa toteuttamiasi portteja
- Toteuta Full Adder (kokosummain) käyttämällä NAND portteja sekä aiemmin Boolean logiikka osiossa toteuttamiasi portteja
- (2 pistettä) Toteuta 2-bittinen summaaja, jos teet edellisen tehtävän Full Adder kytkennästä moduulin jota käytät, palauta myös moduuli. Voit myös käyttää valmista FullAdder moduulia, jos edellisessä tehtävässä toteutit toimivan kokosummaimen.
- (3 pistettä) Toteuta 4-bittinen summaaja, jos teet edellisistä tehtävistä moduuleita joita käytät, palauta myös ne
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ä).
Huom: HDL:ssä vakio 1 signaalit kaikille 16 bitille saa esim. a[0:15]=true, vakio 0 vastaavasti esim. yhdelle bitille b[0]=false.
- (8 pistettä - huom: täydet pisteet vaativat toteutuksen kommentoinnin) ALU.hdl (Arithmetic Logic Unit - joka toteuttaa prosessorin
tarvitsemat laskuoperaatiot ja loogiset operaatiot)
Sekvenssilogiikka, Assembly ja CPU 60 pistettä
Sekvenssilogiikan tehtävät TIM järjestelmässä 10 pistettä
Sekvenssilogiikan Elektroniikkademojen ohjeet 5 pistettä
LogicSim tehtävät 5 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)
- (2 pistettä) Toteuta 1 bitin rekisteri (yhden bitin muisti, eli vastaava kuin alla Bit.hdl)
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 20 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)
- (1 - 10 pistettä) Jokin oma assembly ohjelma, joka käsittelee näppäimistöä ja näyttöä. Koodin jokainen rivi tulee olla kommentoitu ja lisäksi ohjelman alussa tulee olla kommentoitu se mitä ohjelma tekee. Kymmenen riviä assembly koodia (kommenttirivejä ei lasketa mukaan) vastaa yhtä pistettä. Rivien lukumäärä pyöristetään lähimpään kymppiin. Saa tehdä useammankin ohjelman, esim. 2 kpl 50 rivistä koodia tai 3 kpl 33 rivistä koodia, maksimipistemäärä tästä tehtävästä on 10.
- **Uutta:** lisäpisteitä yli sadan rivin koodeista.
- Yli 100 rivin jälkeen saa yhden pisteen aina seuraavasta sadasta rivistä.
- Pyöristys aina lähimpään sataan
- Esimerkiksi, yhteensä 200 riviä on 11 pistettä ja 900 riviä on 18 pistettä.
- 1000 riviä on 19 pistettä ja yli 1000 on 20 pistettä.
- Maksimipistemäärä tästä tehtävästä oli ennen 10 pistettä.
- Maksimipistemäärä on nyt [20]{.blue} pistettä
- Jos olet ennen 9.12.2020 palauttanut yli 100 rivisen koodin, voit halutessasi ottaa yhteyttä
sähköpostilla pisteiden uudelleen laskemiseksi.
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)
Assembler kääntäjä 40 pistettä
Vaati vähintään Ohjelmointi 1 kurssin tai vastaavat taidot. Assembler on helpompi tehdä jos osaa käyttää Hashtable:a (tai dictionary:ä, termi riippuu käytetystä ohjelmointikielestä). Ohjelmointikielen voit valita vapaasti.
Assebler - Tarkemmat ohjeet
täältä ja
teoriatausta
täältä
- (10 pistettä) Tehtävä 1 - Parser module
- (10 pistettä) Tehtävä 2 - Code module
- (10 pistettä) Tehtävä 3 - SymbolTable module
- (10 pistettä) Tehtävä 4 - Main program
(Jos assembler toimii ilman symboleiden käsittelyä, eli pääohjelma toimii ilman SymbolTable moduulia, saat 30/40 pistettä)
Palauta toteuttamasi koodit ja omalla Assemblerilla kääntämäsi konekieliset koodit, joiden assembler versiot löytyvät luvun 6 kansiosta projects/06). Koodeja
ei saa laittaa julkisesti Internetistä löydettäväksi.