ASM-kaavio: reset. b c d e f g. 00 abcdef. naytto1. clk. 01 bc. reset. 10 a2. abdeg. 11 a3. abcdg

Samankaltaiset tiedostot
Digitaalitekniikka (piirit), kertaustehtäviä: Vastaukset

Sekvenssipiirin tilat

Synkronisten sekvenssipiirien suunnittelu

Harjoitustehtävien ratkaisut

VHDL-kuvauskieli. Digitaalitekniikka (piirit) Luku 17 Sivu 1 (33)

ELEC-C3240 Elektroniikka 2

Digitaalitekniikka (piirit) Opetusmoniste

Esimerkkitentin ratkaisut ja arvostelu

AUTO3030 Digitaalitekniikan jatkokurssi, harjoitus 2, ratkaisuja

Sekvenssipiirin tilat. Synkroninen sekvenssipiiri ? 1 ? 2

AUTO3030 Digitaalitekniikan jatkokurssi, harjoitus 5, ratkaisuja

Digitaalitekniikka (piirit) Luku 14 Sivu 1 (16) Sekvenssipiirit. Kombinaatiopiiri. Tilarekisteri

Digitaalitekniikka (piirit) Luku 18 Sivu 1 (32) Rekisterit ja laskurit R C1 SRG4 R C1/ CTRDIV16 1R G2 2CT=15 G3 C1/2,3 + CT 3

VHDL Tehtävä 1 : JK-Kiikku toteutettu IF:llä

Verilogvs. VHDL. Janne Koljonen University of Vaasa

2_1----~--~r--1.~--~--~--,.~~

Tietotekniikan valintakoe

Digitaalilaitteen signaalit

Tervetuloa jatkamaan DIGITAALI- TEKNIIKAN opiskelua! Digitaalitekniikka (piirit) Luku 0 Sivu 1 (8)

Ohjelmoinnin perusteet Y Python

Digitaalitekniikan matematiikka Luku 3 Sivu 1 (19) Kytkentäfunktiot ja perusporttipiirit

Inputs: b; x= b 010. x=0. Elektroniikkajärjestelmät ETT_2068

Digitaalitekniikka (piirit) Luku 15 Sivu 1 (17) Salvat ja kiikut 1D C1 C1 1T 1J C1 1K S R

Digitaalitekniikka (piirit) Metropolia / AKo Joitakin vinkkejä harjoitustyö 2:n aihesiin Aihe Tuloja Lähtöjä Sitten vinkkejä

Ohjelmoinnin perusteet Y Python

Tutoriaaliläsnäoloista

Tervetuloa opiskelemaan DIGITAALI- TEKNIIKKAA! Digitaalitekniikan matematiikka Luku 0 Sivu 1 (9)

Ohjelmoinnin peruskurssi Y1

21~--~--~r--1~~--~--~~r--1~

VHDL-piirikuvaus ja simulointi Quartus II ja ModelSim Altera Edition -ohjelmilla

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

Joni Heikkilä PYROLYYSIGENERAATTORIN AUTOMAATIO-OHJAUS OHJELMOITAVALLA LOGIIKKAPIIRILLÄ

Johnson, A Theoretician's Guide to the Experimental Analysis of Algorithms.

4. Lausekielinen ohjelmointi 4.1

Ohjelmoinnin peruskurssi Y1

5. HelloWorld-ohjelma 5.1

n! k!(n k)! n = Binomikerroin voidaan laskea pelkästään yhteenlaskun avulla käyttäen allaolevia ns. palautuskaavoja.

Oppikirjan harjoitustehtävien ratkaisuja

Digitaalitekniikan matematiikka Luku 6 Sivu 1 (20) Kombinaatiopiirit & & A B A + B

Peilaus pisteen ja suoran suhteen Pythonin Turtle moduulilla

Taitaja2005/Elektroniikka. 1) Resistanssien sarjakytkentä kuormittaa a) enemmän b) vähemmän c) yhtä paljon sähkölähdettä kuin niiden rinnankytkentä

BL40A1711 Johdanto digitaaleketroniikkaan: Sekvenssilogiikka, pitopiirit ja kiikut

Java-kielen perusteet

C-ohjelmoinnin peruskurssi. Pasi Sarolahti

Maastotietokannan torrent-jakelun shapefile-tiedostojen purkaminen zip-arkistoista Windows-komentojonoilla

9. Periytyminen Javassa 9.1

4. Lausekielinen ohjelmointi 4.1

1. Miten tehdään peliin toinen maila?

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

