Thursday, February 11, 2010

Jõulutuled



Tuli töökaaslasega jutuks, et vaja jõuludeks mõned tuled vilkuma saada ja siin siis mu jõuluaegne projekt  :-)
Alus - seitsme hõõglambikesega nn juudi kuusk. Ajast ja arust, igav-igav ja raiskab energiat, mis hirmus.
Lahendus - mikrokontrolleriga kontrollitavad kolmetoonilised LED-d, mis olid ligi aasta sahtlipõhjas sobivat hetke oodanud, tellitud SparkFun-st (vt. toote link)
Protsessor PIC12F675 - üks lihtsamaid, 8-viiguga kiip, ainult 5 programmeeritavat väljundit! Aga seda on enam kui küll kui LED-e kontrollida üle jada-rööpmuundurite 74HC595, mis on 8-bitised väljundlukkregistriga seadmed, lubades lahedalt LED-e toita (20mA väljundi kohta).
Värviheleduses 32 astet, sujuv värvide üleminek tempoga ~10 sek täisheleduseni, veenvalt maagiline, kogutsükkel mitmetes minutites ja sõltub ainult tarkvaralisest mustrist e "vaiba" pikkusest. Protsessori programmimälust kasutusel 30%, muutmälust ligi pool, töötlusjõudlusest ligi 100% (antud parameetritega, antud oludes).
Näide pildilt (päevane ja öine uduse silmaga).
Skeem ja kood, olge lahked - kingituseks, vt. siit :-) BTW - uuendatud-parandatud 2012 jaanuaris.

Lisaks (dets. 2014) - jõuluajaga seotud kolmnurgakuju ei tarvitsesugugi ainuke olla. Jõuluaeg on üürike, aga silm tahab värve näha aastaringselt. Seepärast valmis uus disain, mis sisu osas nõudis vaid nn temporaalse värvivaiba muutmist, asendamaks sümmeetriamängu eri värvide ringliikumisega. See, et disain nõudis vajaliku elengantsi saamiseks 3D-freesi ja mitmete materjalide kasutamist, on sellest blogiteemast väljaminev lugu :-)

Nexys2 õpiobjekt

5.04.2009
Niisiis, käepärast on Digilent Nexys 2 arendusplaat ja tahtmine teha üks õpiobjekt, kasutades PicoBlaze protsessorit. Mis lihtne tudengitele (need on motiveeritud ainest maksimumi omandama ja peavad teadma, mis on raamatutes kirjas), on samas raske õppejõule, sest huvi tuleb tunduvalt kaudsemalt - õppejõud peab vaid teadma, kus on raamatud.

Töövahendid
  1. Arendusplaat Xilinx XC3S500E kiibiga, FG320 korpus, toide USB liidese kaudu
  2. Digilent Adept Suite plaadile koodi mahalaadimiseks
  3. Xilinx ISE 10.1.03 integreeritud arenduskeskkond (60 päeva prooviversioon)

Esmalt, peab arvestama seda,  et Windows XP arutu 'My Documents' kaustanimi millest Vista juures on lõpuks lahti saadud, ei sobi ISE projektifailide hoimiseks. Arendustarkvara on mingist kohast Unix põhine ja tühikut sisaldavad faili- ja kaustanimed ei käi kultuuriga kokku.
Kasutan praegu kausta C:\Projects\Nexys2

Projektiidee - stopper, resolutsiooniga 0.1 sekundit, ulatusega 0 - 9'59'9.
Kasutajaliides:
  • Sisend: kaks nuppu: START/STOP ja RESET
  • Väljund: 4-järguline 7-segmendiline indikaator, laotussagedusega 400 Hz (s.t. üksiku järgu vilkumissagedus 100Hz)

Pime otsus:
  • Riistvaras teeme laotuse (väljundi multiplekseri ja 7-segmendi dekoodri indikaatorile) ja indikaatoril eralduspunktide genereerimise sekundikümnendike, sekundite ja minutite eraldamiseks.
  • Tarkvaras, s.o. PicoBlaze assembleris saab olema stopperi põhifunktsionaalsus - nuppude jälgimine, loendamine ja loendusmooduli kontroll (nt. 60 sekundit on üks minut, eks).
  • Riist- ja tarkvara liides kõige lihtsamal kujul sisaldab nelja registrit, millest igaüks sisaldab kahendkoodis vastava indikaatori järgu väärtust.

Riistvara multiplekser nõuab taktisignaali 50MHz mahajagamist 400 Hz-ni, protsessori jaoks ehk vähe, olgu seal 100kHz nagu ajaloolisel Intel 4004-l.

Esmalt õpime

Selgus, et tublid tartlased on Digilaboris ära tõlkinud-kohendanud Nexys vanema versiooni katseplaadi kasutusjuhendi ja selles leidub ka viide uuemale Nexys 2 plaadile, vaata siit.
Hoiatus - Nexys 2-l on FPGA väljaviigud hoopis teisiti ühendatud, projekti jaoks on vaja lähtuda plaadi originaaljuhendist.

Loeme läbi, mida räägivad Xilinx dokumentatsioonis PicoBlaze lühitutvustus ja kasutusjuhend UG129.
Saame esmalt teada, et Spartan 3 kiip toetab PicoBlaze järgmiste omadustega:
  • Programmi mälu - 1024 18-bitist sõna
  • 16 8-bitist registrit
  • Pinu 31 sõna
  • Assembler KCPSM3
  • Maht 96 Spartan-3 lõiku (slice) - pisiasi, sest XC3S500E-s on kokku 4656 lõiku
  • Tootlus 44 MIPS-i

