Biški apie CPLD

Trumpai papasakosiu apie savo eksperimentus su CPLD mikroschema ir Lattice programine įranga.

Prisiverčiau biški pasimokinti naudotis programuojama logika. Kaip jau rašiau kitose žinutėse, mano mikroschemų pasirinkimas buvo labai mažytis ir teko žaisti su Lattice isp2032VE110LT44 mikroschema. Taip pat labai padėjo straipsnis iš Seattle Robotics Society. Taip pat tuo pačiu metu nagrinėjausi supaprastinto LCD ekrano veikimu. Todėl sujungiau abi mintis į vieną ir gavosi va tokia nesamonė…

CPLD + LCD

Beja, šiame projekte dalyvauja ir dvipoliaris reguliuojamas maitinimo šaltinis iš senesnės žinutės.

Teorija apie LCD valdymą išbandžiau su BASIC programa. CPLD programinę įranga nusikroviau iš Lattice puslapių. Programavimo kabelį taip pat pasidariau. CPLD mikroschemą prisilitavau prie maketinės- eksperimentinės plokštės.

O dabar pradedam šneką apie CPLD programavimą…
…skaityti toliau…
Pasileidau ispLever Project Navigator ir nuo nieko pradėjau kūrybą. Nesu labai gudrus, todėl pasirinkau mišrų projektavimo būdą- ABEL + Schematics. Tai reiškia, kad dalis elementų bus aprašyta ABEL HDL (HDL= hardware description language), o dalis elementų bus paprasčiausiai nupaišyta schemoje. Taip bus paprasčiau eksperimentuoti ir keisti parametrus nes aš dar tiksliai nežinojau ko man reikia…

Teoriškai į LCD ekraną reikia paduoti CLOCK, eilučių ir kadrų impulsus. ABELyje lengviausiai buvo aprašyti eilučių ir stulpelių logikos elementus. Štai eilučių detektorius (eiles.abv)

MODULE eilutes
TITLE 'Eiluciu skaitiklis'
declarations
a8..a15 pin;
out pin istype 'com';
adresas=[a15..a8];
equations
out = (adresas == 208);
END

ABELyje yra keli privalomi laukai: MODULE- modulio pavadinimas; declarations- signalų, kintamųjų aprašymas; equations- formulės.
Šiame pavizdyje parašyta, kad mes naudojam visą kalną laidelių pavadinimu a[] -a8, a9, a10 ir t.t. iki a15. Kad lengviau būtų mes tuos laidelius sugrupuojam kaip kintamąjį adresas. O formulėse paprasčiausiai tikriname, kada adresas pasiekia kažkokį skaičių. Visiškai taip pat atrodo ir kitas modulis (stulpai.abv):

MODULE stulpeliai
TITLE 'Stulpeliu skaitiklio dekoderis'
declarations
a0..a7 pin;
out pin istype 'com';
adresas=[a7..a0];
equations
out= (adresas == 160);
END

Kiek sudėtingesnis yra skaitliukas. Šiame projekte naudojami du skaitliukai- vienas 4 bitų skirtas kvarco dažnio dalinimui ir papildomų signalų generavimui (count4.abl).

MODULE skaitliukas4
INTERFACE (clk ->q3, q2, q1, q0);
TITLE 'skaitliukas 4 bitai'
DECLARATIONS
clk pin ; "Clock input
q3..q0 pin istype 'reg'; "Counter outputs
count = [q3..q0]; "Creating output bus
EQUATIONS
count.clk = clk; "Counter clock input
count := count + 1;
END

Šis skaitliukas padarytas pagal pavyzdi, tik labai supaprastintas. jis neturi nei valdymo, nei RESET įėjimo. Nes tokių ir nereikia.
Pagrindinis skaitliukas jau sudėtingesnis. Čia jau naudojamas valdymas (count8.abl):

MODULE skaitliukas8
INTERFACE (clk, rst -> q7, q6, q5, q4, q3, q2, q1, q0);
TITLE 'skaitliukas 8 bitai'
DECLARATIONS
clk pin ; "Clock input
rst pin ; "Asynchronous reset
q7..q0 pin istype 'reg'; "Counter outputs
count = [q7..q0]; "Creating output bus
EQUATIONS
count.clk = clk; "Counter clock input
count.ar = rst; "Counter reset input
count := count + 1; "Counting when ld low
END

IspLever programa pagal šias formules sugeneruoja schemos simbolius kurie lengvai susideda į pagrindinę schemą. Čia dar primečiau keltą standartinių logikos elementų. Ir gaunam kažką tokio:

schema
(Didelė schema pažiūrėjimui)

Schemą galima prasitestuoti ir kompiuteryje- programa turi logikos analizatorių kuris generuoja visus signalus ir parodo ant ekrano oscilogramas. Bėda tame, kad visam LCD ekranui reikia dešimčių tūkstančių taktinių impulsu ir vargša programa labai vargsta kol viską suskaičiuoja. 🙂

Toliau reikia pasileisti “Constraint Editor” ir siganalus prikabinti prie fizinių mikroschemos kojų. Beja, ta patį galima padaryti ir ABEL kalbje, bet su specialiu redaktoriu tai daryti žymiai smagiau ir jei reikia ką pakeisti, užtenka nutempti signalą nuo vienos kojos ant kitos ir viska pasikeičia.

Vėliau pasileidžiam “LSC ispVM System” programą kuri per JTAG kabeliuką visą reikiamą informaciją supumpuoja į logikos mikroschemą ir galima jungti ir eksperimentuoti. Jei kas ne taip, užten kompe pakeisti ir vėl perkompiliuoti bei suprogramuoti CPLD mikroschemą. Mikroschemą galima perprogramuoti tūkstančius kartų. Todėl nereikia nervuotis dėl to… 🙂

Eksperimento nuotraukoje matosi dalis ekrano su chaotišku vaizdu, ROM mikroschema iš kurios imama “grafinė” informacija, maitblokis, isp2032 maketinė ir kunkulas laidų. Projektas, galima sakyti, uždarytas dėl CPLD mikroschemos silpnumo. Gal kai surasiu kokią rimtesnę mikroschemą projektą pratesiu.

Leave a Reply

Your email address will not be published. Required fields are marked *