Vasen johto S AB ab ab esittää jäsennyspuun kasvattamista vasemmalta alkaen:

Ohjelmoinnin perusteet Y Python

Harjoitustehtävät ja ratkaisut viikolle 48

815338A Ohjelmointikielten periaatteet Harjoitus 4 vastaukset

Harjoitustyön 2 aiheiden kuvaukset

Ohjelmoitavat logiikkaverkot

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

Luento 1 Tietokonejärjestelmän rakenne

Luento 1 Tietokonejärjestelmän rakenne. Järjestelmän eri tasot Laitteiston nopeus

15. Ohjelmoinnin tekniikkaa 15.1

T Harjoitustyöluento

Se mistä tilasta aloitetaan, merkitään tyhjästä tulevalla nuolella. Yllä olevassa esimerkissä aloitustila on A.

Ohjelmoinnin peruskurssi Y1

System.out.printf("%d / %d = %.2f%n", ekaluku, tokaluku, osamaara);

TAMPEREEN TEKNILLINEN YLIOPISTO

M = (Q, Σ, Γ, δ, q 0, q acc, q rej )

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

Harjoitus 3 (viikko 39)

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

TAITAJA 2007 ELEKTRONIIKKAFINAALI KILPAILIJAN TEHTÄVÄT. Kilpailijan nimi / Nro:

811120P Diskreetit rakenteet

Matriisit ovat matlabin perustietotyyppejä. Yksinkertaisimmillaan voimme esitellä ja tallentaa 1x1 vektorin seuraavasti: >> a = 9.81 a = 9.

3.3 Kurssin palauttaminen

Ohjelmointi 1 / 2009 syksy Tentti / 18.12

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

ELM GROUP 04. Teemu Laakso Henrik Talarmo

Digitaalitekniikan matematiikka Harjoitustehtäviä

Ohjelmointi 2 / 2010 Välikoe / 26.3

TAMPEREEN TEKNILLINEN YLIOPISTO

4. Luokan testaus ja käyttö olion kautta 4.1

15. Ohjelmoinnin tekniikkaa 15.1

Python-ohjelmointi Harjoitus 2

BL40A17x0 Digitaalielektroniikka A/B: Ohjelmoitavat logiikkapiirit

System.out.printf("%d / %d = %.2f%n", ekaluku, tokaluku, osamaara);

Täydentäviä muistiinpanoja Turingin koneiden vaihtoehdoista

Kon Konepajojen tuotannonohjaus: ILOG CPLEX Studion käyttö

11/20: Konepelti auki

TKT224 KOODIN KOON OPTIMOINTI

Apuja ohjelmointiin» Yleisiä virheitä

.NET ajoympäristö. Juha Järvensivu 2007

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

Pikaohje Aplisens APIS type 1X0 ja 2XO

Luento 1 Tietokonejärjestelmän rakenne

Luento 1 Tietokonejärjestelmän rakenne. Järjestelmän eri tasot Laitteiston nopeus

Ohjelmoinnin perusteet Y Python

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

T Harjoitustyöluento

AU Automaatiotekniikka. Funktio FC

Transkriptio:

Digitaalitekniikka (piirit) Metropolia / AKo Pikku nnitteluharjoitus: Suunnitellaan sekvenssipiiri, jolla saadaan numerot juoksemaan seitsensegmenttinäytöllä: VHDL-koodin generointi ASM-kaavioista Tässä on esitetty 7-segmenttitehtävien - 3 ASM-kaaviot. Samalla mennään jokaisen kaavion yhteydessä läpi se, miten kukin kaavio muutetaan VHDL-koodiksi. Kuvan seitsensegmenttinäytöllä numerot - 3 saadaan aikaan sytyttämällä segmenttejä seuraavasti: : abcdef : bc 2: abdeg 3: abcdg Tehtävä : Suunnittele sekvenssipiiri, joka ohjaa yhtä 7-segmenttinäyttöä niin, että näytössä pyörii numerot kasvavassa järjestyksessä --2-3---2-3---2... niin että kukin numero on näkyvissä vuorollaan yhden sekunnin. Suunnittelun tulos: Lohkokaavio: ASM-kaavio: a clk naytto b c d e f g a a abcdef bc a2 abdeg a3 abcdg Lohkokaaviossa on hyvä kirjoittaa näkyviin laitteelle joku nimi, koska sellainen tarvitaan VHDL-koodissa. Tämän sekvenssipiirin nimi on siis naytto. ASM-kaaviossa tilojen nimet kannattaa valita niin, että ne kelpaavat sellaisenaan VHDL-koodiin tunnisteiksi (eli muuttujien nimiksi). Silloin nimi ei voi alkaa numerolla, joten ensimmäisenä mieleen tuleva tapa nimetä tilat (,, 2, 3) ei käy. ASM-kaavioon on merkitty myös 2-bittiset tilakoodit. Niitä käyttäen voitaisiin tehdä tilataulu ja lähtötaulu, ja niistä sitten nnitella kiikkujen (2 kpl) lisäksi tarvittava kombinaatiopiiri kuten oppituntikalvojen luvussa 3 on tehty. Jos sekvenssipiiri kuitenkin toteutetaan VHDL-koodauksen kautta (kuten teemme), niin silloin noita tilakoodeja ei tarvitse ASM-kaavioon laittaa. Tuossa alla ne onkin jätetty pois.

