nanosistemŲ programavimo kalbos 2-as …2-as laboratorinis darbas vhdl programos struktŪros...

8
1 NANOSISTEMŲ PROGRAMAVIMO KALBOS 2-AS LABORATORINIS DARBAS VHDL PROGRAMOS STRUKTŪROS PROJEKTAVIMAS, LYGIAGRETŪS SIGNALŲ PRISKYRIMO SAKINIAI 1. Darbo tikslas 1. Gerinti praktinius VHDL programavimo įgūdžius. 2. Išmokti praktikoje taikyti lygiagrečius signalų priskyrimo sakinius. 3. Patobulinti LCD ekrano valiklį papildoma funkcija. 2. Darbo užduotys 1. Sukurti testinę programą skirtą LCD valdikliui modeliuoti. 2. Pakeisti LCD valdiklyje naudojamus procesus lygiagrečiais sakiniais. 3. Sukurti segmentinio LCD skaitmenų mirksėjimo funkciją. 4. Išbandyti LCD valdiklio patobulinimus BASYS2 plokštėje. 3. BASYS2 plokštės segmentinio LCD valdiklis Basys2Lcd 3.1. LCD ekrano sandara ir valdymas Segmentinis LCD ekranas turi keturis skaitmenis, kurių kiekvienas yra sudarytas iš 7 segmentų ir taško: Vienu metu aktyvus (šviečiantis) gali būti tik vienas skaitmuo, nes ekrano valdymui naudojami tik 12 išvadų: 8 išvadai skaitmens segmentams ir taškui valdyti (LED katodų išvadai) 4 išvadai skaitmenims aktyvuoti (LED anodų išvadai) Tai reiškia, kad aktyvavus visus anodų išvadus, visi skaitmenys rodys tą pačią reikšmę, kuri nurodyta per bendrus 8 katodų išvadus. Siekiant, kad būtų įmanoma visus skaitmenis rodyti skirtingus, naudojamas multipleksavimas laike, t.y. kiekvienas skaitmuo aktyvuojamas tik tam tikram laiko tarpui. Multipleksuoto LCD ekrano valdymo, realizuoto Basys2Lcd valdiklyje, laikinė diagrama:

Upload: others

Post on 01-Jan-2020

8 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: NANOSISTEMŲ PROGRAMAVIMO KALBOS 2-AS …2-AS LABORATORINIS DARBAS VHDL PROGRAMOS STRUKTŪROS PROJEKTAVIMAS, LYGIAGRETŪS SIGNALŲ PRISKYRIMO SAKINIAI 1. Darbo tikslas 1. Gerinti praktinius

1

NANOSISTEMŲ PROGRAMAVIMO KALBOS

2-AS LABORATORINIS DARBAS

VHDL PROGRAMOS STRUKTŪROS PROJEKTAVIMAS , LYGIAGRETŪS SIGNALŲ PRISKYRIMO SAKINIAI

1. Darbo tikslas

1. Gerinti praktinius VHDL programavimo įgūdžius.

2. Išmokti praktikoje taikyti lygiagrečius signalų priskyrimo sakinius.

3. Patobulinti LCD ekrano valiklį papildoma funkcija.

2. Darbo užduotys

1. Sukurti testinę programą skirtą LCD valdikliui modeliuoti.

2. Pakeisti LCD valdiklyje naudojamus procesus lygiagrečiais sakiniais.

3. Sukurti segmentinio LCD skaitmenų mirksėjimo funkciją.

4. Išbandyti LCD valdiklio patobulinimus BASYS2 plokštėje.

3. BASYS2 plokštės segmentinio LCD valdiklis Basys2Lcd

3.1. LCD ekrano sandara ir valdymas

Segmentinis LCD ekranas turi keturis skaitmenis, kurių kiekvienas yra sudarytas iš 7 segmentų ir taško:

Vienu metu aktyvus (šviečiantis) gali būti tik vienas skaitmuo, nes ekrano valdymui naudojami tik 12 išvadų:

8 išvadai skaitmens segmentams ir taškui valdyti (LED katodų išvadai)

4 išvadai skaitmenims aktyvuoti (LED anodų išvadai)

Tai reiškia, kad aktyvavus visus anodų išvadus, visi skaitmenys rodys tą pačią reikšmę, kuri nurodyta per bendrus 8

