FPGA kalandok - 1. rész

A múltkori cuki Arduino után most egy kicsit komolyabb board érkezett.
Név szerint egy ALTERA Cyclone IV FPGA, abból is a EP4CE10E22C8N chippel ellátott.

Aliexpressről rendeltem és kb. 1 hónap volt mire megérkezett. Elég masszív kis dobozban jött, szerencsére sérül mentessen. A doboz belül ki volt tömve bubis fóliával, minden jól betekerve vele. 

De lássuk is a csomag tartalmát:

 

Van maga az FPGA board, két USB kábel, program betöltő és annak kábele.

Az külön tetszetős, hogy a boardot egy plexi takarja, de amihez szükséges ahhoz hozzálehet férni.
Persze ha szeretnénk valamit rákötni, akkor le kell venni. Mindenesetre én majd egy szép, lezárható műanyag dobozba teszem, megcsinálva a kivezetéseket. Ha pedig szórakozni akarok vele, akkor felpattintom a dobozt és mehet a móka. Egyszerűbb lesz így tárolni is...

Miket is integráltak nekünk a lapra? Az alábbiakat:

Szerintem egész gazdagon felszerelt, ismerkedéshez, próbálgatáshoz teljesen kiváló. És ha mégsem, akkor minden PIN a rendelkezésre álla a tüskesorokon.

De pattintsuk is össze a modulokat és csatlakoztassuk a számítógéphez, majd power on gomb benyom.
Hmm, minden LED világít, még a szegmens kijelzőn lévők is. Ez azért fura, mert elvileg egy demonak kellene elindulnia...
Próbálkoztam 1 órát minden félével, de a helyzet nem változott. Már arra gondoltam hibás a lap. Aztán letettem estére, gondolván majd másnap még próbálgatom, utána olvasok.
Eljött a másnap. Újra összedugtam mindent és vááá, működik! Hogy előző este mi volt a gond, az azóta is rejtély. Pedig akkor is sokszor újra összekötöttem, kibe kapcsoltam... Noh nem baj, reméljük mostantól nem lesz gond vele.

Első bekapcsolás után tehát egy kis demo fut a lapon, ami kimerül annyiban, hogy a 4 LED egymás után, kis késleltetéssel világítani kezd, amolyan futófény szerűen (persze ezt egy képen mutatni nem lehet, higgyük el hogy így volt :) )

 

Remek, akkor most kellene rá valami saját "kódot" tölteni!

Első körben kell egy fejlesztő környezet. Mivel a nyelvek közül a Verilog volt szimpatikus, így fejlesztő környezet ügyileg a Quartus Prime-ra esett a választás, ebből is a Lite Edition, ami ingyenes.
Telepítés nem volt gyors, de legalább sokáig tartott, viszont ezután gond nélkül elindult a program.

Ahhoz, hogy az ebben készült áramkörök felkerüljenek az FPGA-ra, az USB Blastert kell igénybe venni. Ehhez azonban driver is kell, mert a Windows 10 nem telepíti automatikusan. Ez szerencsére sok utánajárást nem igényel, mivel ott van a Quartus Prime telepítési könyvtárán belül (<Path to Quartus Prime>\drivers\usb-blaster).

Szuper, minden összeállt, írjunk valami vár egyszerűt!
Ha a programozásban az első lépés a "Hello World", akkor FPGA fejlesztésben talán a LED villogtatás lehet ennek a megfelelője.
Csináljuk egy olyat, hogy ha megnyomunk egy gombot a lapon, akkor világítson egy LED.
Új projekt létrehozásánál végigkísér minket egy varázsló, ahol pár általános dolgot meg lehet adni, de ami a legfontosabb, az az FPGA IC pontos típusa, ami az én esetemben a EP4CE10E22C8.

És ha ez megvan, hozzáadunk a projekthez egy Verilog HDL design fájlt, amibe kerül a kódunk, ami ennél egyszerűbb már nem is lehetne:

module ledflash (BTN, LED);
	input BTN;
	output LED;
	assign LED = BTN;
endmodule

Tehát van egy ledflash modulunk, egy ki és egy bemenettel, ami a LED és a gomb.
A LED állapota pedig megmeggyezik a gomb állapotával.

Egy gyors próba fordítás és úgy tűnik minden rendben, lefordult!
A lapra viszont még nem tölthetjük fel, hiszen honnét tudja majd az IC, hogy melyik lábakon van a gomb és a LED?
Ehhez van a programnak egy nagyon jó kis PIN kiosztás tervezője, ahol megadhatjuk, hogy a ki/be meneteink melyik lábak legyenek. És hogy honnét lehet tudni melyik lábakon mi van? Ahhoz szerencsére elérhető egy táblázat a lapról, amiről lelehet lesni.

 