Miten tästä ASM-kaaviosta generoidaan VHDL-koodi? Opiskellaan seuraavaksi, miten ASM-kaaviosta kirjoitetaanvhdl-kielinen sekvenssipiirin käyttäytymiskuvaus. Tuloksena olevalla VHDL-koodilla voidaan sitten esim. Quartus II -ohjelman kautta ohjelmoida sekvenssipiirin toiminta ohjelmoitavaan logiikkaverkkoon. Näin teemmekin harjoitustyö 2:ssa. Opettajan vaatimattoman kokemuksen mukaan paras tapa oppia uusi ohjelmointikieli on kopioida toimivaksi tietämistään ohjelmista mahdollisimman paljon pohjaksi omalle sovellukselleen ja sitten etsiä jostain (mielellään keittokirja-tyyppisestä) oppaasta lisätietoa. (Näin olen viimeisten n. 35 vuoden aikana opetellut saamaan aikaan toimivia ohjelmia mm. seuraavilla kielillä: Basic, Fortran, Algol, Pascal, Perl, Java, PHP, Python.) Siksi tutustumme ensin siihen, millainen on tunnilla esitelty Jaskan kuppilan supermainoksen ASM-kaavio VHDL-kielisenä koodina. Tuosta koodista näemme, mitä osia VHDL-ohjelmassa pitää olla ja miten sekvenssipiirin tilamuutokset kuvataan, miten päätöslohkojen toiminta kuvataan ja miten generoidaan lähtösignaalit. Sitten vaan muutamme mallikoodia soveltumaan käsillä olevaan piiriin, ja se on siinä. Jaskan kuppilan supermainoksen lohkokavio ja Mooren kone -version ASM-kaaviohan ovat tällaiset Lohkokaavio: ASM-kaavio: Seuraavalla sivulla on tämän sekvenssipiirin toiminnan kuvaava VHDL-koodi. Rivinumerot eivät kuulu koodiin, ne on lisätty mukaan, jotta olisi helpompi viitata tiettyyn kohtaan. Lohkokaaviosta ja ASMkaaviosta puuttuu -toiminto, joka VHDL-koodissa on. Lohkokaaviossa laitteen nimi on JKS, alla olevassa VHDL-koodissa nimenä käytetään jksmoore, koska oppimateriaalissa on tehty myös Mealytoteutus.