katodų išvadus. Siekiant, kad būtų įmanoma visus skaitmenis rodyti skirtingus, naudojamas multipleksavimas laike,

t.y. kiekvienas skaitmuo aktyvuojamas tik tam tikram laiko tarpui.

Multipleksuoto LCD ekrano valdymo, realizuoto Basys2Lcd valdiklyje, laikinė diagrama:

Page 2: NANOSISTEMŲ PROGRAMAVIMO KALBOS 2-AS …2-AS LABORATORINIS DARBAS VHDL PROGRAMOS STRUKTŪROS PROJEKTAVIMAS, LYGIAGRETŪS SIGNALŲ PRISKYRIMO SAKINIAI 1. Darbo tikslas 1. Gerinti praktinius

2

Kol vienas skaitmuo yra aktyvus (šviečia), kiti trys yra išjungti, nes išjungtas jų anodo signalas. Taigi kiekvienas

skaitmuo šviečia tik ¼ bendro laiko.

3.2. LCD ekrano valdiklio VHDL objekto aprašas

VHDL objekto aprašas:

clk (in) – taktinis signalas, 50Mhz, tiesiai iš plokštės taktinio signalo generatoriaus.

digits (in) – keturių skaitmenų konfigūracijos signalas, nurodantis kas turi būti atvaizduojama kiekviename iš keturių

skaitmenų. Tipas LcdDigits yra aprašytas pakete Basys2:

LcdDigit 8 bitų signalo bitų reikšmės yra tokios:

Bito nr. Paskirtis

7 '1' – LCD įjungtas, vaizduoja šešioliktainį skaičių, '0' – LCD išjungtas

6 '1' - šalia skaičiaus rodomas taškas, '0' - taškas nerodomas

5 TODO: '1' – skaičius turi mirksėti ~1Hz dažniu '0' – skaičius turi šviesti ištisai

4 Nenaudojamas

3, 2, 1, 0 Vaizduojamas 4 bitų skaičius (0-A)

Page 3: NANOSISTEMŲ PROGRAMAVIMO KALBOS 2-AS …2-AS LABORATORINIS DARBAS VHDL PROGRAMOS STRUKTŪROS PROJEKTAVIMAS, LYGIAGRETŪS SIGNALŲ PRISKYRIMO SAKINIAI 1. Darbo tikslas 1. Gerinti praktinius

3

seg (out) – 7 bitų signalas sujungtas su BASYS2 LCD segmentų katodų valdymo išvadais.

dp (out) – signalas sujungtas su BASYS2 LCD taškų katodų valdymo išvadais.

an (out) – 4 bitų signalas sujungtas su BASYS2 LCD skaitmenų anodų valdymo išvadais.

3.3. LCD ekrano valdiklio VHDL architektūros aprašas

Architektūros pradžioje yra deklaruojamos konstantos, signalai ir signalų aliasai:

clkCnt – skaitiklio signalas, kuris naudojamas architektūros viduje kaip clk dažnio daliklis. Konstanta COUNTER_SIZE

naudojama, kad esant reikalui būtų lengviau keisti skaitiklio clkCnt dydį.

Aliasas activeDigit naudojamas kaip atskiras pavadinimas dviems vyriausiems skaitiklio clkCnt bitams, šiuo atveju 19

ir 18.

4 bitų signalas anodes yra naudojamas LCD skaitmenims aktyvuoti, jis tiesiogiai sujungtas su objekto išvadu an.

Taktinio signalo dažnio daliklis aprašytas VHDL procese. Jo veikimas yra labai paprastas: kiekvieno kylančio signalo

clk fronto metu, skaitiklis clkCnt yra padidinamas vienetu. Kai skaitiklis pasiekia maksimalią reikšmę, jis automatiškai

apsiverčia į 0:

Jei skaitiklis clkCnt yra 20 bitų pločio, o clk dažnis yra 50Mhz, galime suskaičiuoti kas kiek laiko skaitiklio reikšmė

apsivers į 0:

Kiekvienas iš keturių LCD skaitmenų yra aktyvuojamas kartą per 21 milisekundės periodą ir rodomas

. Tai atliekama junginėjant LCD anodus valdančius signalus:

digitActivator procesas vykdomas kiekvieną kartą kai pasikeičia dviejų vyriausių clkCnt dažnio daliklio bitų reikšmė

activeDigit arba jei pasikeičia LCD vaizduojama reikšmė, perduodama per signalą digits. Proceso vykdymo metu yra

suformuojama signalo reikšmė kiekvienam iš keturių LCD anodų išvadų. Aktyvi reikšmė '0' yra suformuojama tam

skaitmeniui, kurio valdymo signalo anode numeris sutampa su activeDigits reikšme (nuo 0 iki 3). Tokiu būdu yra

20

Reikalinga modeliuojant

Page 4: NANOSISTEMŲ PROGRAMAVIMO KALBOS 2-AS …2-AS LABORATORINIS DARBAS VHDL PROGRAMOS STRUKTŪROS PROJEKTAVIMAS, LYGIAGRETŪS SIGNALŲ PRISKYRIMO SAKINIAI 1. Darbo tikslas 1. Gerinti praktinius

4

paskirstomas kiekvieno LCD skaitmens rodymo laikas. Kiekvienas LCD skaitmuo būna aktyvus maždaug

. Taigi LCD ekrano mirgėjimo dažnis yra

.

Tuo pačiu momentu kai procesas digitActivator aktyvuoja LCD skaitmenis, kiti procesai segmentActivator ir

dotActivator suformuoja LCD segmentų katodų valdymo signalų reikšmes ir taško katodo reikšmę:

Atkreipkite dėmesį, kad segmentai uždegami formuojant signalo reikšmę '0', o ne '1'.

4. Darbo eiga

4.1. Testinės programos rašymas

1. Padarykite pirmojo laboratorinio darbo ISE projekto katalogo kopiją. Galite nukopijuotą katalogą pavadinti

„Lab2 FPGA“.

2. Sukurkite tuščią katalogą „Lab2 modeliavimas“.

3. Paleiskite ModelSIM simuliatorių, sukurkite naują projektą kataloge „Lab2 modeliavimas“.

4. Įkelkite į ModelSIM projektą failus „Basys2.vhd“ ir „Basys2Lcd.vhd“ iš katalogo „Lab2 FPGA“.

5. Sukurkite naują VHDL failą testinei programai „tb_Basys2Lcd.vhd“.

Pritaikykite jau turimą testinių programų rašymo patirtį, modifikuodami turimas testines programas ir

pritaikydami jas Basys2Lcd objekto testavimui:

Page 5: NANOSISTEMŲ PROGRAMAVIMO KALBOS 2-AS …2-AS LABORATORINIS DARBAS VHDL PROGRAMOS STRUKTŪROS PROJEKTAVIMAS, LYGIAGRETŪS SIGNALŲ PRISKYRIMO SAKINIAI 1. Darbo tikslas 1. Gerinti praktinius

5

Kad nereiktų modeliuoti daug clk periodų, faile Basys2Lcd.vhd reikia pakeisti konstantą COUNTER_SIZE iš 20 į 5.

Taip modeliuojant bus dažniau keičiamas aktyvus LCD skaitmuo. Nepamirškite atstatyti konstantos reikšmės į 20

prieš atlikdami bandymus su FPGA plokšte!

Page 6: NANOSISTEMŲ PROGRAMAVIMO KALBOS 2-AS …2-AS LABORATORINIS DARBAS VHDL PROGRAMOS STRUKTŪROS PROJEKTAVIMAS, LYGIAGRETŪS SIGNALŲ PRISKYRIMO SAKINIAI 1. Darbo tikslas 1. Gerinti praktinius

6

Paleiskite modeliavimą. Stebėkite kaip keičiasi skaitiklio clkCnt reikšmė, kaip atitinkamai keičiasi activeDigit

reikšmė, ir kaip nuo šių reikšmių pokyčių yra aktyvuojami an signalai:

4.2. Procesų pakeitimas lygiagrečiais sakiniais

Kai turime testinę programą, galime atlikti Basys2Lcd pakeitimus. Po kiekvieno pakeisto sakinio, atlikite

modeliavimą ir įsitikinkite, kad Basys2Lcd funkcionalumas nepasikeitė.

Procesą dotActivator pakeiskite taip:

1. Architektūros pradžioje aprašykite naują signalą activeDigitInt, kuris bus naudojamas kaip aktyvaus LCD

skaitmens indeksas. Kad sintezatorius žinotų tikslias leidžiamas indekso kitimo ribas, pirmiausia aprašykit

potipį, nurodantį kokias reikšmes jis galės įgyti:

2. Vietoje dotActivator proceso įrašykite du lygiagrečius sakinius. Pirmasis formuoja activeDigitInt iš

activeDigit, o antrasis pagal aktyvaus LCD skaitmens konfigūracijos bitą nustato taško katodo valdymo

signalo reikšmę:

Panaudojant signalą activeDigitInt procesą segmentActivator galima perrašyti pasitelkiant sąlyginio priskyrimo

sakinį. Tačiau prieš tai kaip atskirą signalą apsirašome ir suformuojame LCD skaitmens reikšmę, gaunamą iš

konfigūracijos signalo digits.

Page 7: NANOSISTEMŲ PROGRAMAVIMO KALBOS 2-AS …2-AS LABORATORINIS DARBAS VHDL PROGRAMOS STRUKTŪROS PROJEKTAVIMAS, LYGIAGRETŪS SIGNALŲ PRISKYRIMO SAKINIAI 1. Darbo tikslas 1. Gerinti praktinius

7

1. Architektūros antraštėje:

2. Vietoje proceso segmentActivator:

Procesą digitActivator pakeisime rinktinio priskyrimo sakiniu with ... select ... when. Prieš tai reikia pagal digits

apsirašyti ir suformuoti signalą lcdEnabled, kuris bus prijungiamas prie aktyvaus LCD skaitmens anodo:

1. Arhitektūros antraštėje:

2. Vietoje proceso digitActivator:

Jeigu visus pakeitimus atlikote sėkmingai, testinės programos modeliavimo rezultatas nepasikeitė, o objektas

Basys2Lcd dabar yra realizuotas naudojant vien lygiagrečius sakinius.

4.3. Skaitmens mirksėjimo funkcijos diegimas

Savarankiškas darbas.

Patarimai:

Patobulinimus darykite ModelSIM aplinkoje.

Kai mirksinčio skaitmens modeliavimas bus sėkmingas, pabandykite Xilinx ISE aplinkoje atlikti veiksmą

„Synthesize – XST“ su jūsų pakeitimais. Jeigu gaunate klaidų (errors), reiškia jūsų pakeitimai netinka sintezei

ir juos reikia perdaryti.

Jums tikriausiai reiks sukurti naują skaitiklį blinkCnt, kuris didėtų kai vyriausiasis skaitiklio clkCnt bitas

keičiasi iš '1' į '0'. Skaitiklio dydį nustatykite tokį, kad jo reikšmė apsiverstų kas 0,5-1 sekundės.

Tuomet, kad reikiamas LCD skaitmuo mirksėtų, jums reiks modifikuoti signalą lcdEnabled, taip kad jis būtų

priklausomas nuo 5-ojo digits konfigūracijos bito ir nuo vyriausiojo blinkCnt bito.

4.4. Praktinis darbo rezultatų išbandymas BASYS2 plokštėje

Atidarykite kataloge „Lab2 FPGA“ esantį projektą Xilinx ISE aplinkoje. Įkelkite ten savo modifikuotą Basys2Lcd.vhd

failą ir paleiskite procesą Generate Programming File. Gautą konfigūracijos failą Top.bit įrašykite į BASYS2 plokštę ir

Page 8: NANOSISTEMŲ PROGRAMAVIMO KALBOS 2-AS …2-AS LABORATORINIS DARBAS VHDL PROGRAMOS STRUKTŪROS PROJEKTAVIMAS, LYGIAGRETŪS SIGNALŲ PRISKYRIMO SAKINIAI 1. Darbo tikslas 1. Gerinti praktinius

8

panaudodami registrų įrašymo funkciją Adept programoje, išbandykite kaip veikia jūsų modifikuotas LCD valdiklis.

Skaitmenys turėtų aiškiai matytis, o nustačius 5-ąjį bitą LCD skaitmens konfigūravimo registre į '1', skaičius LCD

ekrane turėtų mirksėti.

Kai turėsite veikiančią demonstraciją, nepamirškite jos parodyti dėstytojui.