Most már minden kész van, mehet a fordítás és a feltöltés. A feltöltés egy szempillantás alatt megvan (ezért is választottam a drágább, de gyorsabb USB Blastert).
Ahogy a feltöltés megtörtént máris használható a beírt áramkör. Gomb lenyom, LED világít. Gomb felenged, LED kialszik. Ergo, fut a Helló World FPGA :)

Nos, első körben ennyi, ez volt tehát a beüzemelés.
Most majd nekiállok ismerkedni a nyelvvel, a lehetőségekkel és perszer érdekesebb, bonyolultabb áramkörök létrehozásának. Ha van valami érdekesség, arról pedig úgy is beszámolok...

 

Ps.: Várok még egy Allis csomagot, amiben szintén egy hasonló, jó mókának ígérkező kütyü lesz... Stay tuned! :)

Hozzászólások

Szerkesztve: 2020. 12. 04., p - 01:40

"FPGA kaland?"

"Nem, saját"

Erre már elfér egy Minimig is, igaz az SDRAM nem túl nagy.

"...mi volt a gond, az azóta is..."

Az, hogy kínai. Van 1 elméletem, miszerint:
- Gyártanak ezek mindent, mindenféle minőségben,
- Ami nem megy át a QA-n, az megy az alira/etc 10edáron, fehérember úgyis megveszi.

1. Jómúltkor rendeltem vmi arduino board-t: nem indul, nem indulm grr. Kis nyomozás, olyan példányt kaptam, amiről hiányzott a poweronreset ellenállás. 
Oké, hogy lopnak. de baszkács arra képtelenek, hogy az amúgy publikus kapcsirajz alapján lopjanak.
 

2. Kellett 1 db vmi spéci töltőcsati, csak 50es vsomag volt, jó, idevele. Minden f@sza, passzol is, csak fordítva van a szinek (piros-fekete) bekötve. Nincs elbaxva, csak másra lesz jó.

Ennyit erről a műfajról.

Az én elméletem ezzel kapcsolatban, hogy olyan minőségben gyártanak, amit kérnek tőlük és megfizetnek. Ezzel együtt a minőségbiztosítás is változatos. Az olyanokból, mint az Arduino félék, ESP-k, szenzor modulok meg a többi, annyi készül, hogy biztos nem a QA-n kiesett megy az Alira/etc, hanem mind, mert annyi fogy. Talán nem is eshetnek ki a QA-n, mert nincs, vagy legfeljebb szúrópróba szerű, hogy a szisztematikus hibákat kiszűrjék, mint például az elfűzéseket, amikor nem a megfelelő alkatrész kerül fel az SMD beültetőre.
Valószínűleg úgy kaptál POR ellenállat nélküli Arduinot, hogy az SMD beültető gépek néha elejtik az alkatrészeket, és akkor az nyilván nem kerül fel. Ez mindenhol előfordul, nem kell érte Kínáig menni, a kérdés inkább, hogy feltűnik-e.

Nyilván ha nagyobb biztonsággal szeretnél működőképes terméket, akkor megrendelheted az eredetit, 20€+ÁFA áron, vagy kb. 5€-ért Kínából az olyant, amilyet. A vevőkön is múlik, ennyiért ne várjunk csodát.

Hajra! 

USB-s UART vagy ilyesmi van ebben? 

Igen, azt lattam, az oke. 

Inkabb arra gondolok itten hogy az nagyon kenyelmes tud lenni mikor egy 2+ csatornas usb <-> serial bridge egyik csatornajan programozod, a masik csatornajan meg elered az adott eszkozt (lett legyen szo akar MCU-rol, FPGA-rol). Es pl egy egyszeru UART transmitter tanulo projektnek is nagyon jo FPGA-val valo ismerkedesre. 

Amit én hozzátenni tudok, hogy inkább a Verilog-2001 szabvány szerint érdemes írni a kódot, szebb lesz, a Quartus is ezt használja alapbeállításként. A Verilog-2001 megengedi, hogy már a port listában megadd a portok irányát és típusát.

module ledflash (
    input BTN,
    output LED
  );

  assign LED = BTN;
endmodule

Ennek előnye persze akkor mutatkozik, ha már bőséggel szaporodnak a portok a modulodon, és nem kell két helyen hozzáadni, elvenni, figyelni. Egyébként a SystemVerilog még tovább viszi, és interface-eket lehet definiálni, majd amikor a modulodban használni akarod, több, amúgy logikailag összetartozó port helyett egy darab interface kerül a listába.

Azt nem tudom, megnézted-e a kapcsolási rajzot, mert mind a nyomógombok, mind a LED-ek aktív alacsonyak. Tehát a gomb megnyomott állapotában 0 kerül a bemenetre, és a kimenet 0 állapotában világít a LED. A fenti egyszerű példánál ez mindegy is, de ha két nyomógomb ÉS kapcsolatát valósítod meg ( assign LED = BTN1 & BTN2; ), és ezt nem veszed figyelembe, mint ahogy én sem gondoltam rá, akkor ugyan akaratlanul, de a két gomb közt OR kapcsolat lesz.