-- Digitaalitekniikka (piirit) 2 -- Harjoitustyö 2 3 -- Esimerkki: Jaskan kuppilan supermainos Mooren koneena 4 -- VHDL-kuvaus 5 -- Esko T. Rautanen 6 7 -- Suunnitteluyksikön esittely 8 ENTITY jksmoore IS -- nnitteluyksikön nimeksi tiedoston nimi 9 PORT ( yo, hh: IN BIT; -- varsinaiset tulosignaalit clk, : IN BIT; -- kello- ja nollaussignaali 2 herk, jask, kupp: OUT BIT); -- lähtösignaalit 3 END jksmoore; 4 5 -- Supermainoksen ASM-kaavion kuvaus VHDL-käyttäytymiskuvauksena 6 ARCHITECTURE toiminta OF jksmoore IS -- arkkitehtuurin ja nnitteluyksikön nimi 7 -- Määritellään tyyppi "tilatyyppi" ja esitellään siihen kuuluva signaali "tila" 8 TYPE tilatyyppi IS (ei, h, hj, hjk, hjk2, hjk3); -- arvoina ASM:n tilat 9 SIGNAL tila: tilatyyppi; -- ASM:n tilasignaali "tila" 2 2 PROCESS (, clk) -- ASM:n toiminta kuvataan prosessina 22 23 IF = '' THEN -- kiikkujen nollaus -signaalilla 24 tila <= ei; -- alkutilana tila ei 25 ELSIF clk'event AND clk = '' THEN -- kellopulssin nouseva reuna 26 CASE tila IS -- tilanmuutokset kuvataan CASE-lauseella 27 WHEN ei => -- siirtymä tilasta ei 28 IF hh = '' THEN -- tilanmuutokseen vaikuttava päätöslohko 29 tila <= h; -- kuvataan IF-lauseella: jos hh =, 3 -- siirrytään tilaan h, muutoin tilaan hjk 3 tila <= hjk; 32 33 WHEN h => -- tilasta h siirrytään tilaan hj 34 tila <= hj; 35 WHEN hj => -- tilasta hj siirrytään tilaan hjk3 36 tila <= hjk3; 37 WHEN hjk => -- tilasta hjk siirrytään tilaan hjk2 38 tila <= hjk2; 39 WHEN hjk2 => -- tilasta hjk2 siirrytään tilaan hjk3 4 tila <= hjk3; 4 WHEN hjk3 => -- siirtymä tilasta hjk3 42 IF yo = '' THEN -- tilanmuutokseen vaikuttava päätöslohko 43 tila <= ei; -- kuvataan IF-lauseella: jos yo =, 44 -- siirrytään tilaan ei, muutoin tilaan hjk3 45 tila <= hjk3; 46 47 END CASE; 48 49 END PROCESS; 5 -- Sijoitetaan lähtösignaalien arvot valikoivilla signaalin sijoituslauseilla 5 52 herk <= '' WHEN ei, -- herk-signaalin arvoksi, kun tila on ei 53 '' WHEN OTHERS; -- herk-signaalin arvoksi muissa tiloissa 54 55 jask <= '' WHEN ei h, -- jask-signaalin arvoksi, kun tila on ei 56 '' WHEN OTHERS; -- tai h, muissa tiloissa arvoksi 57 58 kupp <= '' WHEN hjk hjk2 hjk3, -- kupp-signaalin arvoksi tiloissa hjk, 59 '' WHEN OTHERS; -- hjk2 ja hjk3, muissa tiloissa arvoksi 6 END toiminta; VHDL:ssä kommentit merkitään --:lla. Siis VHDL-kääntäjä jättää noteeraamatta kaiken tietyllä rivillä --:n jälkeen olevan. Esimerkkikoodissa on lihavoidulla punaisella merkitty ne VHDL-kielen rakenteet, jotka tarvitaan jokaisessa tällä kurssilla kirjoitettavassa VHDL-ohjelmassa. (Paitsi IF... THEN...... END IF - rakennetta ei WHEN -lauseiden yhteydessä tarvita seitsensegmenttiesimerkkimme ensimmäisessä toteutuksessa, koska siinä ei ole yhtäkään päätöslohkoa.)

Sinun tehtäväsi: Täydennä allaoleva VHDL-koodi niin, että tuloksena on tehtävässä aikaansaatua ASMkaaviota vastaava koodi. ENTITY IS PORT ( : IN BIT; : OUT BIT); END ; ARCHITECTURE toiminta OF IS TYPE tilatyyppi IS ( ); SIGNAL tila: tilatyyppi; PROCESS (, clk) IF = '' THEN tila <= ; ELSIF clk'event AND clk = '' THEN CASE tila IS END CASE; END PROCESS; '' WHEN OTHERS; <= '' WHEN ; '' WHEN OTHERS; '' WHEN OTHERS; '' WHEN OTHERS; '' WHEN OTHERS; '' WHEN OTHERS; END toiminta;

Tehtävä 2: Suunnittele sekvenssipiiri, joka ohjaa yhtä 7-segmenttinäyttöä niin, että näytössä juoksee numerot käyttäjän valinnan mukaan joko järjestyksessä --2-3---2-3---2- tai sitten järjestyksessä - 3-2---3-2---3-2- niin, että kukin numero on näkyvissä sekunnin. Suunnittelun tulos: Lohkokaavio: clk naytto2 a b c d e f g Sopimus: Jos =, niin numerot kiertävät järjestyksessä --2-3---2-3---2- ja jos =, niin numerot kiertävät järjestyksessä -3-2---3-2--- 3-2-. ASM-kaavio: a a a2 abcdef bc abdeg a3 abcdg Kun tämä koodataan VHDL:llä käyttäen pohjana tehtävän koodia, pitää ENTITY -lohkossa ja ARCHITECTURE -rivillä muuttaa laitteen nimi. Lisäksi PORT-määrittelyssä pitää näkyä, että nyt tulosignaaleja on yksi enemmän. Lisäksi tarvitaan CASE-rakenteessa (jota käyttäen kuvataan se, miten kustakin tilasta siirrytään seuraavaan tilaan) jokaisen WHEN-lauseen yhteyteen IF - THEN - - END IF - rakenne, koska ASMkaaviossa jokaisen tilalohkon jälkeen on päätöslohko.