Lepime sellega, et Spartan 3E on lihtsalt uuemas tehnoloogias ja pisut enamate ressurssidega kui Spartan 3, s.t. kõik vanema kohta kirjapandu on rakendatav.

Käivitan ISE ja loon uue projekti File->New n2stopper, kasutades ülalnimetatud projektikausta.
Uue projekti korral tuleb sisestada vajalikud andmed kiibi kohta, s.o. Spartan 3E seeria, kiip XC3S500, korpus PG320.
Loon triviaalse VHDL tipp-tasemel mooduli n2stopper.vhdl, defineerides välisliidese kasutades taktisignaali, indikaatori ühendusi (anoodid, katoodid) ja kahte nuppu.
Arhitektuurikehas tuleb paigaldada ja siduda komponendid - PicoBlaze, selle programmimälu, strobeeritud väljundregistrid, indikaatori multiplekser, taktijagurid jne.

Projektikausta tuleb lohistada kcpsm3.vhd, mille leiab KCPSM3.zip faili (mille saab Xilinx IP keskusest PicoBlaze lehelt, vt. download - nõuab kasutaja registreerimist ja sisselogimist) VHDL alamkaustast.

Projektikausta tuleb tekitada kasutajatõkete fail (.ucf e. User Constraint Fail) n2stopper.ucf, mille abil seotakse FPGA väljaviigud konkreetsete VHDL signaalidega.

Tuleb kirjutada assembler, esialgu ainult testfunktsionaalsuses ja see assembleerida. Selleks on vaja KCPSM3.zip faili Assembler alamkaustast kopeerida projektikausta 4 faili - KCPSM3.EXE, ROM_form.vhd, ROM_form.v ja ROM_form.coe. Assemblerfaili nimeks panen prog_rom.psm, sest assembleerimisel loodava VHDL üksuse nimi võetakse failinimest ja üksus nimega prog_rom esineb koodinäidetes. Õnnestunud assembleerimine genereerib seega faili prog_rom.vhd.

Järgnevalt tuleb ISE-s projektifailide hulka lisada (juba olemasolevale n2stopper.vhdl failile) n2stopper.ucf, kcpsm3.vhd ja prog_rom.vhd.

Järgneb süntees... ISE Process->Implement top module

Järgnevad veateated, pole sa mingi "VHDL-i isa" :-)

Järgneb koodi s.t. n2stopper.bit faili genereerimine - läheb probleemideta.

Bit faili laadimiseks Nexsys plaadile tuleb kasutada sellega komplektis olevat USB-liidesega laadurit.

Voila! Toimib! Indikaatoril aeg jookseb, tarkvaraline loendamine displeil just soovitud kujul pärast RESET-i. M.o.t.t.


Ja samas, niipea kui koodi parendama hakkasin, nägin ainult riistvara toimimas, loendumine ehk siis protsessor seisab. Kummaline, et loenduri käitumine sõltus sellest, et kas viite arvutamisel kasutatakse ülesloendava registri algväärtusena kuueteistkümnendarvu ef või f0 - esimesel juhul OK, teisel juhul asi RESET-st edasi ei liigu. Absurdne.

Aga selge, järgnevalt tuleb läbi proovida Xilinx enda soovitatud intelligentsem assembler ja simuleerida lahendusi enne genereerimisi, hoiab kõvasti aega kokku.
****
6.04.2009
Midagi oli mäda taktisignaalidega. Päris põhjust ei õnnestunudki kätte saada, probleem ujus eest ära.
Oletasin, et CLK puhvrid pole adekvaatselt paigas ja seepärast PicoBlaze ei tööta. Asendasin jagatud takti originaaltaktiga, mis peaks igal juhul olema korralikult puhverdatud ja tõepoolest, tarkvaras esitatud funktsionaalsus taastus. Arendasin tarkvara, kõik eri sünteesid andsid oodatud tulemusi ja lõpuks proovisin uuesti madalama sagedusega jagatud taktiga PicoBlazele.
Töötas! Aru ma ei saa :-) Normaalne inseneri elu.

Aga edasiseks mõtteks - uurida tõkete juhendit (Xilinx constraint guide), et oskaks .ucf failiga midagi arukat sünteesi juhtimiseks öelda.
****
20.04.2009
Täitsa abiks asi on Mediatronix-i pBlaze IDE,  mis sisaldab normaalset süntaksit järgivat ning värvivat redaktorit ja simulaatorit. Assembleri süntaks ja mnemoonika pisut erineb Xilinxi PicoBlaze originaalsüntaksist, aga see pole probleem. Isegi Xilinx kiidab pBlaze IDE-t oma kasutusjuhendis UG129.
KCPSM3 originaalassembleri oskab pBlaze IDE muretult oma süntaksisse ja vormingusse importida.
Selleks, et pBlaze IDE lõpuks püsimälu sisule vastava VHDL faili genereeriks, tuleb assemblerfaili viimaseks käsuks panna direktiiv VHDL (vt. direktiivid):

VHDL "ROM_form.vhd", "prog_rom.vhd", "prog_rom"

Sellisel juhul genereeritakse assembleerimisel samad väljundfailid nagu KCPSM3 korralgi. Esimene parameeter on ROM-i alusfail, teine parameeter on väljundfaili ja kolmas genereeritava ROM-üksuse (entity) nimi.
Voila!
Ja lõpuks - loodud failidega saab tutvuda siin. See on ainult mäng ju.

Elektroonika ja süsteemide disain

  • Mõtted
  • Kavatsused
  • Katsetused
  • tulemused

Followers