Šiandien pateikiau individualaus projekto techninį raportą (a.k.a disertacija). Paskutines porą dienų teko šiek tiek paplušėt taisant klaidas ir šiaip baiginėjant raportą. Projektą laikau pavykusiu - susipažinau su FPGA ir VHDL, padariau porą žaidimų (1, 2), sukonstravau adapterį, išmokau naudotis git'u ir OOo Writer'iu.
Dėl OpenOffice.org esu labai patenkintas. Tai buvo pirmas kartas, kai su dokumentu dirbau taip, kaip pridera. Išmokau naudotis stiliais, nuorodom (cross-references), šaltinių sąrašu ir t.t. Kaip sakant, užskaitau :D Kaip ten bebūtų, sekantį kartą turbūt bandysiu dirbt su LaTeX. Nežinau kas iš to išeis, tiesiog noriu išbandyti.
Nuo pat pradžių, norėjau, kad projektas būtų ne vien VHDL rašymas. Realiausias variantas atrodė valdymo pulto gaminimas. Paskui bemąstydamas nusprendžiau, kad visai kietas variantas būtų paimti NES valdiklį ir parašyti jam interfeisą su VHDL. Labiau pasidomėjus, išaiškėjo, kad tiesiogiai valdiklių su kūrybine plokšte sujungti nepavyks. Seni Nintendo kontroleriai naudoja 4021 paralel-to-serial konverterius, o šis supranta tik 5V TTL logiką. Kur bėda? Spartan-3E plošktė naudoja 3.3V (LVTTL, LVCMOS). Taip ir gimė hardwarinė projekto dalis.
Būdų TTL ir CMOS logikų suderinimui yra n+1. Aš panaudojau 74 serijos logiką.
3.3V -> 5V: 74HCT4066 (Quad bilateral switches).
5V -> 3.3V: 74LCX125 (Low Voltage Quad Buffer with 5V Tolerant Inputs and Outputs).
Pabaigęs spausdintos plokštės dizainą, nunešiau jį univiero technikams, kad išmaltų. Ganėtinai įspūdingas CNC pas juos, buvo visai įdomu stebėt procesą. Po kokios valandos, mano plokštelės buvo baigtos ir atėjo laikas litavimui. Šiaip galvojau, kad nuo čia man jau reiks tvarkytis pačiam, bet klydau. Grįžus į laboratoriją, man parodė kaip naudotis lydmetalio pastos švirkštu. Reikėjo padengti visus paviršinių komponentų padus, ir galiausiai pabaigti darbą su karšo oro pompa. Toliau galima lituoti ir likusius komponentus.
Žemiau matosi visos stadijos, nuo dizaino iki baigtos plokštės. Dabar reiks prisėsti prie VHDL rašymo.
Su sąlyga, kad egzaminus išlaikiau, galiu papasakot apie kitų mokslo metų planus.
Šių mokslo metų pabaigoje turėjome rinktis kitų metų individualų projektą. Studentas gali rinktis vieną iš departamento siūlomų arba siūlyti savo. Aš nusprendžiau, kad geriausia ir saugiausia bus siūlyti savo projektą. Iš pradžių, tiksliai nežinojau ką noriu daryti kitais metais, mintis sukosi apie video grafiką naudojant mikro kontrolerį. Nutariau pasikalbėti su PhD studentais ir pasiklausti jų patarimo. Po šiokio tokio brainstorminimo apsistojom ties programuojama logika - FPGA.
Mokslo metų pradžioje turėjome tokį dalyką - Digital Systems Design, ten teko šiek tiek susipažinti su VHDL ir programuojama logika, tačiau projektui to nepakanka. Susiderinom su dėstytoju, kad jis man paskolins Xilinx Spartan-3E dev board'ą, kad galėčiau per vasarą ruoštis. Taip pat iš bibliotekos pasiėmiau knygą FPGA Prototyping by VHDL Examples.
Tai kas gi per projektas? Na aprašymo antraštė skamba maždaug taip: "FPGA based VGA driver and arcade game", kas išvertus į žmonių kalbą reiškia, kad kursiu kokį nors Pong žaidimą kuris bus žaidžiamas prijungus tą plokštę prie monitoriaus.
Kol kas mokytis sekasi neblogai, bet žiūrėsiu kaip seksis pradėjus dirbti su VGA. Visam reikalui naudoju GitHub. Ne versijų valdymui, o labiau atsarginėm kompijom ir susipažinimui su DVCS :)). Kolkas ten tik mano mokymosi rezultatai, tačiau atėjus laikui ten darysiu ir raporto ir pačio projekto atsargines kopijas. Kam įdomu, galite užmesti akį į mano profilį.
Šiais metais departamentas suorganizavo barbekju. Šiandien man buvo paskutinis egzas (tikiuos), tai galėjau labai šauniai užbaigti mokslo metus.
Niekaip negaliu atsidžiaugti tokia iniciatyva, nes laiką praleidom tikrai smagiai. Gavom nemokamo maisto, mokamų gėrimų, pažaidėm biliardą, paspardėm kamuolį ir žinoma pabendravom su kolegom. Kas labai smagu, kad susirinko ne tik kursiokai, bet ir jaunesni, vyresni studentai, keletas dėstytojų.
Šį trimestrą univiere darėm du projektus: liniją sekantį robotą ir skaitmeninį termometrą. Robotas, nors ir keistai nuskambės, buvo programinės įrangos projektas. Mes nedarėme geležies dizaino, tiesiog susilitavome duotas dalis. Pagrindinė užduotis buvo parašyti programą, kuri tą robotą valdys.
Roboto smegenys - PIC18F4450 mikrokontroleris. Linijos aptikimui naudojami 5 IR diodai ir 5 IR fotodiodai. Kūnas kažkoks kinietiškas, du ratai varomi DC motoriukų. Motorai valdomi naudojant L298 draiverį.
Robotas programuojamas per usb. Mikrokontroleryje sukasi USB HID bootloader'is iš Microchip. Kompiliavom su C18 kompaileriu, o hex kodą į mikro kėlėm su programa iš to pačio Microchip.
Iš pradžių dar bandžiau susirasti Linux programas, bet nepavyko rasti hex uploaderio. Daėjau iki to, kad skaičiau libusb dokumentaciją, bootloaderio kodą ir snifinau paketus :D Šiaip sakyčiau gan neblogai pavyko (dar neveikia), ypač kai neturėjau jokios normalios specifikacijos. Jei atiduos robotus pabandysiu gal per vasarą pratęst.
Surininktas robotas atrodo maždaug taip:
Veiksmo univiero trasoje kažkaip nenufilmavau, bet šiame video matosi kaip robotas veikia.