Sinun tehtäväsi: Täydennä allaolevat VHDL-koodin osat niin, että tuloksena on tehtävän 2 ASM-kaaviota vastaavan VHDL-ohjelman vaatimaa koodia. ENTITY IS PORT ( : IN BIT; : OUT BIT); END ; ARCHITECTURE toiminta OF IS TYPE tilatyyppi IS ( ); SIGNAL tila: tilatyyppi; PROCESS (, clk) IF = '' THEN tila <= ; ELSIF clk'event AND clk = '' THEN CASE tila IS IF = '' THEN IF = '' THEN IF = '' THEN IF = '' THEN END CASE; END PROCESS; (Tämä jälkeen tulevat - rakenteet eivät muutu.)

Tehtävä 3: Suunnittele sekvenssipiiri, joka ohjaa yhtä 7-segmenttinäyttöä niin, että näytössä juoksee numerot käyttäjän valinnan mukaan joko järjestyksessä --2-3---2-3---2- tai sitten järjestyksessä - 3-2---3-2---3-2-. Lisäksi käyttäjän valinnan mukaan kukin numero näkyy aina joko sekunnin tai kaksi sekuntia. Suunnittelun tulos: Lohkokaavio: clk naytto3 a b c d e f g Sopimus : Jos =, niin numerot kiertävät järjestyksessä --2-3---2-3---2- ja jos =, niin numerot kiertävät järjestyksessä -3-2---3-2---3-2-. Sopimus 2: Jos =, niin numerot näkyvät sekunnin (eli yhden kellojakson) ja jos =, niin numerot näkyvät kaksi sekuntia (eli kaksi kellojaksoa). ASM-kaavio: a abcdef a2 abdeg b abcdef b2 abdeg a bc a3 abcdg b bc b3 abcdg Tilat on nimetty niin, että aina numeroa x vastaava ensimmäinen sekunti on ax ja toinen sekunti on bx. Tällaisen vähän mutkikkaamman kaavion piirtämisessä voi jokinlaisena haasteena pitää mahdollisimman selkeältä näyttävään tulokseen pääsemistä. Silloin kannattaa esim. pyrkiä minimoimaan risteävät viivat. Tässä tapauksessa piirtäminen ilman risteäviä viivoja ei taida onnistua. Tämän toteutuksen VHDL-koodi poikkeaa aiemmista koodeista kolmella tavalla Kohdat, joissa esiintyy laitteen nimi, pitää päivittää. TYPE-määrittelyyn tulee nyt kahdeksan tilaa (edellisissä neljä). PROCESS-rakenteen sisällä olevaan CASE-rakenteeseen tulee nyt kahdeksan WHEN-lausetta, joihin joka toiseen tulee IF - THEN - ELSIF - THEN - - END IF -rakenne ja joka toiseen IF - THEN - - END IF -rakenne. Tuo mutkikkaampi IF-lause tarvitaan, koska aina kun muuttuja on testattu, niin jos sen testin tulos on, testataan saman tien -muuttuja. Lopun WITH-lauseissa oleviin WHEN-lauseisiin tulee nyt enemmän tavaraa.

Sinun tehtäväsi: Täydennä allaolevaan pohjaan tehtävän 3 ASM-kaaviota vastaava VHDL-koodi kokonaidessaan. ENTITY IS PORT ( : IN BIT; : OUT BIT); END ; ARCHITECTURE toiminta OF IS TYPE tilatyyppi IS ( ); SIGNAL tila: tilatyyppi; PROCESS (, clk) IF = '' THEN tila <= ; ELSIF clk'event AND clk = '' THEN CASE tila IS IF = '' THEN ELSIF = '' THEN IF = '' THEN IF = '' THEN ELSIF = '' THEN IF = '' THEN IF = '' THEN ELSIF = '' THEN IF = '' THEN IF = '' THEN

ELSIF = '' THEN IF = '' THEN END CASE; END PROCESS; '' WHEN OTHERS; <= '' WHEN ; '' WHEN OTHERS; '' WHEN OTHERS; '' WHEN OTHERS; '' WHEN OTHERS; '' WHEN OTHERS; END toiminta; Nuo -rakenteilla toteutetut lähtösignaalien arvojen määrittelyt voi toteuttaa eri tavallakin. Miten?