FPGA ir sinchronizacijos problemos

Įrašyta 2010-02-01, 22:53 | 2 Komentarai

Pasirašiau kodą savo NES adapteriui, pratestavau - viskas lyg ir veikė, tačiau kai atėjo laikas prijungti interfeisą prie žaidimo kodo, susidūriau su problemomis. Erdvėlaivis, kuris turi judėti į šonus, kartais užstringa.

Pradžiai šiek tiek informacijos. Kaip minėjau, Nintendo pultai naudoja serijinę komunikaciją. Su šia dalim viskas tvarkoj - susirenku bitus į baitą ir pateikiu jį išėjime. Valdymo pultams pateikiu 800Hz taktinį dažnį, taigi mygtukų reikšmes gaunu šimtą kartų per sekundę.

Spartan-3E plokštė darbui naudoja 50MHz dažnį, todėl kiekvieno spustelėjimo metu erdvėlaivis pasislenka į šoną per maždaug 60k pikselių. Reikėjo būdo šį skaičių sumažinti. Tam panaudojau skaičiuoklį (counter):

position_next <= position + 1 when (nes1_right = '1' and move_counter = 0) else
                 position - 1 when (nes1_left = '1' and move_counter = 0) else
                 position;

Kodas tvarkingas, aplink esantis kodas irgi veikė, tačiau kartas nuo karto erdvėlaivio judėjimas sustodavo, o po trumpos pauzės vėl veikdavo. Teko šiek tiek palaužyt galvą, kol supratau kur bėda. Įtarimo patvirtinimui, prijungiau osciloskopą ir pamačiau štai ką:

Teks spręst šią problemą tvarkingai ir montuot kokį edge-detector.

Gairės: Debugging, FPGA

Blogai elektronikos tematika

Įrašyta 2010-01-29, 01:27 | 8 Komentarai

Jau kuris laikas kirba toks klausimas: kodėl Lietuvoje tiek mažai blogų elektronikos/inžinerijos tematika? Dalis problemos gali būti tame, kad juos yra sunku rasti. Keletą esu užsiprenumeravęs. Juos radau per komentarus ir draugų sąrašus, todėl ir pats jaučiu pareigą prisidėti prie sklaidos. Štai ką laikau savo Google Reader'yje:

  • Savel. Levo blogas yra elektronščikų traukos centras. Toliau blogai bus surašyti abėcėlės tvarka, bet atvirkščiai.
  • VEC7OR. Lyg ir neaktyvus, bet turi potencialo.
  • Socrates lounge. Šitą radau ieškodamas FPGA temos lietuviškame internete. Galėtų būti aktyvesnis ;)
  • AudioDIY dar žinomas kaip "Laiduko blogas". Šiemet jau trys straipsniai! Taip ir toliau.
  • E-motion. Kodėl tik neseniai sužinojau šio žmogaus blogą? Šarūno puslapį žinau jau seniai, bet nuorodų ten nerasta :)
  • Dreifas.net.
  • Darau. Po elektronika.lt sparnu prikurta galybė blogų. Šis turbūt gyviausias iš visų.
  • ir viskas?

Na nejaugi žmonės taip nenori dalintis patirtim? O gal tingi? Ar neturi laiko? :)

Jei kažkas liko nepaminėtas - prisitatykit! Pasiteisinimai taip pat laukiami :D

Papildymas. Dar pora blogų:

Gairės: Elektronika, Internetas

Nintendo adapteris Spartan-3E plokštei

Įrašyta 2010-01-15, 21:01 | 8 Komentarai

NES adapter for Spartan-3E dev board

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.

Making process

Gairės: Elektronika, FPGA, Univieras

Pong žaidimas ant Spartan-3E FPGA

Įrašyta 2009-11-03, 13:50 | 0 Komentarų

Pong Implementation on Spartan-3E FPGA using VHDL

Štai praėjo pirmas mokslo metų mėnuo, galima pasigirti akademiniais pasiekimais. Kaip jau rašiau, šiemet darau projektą paremtą FPGA technologija. Per vasarą šiek tiek mokiausi VHDL kalbos, Spalio pradžioje pradėjau kurti žaidimą, o šiandien jau galiu parodyti rezultatus.

Viskas sukasi ant Xilinx Spartan 3E kūrybinės plokštės: prie VGA išėjimo jungiamas įprastas monitorius, valdymui naudojami 4 ant plokštės esantys mygtukai (valdymo pulto dar nedarau), garsas išgaunamas su piezo garsiakalbiuku (buzzer).

Kaip atrodo žaidimas matote aukščiau esančiame paveiksliuke, o žemiau galite peržiūrėti žemos kokybės video:

Kadangi iki projektui skirto laiko pabaigos dar liko kažkur 5 mėnesiai, bandysiu kurti antrą žaidimą, šįkart tai turbūt bus kosmoso šaudyklė (žr. Space Invaders, Galaxian, Galaga). Daugiau papasakosiu kai žinosiu kąnors konkrečiai :) Tuo tarpu, jei čia yra besidominčių programuojama logika, prašau peržiūrėti/išbandyti kodą.

Gairės: FPGA, VHDL, Žaidimai

DIP -> SOJ

Įrašyta 2009-10-14, 19:14 | 4 Komentarai

Iš dalies nekenčiu kokybiškų plokščių, su metalizuotom skylutėm. Iš jų "neįmanoma" išlituot komponentų. Bet štai į galvą atėjo mintis, kaip kai kuriuos komponentus galima pasiimti ir perpanaudoti. Behold!

DIP to SOJ conversion

Gairės: Elektronika, IC

Senesni įrašai »